Chapter7-1_Overview of NLP Tasks
文章目錄
- 1 Introduction
- 2 Part-of-Speech(POS) Tagging
- 3 Word Segmentation
- 4 Parsing
- 5 Coreference Resolution
- 6 Summarization
- 7 Machine Translation
- 8 Grammar Error Correction
- 9 Sentiment classification
- 10 Stance Detection
- 11 Natural Language Inference(NLI)
- 12 Search Engine
- 13 Question Answering(QA)
- 14 Dialogue
- 14.1 Chatting
- 14.2 Task-oriented
- 15 Knowledge Extraction
- 15.1 Name Entity Recognition (NER)
- 15.2 Relation Extraction
- 16 Benchmarks
本文為李弘毅老師【Overview of NLP Tasks】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權,必定刪除。
文章索引:
上篇 - 6 Vocoder
下篇 - 7-2 BERT and its family - Introduction and Fine-tune
總目錄
1 Introduction
接下來的課程講述的內容就基本和語音無關了,都是講本文方面的東西了,這也是被大家稱作NLP(Natural Language Processing)的部分。講的泛一點,接下來的任務都可以概括為“輸入文本,輸出文本”和“輸入文本,輸出類別”這兩大類。
根據輸入和輸出序列不同的對應關系,又可以細分為下表所示的這些類別。當然,這么一看,如果沒有事先了解的話,根本不知道是在說啥,不急,接下來會一一介紹。因為這篇是Overview,所以只會講個大概,不會細講。
2 Part-of-Speech(POS) Tagging
首先來介紹以下POS Tagging,顧名思義就是給句子中的每個word做詞性的判斷,是動詞,還是形容詞,還是名詞之類的等等。
為什么要搞這個東西?這個其實一般會作為其他NLP任務的上游。比如,今天有一個句子輸進來了,叫做"John saw the saw”。這個句子里有兩個一模一樣的"saw",對下游的模型來說,也許"saw"就是"saw",它會把這兩個"saw"當作一個"saw"。但是,學過英文的都知道,這里的前一個"saw"是動詞"see"的過去式,后一個"saw"是一個名詞,表示鋸子。這個時候,如果在直接輸入下游模型之前,有一個POS Tagging模型告訴下游模型,等一等,這兩個“saw”的詞性是不一樣的,一個是動詞,一個是名詞,是兩個完全不同的東西。這樣一來,下游模型就懂了。
POS Tagging的前處理并不是必要的,因為現在一些比較厲害的模型,比如Bert,可能在訓練的時候,就自己已經學到這個東西了。
POS Tagging的輸入就是文本序列,輸出就是序列中每個token對應的詞性類別。
3 Word Segmentation
Word Segmentation就是分詞,也是一個前處理。在英文當中,我們有空格可以作為分詞的依據,但是在中文當中,我們就不知道怎么樣的算作一個詞,或者說怎么的叫做一個token。這個時候,就需要有一個分詞的前處理。分詞模型會輸出每個文字對應的是否一個詞的結尾。
Word Segmentation的輸入是文本序列,輸出是每個文字對應的類別(是否是詞的結尾)。
這個技術在如今也并不是必須的,厲害的模型也是可以自己學到這個的。
4 Parsing
Parsing又分為Constituency Parsing和Dependency Parsing,也是一種前處理。它有點特殊,它并不像之前講的那樣是“輸入文本,輸出文本”或“輸入文本,輸出類別”這兩大類中的一種。它輸入的是文本,輸出的是一個樹狀結構。這種在接下來的課程中會單獨拿出來討論。
5 Coreference Resolution
Coreference Resolution的中文叫做指代消解。不管是中文還是英文,都是比較少聽到的詞匯,如果沒學過的話,就不知道在說什么東西。它也是前處理的一種,其目的是,找出一個段落中,屬于同一個東西的短語或者詞匯。
比如,下面這段話中,指代消解需要知道下文中淺藍色部分的"Paul Allen",“He”,"he"和“Paul”都是指的同一個東西。它也需要知道黃色部分的"Lakeside School"和"their high school, Lakeside"是同一個東西。甚至,它需要知道,淺粉色部分的"Paul and Bill"和兩個"their"是同一個東西。
這個也不在之前講的兩種情況當中,會單獨拿出來講。
6 Summarization
Summarization就是摘要。這個任務是希望輸入一篇文章,然后輸出一段這段文章的摘要。摘要有兩種做法,一種叫做Extractive summarization,另一種叫做Abstractive summarization。
Extractive summarization就是像我們小學的時候做摘要一樣,從原文中抄幾句話下來,就是摘要了。輸入是一篇文章,模型要做的事情就是,輸出文章中的每個句子是不是摘要。這是很久以前的一種做法了,那個時候認為模型只能做到這樣,所以就這么做了。當然,大家心里都清楚,這怎么可能生成好的摘要。
簡而言之,Extractive summarization就是之前說的輸入文本序列,輸出每個token類別的模型,這里的token就是句子。
Abstractive summarization則是要高杰一些,有點像初高中考試時的概括全文主要內容的意思,要我們動腦子去自己組織句子了。不過,有一些成分還是會從原文中摘下來,只不過不適整句整句地抄了。這里抄一些內容是被鼓勵的,Pointer Network就是干這個的。
簡而言之,Extractive summarization就是之前說的輸入文本序列,輸出摘要序列的模型。
7 Machine Translation
Machine Translation(機器翻譯)是一個典型的seq2seq的模型,這里值得一提的就是,Machine Translation不光光是文本轉文本這樣,它也可以語音轉文本,甚至語音轉語音。為什么要搞這個?因為世界上其實有很多語言是連文字都沒有的。
另一點值得一提的就是,無監督的機器翻譯是目前一個主要的研究方向。因為世界上的語言太多了,我們很難收集到成對的翻譯資料。如果我們可以讓模型只看英文學一會,再接著只看中文學一會兒,然后模型自己就會自己找到對應關系,把英文轉成中文了,那就太好了。
8 Grammar Error Correction
Grammar Error Correction也是一個seq2seq的模型,它就是輸入一個錯誤語法的句子,輸出一個正確語法的句子的模型。我們可以很簡單地,就拿一些正確與錯誤配對的數據,硬train一發。但是這樣做,模型的任務是很難的。其實我們完全可以給模型一個更簡單的任務。比如下圖中的右半邊有兩個例子,我們可以看出,如果句子不是面目全非的那種,我們只需要把錯誤的單詞替換掉,或者在某個單詞后面加一個單詞即可,這樣模型就可以變成去給每個單詞做分類,分為“正確”,“替換”,“追加”這三類,然后再去修改。
9 Sentiment classification
情感分類是典型的序列分類任務,它要做的事情就是評價一段話是好評還是差評,常常被用來分析用戶的評論。輸入是一段文本序列,輸出是一個類別。
10 Stance Detection
Stance Detection就是立場檢測,它要做的事情就是檢測兩個句子的立場是否是相同的。比如下面有人發了“李弘毅是個型男”這樣一條推文,如果回復中有人說“他只是個死丑酸宅”的話,那么這兩句話的立場就不一樣了。立場可以分為四種,分別是“Support”,“Denying”,"Querying"以及“Commenting”,簡稱為(SDQC)。
這個技術常被用在Veracity Prediction(真實性預測)當中。比如今天有一條推文,我們不能馬上知道這條推文的真實性,但是,如果推文小面的很多回復都是在“Denying”它的,那么這就很有可能是一條假消息。我們在預測時,也可以加入Wikipedia的內容,用來輔助模型判斷。
總的來說,都逃不過輸入是多個文本序列,輸出是一個類別。
11 Natural Language Inference(NLI)
NLI就是自然語言推理,它要做的一件事情就是,給一個前提,再給一個假設,模型要判斷在這個前提下,輸入的假設是否成立。這看似是一個很難的問題,但是從一個宏觀的角度來說,就是給模型輸入一個前提和一個假設,然后模型做一個分類,判斷是"矛盾",“蘊涵"還是"中立”。
12 Search Engine
搜索引擎現在也慢慢把深度學習的技術融入進去了。之前的搜索引擎都是基于的關鍵詞匹配,對于英文中一詞多義的情況就處理的不是很好。但有了深度學習模型之后,就可以了解到語義了。從宏觀上來講,也就是輸入搜索的句子和文章,輸出句子和文章的相似度,然后按相似度排序。
13 Question Answering(QA)
QA在沒有深度學習之前就有了,比較有名了就是IBM的Watson,它們都是基于一些傳統的機器學習模型去做的。Waston在做QA時的步驟是,先對輸入的問題進行前處理,把問題分到一個很小的類別當中,然后根據類別和問題從數據庫中去找備選答案,找到備選答案之后,對答案進行相關性的評分,最后把這些備選答案合并和排序,得到最終答案。整個過程是相當復雜的。
但有了深度學習之后,我們要做的其實就是輸入問題和知識庫,然后輸出一個答案。這里的知識庫是我們把問題輸入搜索引擎之后得到的,就像程序員編程的時候一樣。模型會過濾調一些無關的內容,然后整合得到最終的答案。不過,這個其實在今天還是有很多路要走的一個問題,并沒有事先到這么智能。
今天我們能做的,也許就只能是輸入一個問題和一篇文檔,答案是在文檔中可以找到的,最后輸出的是答案在這個文檔中的位置。這么一看,一下子可以看出我們距離QA的設想還有多遠的路要走。
14 Dialogue
對話可以分為聊天型和任務導向型的。
14.1 Chatting
聊天機器人很善于尬聊,李老師在課堂上展示了以下他和cleverbot的聊天紀錄,可以看出,聊天機器人還是可以知道之前聊了些什么的。聊天的模型就是把當前說的話和歷史聊天紀錄一起丟給模型,然后模型會吐出一個回復。我們希望模型可能還要有一些個性,針對不同的人,說話時不一樣的;有一些同理心,可以安慰安慰人;有知識,可以回答我們的一些疑惑。
14.2 Task-oriented
任務導向型的對話,其實就是我們日常生活中越來越普遍的服務型聊天機器人。我們會限制機器人回復的內容,這個回復的內容統稱為Action。比如如果時酒店的訂房機器人,它的Action可能就是"問好",“詢問入住日”,“詢問退房日”等等。我們會把歷史的聊天紀錄喂給模型,然后這個模型會輸出對應的Action應該是哪個。得到Action之后,還會把Action丟給NLG模型,讓它生成對應的回答。如果時比較簡單的場景,我們完全可以用規則寫死,但是場景復雜的話,我們是希望用深度模型來解決這個問題的。
這里用來輸出Action的Model,往往用到的是Policy & State Tracker。State就是一個來記錄當前狀態的東西,比如下圖中的訂房示例的話,我們會有一些信息要模型去填出來,模型會根據當前的聊天進度來更新這個state的表格,然后Policy的模型會根據當前的state來決定接下來的action是什么。
輸入State Tracker的內容往往要經過Natural language understanding(NLU)。NLU要做的有意圖分類和填槽。意圖分類就是判斷當前說的話是提供信息,還是詢問之類的。填槽就和我們之前說到的POS Tagging很像了,就是輸出輸入句子的每個token對應的slot是什么。然后再把這些信息交給State Tracker去處理。
整個任務導向型的對話系統可以用下圖來概括。整個過程,可以看到,用了很多模型,不過在今天,也是有end-to-end去做的可能性。
15 Knowledge Extraction
Knowledge Extraction要做的一件事情就是構建知識圖譜(Knowledge Graph)。比如我們今天有一大堆的資料,我們要先從這堆資料當中抽取一些entities,entity可以理解為東西,然后再根據資料給有關聯的entities之間畫上relation。
當然,這么說其實把整個過程說成Extract Entity和Extract Relation這兩步是簡化了很多很多的,這個再之后的課程中會細講。
15.1 Name Entity Recognition (NER)
NER要做的事情就是和POS Tagging和Slot Filling差不多的事情,給一段文本,然后給文本中每個token打標簽,比如Harry Potter就是People,Hogwarts就是organizations等等。這里的entity的種類是可以根據我們關心的內容去改變的。
當然,實際情況下,某個同樣的東西可能有多個名字,同樣的名字也可能指向不同的東西。要解決這個問題就要用到一個叫做entity linking的技術了。這個在之后的課程再講。
15.2 Relation Extraction
Relation Extraction就是一個分類的問題。我們會事先定義好有哪些relations,然后輸入我們兩個entities和與這兩個entities相關的句子,得到最終的relation。類別中還要有一個叫做"none"的,因為有些entities雖然在同一段句子中出現,但是它們是沒有關系的,這個就要看模型的能力了。
16 Benchmarks
為了指導機器到底理解到人類的語言到了怎樣的程度,就有了很多的Benchmarks。比較權威知名的有Glue,Super Glue和Decanlp。這里只是提一下,不細講。
總結
以上是生活随笔為你收集整理的Chapter7-1_Overview of NLP Tasks的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 309: 一个很清晰的
- 下一篇: 面向对象4大特性的作用