PyTorch 里的 nn.Embedding,我们可以把它理解成一个可学习的、用来存放词向量的“查询表”或“容器”。但当时我们留下了一个关键问题:那个能蕴含丰富语义信息的嵌入矩阵,究竟是如何被“学习”出来的呢?随机初始化显然不行,它无法赋予向量任何有意义的初始结构。
要回答这个问题,我们就必须提到 NLP 发展史上一个里程碑式的工作——Word2Vec。在我看来,Word2Vec 的意义不仅在于它提供了一个高效的词向量训练工具,更在于它背后那种“大道至简”的思想。
一、核心思想:词的含义由其上下文决定
Word2Vec 的核心思想其实非常朴素,甚至可以说是一句语言学名言的计算化落地:“You shall know a word by the company it keeps.” (通过一个词的上下文,你就可以了解这个词的含义)。
仔细想想,这跟我们人类学习语言的方式何其相似。即便我们不认识“饕餮”这个词,但如果看到句子“这顿饭真是饕餮盛宴”,我们也能大致猜出它和“吃”、“丰盛”有关。
Word2Vec 的作者们,正是抓住了这一点。他们想,既然词的语义蕴含在它的上下文里,那我们能不能设计一个任务,让模型通过学习“上下文”和“中心词”之间的关系,来倒逼出每个词的向量表示呢?
这个任务,在机器学习里我们通常称为“伪任务”(Pretext Task)。我们并不关心这个任务本身的结果,而是关心模型在完成这个任务的过程中,学到的“副产品”——也就是我们梦寐以求的词向量。
基于这个核心思想,Word2Vec 提出了两种具体的训练范式:CBOW 和 Skip-gram。
二、两种范式:完形填空与看词猜词
1. CBOW (Continuous Bag-of-Words)
CBOW 的思路非常直观,我们可以把它类比成我们学生时代常做的“完形填空”。
具体来说,模型会拿到一个句子的片段,其中中间的词被挖掉了,任务就是根据上下文(周围的词)来预测这个被挖掉的中心词。
比如,对于句子片段 ... a cat sits on the mat ...,我们把 sits 作为中心词。CBOW 模型就会接收 a, cat, on, the 这几个上下文词,然后努力预测出中间应该是 sits。
在这个过程中,为了完成预测,模型必须学会如何把 a, cat, on, the 这些词的向量表示(初始是随机的)有效地组合起来。为了让预测更准,模型会通过反向传播不断调整输入的这几个词以及词典里所有词的向量。训练的语料越多,这种调整就越充分。最终,当模型收敛时,我们得到的词向量矩阵,就自然地编码了词与词之间的共现关系和语义信息。
2. Skip-gram
既然能用“周围”预测“中间”,那么反过来,用“中间”来预测“周围”,是不是也行得通呢?这就是 Skip-gram 模型的思想,我愿意称之为“看词猜词”。
与 CBOW 相反,Skip-gram 模型的任务是根据一个中心词,来预测它周围的上下文词。
还是用上面的例子,这次模型会接收中心词 sits,然后它的任务是预测出 a, cat, on, the 这些词。
直觉上看,这个任务似乎比 CBOW 更难一些,因为一个词的上下文可能性很多。但也正因为如此,Skip-gram 模型在训练过程中会得到更充分的“锻炼”。通常的观点是,Skip-gram 对低频词的处理效果更好,并且在语义关系的学习上表现更优。
无论是 CBOW 还是 Skip-gram,其本质都是一样的:通过一个巧妙设计的预测任务,迫使模型去学习词语的分布式表示,最终将我们最初提到的那个高维、稀疏的 One-Hot 向量,压缩到一个低维、稠密的语义空间中去。
三、局限性与思考
当然,任何模型都不是完美的,Word2Vec 作为一个早期的经典模型,其局限性也相当明显,我们在使用时需要有清醒的认识。
首先,它的上下文窗口是有限的。不论是 CBOW 还是 Skip-gram,模型能“看到”的上下文都局限于一个固定大小的窗口(比如中心词前后各 5 个词)。这意味着它学习到的主要是局部语境信息,很难捕捉到段落或篇章级别的、更长距离的依赖关系。
其次,它对词语的理解是“一词一义”的。Word2Vec 为词典中的每一个词只生成一个固定的向量。但我们知道,在自然语言中,“苹果”既可以指水果,也可以指公司。Word2Vev 无法处理这种一词多义(Polysemy)的现象,它会把所有语境下的“苹果”的语义都杂糅进一个向量里。
此外,它无法处理未登录词(Out-of-Vocabulary, OOV),并且没有充分利用单词内部的形态学信息(比如 look 和 looking 会被当成毫无关系的两个词)。
尽管存在这些不足,但我们不能否认 Word2Vec 的开创性贡献。它几乎是凭借一己之力,开启了自然语言处理的“预训练嵌入”时代,证明了从大规模无标注文本中学习语义表示的可行性和巨大威力。后续的 GloVe, fastText, ELMo, 乃至 BERT 等更强大的模型,可以说都是站在了 Word2Vec 这位巨人的肩膀上。