一文看盡各種 NLP 任務

作者: 龔俊民 (暱稱: 除夕)

學校: 新南威爾士大學

單位:Vivo AI LAB 算法實習生

方向: 自然語言處理和可解釋學習

知乎: https://www.zhihu.com/people/gong-jun-min-74

前言:之前我們講了很多與語音處理有關的任務,這次我們來講和自然語言處理相關的任務。NLP 任務大體可以分成兩大類,一種是文本序列到文本序列,比如機器翻譯,文本風格遷移等,另一種是序列到類別,比如情感分類,實體命名識別,主題分類,槽位填充等。

NLP 這個詞的用法有點模糊。Language 指的一般是人與人溝通時用的語言。因此 Natural Language 可以是文字也可以是語音。因此語音相關的技術,也應該算是 Natural Language 的範疇。但不知道爲什麼,一般我們在將自然語言處理的時候,指的都是文字處理相關的技術。而語音生成,語音分類和語音的風格轉換,卻被分成語音處理了。自然語言處理的應用非常廣泛。儘管其變化多端,但無非是以下幾種任務的變體。

輸入文字輸出類別

文本到類別可以分成兩種。一種是輸入序列輸出代表這整個序列的類別,如情感分類。另一種是輸入序列輸出序列上每個位置的類別,如實體命名識別。它們都可以接一個 LSTM 來獲取序列的上下文標註,後面再接一個 MLP 做線性映射,再用 sigmoid 或 softmax 來輸出類別。

文本到文本則傾向於用 Seq2Seq 模型,Encoder-Decoder 架構,中間需要用 attention 來對齊。對於有些輸入文字和輸出文字內容有很多重複的任務,比如文本摘要,拼寫檢查,語法糾錯,標題改寫這類任務,我們還需要在中間加入複製的能力。比如 pointNet 和 CopyNet。

如果輸入的是多個序列要怎麼辦呢?我們有大概兩種可能的解法。一種是把兩個序列,分別用兩個模型去做編碼。再把它們編碼後的嵌入,丟給另一個整合的模塊,去得到最終的輸出。有時,我們也會在兩個模型之間加 Attention,確保二者的編碼內容能互相意識。近年來比較流行的做法是直接把兩個句子連接起來,中間加一個特殊的字符,如 BERT 裏面的 ,來提示模型去意識到這是兩個句子的分隔符。接起來的序列丟給模型後,就可以直接預測下游任務。

雖然 NLP 的任務千變萬化,但根據模型的輸入輸出可以分成幾個大類。模型的輸入可以分成一個序列和多個序列,模型的輸出可以分成整個序列一個類別,每個位置都有類別,是否需要複製輸入,還是要輸出另一端文本。除了這些以外,還有一些例外,比如 Parsing 和 Coreference Resolution。

Part-of-Speech (POS) Tagging 詞性標註 需要我們標記出一個句子中的每個詞的詞性是什麼。對應輸入一個序列,輸出序列每個位置的類別任務。

中文分詞。英文詞彙有空格符分割詞的邊界,但中文中,卻沒有類似的方式來區分,所以我們需要中文分詞。在一個句子中找出詞的邊界有時並不是一個簡單的問題,所以也需要模型來做。一般中文分詞是對句子中的每個字的位置做二分類。如果標註爲 Y,表示這個字是詞彙的結尾邊界,如果標註爲 N,表示這個字不是詞彙的結尾。到了下游任務,我們就可以利用分好的詞來作爲模型輸入的基本單位,而不一定用字。但是否有必要用詞表徵來替代字表徵還是一個值得探究的問題。因爲 BERT 在處理中文的時候,它已經不是以字爲基本單位了。它很有可能已經自動學到了分詞這件事。因此輸入要不要用詞表徵倒顯得無關緊要。但 BERT-wwm 的實驗表明,預訓練過程中,讓 BERT 要預測的隨機 MASK 掉的是一個分詞的 span 而不是單獨的字能表現更好。說明知道詞彙的邊界在哪裏,對語義的理解是非常重要的。

還有一些也會用來作爲自然語言理解的前處理的任務,比如說 Parsing。它的輸入是一個句子,輸出是一棵句法樹。它的輸出有時會被當作是額外的特徵,在接下來的任務中被使用到。

另一個也常來做前處理的任務叫指代消解 Coreference Resolution。模型需要把輸入文章中指代同樣東西的部分,找出來。比如文中,He 和 Paul Allen 指的就是同一個人。

接下來是摘要,它可以分成兩種。過去常用的是抽取式摘要。把一篇文檔看作是許多句子的組成的序列,模型需要從中找出最能熔鍊文章大意的句子提取出來作爲輸出。它相當於是對每個句子做一個二分類,來決定它要不要放入摘要中。但僅僅把每個句子分開來考慮是不夠的。我們需要模型輸入整篇文章後,再決定哪個句子更重要。這個序列的基本單位是一個句子的表徵。

隨着深度學習的近年流行,人們開始關注生成式摘要了。模型的輸入是一段長文本,輸出是短文本。輸出的短文本往往會與輸出的長文本有很多共用的詞彙。這就需要模型在生成的過程中有把文章中重要詞彙拷貝出來,放到輸出中的複製的能力,比如 Pointer Network。

輸入文字或語音可以直接輸出文字。爲什麼我們要做輸入語音輸出翻譯文字的翻譯模型呢?因爲很多語言比如說當地的一些方言,連文字都沒有。我們只能做語音到文字的對應。如果我們輸入輸出的語言都沒有文字,我們有機會做語音到語音的翻譯。對於機器翻譯領域來說,一個很關鍵的問題就是無監督學習。因爲世界上的語言有非常多,大約 7000 種語言。兩兩匹配大約有 7000² 對組合。我們現實中很難收集到所有的兩兩語言組合,這是不切實際的。因此無監督學習是很有必要的。模型通過看了一大段英文句子,也看了一大段英文句子,但沒有給出中文和英文的對應關係,卻能夠自動學會把英文轉換爲中文,把中文轉換爲英文。

還有語法改錯任務,也是文本序列到文本序列。考慮到輸入和輸出有很多字是重複的,我們考慮用一些複製機制,讓模型把沒有錯的詞彙保留下來。這種語法改錯任務其實還可以更進一步簡化。輸入是一個序列,輸出是該序列上每個位置的類別標註。標註類型包括是要保留複製,還是要修改刪除。

序列到類別則包括商品評論情感分類。句子中可以同時包括正面的詞彙和負面的詞彙,模型需要根據上下文學到語境中更側重正面還是負面。比如雖然…… 但是這種轉折關係,"但是" 後面的詞彙會得到更多的側重。

立場檢測任務也是分類。它的輸入是兩個序列,輸出是一個類別,表示後面的序列是否與前面的序列站在同一立場。常用的立場檢測包括 SDQC 四種標籤,支持 (Support),否定 (Denying),懷疑 (Querying),Commenting (註釋)。

事實驗證也是文本分類的一種。模型需要看一篇新聞文章,判斷該文章內容是真的還是假的。假新聞檢測是典型的。有時從文章本身,我們人自己都很難判斷它的真假。因此有時我們還需要把文章的回覆評論也加入模型的輸入,去預測真假。如果一個文章它迴應第一時間都是否認,往往這個新聞都是假新聞。我們還可以讓模型看與文章有關的維基百科的內容,來增強它的事實審覈能力。

還有一類任務叫自然語言推斷 (NLI)。輸入給模型的是一個陳述前提,和一個假設,輸出是能否通過前提推出假設,它包含三個類別,分別是矛盾,蘊含和中性。比如前提是,一個人騎在馬上跳過一架破舊的飛機,假設是這個人正在喫午餐。這顯然是矛盾的。因爲前提推不出假設。如果假設是,這個人在戶外,在一匹馬上。則可以推理出蘊含。再如果假設是這個人正在一個比賽中訓練他的馬。則推理不能確定,所以是中性的。

再往下的任務是搜索引擎。模型的輸入是一個關鍵詞或一個問句和一堆文章,輸出是每篇文章與該問句的相關性。谷歌有把 BERT 用在搜素引擎上在語義理解上得到了提升。比如搜幫你做美容的人是否經常站着工作。沒有 BERT 之前,模型會利用關鍵詞 estheticians 和 stand-alone 做合併結果輸出。但有了 BERT 之後,搜出的結果會更傾向於文章語義的理解而非單純的關鍵字匹配。

https://web.stanford.edu/~jurafsky/slp3/25.pdweb.stanford.edu

問答系統一般都是基於檢索式的,會有如下幾個模塊:

Watson 之所以強大是因爲它把每個模塊部分做的非常的精細。光問題處理的答案類型它就有幾千個,使用了很多特徵。在候選答案生成中,它也利用了海量的文檔資源。輸出的候選答案之後,它還會根據證據做進一步的再排序,選出置信度最高的那個答案。

QA 問題的輸入是一連串句子,輸出是答案序列。搜索引擎只是做相關性檢索,但如果想要理解文檔篇章,還是需要機器閱讀理解。

當前主流的研究,其實並沒有讓模型吐出完整的答案。通常我們做的是抽取式的 QA,即給定一段文章和問題,模型需要輸出答案在文章段落中的位置。它是強制負責原文中的內容,而不是自主生成能基於文章回答問題,但不在文章中的答案。

對話機器人可以分成兩種,閒聊和任務導向型。閒聊機器人基本上都是在尬聊,有一堆問題待解決,比如角色一致性,多輪會話,對上下文保有記憶等。

當前的閒聊機器人需要有一致的人格,懂常識和領域知識,有同理心。

任務導向的對話機器人能夠協助人完成某件事,比如訂機票,調鬧鐘,問天氣等。我們需要一個模型把過去已經有的歷史對話,統統都輸入到一個模型中,這個模型可以輸出一個序列當作現在機器的回覆。一般而言,我們會把這個模型再細分成很多模塊,而不會是端對端的。

這些模塊通常包括自然語言理解 NLU,行動策略管理,以及自然語言生成 NLG。自然語言理解負責根據上下文去理解當前用戶的意圖,方便選出下一步候選的行爲,如執行系統操作,澄清還是補全信息,確定好行動之後,自然語言生成模塊會生成出對齊行動的回覆。

具體地說,NLU 會用來根據上下文來理解哪些信息是對當前任務重要的,比如訂房任務中的聯繫人,入住人數,入住日期等。理解出的信息,會變成一個類別作爲狀態,交給策略管理模塊去判斷當前還有哪些信息缺失,是否需要繼續詢問,還是說信息已經全部補全,可以執行命令。如果是要補充信息,則要根據缺失的信息去讓自然語言生成模塊生成問題。

NLU 模塊在任務型對話機器人中,通常會有兩個任務,一個是意圖識別,另一個是槽位填充。意圖識別需要弄清楚用戶在做什麼,是提供信息還是詢問問題,它是一個分類任務。假如確認了用戶是在提供信息,則槽位填充任務需要從用戶回覆文本中提取出關鍵信息,如時間,地點,對應的是入住時間還是退房時間等。但如果意圖識別出的是詢問問題,比如 9 月 9 號還有沒有空房,那 9 月 9 號就可能不是入住的日期。而是要根據當天有無空房間來進行判斷。槽位填充實質在做的與實體命名識別一樣。

除了之前三個模塊,語音助理中,再加上語音識別 ASR 和 語音合成 TTS 就成了完整的對話系統。

知識圖譜的構建簡化地去理解可以看作是實體提取和關係抽取。實體可以是人可以是物,也可以是組織機構,非常靈活。關係可以是人與人的關係,可以是謂語動作,也可以是企業之間的資本流動。信息抽取任務希望從海量文本中自動挖掘出實體關係三元組。這個問題其實非常地複雜。這裏只是簡單地講。

