本文做者:在线实验室javascript
文章结构:html
词向量java
本教程源代码目录在book/word2vec,初次使用请您参考Book文档使用说明。git
背景介绍github
本章咱们介绍词的向量表征,也称为word embedding。词向量是天然语言处理中常见的一个操做,是搜索引擎、广告系统、推荐系统等互联网服务背后常见的基础技术。算法
在这些互联网服务里,咱们常常要比较两个词或者两段文本之间的相关性。为了作这样的比较,咱们每每先要把词表示成计算机适合处理的方式。最天然的方式恐怕莫过于向量空间模型(vector space model)。 在这种方式里,每一个词被表示成一个实数向量(one-hot vector),其长度为字典大小,每一个维度对应一个字典里的每一个词,除了这个词对应维度上的值是1,其余元素都是0。编程
One-hot vector虽然天然,可是用处有限。好比,在互联网广告系统里,若是用户输入的query是“母亲节”,而有一个广告的关键词是“康乃馨”。虽然按照常理,咱们知道这两个词之间是有联系的——母亲节一般应该送给母亲一束康乃馨;可是这两个词对应的one-hot vectors之间的距离度量,不管是欧氏距离仍是余弦类似度(cosine similarity),因为其向量正交,都认为这两个词毫无相关性。 得出这种与咱们相悖的结论的根本缘由是:每一个词自己的信息量都过小。因此,仅仅给定两个词,不足以让咱们准确判别它们是否相关。要想精确计算相关性,咱们还须要更多的信息——从大量数据里经过机器学习方法概括出来的知识。网络
在机器学习领域里,各类“知识”被各类模型表示,词向量模型(word embedding model)就是其中的一类。经过词向量模型可将一个 one-hot vector映射到一个维度更低的实数向量(embedding vector),如embedding(母亲节)=[0.3,4.2,−1.5,...],embedding(康乃馨)=[0.2,5.6,−2.3,...]embedding(母亲节)=[0.3,4.2,−1.5,...],embedding(康乃馨)=[0.2,5.6,−2.3,...]。在这个映射到的实数向量表示中,但愿两个语义(或用法)上类似的词对应的词向量“更像”,这样如“母亲节”和“康乃馨”的对应词向量的余弦类似度就再也不为零了。机器学习
词向量模型能够是几率模型、共生矩阵(co-occurrence matrix)模型或神经元网络模型。在用神经网络求词向量以前,传统作法是统计一个词语的共生矩阵XX。XX是一个|V|×|V||V|×|V| 大小的矩阵,XijXij表示在全部语料中,词汇表VV(vocabulary)中第i个词和第j个词同时出现的词数,|V||V|为词汇表的大小。对XX作矩阵分解(如奇异值分解,Singular Value Decomposition [5]),获得的UU即视为全部词的词向量:ide
但这样的传统作法有不少问题:
基于神经网络的模型不须要计算和存储一个在全语料上统计产生的大表,而是经过学习语义信息获得词向量,所以能很好地解决以上问题。在本章里,咱们将展现基于神经网络训练词向量的细节,以及如何用PaddlePaddle训练一个词向量模型。
效果展现
本章中,当词向量训练好后,咱们能够用数据可视化算法t-SNE[4]画出词语特征在二维上的投影(以下图所示)。从图中能够看出,语义相关的词语(如a, the, these; big, huge)在投影上距离很近,语意无关的词(如say, business; decision, japan)在投影上的距离很远。
图1. 词向量的二维投影
另外一方面,咱们知道两个向量的余弦值在[−1,1][−1,1]的区间内:两个彻底相同的向量余弦值为1, 两个相互垂直的向量之间余弦值为0,两个方向彻底相反的向量余弦值为-1,即相关性和余弦值大小成正比。所以咱们还能够计算两个词向量的余弦类似度:
please input two words: big huge similarity: 0.899180685161 please input two words: from company similarity: -0.0997506977351
以上结果能够经过运行calculate_dis.py
, 加载字典里的单词和对应训练特征结果获得,咱们将在模型应用中详细描述用法。
参考文献
本教程 由 PaddlePaddle 创做,采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。