JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

经典 NLP 任务

在聊天机器人之前,NLP 是一个由具体小任务组成的工具箱——给词打标签、找出名字、翻译、判断情绪、缩短文本。本文带你认识这五个经典任务,以及我们用来给其中两个打分的 BLEU 和 ROUGE。

从词到任务

在这一阶梯里,你已经把文本切成片段(分词),又变成数字(词向量嵌入),还看过模型学会预测下一个词(语言建模)。这些都是*能力*。本文讲的是*任务*——人们真正想让计算机对语言做的那些具体的事,远在任何人往聊天机器人里敲提示词之前就有了。几十年来,NLP 并不是一个大模型,而是一间摆满分门别类工具的作坊,每件工具只调校来干一件事。

既然如今一个大模型大多都能干,何必还管那些老任务?三个理由。第一,这些任务是整个领域定义「进展」的方式——各种基准、各类错误,以及你将听到的那套词汇(「实体」「跨度」「参考译文」)都来自它们。第二,许多老任务至今仍以经典组件的原样跑在生产环境里,因为它们便宜、快、且可审查。第三,把一个任务想透——什么才算正确答案、我们怎么打分——是判断一个炫酷演示到底能不能用的唯一办法。

给每个词贴标签:词性标注与命名实体识别

最简单的一类任务,是给每个词元贴上一个标签。词性标注POS tagging)判定每个词是名词、动词、形容词等等。这听起来稀松平常,直到你发现 “book” 在 “read a book”(读一本书)里是名词,而在 “book a flight”(订一张机票)里却是动词——正确的标签取决于上下文,而非单独那个词。词性标签曾是语法检查器、搜索引擎,以及几乎每条 NLP 流水线第一步的中坚。

命名实体识别NER)是同一种形状的问题,只是瞄准了最要紧的那些词:哪些跨度是人物、地点、机构、日期、金额?从 “Apple opened a store in Paris in 2015” 里,NER 抽出 *Apple*(机构)、*Paris*(地点)、*2015*(日期)。它支撑着简历解析、财经新闻抓取和病历处理——凡是需要从自由文本里掏出结构化事实的地方都用得上。POS 和 NER 都是序列标注sequence labeling)的例子:按顺序,每个词元配一个标签。

Tokens:  John   lives  in  New     York    .
POS:     NOUN   VERB   ADP NOUN    NOUN    PUNCT
NER:     B-PER  O      O   B-LOC   I-LOC   O
每个词元一个标签。B-/I-/O 方案标记一个实体跨度的开头(Begin)与内部(Inside),O 表示不属于任何实体——于是 “New York” 被标成一个两词的地点整体。

它们是怎么解的?历史上最重要的答案是隐马尔可夫模型及其后继者,它们把句子当作一条链,挑出最可能的标签*序列*,而不是孤立地猜每个词。现代系统用神经序列模型做同样的活,但框架——在一条链上做上下文感知的标注——没有变。诚实地说一句准确率:在干净的英文新闻文本上,词性标注能超过 97%,听着像是大功告成,然而那最后的 3% 藏的恰恰是最难、最有歧义的情形,而在推文、口语或其他语言上,准确率会陡降。

情感、翻译、摘要

并非每个任务都给词贴标签。情感分析sentiment analysis)读完一整条评论或推文,判定那份*情绪*是正面、负面还是中性。早期的做法简单到近乎尴尬——按一张词表数出正面词和负面词再相减——而这种粗糙的数词基线竟也常常出奇地管用。但它会栽在人类一眼就懂的地方:反讽(「真棒,又延误了」)、否定(「一点也不差」),以及一句话里夹杂的复杂情绪。情感分析很好地提醒我们:「含义」远不只是把词数一数。

机器翻译machine translation)是重量级选手。它的输出不是一个标签或类别,而是另一种语言里一整句全新的话。几十年来它依赖手写规则和逐词统计,造出了那种臭名昭著、生硬别扭的「翻译腔」。飞跃发生在研究者把翻译重新表述为把一个序列变成另一个序列之时——用编码器-解码器序列到序列学习:一个网络把源句读成一种含义表示,另一个网络再用目标语言把它写出来。

文本摘要摘要)把一篇长文档缩成一篇保留要旨的短文。诚实地讲有两种路数。*抽取式*摘要原封不动地复制最重要的句子——安全,但读起来磕磕绊绊。*生成式*摘要像人一样写出全新的句子——流畅,却容易凭空捏造源文里根本没有的细节,这种毛病我们如今叫作幻觉。搞清楚你手上是哪种路数,就能准确知道它会在哪儿出错。

怎么给一段翻译打分?BLEU 与 ROUGE

对词性标注,你只要数对了多少个标签就行——这就是准确率。可对翻译来说,并不存在唯一正确的句子,所以简单的匹配就失灵了。聪明的变通办法是 BLEU 分数BLEU),机器翻译的标准评分。BLEU 把机器的输出和一份或多份人工*参考*译文相比较,然后问:候选译文里有多大比例的词块,也出现在某份参考译文里?

那些「词块」就是 n 元组——单个词、词对、三连词、四连词。匹配单个词检验的是词汇;匹配更长的连串检验的是流畅度和语序。BLEU 把这些乘到一起,再加一个「过短惩罚」,免得模型靠只输出一个完美的词然后就停下来作弊。结果是一个 0 到 100 的数;越高越好,大致超过 40 通常就是一段真正不错的翻译。

摘要用的是一个同族指标,ROUGE 分数ROUGE)。关键的区别在于侧重:BLEU 偏向*精确率*(我产出的词里有多少是对的?),适合翻译;ROUGE 偏向*召回率*(本该出现的词里我覆盖了多少?),适合摘要——在摘要里,漏掉一个要点才是更大的罪过。同样是 n 元组重叠的思路,只是为不同的担忧做了调校。

为什么这间工具箱很重要——以及它通向何方

退一步看,一个规律浮现出来。每个经典任务都需要自己的数据集、自己的模型、自己的指标,还有自己的团队。一家同时做翻译、情感和搜索的公司,跑的是三套互不相干的系统。这就是你即将踏入的 transformer 时代之前的那个世界:有本事,却支离破碎,知识被锁在每一件狭窄的工具内部。还有一笔更隐性的成本——每个任务都需要成千上万条人工标注的样例,而制作这些样例既慢又贵。

接下来几篇指南要登场的大想法是:一个在原始文本上预训练过的模型,可以被温和地适配到*所有*这些任务上——标注、NER、情感,甚至翻译和问答——往往只需少得多的标注样例。经典任务并没有消失;它们变成了我们要求一个通用模型去做的事情。所以你今天学到的这些名字,不是该遗忘的历史。它们是新模型至今仍被据以打分的考卷,也是你用来精确说出一个系统能做什么、不能做什么的词汇。