原文地址:https://www.jianshu.com/p/b2da4d94a122

一、概述

本文主要是从deep learning for nlp课程的讲义中学习、总结google word2vector的原理和词向量的训练方法。文中提到的模型结构和word2vector的代码实现并不一致,但是可以非常直观的理解其原理,对于新手学习有一定的帮助。(首次在简书写技术博客,理解错误之处,欢迎指正)


二、词向量及其历史

1. 词向量定义

  词向量顾名思义,就是用一个向量的形式表示一个词。为什么这么做?机器学习任务需要把任何输入量化成数值表示,然后通过充分利用计算机的计算能力,计算得出最终想要的结果。词向量的一种表示方式是one-hot的表示形式:

  首先,统计出语料中的所有词汇,然后对每个词汇编号,针对每个词建立V维的向量,向量的每个维度表示一个词,所以,对应编号位置上的维度数值为1,其他维度全为0。这种方式存在问题并且引发新的质疑:

1)无法衡量相关词之间的距离

  从语义上讲,hotel 和motel 更相关,和cat更不相关,但是无法表示这种差异。

2)V维表示语义空间是否有必要

one-hot的每一维度表示具体的词,我们假设存在更加抽象的维度能够表示词和词之间的相似性和差异性,并且词向量的维度远远小于V。例如,这些维度可以是时态,单复数等

2.词向量获取方法

1)基于奇异值分解的方法(奇异值分解)

a、单词-文档矩阵

基于的假设:相关词往往出现在同一文档中,例如,banks 和 bonds, stocks,money 更相关且常出现在一篇文档中,而 banks 和 octous, banana, hockey 不太可能同时出现在一起。因此,可以建立词和文档的矩阵,通过对此矩阵做奇异值分解,可以获取词的向量表示。

b、单词-单词矩阵

基于的假设:一个词的含义由上下文信息决定,那么两个词之间的上下文相似,是否可推测二者非常相似。设定上下文窗口,统计建立词和词之间的共现矩阵,通过对矩阵做奇异值分解获得词向量。

2)基于迭代的方法

目前基于迭代的方法获取词向量大多是基于语言模型的训练得到的,对于一个合理的句子,希望语言模型能够给予一个较大的概率,同理,对于一个不合理的句子,给予较小的概率评估。具体的形式化表示如下:

第一个公式:一元语言模型,假设当前词的概率只和自己有关;第二个公式:二元语言模型,假设当前词的概率和前一个词有关。那么问题来了,如何从语料库中学习给定上下文预测当前词的概率值呢?

a、Continuous Bag of Words Model(CBOW)

给定上下文预测目标词的概率分布,例如,给定{The,cat,(),over,the,puddle}预测中心词是jumped的概率,模型的结构如下:

如何训练该模型呢?首先定义目标函数,随后通过梯度下降法,优化此神经网络。目标函数可以采用交叉熵函数:

由于yj是one-hot的表示方式,只有当yj=i 时,目标函数才不为0,因此,目标函数变为:

代入预测值的计算公式,目标函数可转化为:

b、Skip-Gram Model

skip-gram模型是给定目标词预测上下文的概率值,模型的结构如下:

同理,对于skip-ngram模型也需要设定一个目标函数,随后采用优化方法找到该model的最佳参数解,目标函数如下:

分析上述model发现,预概率时的softmax操作,需要计算隐藏层和输出层所有V中单词之间的概率,这是一个非常耗时的操作,因此,为了优化模型的训练,minkov文中提到Hierarchical softmax 和 Negative sampling 两种方法对上述模型进行训练,具体详细的推导可以参考文献1和文献2。

作者:Aroundtheworld
链接:https://www.jianshu.com/p/b2da4d94a122
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/lzhu/p/9297421.html

词向量之Word2vector原理浅析相关推荐

  1. 第一篇: 词向量之Word2vector原理浅析

    第一篇: 词向量之Word2vector原理浅析 作者 Aroundtheworld 2016.11.05 18:50 字数 1353 阅读 5361评论 1喜欢 9 一.概述 本文主要是从deep ...

  2. 系统学习NLP(十三)--词向量(word2vec原理)

    词向量简介 自然语言是一套用来表达含义的复杂系统.在这套系统中,词是表义的基本单元.在机器学习中,如何使用向量表示词? 顾名思义,词向量是用来表示词的向量,通常也被认为是词的特征向量.近年来,词向量已 ...

  3. One_hot和Word2Vec两种词向量方法的原理及比较

    对于文本处理,首要的任务是要对非结构化数据进行结构化处理,由此诞生了词向量表示的方法,再众多词向量表示方法中,尤其以One_hot和word2vec两种方法最常用,下面也针对这俩方法进行阐述 One_ ...

  4. 词向量Word Embedding原理及生成方法

    前言 Word Embedding是整个自然语言处理(NLP)中最常用的技术点之一,广泛应用于企业的建模实践中.我们使用Word Embedding能够将自然文本语言映射为计算机语言,然后输入到神经网 ...

  5. 词向量模型Word2vec原理

    目录 1.词向量简介 2.Word2vec简介 3.Word2vec详细实现 4.CBOW模型 5.Skip-gram模型 6. CBOW与skip-gram对比 7.参考 1.词向量简介 用词向量来 ...

  6. PaperWeekly 第52期 | 更别致的词向量模型:Simpler GloVe - Part 1

    作者丨苏剑林 学校丨中山大学硕士生 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言 如果问我哪个是最方便.最好用的词向量模型,我觉得应该是 word2vec,但如果问我哪个是最漂亮的词向 ...

  7. 测评Mimick模型对词向量重构效果

    论文<Mimicking Word Embeddings using Subword RNNS>开源的代码是基于DyNet深度学习框架.不同于静态声明深度学习框架,例如:TensorFlo ...

  8. word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

    word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...

  9. 最小熵原理系列:词向量的维度应该怎么选择?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 随着 NLP 的发展,像 Word2Vec.Glove 这样的词向量模型,正逐渐地被基于 Transfor ...

最新文章

  1. 此字符不允许在标识符中使用_计算机中C语言的-基本语法
  2. wireshark提取流量包中的文件_[技术]Wireshark抓取的数据包提取文件
  3. php 解压dat,电脑微信dat文件怎么打开
  4. nodejs+kafka+storm+hbase 开发
  5. 操作系统实践(四/五)
  6. Redux技术架构简介
  7. datatables 配套bootstrap样式使用小结(2) ajax篇
  8. SQL2005触发器和存储过程
  9. Linux(乌班图 )系统下安装jdk 和eclipse开发IDE
  10. jenkins相关下载链接
  11. J2EE中使用jstl报http //java sun com/jsp/jstl/core cannot be reso
  12. android文件读取文件内容,android创建txt文件,读取txt文件内容
  13. BDD - 介绍 Behavior-Driven Development 行为驱动开发
  14. Java web项目中使用C#配合开发,实现双屏显示功能
  15. 如何高效设计游戏——游戏策划的自我修养与心得
  16. nyoj 191 小柯的问题
  17. PHP 毕生功力 图片,视听发烧网_汇集毕生功力的代表作:静神Monitor Acoustics KenStyle Silver Signature...
  18. html 手机ar,vr与ar技术的区别有哪些
  19. PDF工具Adobe Arcrobat Pro DC下载安装教程
  20. JAVA语言异常_Java语言中常用异常类EoFException是用来处理( )异常的类_学小易找答案...

热门文章

  1. Stark 组件:快速开发神器 —— 自动生成 URL
  2. 2016年第七届蓝桥杯C/C++ A组国赛 —— 第三题:打靶
  3. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1050:骑车与走路
  4. 1046:判断一个数能否同时被3和5整除
  5. 大数据互联网架构阶段 前台系统架构 跨域请求
  6. 大数据WEB阶段(一)XML文件的操作
  7. 【C语言】控制台窗口图形界面编程(三)窗口相关设置
  8. 行人跟踪python_使用Python为初学者构建AI汽车和行人跟踪
  9. 二叉树的后序遍历—leetcode145
  10. sdk编程改变static控件字体和颜色