前文我们谈到,计算机想要理解人类语言,首要步骤是把文本编码为数字。这一阶段的核心目标,尚且不是精准理解词语与句子的语义,而是探索如何将文本转化为数字形式,并尽可能保留其中蕴含的信息。时常有感,攻克一件难事,恰似自然语言处理这条漫漫长路:拾级而上,步步积累,不急不躁,才最终抵达当下人工智能的高峰 ------ 大模型。或许未来人工智能领域还会涌现更多新的高峰,而本篇,我们继续沿着脉络,梳理 NLP 的演进历程。
一、文本向量化
上文中我们已经发现了**统计方法的诸多不足:只统计词频,不理解语义,只看词是否出现,不看词序和上下文,向量高维稀疏,对短文本、同义词、多义词和稀有词都不稳定。**还有这么多的难题等着攻克呀!
分布式假设是NLP 词向量体系的理论基石,核心思想可概括为"观其伴而知其义",也就是说一个词的语义由它出现的上下文(周围的词)决定,上下文分布相似的词语义也相似。

(1)NNLM
我们先来看人们对语义方向的突破,统计方法的王N-gram顶到了"离散计数"的天花板,但也传递出了思想火花,再来回顾一下它的核心是"一个词出现的概率,只取决于它前面几个词",但人们很难继续通过"数频次"来获得更强的泛化能力。转折点出现在Bengio在2003年提出的NNLM,它的出现是一道曙光,为后续Word2Vec提供思想武器,我已经迫不及待了,但还是要先说说NNLM。
NNLM它仍然在做语言建模:给定前几个词,预测下一个词。 但它不再把词当成孤立符号,而是给每个词学一个低维、连续、稠密的向量。NNLM的大致流程是:
- 把钱N-1个词,查表成向量
- 拼接后送入隐藏层
- 通过softmax预测下一个词
- 训练过程中,词向量也被一起更新
这些流程非常重要,因为它带来了三个变化:词从One-hot离散符号,变成了连续向量。相似上下文会让相似词获得相似向量。即便某个词组合没在训练数据量出现过,模型也能靠向量相似性猜个大概。不过它也有个现实的问题,就是运算太慢,它的隐藏层有非线性变换,输出层还需要对整个词表做softmax,只要词表一大计算代价就非常高。但它的出现证明了神经语言模型加词向量这条路可行。
(2)Word2Vec
2013年Mikolv团队提出了Word2Vec,它继承发展了NNLM的思想,NNLM 证明了"用预测任务学词向量"是有效的,Word2Vec 把这件事做得足够简单、足够快,才让词向量真正普及。它做了几个关键的简化:
- 去掉深层非线性:网络极浅,几乎就是一个投影层加预测层;
- 放弃完整语言模型目标:不再追求完美的句子概率估计,而是专注学好词向量;
- 用层次 softmax / 负采样:避免每次都对几十万、上百万词做归一化;
- 滑动窗口训练:局部上下文足够捕捉很多语义关系。
具体包含两个算法,CBOW 是"用上下文预测中心词",Skip-gram 是"用中心词预测上下文"。
它们都不再像 NNLM 那样追求一个完整、复杂的语言模型,而是把"预测下一个词/周围词"当成学习语义的手段。

它们训练的目标不是为了拿来做预测,是借着 "预测" 这个任务,顺便把每个词练出一个向量,让意思相近的词向量挨在一起。比如"国王" 和 "女王" 向量距离很近,"猫" 和 "桌子" 离得很远。
但聪明的你又看出了端倪:一次训练完成后每一个词只有固定的词向量(情态词向量),还是无法解决"苹果"在水果语境是水果在科技领域是公司的问题,也就是无法做到一词多义。另外还它的上下文窗口有限,Word2Vec 只通过固定大小的滑动窗口学习词与词的关系,通常只有 5-10 个词。所以它很难建模跨句、跨段落的语义关联。比如前文提到的主体、否定、转折,到了后面可能就"断掉"了。
为什么会这样呢?其实道理很简单,共现不等于真正理解语义。 它学到的是"哪些词经常一起出现",而不是世界知识、逻辑关系或常识。比如它可能知道"苹果"常和"吃、甜、水果"共现,但并不真正理解苹果是可食用物体、有营养、会腐烂。所以接下来人们想要解决的问题变成了"如何通过语境动态计算词向量?"
二、小结
**我们再来回顾这句话:不同的词向量方法本质是在提升向量所涵盖文本的信息量。**BoW将信息量从"这段文档中有没有这个词",提升到"这段文本中有多少这个词"。TF-IDF把"出现次数"升级成了"重要性"。这样一来信息量从"这段文本中有多少这个词"提升到"这个词对这篇文档有多重要"。而N-gram 把信息量从"单个词的存在/频率/重要性",提升到了"局部词序列"层面。
NNLM 和 Word2Vec 把信息量从"离散符号的局部序列",提升到了"连续语义空间里的词"。
它不再只问"这个词和前面几个词是否一起出现",而是让每个词获得一个低维稠密向量,并在向量空间里把"猫"和"狗"放得近一些,把"猫"和"冰箱"放得远一些。
| 方法 | 信息量升级 |
|---|---|
| BoW | 从"有没有这个词" → "有多少这个词" |
| TF-IDF | 从"出现次数" → "对这篇文档多重要" |
| N-gram | 从"单个词统计" → "局部词序列/语序搭配" |
| NNLM | 从"离散符号" → "连续语义向量" |
| Word2Vec | 从"连续向量" → "可计算、可泛化、可大规模训练的语义空间" |
NLP的漫漫长路又迈进了一大步!
参考文章: