设想输入法收到“今天晚上吃”,要推荐后面的词。写规则当然可以:看见“吃”,就考虑食物;再找时间、地点和其他线索。
但还有一种朴素的办法:看看过去的文字里,“吃”后面经常跟什么。
假设我们有一小批已经分好词的句子,“吃”后面总共出现过十次词语,其中六次是“饭”,三次是“面”,一次是“药”。如果只根据这批假设材料估计,“饭”就排在前面。这里所有次数都是演示数据,不是实际输入法的统计结果。
这种方法没有先写出食物的完整定义,却已经可以做一个有限的预测。它带来的变化是:人不必为每次选择直接规定答案,可以规定怎样从数据估计答案的可能性。
一、把语言问题变成一次有条件的猜测
给下一词的不同候选分配概率,是语言模型的一种基本工作。概率在这里表示模型按已有材料估计的可能性,并不承诺接下来的人一定这样说。1
在我们的十次记录中,模型可以给“饭”六成、“面”三成、“药”一成。若每次都取概率最高者,它总推荐“饭”;若按这些概率抽取,偶尔也会选“面”或“药”。两者使用同一组估计,选择方式却不同。预测分数与最后采用哪个候选,是需要分开的两步。
这种最简单的统计如果只看全部词的总次数,会把经常出现的词到处推荐。某个词在全体材料里很常见,也不代表它适合接在“吃”后面。我们因此缩小比较范围:只统计紧接着“吃”的那些位置。
这叫利用条件。问题从“哪个词常见”变成“在前面是吃的情况下,哪个词常见”。把条件换成“服用”,候选的排序就可能不同。统计表开始对语境作出反应,虽然它看的语境还很短。
这种只看前一个词、预测下一个词的办法,通常称为二元语言模型。把前两个词与待预测词一起考虑,就是三元模型。这里的“二”“三”数的是这个小片段里总共有几个词,不是机器拥有几层理解。1
它的节约之处很明确:不必为整段历史单独准备统计,只保留最近几个词。代价也很明确:更早的信息会被这个近似方法忽略。小本子记得很快,翻页以前的嘱咐却可能已经不在当前这页。
二、没见过的菜,不能一律判成不存在
现在给演示材料增加一个问题:“今晚想吃馄饨。”词表认识“馄饨”,只是先前十条记录恰好没有出现“吃/馄饨”。如果机械地用次数除以总数,得到的概率就是零。
零在这里很严厉。它没有表达“我见得少,不太确定”,而是把这个接法完全排除了。假如用逐步概率评价整句话,其中一步为零,整条路径的乘积也会变成零。一个没上过这本菜单的菜,连参赛资格都拿不到。
研究者因此发展了平滑方法:从已见事件的概率里留出一些,分给没见过但可能出现的组合;也可以把较长条件的估计,与较短条件的估计结合使用。后者在具体搭配材料不足时,借助更宽泛的统计。1
仍用我们的例子。假设“吃/馄饨”没出现过,但材料里别的位置出现过“馄饨”。较短条件的统计可以给它一个非零基础,再与“吃”后的搭配信息结合。这样,它未必打败“饭”,却不再被宣布绝不可能。
这不会自动解决所有问题。给未见搭配分多少概率,需要有具体算法;分得太多,会稀释可靠的搭配,分得太少,又难以照顾新表达。平滑修补的是有限样本造成的过度确定,不能凭空提供一份完美的语言知识。
看更长的前文似乎能帮忙。例如“医生叮嘱按时吃”与“朋友邀请晚上吃”,对“药”和“饭”的支持不同。但条件越长,完全相同的记录越难再次出现。保留更多上下文,与获得足够统计,开始互相拉扯。
三、翻译也可以比较哪一种更有可能
1990 年,Peter Brown 等人在论文《机器翻译的统计方法》中讨论了一套英法翻译系统。他们使用双语材料估计翻译关系,并把候选句子的语言概率与翻译概率结合起来。原文也明确提到,计算资源和机器可读文本的发展,使这条路线更值得实际探索。2
回到本系列的翻译问题。设想输入一句外语,其意思是“我把书放在桌上”。候选译文可能包括“我把书放在桌上”和“书把桌上放在我”。如果只看两边用了哪些相近的词,第二句也占了不少位置;但按中文搭配估计,它的组织方式就很不自然。
语言模型负责提供一部分这样的约束。不过,单靠“中文读起来顺”,也会选出完全不相关的漂亮句子。“今晚的月色真好”很顺,却不能充当放书指令的译文。
于是还需要另一部分依据:这个中文候选与输入外语之间,是否存在数据支持的对应关系。原论文采用一种反向建模的办法,评价假定的目标句子产生所见源句的可能性,再与目标句子本身的语言概率结合。实际搜索寻找两项合起来较有利的候选。2
把这两项概括为“像不像目标语言”和“能不能解释输入”,可以帮助理解它们的分工,但翻译模型并不是一位真正核查含义的裁判。它也依赖假设与训练数据,因此两项分数高仍不保证意思完全正确。
为了从双语句子学习对应关系,还要考虑词的位置并不总是一一对应:一个词可能对应另一语言里的几个词,词序也可能变化。原论文用“对齐”表示这些对应安排,再把多种可能的安排纳入概率计算。对齐提供了可计算的路径,没有要求两种语言逐词站成同一排。2
规则时代要告诉程序什么时候交换位置;统计方法则可以从成对材料估计哪些对应与位置变化比较常见。人的工作仍然存在,只是更多转向模型设计、材料准备和搜索办法。
四、数得很多,也可能一直在数同一小块
统计语言模型的力量来自可积累的证据。更多适用材料,通常能让常见模式的估计更可靠;而不同领域的材料,可能给出不同偏好。用药说明里的“吃”和晚餐聊天里的“吃”,不能因为写法相同,就默认候选分布也相同。
但还有一个更根本的限制:如果把每个词当作独立编号,关于某个词的经验不一定能方便地转给另一个词。材料里反复出现“猫吃鱼”,不等于“狗吃肉”这一新组合也已经被记过。短片段统计能通过较短条件兜底,却没有因此获得完整的相似性表达。3
设想一个食堂记录员很熟悉“学生吃面”,新记录却写“研究生吃面”。人很容易利用这两类人的关系,认为原有经验可能有帮助;一个只认编号的计数表,则还需要说明究竟怎样共享。研究生在第一篇惹过切词麻烦,到这里又要为统计表补交身份证明。
后来的神经语言模型会把词表示成可以学习的一组数字,让不同词之间形成可利用的联系。不过,那不是下一张更大的频数表,具体怎样训练这组数字,需要新的步骤。
现在可以回答开头:机器能通过数词来猜下一词,是因为它从已有文本中估计条件概率,再按规定的方法选择候选。它既获得了一种从材料中积累经验的办法,也继承了材料稀少、领域变化与上下文过短的限制。
“饭”排第一,说明这批记录经常这样接。至于你今天究竟想吃什么,统计表还得允许你改变主意。
参考资料
- Daniel Jurafsky、James H. Martin,Speech and Language Processing,第3章 N-gram Language Models,2026 年8月草稿。作者发布的章节。
- Peter F. Brown 等,A Statistical Approach to Machine Translation,1990,Computational Linguistics。论文全文。
- Yoshua Bengio、Réjean Ducharme、Pascal Vincent、Christian Jauvin,A Neural Probabilistic Language Model,2003,JMLR。论文。