Word2vec

向量空间模型在信息检索中是众所周知的,其中每个文档被表示为向量。矢量分量表示文档中每个单词的权重或重要性。使用余弦相似性度量计算两个文档之间的相似性。

尽管对单词使用矢量表示的想法也已经存在了一段时间,但是对于嵌入单词的技术,将单词映射到向量的技术,最近一直在飙升。其中一个驱动因素是TomášMikolov的Word2vec算法,该算法使用大量文本来创建高维(50到300维)的单词表示,捕获单词之间的关系,无需外部注释。这种表述似乎捕获了许多语言规律。例如,它产生一个近似于vec(‘Rome’)表示的向量,作为向量运算vec(‘Paris’) - vec(‘France’)+ vec(‘Italy’)的结果。

Word2vec使用单个隐藏层,完全连接的神经网络如下所示。隐藏层中的神经元都是线性神经元。输入层设置为具有与用于训练的词汇中的单词一样多的神经元。隐藏图层大小设置为生成的单词向量的维度。输出图层的大小与输入图层相同。因此,假设用于学习单词向量的词汇表由V个单词组成并且N为单词向量的维度,则对隐藏层连接的输入可以由大小为VxN的矩阵WI表示,其中每行表示词汇单词。以相同的方式,可以通过矩阵WO来描述从隐藏层到输出层的连接大小为NxV。在这种情况下,WO矩阵的每列 表示来自给定词汇表的单词。使用“ 1-out of -V ”表示对网络的输入进行编码,这意味着只有一条输入线被设置为1,其余输入线被设置为零。

为了更好地处理Word2vec的工作原理,请考虑具有以下句子的训练语料库:

“狗看到了一只猫”,“狗追着猫”,“猫爬上了一棵树”

语料库词汇有八个单词。按字母顺序排序后,每个单词都可以通过其索引引用。对于这个例子,我们的神经网络将有八个输入神经元和八个输出神经元。让我们假设我们决定在隐藏层中使用三个神经元。这意味着WI和WO将分别是8×3和3×8矩阵。在训练开始之前,这些矩阵被初始化为小的随机值,如通常在神经网络训练中那样。仅为了说明,让我们假设WI和WO初始化为以下值:

WI =

W0 =


假设我们希望网络学习单词“cat”和“climb”之间的关系。也就是说,当“猫”输入到网络时,网络应该显示“攀爬”的高概率。在单词嵌入术语中,单词“cat”被称为上下文单词,单词“climbed”被称为目标单词。在这种情况下,输入矢量X将是[0 1 0 0 0 0 0 0] t。请注意,只有向量的第二个分量是1.这是因为输入的单词是“cat”,它在语料库单词的排序列表中保持第二个位置。鉴于目标字是“爬升”,目标矢量看起来像[0 0 0 1 0 0 0 0] t。

利用表示“cat”的输入向量,可以将隐藏层神经元的输出计算为

H t = X t WI = [-0.490796 -0.229903 0.065460]

我们不应该感到惊讶的是隐藏神经元输出的向量H模仿了WI矩阵的第二行的权重,因为V表示为1-out-of-V。因此隐藏层连接的输入功能基本上是将输入字向量复制到隐藏层。对隐藏到输出层执行类似的操作,输出层神经元的激活矢量可以写成

H t WO = [0.100934 -0.309331 -0.122361 -0.151399 0.143463 -0.051262 -0.079686 0.112928]

由于目标是为输出层中的单词生成概率, 对于k = 1,V的Pr(单词k |单词上下文),为了反映它们与输入处的上下文单词的下一个单词关系,我们需要神经元输出的总和。输出图层添加到一个。Word2vec通过使用softmax函数将输出层神经元的激活值转换为概率来实现此目的。因此,第k个神经元的输出通过以下表达式计算,其中activation(n)表示第n个输出层神经元的激活值:

因此,语料库中八个单词的概率是:

0.143073 0.094925 0.114441 0.111166 0.149289 0.122874 0.119431 0.144800

粗体的概率是针对所选择的目标词“攀爬”。给定目标矢量[0 0 0 1 0 0 0 0] t,通过从目标矢量中减去概率矢量,可以容易地计算输出层的误差矢量。一旦知道了错误,就可以使用反向传播来更新矩阵WO和WI中
的权重。因此,训练可以通过从语料库呈现不同的上下文目标词对来进行。从本质上讲,这就是Word2vec如何学习单词之间的关系,并在此过程中开发语料库中单词的向量表示。

