Word2Vec小结

Word2vec学习笔记 主要内容: 1、什么是Word2vec?为什么要Word2vec? 2、常规的做法有哪些及一些简单的介绍? 3、NNLM的Word2vec原理及问题解决方案(原论文《Distributed Representations of Words and Phrases and their Compositionality》) 4、Word2vec工具的使用 阅读详情

发现了一篇总结的比较好的文章如下,向博主致敬

http://blog.csdn.net/l18930738887/article/details/54177938



声明:

1)本参考了博客、文献及寒小阳深度学习的视频。本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。

2)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢。


文章结构:

一、什么是Word2vec?

二、历史的做法有哪些及一些简单的介绍?

三、最常用的Word2vec模型:NNLM的原理

四、Word2vec工具的使用

五、对word2vec(NNLM)思想的想法(只是个人观点)


正文:

一、什么是Word2vec?

像图像处理一样,我们如果想要让计算机处理文本信息,那么我们就需要把文本信息转换成数字符号。我们最简单的方法就是使用One-hot编码把一个个词变为一个向量的形式输入给计算机进行计算。比如:“我 爱 你”,在一个40W的词典中可以表示成这样:“我”[1 0 0 0 0 0 0 ...]  “爱”[0 0 0 1 0 0 ...] "你"[0 1 0 0 0 0 0 ...] , 然后可以使用Hash表配合上算法已经很好地完成了 NLP 领域的各种主流任务。

但是如果使用这样的表示有几个重要的问题:

1)任意两个词之间都是孤立的。比如“爱”和“喜欢” 这2个次没有层级或“近义词”的意思。

2)词表维度随着语料库增长膨胀。

3)数据稀疏问题。


为了避免以上问题,Deep Learning 中一般用到的词向量并不是刚才提到的用 One-hot Representation 表示的那种很长很长的词向量,而是用 Distributed Representation表示的一种低维实数向量。这种向量一般长成这个样子:[0.792, −0.177, −0.107, 0.109, −0.542, …]。维度以 50 维和 100 维比较常见。如此一来我们就可以计算每个词的相似度。(个人认为每个维度就像是主题模型中系数类似)

回答:

Word2vec就是文字翻译成机器语言的一串向量,只不过它可能有好几种不同的表达方式。


二、历史的做法有哪些及一些简单的介绍?

a)  LSA矩阵分解模型
采用线性代数中的奇异值分解方法,选取前几个比较大的奇异值所对应的特征向量将原矩阵映射到低维空间中,从而达到词矢量的目的。

具体方法步骤:

1、构建同现矩阵2、矩阵分解3、提取前N维信息。


同现矩阵如图所示:


图1-1:构建同现矩阵


图1-2:SVD分解及选择前2维特征。

从结果中我们会发现:

i 到 like 和enjoy的距离应该是差不多。如果样本量增大的情况下,理论上like应该与enjoy的距离会越变越小。

SVD最大的问题是计算复杂度是O(n^3),所以有了PLSA。


b)  PLSA 潜在语义分析概率模型
从概率学的角度重新审视了矩阵分解模型,并得到一个从统计,概率角度上推导出来的和LSA相当的词矢量模型。


c)  LDA 文档生成模型
按照文档生成的过程,使用贝叶斯估计统计学方法,将文档用多个主题来表示。LDA不只解决了同义词的问题,还解决了一次多义的问题。目前训练LDA模型的方法有原始论文中的基于EM和 差分贝叶斯方法以及后来出现的Gibbs Samplings 采样算法。(LDA是另一个较大的话题,请听下回分解)


d)  Word2Vector 模型
2013年火起来的算法,通过神经网络机器学习算法来训练N-gram 语言模型,并在训练过程中求出word所对应的vector的方法。本文将详细阐述此方法的原理。


三、最常用的Word2vec模型:NNLM的原理

NNLM(Neural Network Language model) 神经网络语言模型

a)我们来上一张最最最重要的图NNLM的结构


图1-3:NNLM的结构图

W为输入的变量,C就是训练的词向量,output就是预测文字。注意:我们最终是希望获得C矩阵!

为了简单起见,我们假设有这样一句话“我  爱  北京  天安门”。(假设词典就4个词)输入为one-hot编码 假设为:

 “我”[1 0 0 0]

 “爱”[0 1 0 0]

 “北京”[0 0 1 0]

 “天安门”[0 0 0 1]

输入为:我  爱  北京

输出为:天安门

每个词的词向量为:10维

其中输入与输出如图所示:(整体流程从下至上看)


图1-4:NNLM的运行

其实上面就是一个神经网络的迭代过程,最终通过降低损失函数获得最佳的C~


b) 模型的优化

但是上面的算法计算量还是比较大的,如图所示:


图1-5:NNLM的网络复杂度

N是输入的词数量,D是每个词的词向量维度,H隐层单元,V是需要预测词的总量。

它所对应的时间复杂度为N * D + N * D * H + N *D * V + H * V。其中D和H大约在100和500之间,N是3到8,而V则高达几百万数量级。因此该模型的瓶颈在后面两项。接下来我们要讨论的问题就是如何解决这个时间复杂度的问题。

其中最主要的2点改进为:softmax层的Huffman编码及结果集的负例采样问题。具体可以看参考文献,这边就直接上2张图:


图1-6:Huffman tree 改造softmax输出层



图1-7:负例采样的方法


根据上面的加速方法的改进,目前开源的结构如图所示:


图1-8:CBOW模型


图1-9:Skip-Gram模型

CBOW模型是用N个词推出1个词,Skip-Gram模型是1个词推出N个的模型

加速方法总结
1、删除隐藏层
2、使用Hierarchical softmax 或negative sampling
3、去除小于minCount的词
4、根据一下公式算出每个词被选出的概率,如果选出来则不予更新。此方法可以节省时间而且可以提高非频繁词的准确度。

其中t为设定好的阈值,f(w) 为w出现的频率。
5、选取邻近词的窗口大小不固定。有利于更加偏重于离自己近的词进行更新。
6、 多线程,无需考虑互斥。


c)NNLM的缺点:

1、一词多义的问题没办法解决,因为一个词用的是同一个词向量。比如苹果,可能是吃的苹果也可能是手机。(个人保留这个观点,我认为词向量应该是类似主题模型能够完成一词多义的训练,但目前无法验证。)

2、因为是local context window 单独训练,没有利用包含在global co-currence矩阵中的统计信息。


四、word2vec工具的使用:

word2vec工具使用代码  https://www.zybuluo.com/hanxiaoyang/note/472184  。 spark上面也有word2vec,算法使用的是Skip-gram模型。等空了也可以调用那个试试。

使用的是中文维基百科,模型结果:

[python]  view plain  copy
  1. In [4]: result = model.most_similar(u"足球")  
  2. In [5]: for e in result:  
  3.     print e[0], e[1]  
  4.    ....:       
  5. 联赛 0.65538161993  
  6. 甲级 0.653042972088  
  7. 篮球 0.596754670143  
  8. 俱乐部 0.587228953838  
  9. 乙级 0.58406317234  
  10. 足球队 0.556015253067  
  11. 亚足联 0.530800580978  
  12. allsvenskan 0.52497625351  
  13. 代表队 0.521494746208  
  14. 甲组 0.51778960228  
  15. In [6]: result = model.most_similar(u"男人")  
  16. In [7]: for e in result:  
  17.     print e[0], e[1]  
  18.    ....:       
  19. 女人 0.77537125349  
  20. 家伙 0.617369174957  
  21. 妈妈 0.567102909088  
  22. 漂亮 0.560832381248  
  23. 잘했어 0.540875017643  
  24. 谎言 0.538448691368  
  25. 爸爸 0.53660941124  
  26. 傻瓜 0.535608053207  
  27. 예쁘다 0.535151124001  
  28. mc刘 0.529670000076  

(男人第五个相近的词是谎言。。。)


五、对word2vec(NNLM)思想的想法(只是个人观点):

在写本文的时候看了一些资料背景,最早我们使用SVD、PCA这样的思想去获取一个词的词向量,其实就像是提取一个词的主成分一样。只不过用传统的方法计算量大,且较难并行优化,所以就使用了神经网络。那为什么神经网络也能完成这个工作呢?因为神经网络也可以做主成分(曾经看过一篇论文,但已经忘了名字了),而NNLM中的C矩阵其实就是对应的主成分分析。这样巧妙的设计让我们能够更深刻的理解神经网络。(此处不是深度学习)


参考文献:

