一
比如一个文本,我们采用原始的方式标记:
"关于举办民生地质工作专业技术人员能力提升高级研修班的通知"
变成这种标记:
[7, 3, 2, 9, 17, 19, 12, 25, 13, 5, 0, 1, 14, 16, 4, 11, 24, 8, 15, 10, 27, 23, 22, 6, 18, 20, 26, 21]
有以下缺点:
1,不能正确反映单词与单词之间的距离,比如比如关是7,办是9
2,纯粹是字 建立 字典 ,没考虑词
也就是说这种编码标记忽略了很多信息,这种模型的建立,忽略了很多词与词之间的信息关系,单纯的将词与词看成独立的。
变成vect后,就相当于在更多的维度上去反映词的信息,因此保留了一些信息。保留的信息多少与嵌入的维度有关。
二
如何建模去表示词,使得词与词之间的距离信息得以表征?有两点需要注意:(一)词与词之间的距离是在语言文章中体现的,所以建模过程肯定需要用到文章,语句等,根据统计语言模型,词跟上下文的词之间是紧密联系的,一个词和另外一个词的上下文相似,那么这两个词也可以认为相似。例如’‘我喜欢北京’’,’‘我爱北京’’.喜欢和爱我们就可以认为是相似的词语。也就是说,词的上下文可以看成词的特征向量,根据词的上下文,可以推出词的意思,(即使不是非常准确,也会大致准确)。这非常类似与英语试卷中的完型填空,我们是根据上下文来选择词的。当然上述过程除了意思信息外,还要有语法等信息,这样才能选出合适的词语。总结来说,建模时候可以使用上下文作为特征,预测词的意思。可以使用一个简单的神经网络实现这个过程。但是,这似乎跟我们的预期目标不相符,我们没有找到一个代替词的方法。word2vec论文的创新点在于找到了一个新向量来代替词,他们在神经网络的加了一个中间的隐藏层,即将上下文当特征,输出为一定维度的向量,就是下图中的隐藏层。这个隐藏层就是词的向量。
后面的将这个向量经过转换,变为预测的词。然后跟实际的词比较,就是损失函数,用于训练整个神经网络。(二)原始的词是用onehot表示的,这里的任何词之间的距离是一样的。缺点就像前面说的,一是维度特别高;一是词与词之间的距离一样,不能反应词的距离远近。唯一的好处似乎就是使得单词数字化。并且,词与词之间的距离信息反应在句子上,跟词的表示无关。具体的思想可参考词袋模型。因此,可以用Onehot对词进行数字化,也就是作为输入。
下面整理一下维基百科上关于word2vect的一些性质:
word2vect的最终结果受参数的影响。下面是一些影响word2vect训练结果的参数:
- 训练的算法
A Word2vec model can be trained with hierarchical softmax and/or negative sampling. To approximate the conditional log-likelihood a model seeks to maximize, the hierarchical softmax method uses a Huffman tree to reduce calculation. The negative sampling method, on the other hand, approaches the maximization problem by minimizing the log-likelihood of sampled negative instances. According to the authors, hierarchical softmax works better for infrequent words while negative sampling works better for frequent words and better with low dimensional vectors.[6] As training epochs increase, hierarchical softmax stops being useful.[7]
-
Sub-sampling 高频率出现的词含有的信息量少。因此当单词出现的次数超过某一个阈值时,就需要剪切掉来增加训练速度。
-
维度 “嵌入”的效果跟词的维度有相关性,一般来说,维数越多,词的嵌入效果越好。但是增大到某个点后,就不会再增大,一般维度选择为100~1000
-
文本窗口(context window) 文本窗口的大小决定了一个单词前面有多少个后面有多少个影响这个词。根据论文作者的建议,一般对于skip-gram选择1-个词,CMOW选择5个词