Word Vector 方法
通常情况下,我们需要解决的问题都是和数字来打交道。对于nlp而言,语言中包含很多非数字的词语,要想实现对一句话的理解,首要做的是将词语转化为向量。将词语转化为向量的方法主要有3大种。下面分别进行介绍:
1、One hot Encoding
即将词语转化为一个长度为单词库中单词数量相同的向量,该向量在该词的位置处值为1,其他位置处值为0。这种表达方式很简单,但缺点也是很明显的。向量维度较高,同时这些数字没有实际意义。比如hotel = [0 0 1], motel = [1 0 0],通过点积两个向量值为0,而两个词意是很接近的,显然不太符合实际需求。
2、SVD based method
SVD的基本思路是矩阵分解,那么首先我们需要获取矩阵。矩阵的形式有2种:word-document word-word。其中word-document矩阵的维度是MxV(其中M是指document的数量,V是指词库的数量)。而word-word matrix 也称作Window based Co-occurrence Matrix,统计的是以某词为中心词的情况下,在window size内其他词出现的次数。这主要是因为根据window的大小的不同,得到的矩阵也不同,维度是VxV。
得到矩阵后,处理的基本思路是:
a、将矩阵X做svd分解, X=USVT
b、选择U的前K列得到K维的词向量
这种方法可以表征词与词之间的关系,但同时也面临以下问题:
a、随着词库中新增词语以及语料库的增加,矩阵的维度可能是经常变化的。
b、矩阵可能是很稀疏的,因为大部分的词语使用频率较低
c、矩阵的维度是很高的
d、进行SVD分解时的复杂度较高
e、词频可能是极不平衡的
解决以上问题的一些思路:
a、忽略一些功能性的词语比如:the、 he、has等
b、计算词频时参考词语到中心词的距离加适当的权重
c、应用皮尔逊相关系数,取代原来的值,将负值设为0。
3、迭代方法:Word2Vec
这种方法的基本思路是通过将一些词向量看做参数,设计目标函数,利用一些优化方法去获得这些参数的值。
Word2Vec实际上包含2种算法和2种训练方法: