传统的NLP,表示词语一般是通过离散数据表示。One-Hot
这样表示的问题这两个向量是正交的,没有办法比较相似度。
怎么办?解决办法:将其编码成可以比较相似度的向量。
怎么编码呢?
我们知道语言的词跟词之间是有一定关联性的,能不能利用这些关联性设置我们的词向量来编码我们的词语。
Word2Vec方法简介:
他是一种训练词向量的一种框架。
- 我们有大量语料数据,其中每一个单词在语料中编码成一个向量。
- 遍历语料每一个位置,我们设置窗口(中心词c,以及外围词o)
- 我们用词向量c,o的相似度,计算c存在条件下o出现的概率。
- 不断调整向量的值,知道最大化这个概率。
目标函数:
我们优化的目标是(所有向量的表示),T代表的是总语料,m代表窗口大小。P代表条件概率。
目标函数的含义:设置一个窗口,这个窗口遍历所有的语料文本,每个窗口下面都会有中心词,每个窗口该c词及o词情况下,寻找一种词向量表示,使得窗口条件概率最大。
条件概率计算方法:(v表示中心词向量,u代表的是o词向量,V代表总语料)
代表的是模型所有参数,一个非常大的向量。每一个词有两个向量。
确定了目标函数,那我们需要优化目标函数
梯度下降的方法:
如果用梯度下降方法做的话,中间涉及到遍历计算整个语料库,实际上会有非常大的计算开销。
随机梯度下降