在word2vec出现之前,自然语言处理经常把字词转为one-hot编码类型的词向量,这种方式虽然非常简单易懂,但是数据稀疏性非常高,维度很多,很容易造成维度灾难,尤其是在深度学习中;其次这种词向量中任意两个词之间都是孤立的,存在语义鸿沟(这样就不能体现词与词之间的关系)而有Hinton大神提出的Distributional Representation 很好的解决了one-hot编码的主要缺点。解决了语义之间的鸿沟,可以通过计算向量之间的距离来体现词与词之间的关系。Distributional Representation 词向量是密集的。word2vec是一个用来训练Distributional Representation 类型的词向量的一种工具。

1、CBOW与Skip-Gram模型

  word2vec模型其实就是简单化的神经网络,主要包含两种词训练模型:CBOW模型和Skip-gram模型。模型的结构图如下(注意:这里只是模型结构,并不是神经网络的结构)

  

  CBOW模型根据中心词W(t) 周围的词来预测中心词;Skip-gram模型则根据中心词W(t) 来预测周围的词。

  1)CBOW模型的第一层是输入层,输入的值是周围每个词的one-hot编码形式,隐藏层只是对输出值做了权值加法,没有激活函数进行非线性的转换,输出值的维度和输入值的维度是一致的。

  2)Skip-gram模型的第一层是输入层,输入值是中心词的one-hot编码形式,隐藏层只是做线性转换,输出的是输出值的softmax转换后的概率。

  神经网络结构如下

  

  神经网络的训练是有监督的学习,因此要给定输入值和输出值来训练神经网络,而我们最终要获得的是隐藏层的权重矩阵。因为隐藏层的输出事实上是每个输入单词的 “嵌入词向量”。我们来看个图

  

  上如中左边的式子是输入词向量和隐藏层权重矩阵的乘积,在做这个乘法时是不会进行矩阵的运算的,而是直接通过输入值中1的位置索引来寻找隐藏层中的权重矩阵中对应的索引的行。

  词向量的两个优点:

    1)降低输入的维度。词向量的维度一般取100-200,对于大样本时的one-hot向量甚至可能达到10000以上。

    2)增加语义信息。两个语义相近的单词的词向量也是很相似的。

2、word2vec API讲解

  在gensim中,word2vec 相关的API都在包gensim.models.word2vec中。和算法有关的参数都在类gensim.models.word2vec.Word2Vec中。算法需要注意的参数有:

    1) sentences:我们要分析的语料,可以是一个列表,或者从文件中遍历读出(word2vec.LineSentence(filename) )。

    2) size:词向量的维度,默认值是100。这个维度的取值一般与我们的语料的大小相关,如果是不大的语料,比如小于100M的文本语料,则使用默认值一般就可以了。如果是超大的语料,建议增大维度。

    3) window:即词向量上下文最大距离,window越大,则和某一词较远的词也会产生上下文关系。默认值为5,在实际使用中,可以根据实际的需求来动态调整这个window的大小。

     如果是小语料则这个值可以设的更小。对于一般的语料这个值推荐在[5;10]之间。

    4) sg:即我们的word2vec两个模型的选择了。如果是0, 则是CBOW模型;是1则是Skip-Gram模型;默认是0即CBOW模型。

    5) hs:即我们的word2vec两个解法的选择了。如果是0, 则是Negative Sampling;是1的话并且负采样个数negative大于0, 则是Hierarchical Softmax。默认是0即Negative Sampling。

    6) negative:即使用Negative Sampling时负采样的个数,默认是5。推荐在[3,10]之间。这个参数在我们的算法原理篇中标记为neg。

    7) cbow_mean:仅用于CBOW在做投影的时候,为0,则算法中的xw为上下文的词向量之和,为1则为上下文的词向量的平均值。在我们的原理篇中,是按照词向量的平均值来描述的。个人比较喜欢用平均值来表示xw,默认值也是1,不推荐修改默认值。

    8) min_count:需要计算词向量的最小词频。这个值可以去掉一些很生僻的低频词,默认是5。如果是小语料,可以调低这个值。

    9) iter:随机梯度下降法中迭代的最大次数,默认是5。对于大语料,可以增大这个值。

    10) alpha:在随机梯度下降法中迭代的初始步长。算法原理篇中标记为η,默认是0.025。

    11) min_alpha: 由于算法支持在迭代的过程中逐渐减小步长,min_alpha给出了最小的迭代步长值。随机梯度下降中每轮的迭代步长可以由iter,alpha, min_alpha一起得出。这部分由于不是word2vec算法的核心内容,因此在原理篇我们没有提到。

          对于大语料,需要对alpha, min_alpha,iter一起调参,来选择合适的三个值。

  word2vec是可以进行增量式训练的,因此可以实现一:在输入输入值时可以将数据用生成器的形式导入到模型中;二:可以将数据一个磁盘中读取出来,然后训练完保存模型;之后加载模型再从其他的磁盘上读取数据进行模型的训练。初始化模型的相似度之后,模型就无法再进行增量式训练了,相当于锁定模型了。