王琳 word2vec原理介绍  http://blog.sina.com.cn/s/blog_4bec92980102v7zc.html
词向量与语言模型  http://licstar.net/archives/328
word2vec工具使用代码  https://www.zybuluo.com/hanxiaoyang/note/472184
基于 Hierarchical Softmax 的模型 http://blog.csdn.net/itplus/article/details/37969979
基于 Negative Sampling 的模型 http://blog.csdn.net/itplus/article/details/37998797
spark-word2vec http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice6/
寒小阳《深度学习》
word2vec预训练词向量+通俗理解word2vec+CountVectorizer+TfidfVectorizer+tf-idf公式及sklearn中TfidfVectorizer 文章目录sklearn文本特征提取——TfidfVectorizerTFIDFTF-IDF如何使用?参考文献tf-idf公式及sklearn中TfidfVectorizer1 文本向量化特征的不足2. TF-IDF概述3 用scikit-learn进行TF-IDF预处理4. TF-IDF小结联结 sklearn文本特征提取——TfidfVectorizer (term frequency-inverse document frequency) 处理文本时,如何将文字转化为模型可处理的向量? TF-IDF 阅读详情

相关推荐

浅析Word2Vec

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

qq_35128615的博客 548

matlab图像相嵌代码-VisualWord2Vec:使用抽象场景学习具有视觉基础的单词嵌入

matlab图像相嵌代码视觉Word2Vec(vis-w2v) 从抽象图像中学习基于视觉的单词嵌入 纸 Satwik Kottur *,Ramakrishna Vedantam *,JoséMoura,Devi Parikh Visual Word2Vec(vis-w2v):从抽象图像中学习基于视觉的嵌入[] [] * =平等贡献 可以找到经过预先训练的Visual Word2vec嵌入,并在Wikipedia和MSCOCO字幕上进行训练。 代码结构 该代码的组织方式如下: visword2vec.c :培训vis-w2v的主要代码 refineFunctions.c :包含与精炼嵌入相关的函数 helperFunctions.c :通常包含辅助功能,例如io, helperFunctions.c化等。 visualFunction.c :包含基于元组进行优化的代码,并在测试和验证集上执行常识(cs)任务 vpFunctions.c :包含代码以根据句子进行优化,并执行可视化释义(vp)任务 structs.h :包含为代码定义的结构 filepaths.h :包含上述两个任务所需的文

matlab有些代码不运行-word2vec_matlab:word2vec_matlab

matlab有些代码不运行word2vec_matlab Google在Matlab中预先训练的word2vec模型 通过该项目,您可以在Matlab中使用Google在庞大的Google新闻数据集上训练的word2vec模型。 重要说明:请注意,该项目当前确实提供了训练word2vec模型的任何功能。 它只是为您提供经过预先训练的Google模型,并演示了您可以使用此模型完成的一些基本技巧,例如识别相似的单词,识别哪个单词不属于一组单词或完成类推。 如果您有兴趣在自己的文本语料库上训练word2vec模型,建议您查看Python中的gensim包。 原始模型可以在此处公开获得。该模型包含300万个单词的词汇表; 但是,大多数都是垃圾。 我已经过滤掉了大约200,000个单词。 word2vec子目录包含一些用于模型播放的Matlab函数。 编写它们的目的是提供对这些技术的清晰说明。 您可以查看并运行runExample.m以查看这些单词向量的示例用法。 词汇过滤 我通过查找WordNet中的所有单词来过滤原始词汇-我仅保留WordNet中存在的单词。 这样可以将词汇量减少到大约200

word2vec相似度计算_文本相似度计算综述

概述在信息爆炸时代,人们迫切希望从海量信息中获取与自身需要和兴趣吻合度高的内容,为了满足此需求,出现了多种技术,如:搜索引擎、推荐系统、问答系统、文档分类与聚类、文献查重等,而这些应用场景的关键技术之一就是文本相似度计算技术。因此了解文本相似度计算方法是很有必要的。文本相似度定义文本相似度在不同领域被广泛讨论,由于应用场景不同,其内涵有所差异,故没有统一、公认的定义。Lin从信息论的角度阐明相似...

weixin_39887386的博客 1395

学习笔记四:word2vec和fasttext

