- 基于NLP的內容理解
- 李明琦等
- 2526字
- 2024-05-14 11:05:27
1.1 語料與語料預處理
在正式講解文本特征表示方法之前,我們將簡單介紹語料是什么,如何處理語料以及如何構建語料庫,之后再循序漸進地介紹NLP中的文本特征表示方法。
1.1.1 語料和語料庫
語料是NLP任務的數據來源,所有帶有文字描述性的文本都可以看作語料。一個文本可以由一個或多個句子組成,其中每一個句子都可以稱為語料。
語料庫是存放在計算機里的原始語料文本或經過加工后帶有語言學信息標注的語料文本。為了方便理解,可以將語料庫看作一個數據庫,我們可以從語料庫中提取語言數據,并對其進行分析、處理。
實際上,語料庫有三個特征:一是語料庫中存放的是真實出現過的語言材料;二是語料庫是以計算機為載體承載語言知識的基礎資源;三是真實語料需要經過分析、處理和加工才能成為有用的資源。在人工智能的發展過程中,我們經常使用的語料庫有中文分詞語料庫、詞性標注語料庫、命名實體識別語料庫、句法分析語料庫、情感分析語料庫等。
1.1.2 語料預處理
原始文本無法直接用于模型的訓練,需要經過一系列的預處理,才能符合模型輸入的要求。語料預處理的方法主要包括語料清洗、分詞、詞性標注、去停用詞等,接下來依次展開介紹。
1.語料清洗
語料清洗即保留原始語料中有用的數據,刪除噪聲數據。在實際的應用場景中,特殊字符、不可見字符或者格式不正確的字符都不利于后續模型的訓練。常見的清洗方式有人工去重、對齊、刪除、標注等。
以下面的文本為例,該文本中不僅包含中文字符,還包含標點符號等非常規字符,這些字符對于我們來說都是沒有意義的信息,需要對其進行清洗。

對于上述情況,可以使用正則表達式對文本進行清洗,具體的Python實現代碼為:

清洗后的結果為:

除了需要清洗上述提到的各種形式的符號外,噪聲數據還包括重復的文本、錯誤、缺失、異常等,這些都屬于語料清洗的范疇。只有數據清洗得干凈,才能為模型的訓練掃清障礙。
2.分詞
分詞是指將連續的自然語言文本切分成具有完整性和語義合理性的詞匯序列的過程,而詞是語義最基本的單元。分詞是文本分類、情感分析、信息檢索等眾多自然語言處理任務的基礎。常用的分詞方法可分為基于規則和基于統計兩種,其中基于統計的分詞方法的樣本來自標準的語料庫。
例如這個句子:小明住在朝陽區。我們期望語料庫統計后的分詞結果是“小明/住在/朝陽/區”,而不是“小明/住在/朝/陽區”。那么如何做到這一點呢?
基于統計的分詞方法,我們可以借助條件概率分布來解決這個問題。對于一個新的句子,我們可以通過計算各種分詞方法對應的聯合分布概率,找到最大概率對應的分詞方法,即最優分詞。
到目前為止,研究者已經開發出許多分詞實用小工具,如表1-1所示。如果對分詞沒有特殊需求,可以直接使用這些分詞工具。如果想要語料中的一些特定詞不分開,可以設置自定義詞典。
表1-1 分詞工具總覽

(續)

3.詞性標注
詞性標注是指為分詞結束后的每個詞標注正確詞性,即確定每個詞是名詞、動詞、形容詞或其他詞性的過程。
詞性標注有兩個作用。一是消除歧義。一些詞在不同語境下或使用不同用法時表達的含義不同,比如在“這只狗狗的名字叫開心”和“我今天很開心”這兩個句子中,“開心”就代表了不同的含義。我們可以通過詞性標注對有歧義的詞進行區分。二是強化基于單詞的特征。機器學習模型可以提取一個詞很多方面的信息,如果一個詞已經標注了詞性,那么使用該詞作為特征就能提供更精準的信息。還是以上句為例,原始文本為“這只狗狗的名字叫開心”和“我今天很開心”,單詞在文本中出現的次數為[(這,1),(只,1),(狗狗,1),(的,1),(名字,1),(叫,1),(開心,2),(我,1),(今天,1),(很,1)],帶標注的單詞在文本中出現的次數為[(這_r, 1),(只_d, 1),(狗狗_n, 1),(的_uj, 1),(名字_n, 1),(叫_v, 1),(開心_n, 1),(我_r, 1),(今天_t, 1),(很_zg, 1),(開心_v, 1)],其中r表示代詞,d表示副詞,n表示名詞,uj表示結構助詞,v表示動詞,t表示時間詞,zg表示狀態詞。在這個案例中,如果不進行詞性標注,兩個“開心”會被看作同義詞,其詞頻被錯誤識別為2,這會為后續的語義分析引入誤差。此外,詞性標注還具有標準化、詞形還原和移除停用詞的作用。
常用的詞性標注方法可分為基于規則和基于統計兩種,如最大熵詞性標注、隱含馬爾可夫模型(Hidden Markov Model, HMM)詞性標注等。
4.去停用詞
人類在接收信息時,都會下意識地過濾掉無效的信息,篩選有用的信息。對于NLP來說,去停用詞就是一種類比人類過濾信息的操作。那什么是停用詞呢?停用詞實際上是一些對文本內容無關緊要的詞。
在一篇文章中,無論中文還是英文,通常會包含一些起到連接作用的連詞、虛詞、語氣詞等詞語。這些詞語并不是關鍵信息,比如“的”“吧”“啊”“uh”“yeah”“the”“a”等,對文本分析沒有太多實質性的幫助。刪除這些詞并不會對我們任務的訓練產生負面影響,反而會在一定程度上讓數據集的變小,較少訓練時間。
但是,停用詞的去除對我們的訓練任務來說并不總是有益的。比如我們正在訓練一個可以用于情感分析任務的模型,訓練影評為“The movie was not good at all.”,情感類別是負面;對該影評進行去停用詞操作后變為“movie good”。我們可以清楚地看到這部電影的原始評論是負面的,然而在去掉停用詞后,評論變成正向的了。對于該任務來說,去停用詞操作是有問題的。
因此,在對NLP任務的語料進行預處理時,我們應該謹慎地決定是否進行去停用詞操作,該去除哪類停用詞。目前常用的停用詞表有中文停用詞表cn_stopwords.txt,哈工大停用詞表hit_stopwords.txt,百度停用詞表baidu_stopwords.txt和四川大學機器智能實驗室停用詞表scu_stopwords.txt。對于英文數據來說,我們可以借助常用的刪除英文停用詞的庫,如自然語言工具包(NLTK)、SpaCy、Gensim、Scikit-Learn。
5.詞頻統計
詞頻統計即統計分詞后文本中詞語的出現次數,也就是該詞語出現的頻率,目的是找出對文本影響最大的詞匯,這是文本挖掘中常用的手段。統計詞頻可以幫助我們了解文章的重點內容,輔助后續模型的構建。比如我們可以統計《紅樓夢》中詞頻在前10的詞語,結果如表1-2所示。
表1-2 《紅樓夢》的詞頻統計

從表1-2中,我們可以清楚地發現,在《紅樓夢》中曹雪芹對寶玉、賈母、鳳姐、寶釵、王夫人等人物描述的篇幅最多,這幾個人物也是《紅樓夢》中的關鍵人物。通過詞頻的統計結果,我們可以很容易地掌握文本中的一些關鍵信息。