例句
Jane wants to go to Shenzhen.

Bob wants to go to Shanghai.

**

一、词袋模型

将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。例如上面2个例句,就可以构成一个词袋,袋子里包括Jane、wants、to、go、Shenzhen、Bob、Shanghai。假设建立一个数组(或词典)用于映射匹配

[Jane, wants, to, go, Shenzhen, Bob, Shanghai]
那么上面两个例句就可以用以下两个向量表示,对应的下标与映射数组的下标相匹配,其值为该词语出现的次数
[1,1,2,1,1,0,0]
[0,1,2,1,0,1,1]

这两个词频向量就是词袋模型,可以很明显的看到语序关系已经完全丢失。

二、词向量模型

词向量模型是考虑词语位置关系的一种模型。通过大量语料的训练,将每一个词语映射到高维度(几千、几万维以上)的向量当中,通过求余弦的方式,可以判断两个词语之间的关系,例如例句中的Jane和Bob在词向量模型中,他们的余弦值可能就接近1,因为这两个都是人名,Shenzhen和Bob的余弦值可能就接近0,因为一个是人名一个是地名。

现在常用word2vec构成词向量模型,它的底层采用基于CBOW和Skip-Gram算法的神经网络模型。

1. CBOW模型

CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如上面的第一句话,将上下文大小取值为2,特定的这个词是"go",也就是我们需要的输出词向量,上下文对应的词有4个,前后各2个,这4个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这4个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

这样我们这个CBOW的例子里,我们的输入是4个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有4个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某4个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

以上描述和架构旨在用于学习单词对之间的关​​系。在连续的单词模型中,上下文由给定目标单词的多个单词表示。例如,我们可以使用“cat”和“tree”作为“攀爬”的上下文单词作为目标单词。这需要修改神经网络架构。如下所示,修改包括将隐藏层连接的输入复制C次,上下文单词的数量,以及在隐藏层神经元中添加除C操作。[警报读者指出,下图可能会让一些读者认为CBOW学习使用了几个输入矩阵。不是这样。它是相同的矩阵WI,它接收代表不同上下文词的多个输入向量]

以上描述和架构旨在用于学习单词对之间的关​​系。在连续的单词模型中,上下文由给定目标单词的多个单词表示。例如,我们可以使用“cat”和“tree”作为“攀爬”的上下文单词作为目标单词。这需要修改神经网络架构。如下所示,修改包括将隐藏层连接的输入复制C次,上下文单词的数量,以及在隐藏层神经元中添加除C操作。[警报读者指出,下图可能会让一些读者认为CBOW学习使用了几个输入矩阵。不是这样。它是相同的矩阵WI,它接收代表不同上下文词的多个输入向量]


利用上述配置来指定C上下文字,使用1-out-of-V表示编码的每个字意味着隐藏层输出是与输入处的上下文字相对应的字矢量的平均值。输出层保持不变,并且以上面讨论的方式完成训练。

2.Skip-Gram模型

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为2, 特定的这个词"go"是我们的输入,而这4个上下文词是我们的输出。

这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前4的4个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的4个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前4的softmax概率对应的神经元所对应的词即可。

Skip-gram模型反转了目标和上下文单词的使用。在这种情况下,目标字在输入处被馈送,隐藏层保持相同,并且神经网络的输出层被多次复制以适应所选数量的上下文字。以“cat”和“tree”为例,作为上下文单词,“爬”作为目标词,skim-gram模型中的输入向量为[0 0 0 1 0 0 0 0] t,而两个输出层将具有[0 1 0 0 0 0 0 0] t和[0 0 0 0 0 0 0 1] t分别作为目标向量。代替产生一个概率向量,将为当前示例产生两个这样的向量。以上面讨论的方式产生每个输出层的误差向量。然而,将来自所有输出层的误差向量相加以通过反向传播来调整权重。这确保了每个输出层的权重矩阵WO在整个训练中保持相同。

词向量模型突出特点:

在词向量模型中,词向量与词向量之间有这非常特殊的特性。例如现在存在国王、男生、女人、皇后四个词向量,那么一个完善的词向量模型,就存在“国王-男人+女人=皇后”这样的关系。

