对于搞自然语言处理的人来说,google的word2vec是比较流行的词向量生成工具。一些开源框架,也集成了它,如JAVA语言的deeplearning4j,Python语言的gensim。对于大规模文字语料经word2vec训练后,可以得到wordvectors,即词向量,它用多维空间的点来表示一个词,因而可以通过计算向量的空间距离(Cosine )来衡量词的(语义)距离,如,与词“暴跌”语义相近的:
./distance negative.bin
Enter word or sentence (EXIT to break): 暴跌
Word: 暴跌 Position in vocabulary: 1478
Word Cosine distance
------------------------------------------------------------------------
下挫 0.902400
大跌 0.877469
下跌 0.876485
跳水 0.871455
震荡 0.865968
跌 0.864824
拉升 0.843199
暴涨 0.830831
深跌 0.830196
崩盘式 0.829867
反弹 0.824941
高位 0.818257
一度 0.818016
这表明,和“暴跌”相关联的词是“下挫”、“大跌”等。
从数学角度来讲,word2vec实际上是利用了矩阵模型,所以,矩阵里面的数据可以是任意信息。因此,“词”不仅仅是文档中的词,而可以是任意构成序列的信息。大自然还是挺奇妙的,因为人性(性格、习惯等)的原因,大多数人的语言和行为,还是可以有规律的。语言产生了文字,形成了信息;而行为同样产生了信息。举几个例子:
人们购物的行为,会产生一系列信息,如超市收银条:
可以把“商品名称”看成“词”,超市所有的电子收银条记录进行词向量训练,可以得到商品的关联性,用来指导超市商品的摆放顺序。这是实体超市的应用场景。电子商务网站同样可以这么做,把用户的浏览行为,购买记录,当做“词”,同样可以给用户做关联推荐。类似的消费行为有很多,如点菜单上的菜名当做“词”向量,可以通过大量的菜单来制定套餐。
知乎上也提到了,根据词向量做成app推荐系统、社交网络大V推荐等应用。