close
第九章 自然語言處理專案案例
第九章簡介
本章介紹NLP中常用的模型及任務實現,模型主要包括RNN、LSTM、Transformer、BERT和GPT,任務方面包括情感分析、文本分類、機器翻譯、命名體識別、QA問答、文章續寫。
9.1 NLP基礎概念
NLP任務不同於CV任務,它存在更多難點,例如
- 資料表示:NLP任務處理的是文本資料,需要將自然語言文本轉化為電腦可處理的形式,即如何把字串變為數值資料,常用的有詞嵌入(Word Embedding),而CV任務處理的圖像,天然是數值形資料
- 上下文依賴:文本具有豐富的上下文依賴性,單個詞或短語的含義可以依賴于其周圍的上下文,這使得NLP任務在理解和處理上更具挑戰性。
- 長期依賴:文本序列可能非常長,並且存在長期依賴性,需要模型能夠捕捉長距離的上下文資訊
- 多義性和歧義性:語言中存在多義詞和歧義性,需要根據上下文來進行準確理解和推斷。
由於NLP任務存在諸多難點,因此在正式開始前,需要對NLP基礎概念進行說明。
首先介紹NLP資料處理基礎流程,然後介紹各式各樣的NLP任務,最後總結NLP基礎概念名詞
NLP任務處理流程
以電影影評文本分類為例,流程可分為以下幾個步驟:
- 數據清洗和預處理:去除無關字元、標點符號、HTML標籤、去除停用詞等,目的是得到具備真實語義的文本序列。
- 分詞:將文本序列劃分為“具備獨立語義“的詞元(token),每個token是基本單位。英文中通常用空格可區分,而中文常需要特定的分詞方法。例如,“這電影不錯。”可劃分為["這", "電影", "不", "錯", "。"],或者將每個字元劃分,["這", "電", "影", "不", "錯", "。"]。具體要如何分詞,這需要根據任務以及模型的能力決定,對於BERT這樣的模型,或許以及學會了分詞、組詞的能力,只需要逐個字輸入即可。
- 構建詞表:詞表(Vocabulary)是個字典,作用是將詞元(token)映射到整數索引,例如[('', 0), ('the', 1), ('i', 2), ('and', 3)...]。詞表將文本資料中的詞元(token)映射為對應的識別字(通常是正整數),然後使用詞嵌入模型將這些識別字轉化為對應的詞向量表示。
- 詞嵌入:模型運算需要的是數值型資料,因此需要一個映射,將字元映射到向量,這個向量可理解為特徵向量/詞向量,這個映射過程稱為詞嵌入(word embedding)。詞嵌入是個複雜問題,需要的約束較多。例如,語義相近的詞元(token)的特徵向量要接近,即余弦距離要小。目前常採用已經預訓練好的詞嵌入模型,如word2vec, GloVe, FastText等。
- 演算法模型:NLP模型通常是序列模型,即可處理多個詞向量輸入,然後根據任務類型進行輸出,如文本分類則最終輸出一個分類概率向量,翻譯任務則輸出一些列分類概率向量,向量個數是文本單詞/詞元個數,概率向量的長度是詞表大小,即把單詞的輸出轉換為單詞分類,只能在詞表中選一個最有可能詞進行輸出。
NLP常見任務
與CV任務不同,NLP任務繁多,需要歸納總結,逐個分析。
下面借助台大李宏毅老師2021年NLP課程的內容,梳理NLP主要內容。
詳細內容參見:http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
NLP任務細分有十多種大類,小類有幾十種,但整體歸納下來可概括為兩種類型,分別是seq2cls和seq2seq。
- seq2cls:輸入是序列,輸出是類別,根據輸出數量又可分序列級分類和token級分類。文本分類就是序列級,詞性標注就是token級。
- seq2seq:輸入是序列,輸出也序列,例如機器翻譯、文章摘要、問答系統、閱讀理解等任務都是seq2seq的。
下面對常見的NLP任務進行一句話概括。
- 詞性標記,Part-of-Speech(POS) Tagging:seq2cls, 為每個token輸出一個類別,在早期NLP模型中,作為預處理,將詞性和文本輸入到下游模型中,期望通過詞性資訊提升模型能力。
- 分詞,word segmentation:seq2cls,將文本序列切分開,英文有空格進行切分,中文則需要分詞,文本序列切分為多個token。
- 指代消解,coreference resolution:將同一個東西(entity)的不同表達識別出來,給下游任務額外的提示資訊。
- 情感分析,sentiment classification:seq2cls,將整個文本進行輸出一個類別,常用於影評、社交媒體評論的分類。
- 輿情分析(立場檢測),Stance Detection:seq+seq 2 cls,常分為4類:Many systems use the Support, Denying, Querying, andCommenting (SDOC) labels for classifying replies。
- 機器翻譯, machine translation:seq2seq,很好理解,兩種語言之間的轉換,典型的seq2seq任務。
- 文本摘要,summarization:抽取式(Extraction-based),seq2cls。為原文中逐個token進行二分類,保留/不保留,最終輸出保留的token(單詞/句子)。
- 文本摘要,summarization:生成式(Abstraction-based),seq2seq。將原文進行理解、編碼,再經解碼器輸出總結的內容。類似機器翻譯,輸出的是NxM的概率向量矩陣。N是token數量,M是詞表中詞的數量。
- 問答系統:seq2seq,輸入問題,輸出答案,進階版問答系統還具備“記憶”能力,能根據上下文進行回答,這就變為對話系統。
- 命名實體識別,NER(Name Entity Recognition):seq2cls,將文本中的實體(如人名、地名、組織名)進行標注和分類,將每個token分類為實體類型或非實體類型。
- 關係抽取,Relation Extraction:seq2seq,旨在從文本中提取出實體之間的關係。輸入是包含兩個實體的句子以及兩個實體,輸出是描述這兩個實體關係的標籤或文本。
- 自然語言推理 Natural Language Inference (NLI):seq2cls,推理模型的文本輸入:premise(前提) + hypothesis(假設) ,模型輸出:對假設是否成立的判斷結果,矛盾/包含(可推得)/中立(contradiction/entailment/neutral)
NLP基礎概念
以上是對一個樣本推理過程涉及的幾個關鍵步驟進行了介紹,在訓練過程中組batch可能還會涉及連接詞、填充詞的預處理,這裡暫不作說明。
下面總結一些NLP中常用的概念名詞,便於理解任務。
- 詞表(Vocabulary):文本資料集中出現的所有單詞的集合。
- 語料庫(Corpus):用於NLP任務的文本資料集合,可以是大規模的書籍、文章、網頁等。
- 詞嵌入(Word Embedding):將單詞映射到低維連續向量空間的技術,用於捕捉單詞的語義和語法資訊。
- 停用詞(Stop Words):在文本處理中被忽略的常見單詞,如"a"、"the"、"is"等,它們通常對文本的意義貢獻較小。
- 分詞(Tokenization):將文本分割成一個個單詞或標記的過程,為後續處理提供基本的單位。
- 詞頻(Term Frequency):在給定文檔中,某個單詞出現的次數。
- 逆文檔頻率(Inverse Document Frequency):用於衡量一個單詞在整個語料庫中的重要性,是將詞頻取倒數並取對數的值。
- TF-IDF(Term Frequency-Inverse Document Frequency):一種常用的文本特徵表示方法,綜合考慮了詞頻和逆文檔頻率。
- 詞袋模型(Bag of Words):將文本表示為一個單詞的集合,忽略了單詞的順序和語法結構。
- N-gram:連續的N個單詞構成的序列,用於捕捉文本中的局部特徵和上下文資訊。
全站熱搜
留言列表