词袋模型(BOW,bag of words)和词向量模型(Word Embedding)理解相关推荐

  1. ORB-SLAM3中的词袋模型BoW

    作者丨卢涛@知乎 来源丨https://zhuanlan.zhihu.com/p/354616831 编辑丨3D视觉工坊 非完整版注释:https://github.com/smilefacehh/O ...

  2. 词向量之词袋模型(BOW)详解

    目录 前言 词袋模型 词袋模型的作用 词袋模型的实现 前言   自然语言处理面临的文本数据往往是非结构化杂乱无章的文本数据,而机器学习算法处理的数据往往是固定长度的输入和输出.因而机器学习并不能直接处 ...

  3. 词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战

    词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战 目录

  4. 词袋模型BoW和词集模型SoW比较

    Bag-of-Words词袋模型,经常用在自然语言处理和信息检索当中.在词袋模型中,一篇文本(文章)被表示成"装着词的袋子",也就是说忽略文章的词序和语法,句法;将文章看做词的组合 ...

  5. 文本表示(Text Representation)之词集模型(SOW)词袋模型(BOW)TF-IDF模型

    转载请注明来源 http://blog.csdn.net/Recall_Tomorrow/article/details/79488639 欢迎大家查看这些模型简单实现的代码--     \ \ \ ...

  6. 【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

    本文作为入门级教程,介绍了词袋模型(bag of words model)和词向量模型(word embedding model)的基本概念. 目录 1 词袋模型和编码方法 1.1 文本向量化 1.2 ...

  7. NLP:词袋模型(bag of words)、词向量模型(Word Embedding)

    例句: Jane wants to go to Shenzhen. Bob  wants to go to Shanghai 一.词袋模型     将所有词语装进一个袋子里,不考虑其词法和语序的问题, ...

  8. NLP深入学习——什么是词向量和句向量(Word Embedding and Sentence Embedding)

    词向量(Word Embedding) 词向量(Word embedding),又叫Word嵌入式自然语言处理(NLP)中的一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向 ...

  9. 如何设计好词袋模型BoW模型的类类型

    回顾过去自己写过的一些词袋模型,比如BoW图像检索Python实战.图像检索(CBIR)三剑客之BoF.VLAD.FV以及Bag of Words cpp实现,这些写出来的要么只是助于自己理解词袋模型 ...

  10. 词袋模型BoW图像检索Python实战

    前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的 ...

最新文章

  1. 如何根据sessionID获取session解决方案
  2. 11.24杭州沙龙预告:数据化经营,智能化决策
  3. 自定义字符串查找函数c语言,(C语言自定义函数,/*编写函数实现在字符串pStr中查找子串pSub int subString( char* pStr, char* pSub);...
  4. 开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式
  5. Django 模型与 Mysql 数据类型对应
  6. 网络拓扑故障诊断讲解总结
  7. java中entry_Java FastMap.Entry方法代码示例
  8. POJ1212 HDU1650 UVA180 LA5240 Eeny Meeny【约瑟夫环】
  9. iOS: 详细的正则表达式
  10. ASCII码值转化十六进制,十进制数;十六进制字符值转十进制,ASCII码值;
  11. HTML当当图书馆作业介绍
  12. 2017-2018-1 20155314 20155323 实验二 固件程序设计
  13. 终于搞清前端和后端的区别啦!
  14. html里的常用特殊符号表示大全
  15. 魅族手机安装Google Play
  16. 通读c++ primer
  17. 回文数——Java实现
  18. python全唐诗json文件基于作者姓名检索--以李白为例
  19. easypermission坑_Android 权限管理(原生、EasyPermissions、RxPermissions)-阿里云开发者社区...
  20. 静态方法 和静态变量——Java

热门文章

  1. cc许可_免费的公共领域和CC0许可图片的16个来源
  2. 利用串口解析AIS接收机数据
  3. #1163 : 博弈游戏·Nim游戏(数学博弈)
  4. JDBC简介及原理和使用介绍
  5. 关于ASP.Net的validateRequest=false(验证请求)
  6. 数据结构与算法--单链表相关面试题
  7. 中国人民银行清算总中心CDA业务数据分析师培训正式开课
  8. CPU当中的分支预测
  9. 华为magic ui就是鸿蒙系统,Magic UI系统是什么?Magic UI和EMUI的区别
  10. oracle AWR 报告 中文版