word2vec是google在2013年推出的做词嵌入(word embedding)的开源工具。简单的说,它在给定的语料库上训练一个模型,然后会输出所有出现在语料库上的单词的向量表示,这个向量称为"word embedding"。基于这个向量表示,可以计算词与词之间的关系,例如相似性(同义词等),语义关联性(中国-北京=英国-伦敦)等。 NLP(自然语言处理)中传统的词表示方法是one-hot representation,即把每个单词表示成dim维的稀疏向量,dim等于词汇量的大小。这个稀疏向量只有一个维度(该单词的index)上是1,其余全是0。这个表示方法使得单词之间是孤立的。Word embedding则是把单词的表示降维到n维的稠密向量,n< 除了google自己的word2vec工具,各位对词向量感兴趣的牛人们也相继编写了各自不同的版本.包括:
最权威的当然是C语言版本,但是阅读起来比较困难一点。Python版本有优化处理,所以速度相对来说也不慢,但只是实现了分层softmax方法对skip-gram模型进行训练。Java版本分别实现了分层softmax方法对CBOW模型和skip-gram模型进行训练。C++版本代码可以在windows下编译运行,但需要编译器支持c++11。 下面介绍word2vec的基本功能。 1. 计算相似的词 word2vec可以计算词与词之间的距离,把词看成向量空间上的一个点,distance看成向量空间上点与点的距离。如下图所示,通过对已有文本进行训练,可以计算出与钓鱼岛相似的词,原则上文本量越大,训练处的结果越准确。 2. 潜在的语言学规律 在对demo-analogy.sh修改后得到下面几个例子:法国的首都是巴黎,英国的首都是伦敦, vector("法国") - vector("巴黎) + vector("英国") --> vector("伦敦") 3. 词的聚类 根据词与词之间的相关性进行聚类:如下图所示,摩托罗拉,诺基亚,苹果、三星等手机品牌都聚类到一起。 4. 短语分析 训练词语短语之间的关系,通过东北和地区两个词,就能找出与这些词相关的短语。 参考链接: 2. word2vec使用指导 |