第2章
词向量的前世今生

就像第1章中提到的那样,对于大多数自然语言处理系统来说,词是最基本的处理单位。单词组成句子,句子组成段落,最终形成更长的文章甚至书籍。要理解一篇文章,首先需要理解其中包含的单词。

最简单的办法是把单词当成字符串,根据单词拼写的相似性来确定词义的相似性。这是因为如果两个单词共享相同的汉字(对于汉语)或者相同的词根(对于英语),那么它们的含义很可能具有相似的部分。显然,这种方法过于粗糙,因为存在很多拼写相近但意思完全不同的单词。另一种方法是建设词典知识库(Lexical Knowledge Base),即让语言学家和母语者编写一个描述单词关系的网络,例如英文的WordNet[45]或者中文的知网(HowNet)[46]。这种方式虽然精确但是耗时耗力,难以囊括新词、热词,也不是一个好的选择。

计算机比较擅长处理数值运算,因此更好的做法是把单词嵌入到欧式空间中,使之变成高维向量,这就是词向量(Word Embedding,直译为词嵌入)。但是词向量如何得到?语言学中有一个著名的分布式假设(Distributed Hypothesis)[47]:相似上下文中出现的单词具有相似的语义。因此,通过对单词出现的上下文进行建模,我们就能描述单词本身的语义(1)。随着研究的深入,研究者们也开始尝试把各种粒度(例如自然语言里的单词、短语、句子等)、各种模态(例如文本、图像、语音等)的数据都嵌入到欧式空间中,甚至是嵌入同一空间中,以便完成更加复杂的任务(例如根据文字搜索图片)。

在接下来的部分中,我们将比较不同的词向量学习算法,动手实现Word2vec[6][7],并可视化学习到的词向量,研究其运算性质。