作者:Kavita Ganesan 翻譯:陳雨琳 校對:丁楠雅
本文4800字,建議閱讀20分鐘。
本文將介紹自然語言處理和機器學習中常見的文本預處理方法。
標籤:
https://www.kdnuggets.com/tag/data-preprocessing
https://www.kdnuggets.com/tag/machine-learning
https://www.kdnuggets.com/tag/nlp
https://www.kdnuggets.com/tag/python
https://www.kdnuggets.com/tag/text-analysis
https://www.kdnuggets.com/tag/text-mining
本文全面介紹了文本預處理,涵蓋了不同的技術,包括詞幹提取,詞形還原,噪聲消除,規範化,以及何時應該使用它們的示例和解釋。
By Kavita Ganesan, Data Scientist.
http://kavita-ganesan.com/
通過最近的一些交流對話,我意識到文本預處理是一個被嚴重忽視的話題。我接觸過的一些人提到他們的NLP應用程式的結果不一致,最後意識到他們只是沒有預處理文本或者他們使用了錯誤的文本預處理方法。
考慮到這一點,我想到要使大家了解文本預處理的真正含義,文本預處理的不同方法,以及估計可能需要多少預處理的方法。對於那些感興趣的人,我也為你做了一些文本預處理代碼片段。現在,讓我們開始吧
文本預處理代碼片段
https://github.com/kavgan/nlp-text-mining-working-examples/tree/master/text-pre-processing
什麼是文本預處理?
預處理文本指的是將文本轉換為可預測且可分析的任務形式。這裡的任務是方法和域的結合。例如,從推文(域)中使用TF-IDF(方法)提取頂級關鍵字。
任務=方法+域
一項任務的理想預處理可能成為另一項任務中最糟糕的噩夢。所以請注意:文本預處理不能直接從任務轉移到任務。
讓我們舉一個非常簡單的例子,假設你試圖發現新聞數據集中常用的單詞。如果你的預處理步驟包括刪除停用詞,因為其他任務中做過這一步,那麼你可能會錯過一些常用詞,因為你已經將其刪除了。實際上,這不是一種通用的方法。
停用詞
http://kavita-ganesan.com/what-are-stop-words/
幾種文本預處理技術
文本預處理有不同的方法。以下是一些你需要了解的方法,並且我會強調每一個方法的重要性。
轉換為小寫
儘管把所有文本數據轉換為小寫這一點通常被忽略,但它是文本預處理中最簡單,最有效的形式之一。它適用於大多數文本挖掘和NLP問題,並且可以在數據集不是很大時提供幫助,同時為預期輸出一致性帶來巨大幫助。
最近,我的一位博客讀者為相似性查找任務訓練了一個嵌入單詞的模型。他發現有著不同大小寫變化方式(比如「Canada」和「canada」)的輸入產生了不同類型的輸出,或者根本沒有輸出。這可能是因為數據集中出現了「Canada」這個詞的混合情況,並且沒有足夠的證據讓神經網絡能夠有效地學習不常見版本的權重。當你的數據集相當小時,這種類型的問題肯定會發生,而小寫是處理文本稀少問題的好方法。
嵌入單詞的模型
http://kavita-ganesan.com/gensim-word2vec-tutorial-starter-code/
以下是一個小寫預處理解決文本稀少問題的例子,同一個單詞的不同大小寫變化都映射到同一個小寫形式。
同一個單詞的不同大小寫變化都映射到同一個小寫形式
另一種小寫轉換非常管用的情況是,想像一下,你在查找含有「usa」的文檔,然而,查找結果為空因為「usa」被索引為「USA」。現在我們該怪誰呢?是設計界面的用戶界面設計師還是設置搜索索引的工程師呢?
雖然轉換為小寫應該作為標準操作,我也同樣經歷過保留大寫非常重要的情況。比如,當我們在預測原始碼文件的程式語言的時候。Java的語言系統跟Python很不一樣。小寫轉換使得兩者相同,導致分類器失去了重要的預測特徵。雖然小寫轉換通常都很有幫助,它也並不適用於所有的任務。
詞幹提取
詞幹提取是將詞語中的屈折變化(比如 troubled,troubles)減少到詞根(比如trouble)的過程。在這種情況下,「根」可能不是真正的詞根,而只是原始詞的規範形式。
詞幹提取使用粗略的啟發式過程來切掉單詞的末尾,以期正確地將單詞轉換為其根形式。 因此,「trouble」, 「troubled」 和 「troubles」實際上可能會被轉化為「troubl」而不是「trouble」,因為兩端都被切掉了(呃,多麼粗暴!)。
詞幹提取有不同的算法。最常見的算法,經驗上也對英語很有效的,是Porters算法。以下是Porter Stemmer進行詞幹提取的一個例子:
Porters算法
https://tartarus.org/martin/PorterStemmer/
對有屈折變化的詞進行詞幹提取的作用
詞幹對於處理文本稀少問題以及詞彙標準化非常有用。尤其是在搜索應用程式中取得了成功。其本質在於,假設你正在尋找「deep learning classes」,你想要搜索到提到「deep learning class」以及「deep learn classes」的文件,儘管後者聽起來不對。但是你的要求恰好是我們的目標。你希望匹配單詞的所有變體以顯示最相關的文檔。
然而,在我之前的大多數文本分類工作中,詞幹提取僅僅略微提高了分類準確性,而不是使用更好的工程特徵和文本豐富方法,例如使用單詞嵌入。
詞形還原
表面上的詞形還原與詞幹還原非常相似,其目標是刪除變形並將單詞映射到其根形式。唯一的區別是,詞形還原試圖以正確的方式去做。它不只是切斷單詞,它實際上將單詞轉換為實際的根。例如,「better」這個詞會映射到「good」。它可以使用諸如WordNet的字典或一些基於規則的特殊方法來進行映射。以下是使用基於WordNet的方法實現的詞形還原的示例:
WordNet
https://www.nltk.org/_modules/nltk/stem/wordnet.html
基於規則的特殊方法
https://www.semanticscholar.org/paper/A-Rule-based-Approach-to-Word-Lemmatization-Plisson-Lavrac/5319539616e81b02637b1bf90fb667ca2066cf14
使用WordNet實現的詞形還原的作用
根據我的經驗,在搜索和文本分類方面,詞形還原與詞幹還原相比沒有明顯的優勢。實際上,因為你選擇的算法,與使用非常基本的詞幹分析器相比,它可能要慢得多,你可能必須知道相關單詞的詞性才能得到正確的詞幹。本文發現,詞形還原對神經結構文本分類的準確性沒有顯著影響。
本文
https://arxiv.org/pdf/1707.01780.pdf
就我個人而言,我會保守地使用詞形還原。額外的開銷是否值得很難說。但你可以隨時嘗試查看它對你的效果指標的影響。
刪除停用詞
停用詞是一種語言中常用的詞彙。英語中的停用詞的例子是「a」,「the」,「is」,「are」等。使用停用詞背後的直覺是,通過從文本中刪除低信息詞,我們可以專注於重要的詞。
例如,在搜索系統的上下文中,如果你的搜索查詢是「什麼是文本預處理?」,你希望搜索系統專注於呈現談論文本預處理的文檔,而不是談論「什麼是「。這可以通過對所有在停用詞列表中的單詞停止分析來完成。停用詞通常應用於搜索系統,文本分類應用程式,主題建模,主題提取等。
根據我的經驗,刪除停用詞雖然在搜索和主題提取系統中有效,但在分類系統中顯示為非關鍵。但是,它確實有助於減少所考慮的特徵數量,這有助於保持一個較小的模型。
以下是一個刪除停用詞的示例。所有的停用詞都被一個啞字符「W「代替了。
原句= this is a text full of content and we need to clean it up
刪除停用詞後的句子=W W W text full W content W W W W clean W W
停止詞列表可以來自預先建立的集合,也可以為你的域創建自定義單詞列表。某些庫(例如sklearn)允許你刪除一定比例文檔中都出現的單詞,這也可以為你提供刪除停止詞效果。
停止詞列表
http://kavita-ganesan.com/what-are-stop-words/
自定義單詞列表
http://kavita-ganesan.com/tips-for-constructing-custom-stop-word-lists/
規範化
一個被高度忽視的預處理步驟是文本規範化。文本規範化是將文本轉換為規範(標準)形式的過程。例如,「gooood」和「gud」這兩個詞可以轉換為「good」,即其規範形式。另一個例子是將近似相同的單詞(例如「stopwords」,「stop-words」和「stop words」)映射到「stopwords」。
文本規範化對於噪聲多的文本非常重要,例如社交媒體評論,簡訊和對博客文章的評論,其中縮寫,拼寫錯誤和使用標準詞彙以外的詞(out-of-vocabulary words)很普遍。這篇文章通過對推文進行文本規範化處理的例子證明該方法能夠將情緒分類準確度提高約4%。
這篇文章
https://sentic.net/microtext-normalization.pdf
這是規範化之前和之後的單詞示例:
文本規範化的效果
請注意變體如何映射到相同的規範形式。
根據我的經驗,文本規範化甚至可以有效地分析高度非結構化的臨床文本,因為醫生的筆記總是沒有規範的。我還發現它對於主題提取很有用,其中近似同義詞和拼寫差異十分常見(例如topic modelling, topic modeling, topic-modeling, topic-modelling)。
高度非結構化的臨床文本
http://kavita-ganesan.com/general-supervised-approach-segmentation-clinical-texts/
主題提取
https://githubengineering.com/topics/
不幸的是,與詞幹和詞形還原不同,沒有一種標準的文本規範化方法。它通常隨任務不同而不同。例如,你將臨床文本規範化的方式可能與你對簡訊文本消息的規範化方式有所不同。
文本規範化的一些常用方法包括字典映射(最簡單),統計機器翻譯(SMT)和基於拼寫校正的方法。這篇有趣的文章比較了使用基於字典的方法和SMT方法來規範化文本消息。
這篇有趣的文章
https://nlp.stanford.edu/courses/cs224n/2009/fp/27.pdf
噪音消除
噪聲消除是指刪除可能干擾文本分析的字符數字和文本。噪聲消除是最基本的文本預處理步驟之一。它也是高度依賴域的。
例如,在推文中,噪聲可能是除了主題標籤之外的所有特殊字符,因為它表示可以描述推文的概念。噪音的問題在於它會在下遊任務中產生不一致的結果。我們來看下面的例子:
沒有去除噪音的詞幹提取
請注意,上面的所有原始單詞都有一些周圍的噪音。如果你對這些詞進行詞幹提取,你會發現結果看起來不太漂亮。他們都沒有正確的詞幹。但是,通過這個筆記本中寫的一些噪音清除,結果現在看起來好多了:
這個筆記本
https://github.com/kavgan/nlp-text-mining-working-examples/blob/master/text-pre-processing/Text%20Pre-Processing%20Examples.ipynb
除噪後的詞幹提取
在文本挖掘和NLP中,噪聲消除是你應該首先考慮的事情之一。有各種方法可以消除噪音。這包括刪除標點符號,刪除特殊字符,刪除數字,刪除html格式,刪除特定域的關鍵字(例如轉發的「RT」),刪除原始碼,刪除標題等。這一切都取決於你的工作域以及什麼文本為你的任務帶來的噪音。我的筆記本中的代碼片段顯示了如何進行一些基本的噪音消除。
我的筆記本中的代碼片段
https://github.com/kavgan/nlp-text-mining-working-examples/tree/master/text-pre-processing
文字豐富/增強
文本豐富涉及使用你以前沒有的信息來擴充原始文本數據。文本豐富為原始文本提供了更多語義,從而提高了預測能力以及可以對數據執行的分析深度。
在信息檢索示例中,擴展用戶的查詢以改進關鍵字的匹配是一種增強形式。像文本挖掘這樣的查詢可以成為文本文檔挖掘分析。雖然這對一個人沒有意義,但它可以幫助獲取更相關的文檔。
豐富文本的方式多種多樣。你可以使用詞性標註來獲取有關文本中單詞的更詳細信息。
詞性標註
https://en.wikipedia.org/wiki/Part-of-speech_tagging
例如,在文檔分類問題中,單詞「book「作為名詞和動詞會導致不同的分類,因為前者用於表示閱讀含義的上下文中,而後者用於表示保存含義的上下文中。本文討論了如何結合使用名詞和動詞作為輸入特徵來改進中文文本分類。
本文
http://www.iapr-tc11.org/archive/icdar2011/fileup/PDF/4520a920.pdf
然而,由於大量文本的可用性,人們開始使用嵌入來豐富單詞,短語和句子的含義,以便進行分類,搜索,總結和文本生成。在基於深度學習的NLP方法中尤其如此,其中字級嵌入層非常常見。你可以從預先建立的嵌入開始,也可以創建自己的嵌入並在下遊任務中使用它。
嵌入
https://en.wikipedia.org/wiki/Word_embedding
字級嵌入層
https://keras.io/layers/embeddings/
預先建立的嵌入
https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html
豐富文本數據的其他方法包括短語提取,你可以將複合詞識別為一個整體(也稱為分塊),使用同義詞和依賴詞解析進行擴展。
同義詞
http://aclweb.org/anthology/R09-1073
依賴詞解析
http://www.cs.virginia.edu/~kc2wc/teaching/NLP16/slides/15-DP.pdf
是不是所有的預處理都是必要的?
並不是,但如果你想獲得良好、一致的結果,你必須採用其中的一些方法。為了讓你了解最低限度應該是什麼,我把它分解為必須做,應該做和任務依賴型。在決定你確實需要之前,所有依賴於任務的步驟都可以進行定量或定性測試。
請記住,少即是多,應該儘可能保持你的方法簡潔。你添加的越多,遇到問題時你將需要剝離的層數越多。
必須做:
應該做:
任務依賴:
高級規範化(例如,解決詞彙外單詞)
刪除停用單詞
詞幹/詞形還原
文本豐富/增強
因此,對於任何任務,你應該做的最小值是嘗試將文本轉換為小寫並消除噪音。什麼樣的文本包含噪音取決於你的域(請參閱噪音消除部分)。你還可以執行一些基本的規範化步驟以獲得更高的一致性,然後根據需要系統地添加其他層。
一般經驗法則
並非所有任務都需要相同級別的預處理。對於某些任務,你可以儘量減少。但是,對於其他任務來說,數據集是如此嘈雜,如果你沒有進行足夠的預處理,最終結果將跟原始輸入同樣糟糕。
這是一般的經驗法則。這並不總是成立,但適用於大多數情況。如果你在一個相當普通的域有大量行文規範流暢的文本,那麼預處理並不是非常關鍵,你可以使用最低限度(例如,使用所有維基百科文本或路透社新聞文章訓練單詞嵌入模型)。
但是,如果你在一個非常狹窄的域進行工作(例如關於健康食品的推文)並且數據稀少且嘈雜,你可以從更多的預處理層中受益,儘管你添加的每個層(例如,刪除停用詞,詞幹提取,文本規範化)都需要被定量或定性地驗證為有意義的層。這是一個表格,總結了你應該對文本數據執行多少預處理。
需要的不同級別文本預處理:
我希望這裡的想法可以引導你為項目選擇正確的預處理步驟。記住,少即是多。我的一位朋友曾經向我提到他是如何通過拋棄不必要的預處理層來使大型電子商務搜索系統更高效,錯誤更少。
資源
https://github.com/kavgan/nlp-text-mining-working-examples/blob/master/text-pre-processing/Text%20Preprocessing%20Examples.ipynb
http://kavita-ganesan.com/tips-for-constructing-custom-stop-word-lists/
https://kavgan.github.io/phrase-at-scale/
參考資料
有關論文的最新列表,請參閱我的原始文章。
原始文章
https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=838611073&lang=zh_CN#Relevant-Papers
Bio:Kavita Ganesan是一名數據科學家,擁有自然語言處理,文本挖掘,搜索和機器學習方面的專業知識。在過去十年中,她曾在多個科技機構工作,包括GitHub(微軟),3M健康信息系統和eBay。
Kavita Ganesan
http://kavita-ganesan.com/about-me/
原版。 轉載許可。
原版
https://medium.freecodecamp.org/all-you-need-to-know-about-text-preprocessing-for-nlp-and-machine-learning-bc1c5765ff67
資源:
https://www.kdnuggets.com/education/online.html
https://www.kdnuggets.com/software/index.html
相關資料:
https://www.kdnuggets.com/2019/04/nlp-pytorch.html
https://www.kdnuggets.com/2019/03/building-nlp-classifiers-cheaply-transfer-learning-weak-supervision.html
https://www.kdnuggets.com/2019/03/beyond-news-contents-role-of-social-context-for-fake-news-detection.html
原文標題:
All you need to know about text preprocessing for NLP and Machine Learning
原文連結:
https://www.kdnuggets.com/2019/04/text-preprocessing-nlp-machine-learning.html
譯者簡介:陳雨琳,清華大學大二在讀,英語專業。專業學習之外喜歡學些數學、計算機類課程,被數據和模型的魅力所吸引,希望未來能往這個方向發展。道阻且長,行則將至。
本文轉自:數據派THU ;獲授權;
END
合作請加QQ:365242293
數據分析(ID : ecshujufenxi )網際網路科技與數據圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人群。