3、三个最常见的应用

  当训练完模型之后,我们就可以用模型来处理一些常见的问题了,主要包括以下三个方面:

  1)找出某一个词向量最相近的集合

    model.wv.similar_by_word()

    从这里可以衍生出去寻找相似的句子,比如“北京下雨了”,可以先进行分词为{“北京”,“下雨了”},然后找出每个词的前5或者前10个相似的词,比如”北京“的前五个相似词是

      {“上海”, “天津",”重庆“,”深圳“,”广州“}

    "下雨了"的前五个相似词是

      {”下雪了“,”刮风了“,”天晴了“,”阴天了“,”来台风了“}

    然后将这两个集合随意组合,可以得到25组不同的组合,然后找到这25组中发生概率最大的句子输出。

  2)查看两个词向量的相近程度

    model.wv.similarity()

    比如查看"北京"和”上海“之间的相似度

  3)找出一组集合中不同的类别

    model.wv.doesnt_match()

    比如找出集合{“上海”, “天津",”重庆“,”深圳“,”北京“}中不同的类别,可能会输出”深圳“,当然也可能输出其他的

自然语言处理之word2vec的更多相关文章

  1. 基于skip-gram做推荐系统的想法

    一.人工智能之自然语言处理 自然语言处理(Natural Language Processing, NLP),是人工智能的分支科学,意图是使计算机具备处理人类语言的能力. “处理人类语言的能力”要达到 ...

  2. unity--------------------四元数的旋转与原理

    [Unity技巧]四元数(Quaternion)和旋转 原文:http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应 ...

  3. 论文解读(DeepWalk)《DeepWalk: Online Learning of Social Representations》

    一.基本信息 论文题目:<DeepWalk: Online Learning of Social Representations>发表时间:  KDD 2014论文作者:  Bryan P ...

  4. 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  5. 自然语言处理高手_相关资源_开源项目(比如:分词,word2vec等)

    (1) 中科院自动化所的博士,用神经网络做自然语言处理:http://licstar.net (2) 分词项目:https://github.com/fxsjy/jieba(3) 清华大学搞的中文分词 ...

  6. word2vec 在 非 自然语言处理 (NLP) 领域的应用

    word2vec 本来就是用来解决自然语言处理问题的,它在 NLP 中的应用是显然的. 比如,你可以直接用它来寻找相关词.发现新词.命名实体识别.信息索引.情感分析等:你也可以将词向量作为其他模型的输 ...

  7. 自然语言处理--Word2vec(二)

    前一篇,word2vec(一)主要讲了word2vec一些表层概念,以及主要介绍CBOW方法来求解词向量模型,这里主要讲论文 Distributed Representations of Words ...

  8. 利用Tensorflow进行自然语言处理(NLP)系列之一Word2Vec

    同步笔者CSDN博客(https://blog.csdn.net/qq_37608890/article/details/81513882). 一.概述 本文将要讨论NLP的一个重要话题:Word2V ...

  9. 自然语言处理工具:中文 word2vec 开源项目,教程,数据集

    word2vec word2vec/glove/swivel binary file on chinese corpus word2vec: https://code.google.com/p/wor ...

随机推荐

  1. Hibernate入门(九)级联删除

    Hibernate级联删除 上一篇文章学习了级联保存和更新,这个级联删除应该很好理解的.一样的道理,删除一方,同时删除有关联的一方. https://www.cnblogs.com/deepSleep ...

  2. angular select 默认值

    <select ng-model="selected" ng-options="x.id as x.name for x in users">< ...

  3. [代码笔记]VUE路由根据返回状态判断添加响应拦截器

    //返回状态判断(添加响应拦截器) Axios.interceptors.response.use( res => { //对响应数据做些事 if (res.data && !r ...

  4. JS无法获取display为none的隐藏元素的宽度和高度的解决方案

    在实际开发中会遇到确实需要获取隐藏元素的宽高,这儿所说的隐藏元素是display为none的元素. 可使用jQuery Actual Plugin插件来完成,其源码如下: ;( function ( ...

  5. 洛谷P4704 太极剑(乱搞)

    题意 题目链接 Sol 不会正解 写了发暴力过了,貌似跑的还挺快?.. // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include< ...

  6. spring-boot-starter-thymeleaf对没有结束符的HTML5标签解析出错

    springboot 在使用thymeleaf 作为模板时,当出现未关闭标签时,如下所示代码,标签没有关闭. <link href="plugin/layui/css/layui.cs ...

  7. xml可视化编辑器

    ——业内首创的在线可视化XML结构化数据编辑方法 Boxth Visual XML Web Editor (Boxth XWE) 是专为在线处理XML结构化数据而设计的在线(Web).可视化(WYSW ...

  8. Android开发CheckBox控件,全选,反选,取消全选

    在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...

  9. vue 构建项目vue-cli

    1.首先得有node和npm的环境,node的下载:http://nodejs.org/download/.安装node之后,npm也自动生成了,显示版本号就意味着安装成功 2.接下来就是安装vue- ...

  10. leetcode-977. 有序数组的平方

    leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...