FastText:快速的文本分类器 文章目录一、word2vec1.1 word2vec为什么 不用现成的DNN模型1.2 word2vec两种模型:CBOW和Skip-gram1.2 word2vec两种优化解法:霍夫曼树和负采样1.2.2 基于Hierarchical Softmax的CBOW模型算法流程:1.2.3 负采样方法1.3 总结:二、fasttext2.1、简介2.2 FastText原理2.2.1 模型架构2.2.2 层次SoftMax2.2.3 N-gram特征2.2.4 subword

m0_64375823的博客 2818

(三)文本挖掘——Word2vec

# @Time : 2021/3/27 14:45 # @Author : chao #代码参考自:https://blog.csdn.net/weixin_45314989/article/details/104390725?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242 #采用word2vec对分词后的文件进行训练,将每个词语映射到词向量空间 import log

qq_45559536的博客 625

如何进行文本挖掘的Matlab实现

本文将介绍如何使用Matlab进行文本挖掘的实现,从数据预处理到特征提取和模型构建,为读者提供一些实用的技巧和方法。文本清洗的目的是去除文本中的噪声和不必要的信息,例如HTML标签、特殊字符和标点符号等。TF-IDF模型是一种根据词语在文本中的频率和在语料库中的逆文档频率来表示文本的方法。例如,可以将文本转化为一个以词语为列的矩阵,其中每个元素表示该词语在文本中的TF-IDF权重。文本生成是根据给定的内容生成新的文本的过程。例如,可以将文本转化为一个以词语为列的矩阵,其中每个元素表示该词语在文本中的频率。

vipfanxu的博客 374

word2vec使用方法小结

原文:https://blog.csdn.net/qq_19707521/article/details/79169826 训练模型 利用gensim.models.Word2Vec(sentences)建立词向量模型 该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以通过分别执行model=gensim.models.Word2V...

lrt366的博客 1万+

词向量源码解析:(2.7)word2vec源码解析小结

asd

ZhaoZhe的专栏 413

ptorch调参

基于pytorch的CNN、LSTM神经网络模型调参小结 基于pytorch实现word2vec

仲夏 539

一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等...

优化算法 先导知识:泰勒公式 \[ f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n \] 一阶泰勒展开: \[ f(x)\approx f(x_0)+f'(x_0)(x-x_0) \] 二阶泰勒展开: \[ f(x)\approx f(x_0)+f'(x_0)(x-x_0)+\frac{f''(x_0)}{2}(x-x_0)^2 \...

weixin_30340617的博客 507

可以直接运行的word2vec代码

项目import到eclipse之后,添加好里面的jar包,即可直接运行

python+Word2Vec实现情感分析完整项目

python实现了情感分析的完整项目,包含训练样本,训练好的模型,完整代码。python实现了情感分析的完整项目,包含训练样本,训练好的模型,完整代码。python实现了情感分析的完整项目,包含训练样本,训练好的模型,完整代码。python实现了情感分析的完整项目,包含训练样本,训练好的模型,完整代码。python实现了情感分析的完整项目,包含训练样本,训练好的模型,完整代码。

word2vec原理总结

Part I:背景 Part II:训练模式(CBOW,Skip Gram) Part III:优化方法(Negative Sampling,Hierarchical SoftMax) Part IV:词向量衡量指标 参考论文:Word2vec Parameter Learning Explained Part I:背景 特征表达是很基础也很重要的一步,我们通常需要用一个向量去表示一个...

Ezail的博客 1096

超详细总结之Word2Vec(一)原理推导

本章是介绍Word2Vec的原理推导部分,后面还会有基于TensorFlow的Word2Vec代码实现讲解。 一、什么是Word2Vec? 2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative s...

自然语言处理学习站 9万+

word2vec

1.英文语料库的处理 大写变小写,去除表情符号,或则参考表情符号库,进行情感分析 词向量:word2vec,fasttext 为什么不用one-hot向量表示词向量? 如’a b c’ ==》 a:[1,0,0] , b:[0 1 0],c:[0 0 1],容易维度过高,特征过于稀疏。 word2vec的认识:是一个工具。主要包括两个模型:跳字模型(skip-gram)和连续词袋模型(contin...

Autter的博客 517

获取Word2vec训练得到的所有词与词向量

尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作! 以前...

Vensmallzeng的博客 2万+
上一篇: 【总结】python一些常见的库
下一篇: 卡方检验特征选择
code_caq
博客等级 码龄10年 112粉丝 58原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值