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、情感,甚至翻譯和問答——往往只需少得多的標註樣例。經典任務並沒有消失;它們變成了我們要求一個通用模型去做的事情。所以你今天學到的這些名字,不是該遺忘的歷史。它們是新模型至今仍被據以打分的考卷,也是你用來精確說出一個系統能做什麼、不能做什麼的詞彙。