什麼是實體命名識別呢?其實命名實體它的內容並沒有非常清楚的定義。它取決於我們對哪些事情關心。隨着領域的不同,有所差異。一般的實體包括人名、組織和地名等等。但這不是完整的實體的定義。它取決於我們的具體應用。比如我們想讓機器讀大量醫學相關的文獻,希望它自動知道有什麼藥物可以治療新冠狀肺炎。這些藥物的名字,就是實體。它輸入的是一個序列,輸出的是序列上每個位置的類別。它就和詞性標註、槽位填充一樣。NER 常見的兩個問題是,名字一樣但指的是不同的東西,有多個標籤需要實體消歧;不一樣的名字指的卻是相同的東西,需要實體歸一化。總之,怎麼抽取實體是有非常多的相關研究。

假如我們知道如何從文本中獲得實體,接下來還需要知道它們之間的關係。比如哈利波特是霍格沃茨的學生。關係抽取的輸入是序列和抽取出的實體,輸出是兩兩實體之間的關係。它是一個分類任務。

過去往往是一個 NLP 任務設計一個模型。聽起來不是非常地智能。我們希望知道機器在各種任務上的一般表現。於是就有了一些標準和競賽,Benchmark。一個知名的競賽叫作 GLUE,主辦方集合了很多覺得重要的能理解人類語言有關的任務,希望我們的模型能去解這些任務,看看可以得到什麼樣的結果。GLUE 中任務分成三大類。第一大類是分類任務,包括語法錯誤檢測和情感分類。它們都是輸入是一個序列,輸出是一個類別。第二大類是輸入是兩個句子,輸出是二者的語義是否相似對應。第三大類都是自然語言推理相關的任務。輸入前提和假設,希望機器能判斷二者是否矛盾蘊含還是無關。GLUE 並沒有涵蓋所有的 NLP 類型問題。

有了 BERT 和它的好朋友以後,GLUE 指標都被打破稍微有些超出人類的表現了,所以需要新的 Benchmark,於是就有了 Super GLUE。它的任務大都是和 QA 比較有關係的,比如輸入一個段落,詢問一個一般疑問句,回答是 yes or no。或者是常識、邏輯推理。也有是把看一個段落,回答填空的。或者是給機器兩個句子,兩個句子中都有同樣的詞彙。看看機器能不能知道這兩個詞彙意思是一樣的還是不是一樣的。或者是給機器一個句子,句子上標了一個名詞和一個代名詞,希望機器能夠判斷二者是不是指代同一個東西。

除了 Super GLUE 以外,還有一個 Benchmark 叫 DecaNLP。它希望你用同一個模型來解決十個不同的任務。Super GLUE 雖然比 GLUE 增加了難度,但它大多數也還是分類任務,近年來也一直被刷榜。而 DecaNLP 中它的任務會更加困難,很多任務像摘要、翻譯需要輸出一個完整的句子。所有這些不同的任務,都可以看作是 QA 類型問題。怎麼把各式各樣的 NLP 任務看成是 QA 問題呢?比如翻譯就是給定一段要把 A 語言翻譯成 B 語言的問句,和一段文章,希望機器能把這段文章翻譯成指定語言。摘要情感分類也是類似的。谷歌的 T5 Text-to-Text 模型,就可以做類似的。把不同任務用統一框架集成起來的好處有兩個。一是可以評估一個模型的綜合表現,二是可以促進研究者尋找出更通用的自然語言處理模型。

後記:真心推薦訪問一下 DecaNLP 的鏈接去看一下它的 Benchmark。QA 框架統一各種任務非常值得模型來刷榜。這其實也是多任務學習的一個研究方向。

視頻:

https://www.youtube.com/watch?v=tFBrqPPxWzE&feature=youtu.be

Reference

李宏毅 《人類語言處理 2020》Overview of NLP Tasks 80 分鐘

何晗. 2019.《自然語言處理入門》. 中國工信出版社

雙生樹思維導圖

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/C9TzniWmEMd3guABhS3eAQ