从文字到行动 / 01 OF 20

“研究生命起源”,怎么冒出了一个研究生?

NLP、Agent与世界模型的20段故事
资料核查截止 2026年9月7日 · 正文约 2,234

设想你给一个文字处理程序输入了六个字:

研究生命起源

你想讨论生命从哪里来。程序处理完,交出的结果却是:

研究生/命/起源

生命起源还没研究,一位研究生先被分配了出来,旁边孤零零地站着一个“命”字。

程序没有漏字,也没有认错字。六个字按原顺序排着,问题只出在两道分隔线上。你希望它得到的是:

研究/生命/起源

这两种切法,足够让后面的处理走向不同方向。如果下一步是按词查翻译词典,程序拿着“研究生”去查,得到的就会是一个人的身份,原本表示动作的“研究”已经不在了。

计算机能够保存、显示每个汉字,为什么还会在这里出错?

因为认出有哪些字,与判断哪些字应该组成一个词,是两件事。要找出这位研究生怎么来的,得看看程序究竟按什么办法切词。

一、电脑收到的是字,工作却可能要按词做

中文平常不在每个词之间留空格。“研究生命起源”写在纸上,没人觉得少印了什么。但如果要求程序逐词查询、统计或翻译,它就必须确定:应该先取“研究”,还是先取“研究生”?

把连续文字划分成词的过程,就叫分词。

为什么不干脆一个字一个字处理?当然可以这样设计系统。但如果当前工作明确要按词进行,就不能把字和词混为一谈。查“生命”的意思,和分别查“生”“命”的意思,并不是同一次查询。两个字的解释堆在一起,也不会自动拼成一个词的解释。

在许多按词工作的传统中文处理系统中,分词因此处在前面的环节。后面的翻译程序即使十分认真,也可能认真地翻译一位原文里并不存在的研究生。错误已经装进了它收到的材料。2

这也解释了分词在这段技术史中的位置:它先为按词查询、统计等工作准备输入。后来的系统可以采用不同文本单位,但在眼前这个查词任务里,边界没定好,后续再精巧也可能先查错对象。

于是,一个很自然的方案出现了:既然要找词,给程序一本词典不就行了吗?

二、词典里都有,反而更难选了

继续这个设想。为了看清操作,我们给程序准备一份只收六个词的小词表:

研究、研究生、生命、命、起源、招生

再规定一条办法:从左往右处理,每到一个新位置,都选词表里能够匹配的最长词。选好后,跳过这些字,接着处理剩下的部分。若一个词也找不到,就暂时把当前这个字单独留下,再往后走。

这叫正向最大匹配。“正向”表示从左往右,“最大”指的是优先选择更长的匹配结果。它是词典分词中的一种经典办法。2

现在把“研究生命起源”交给它。

第一步,从“研”字开始查。词表里既有两个字的“研究”,也有三个字的“研究生”。按照最长优先,程序选中“研究生”。

第二步,剩下“命起源”。词表没有“命起源”或“命起”,但有“命”,于是取出“命”。

第三步,剩下“起源”,正好也在词表里。处理结束。

结果就是开头那位研究生。每一步都遵守了规则,没有一步检查整句话是不是还在讨论生命。

这种经典词典方法,把“找不到词界”的问题缩成了“在已有候选中按长度选一个”。它为什么值得采用?试试同一词表里的另一句话:

研究生招生

从左边选“研究生”,再选“招生”,这次就符合原意。较长的已知词有时确实应该保留完整,不能总把它拆散。最长优先给了程序一个明确、容易执行的选择办法,也省去了在每个位置反复比较整句切法的麻烦。

“研究生”在词典里合法,在“研究生招生”里也合适;到了“研究生命起源”里,它却占用了本该留给“生命”的那个“生”。一个词局部匹配成功,并不能保证后面仍然切得合适。

三、删掉研究生,问题也不会毕业

最直接的修补,是把“研究生”从词表里删除。

再按原规则处理“研究生命起源”:第一步只能选“研究”,接下来选“生命”,最后选“起源”。结果对了。

可是,再处理“研究生招生”,程序先取“研究”,剩下的“生”在词表里找不到,只好按约定单独留下,最后取“招生”。于是得到“研究/生/招生”。为了修好生命起源,我们把招生简章切坏了。

那就把“研究生命”整个收入词表,让它抢在“研究生”前面?程序确实会优先取出这四个字,但结果变成“研究生命/起源”。如果我们的目标是分出“研究”和“生命”这两个词,问题仍未解决。

这也说明,补词典和处理歧义承担着不同的工作。缺少一个新的人名、地名或专业词,可以考虑补进去;两个已知词争用同一个字,就还需要选择依据。

到这里,需要改变的是选择办法:保留“研究”和“研究生”两个候选,再寻找理由决定这里该选谁。后面的字、相邻词怎样搭配,都可能提供线索;但线索具体如何变成程序的决定,还需要另外设计,不能只对它说一句“结合上下文”。

真实研究也碰到了扩充词表之外的问题。1996 年,Wong 和 Chan 研究如何给识别后的文字分词时,把最大匹配和统计信息结合起来:先按词典切;遇到某些留下单字的情形,再比较相邻片段的其他组合。原先一次定下来的切法,获得了局部复查的机会。1

这不是说见到单字就该重切。“命”可以独立成词,“生”也可以出现在别的表达里。单字在那种方法中是触发复查的线索,选择结果还要依靠它使用的统计依据。只换成“尽量别留下单字”,也不过是把最长优先换成了另一条可能误判的规则。

我们的两个例句说明了为什么需要额外依据,却不能证明某一种后续方法已经解决了所有歧义。词典还可以继续使用,只是词长不该独自决定每一次切分。

四、两种切法,也可能指着同一个人

还有一种分歧,不能全算在程序头上。2003 年的首届国际中文分词评测报告指出,研究者使用着不同的切分标准;报告还提到,此前国内评测中,“毛/泽东”与“毛泽东”都曾被允许作为结果。前者把姓和名分开,后者保留整个人名。3

人还是同一个人,词的边界却不同。这与把“生命”里的“生”挪给“研究生”有区别:一边是采用何种标注约定,一边是在本篇指定含义下切坏了词。要比较程序,先得说明目标切法遵循什么标准。2003 年那次国际评测就分别按对应标准严格评分,不能遇到错误再临时换一套答案。3

分词开始接受共同评测时,问题也从“这次切得顺不顺眼”,变成了“按事先约定的目标,能处理多少未见过的文本”。否则,研究生刚被误切出来,程序又替自己改了评分标准,招生与毕业一条龙办理,错误反倒无处登记。

回到开头,那位研究生是被“最长优先”的规则切出来的。词典给了程序候选,规则替它过早作了决定;删词能救回一句生命起源,却又损坏了招生简章。要处理这种冲突,程序还得利用词长之外的依据。

即使我们已经得到“研究/生命/起源”,翻译也只拿到了准备好的材料。这三个词该选什么译法、怎样排列,又是下一道问题。

研究生可以留在招生简章里了。翻译程序还不能下班。

参考资料

  1. Pak-kwong Wong、Chorkin Chan,Chinese Word Segmentation based on Maximum Matching and Word Binding Force,1996,COLING。论文全文
  2. Nianwen Xue(薛念文),Chinese Word Segmentation as Character Tagging,2003,Computational Linguistics and Chinese Language Processing。论文全文
  3. Richard Sproat、Thomas Emerson,The First International Chinese Word Segmentation Bakeoff,2003,SIGHAN。评测报告全文