但是在NLP中,传统方法通常是把词转换为离散的不可分割的符号,这导致很难利用不同的词之间的关系(所有的单词之间的距离都一样),例如dog:id143,cat:id537,这使得我们需要更多的数据来训练模型,而使用向量的表达的话可以克服这一缺点,例如在向量中可以利用cat和dog之间的相似性。使用向量表示词也叫word embedding
ps:上面说的都是使用连续的向量空间中的点表示词,而不是使用one-hot向量表示。
总结
使用连续向量的话可以表示词汇之间的关系,例如一些简单的cat和dog之间的相似性,以及复杂的,单词”Rome”的表达vec(‘Rome’), 可以是vec(‘Paris’) – vec(‘France’) + vec(‘Italy’)的计算结果。而这种关系的好处就是使得在表达词汇时就有了一些词汇本身的和词汇之间的信息(类比于人脑中的存储),
word2vec是一种预测模型,可以高效地学习word embedding,具体的有连续词袋模型(CBOW)和skip-gram模型,CBOW(适合小型数据集)是使用上下文预测目标词,skip-gram(适合大规模数据集)是使用目标词预测上下文。
下面重点介绍CBOW
基于神经网络的概率语言模型通常都是使用极大似然法训练的,h(history), wt (target),
下面为训练skip-gram的过程:
数据集:
the quick brown fox jumped over the lazy dog
从数据集中可以得到词语及其上下文信息(context),上下文信息可以有很多种理解,例如,词语周边的句法结构,词语的左边部分的若干个词语信息,对应的右半部分等。这里,我们使用最原始和基本的定义,即认为词语左右相邻的若干个词汇是该词对应的上下文信息。例如,取左右的词窗口为1,下面是数据集中的(上下文信息,对应的词)的pairs:
([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...
Skip-Gram模型是通过输入的目标词来预测其对应的上下文信息,所以目标是通过[quick]来预测[the]和[brown],通过[brown]来预测[quick]和[fox]… 将上面的pair转换为(input, output)的形式如下:
(quick, the), (quick, brown), (brown, quick), (brown, fox), ...