基於最近的一些對話,我意識到文本預處理是一個被嚴重忽視的話題。我接觸過的一些人提到他們的NLP應用程序的結果不一致只是意識到他們沒有預處理他們的文本或者他們的項目使用了錯誤的文本預處理。
考慮到這一點,我想到了解文本預處理的真正含義,文本預處理的不同方法,以及估計可能需要多少預處理的方法。對於那些感興趣的人,我也為你做了一些文本預處理代碼片段。現在,讓我們開始吧!
什麼是文本預處理?
預處理文本只是意味着將文本轉換為可預測 且可分析的任務形式。這裡的任務是方法和域的組合。例如,使用來自推文(域)的tfidf(方法)提取頂級關鍵字是任務的示例。
任務=方法+域
一項任務的理想預處理可能成為另一項任務中最糟糕的噩夢。請注意:文本預處理不能直接從任務轉移到任務。
讓我們舉一個非常簡單的例子,假設你試圖發現新聞數據集中常用的單詞。如果您的預處理步驟涉及刪除停用詞,因為其他任務使用了它,那麼您可能會錯過一些常用詞,因為您已經將其刪除了。實際上,這不是一種通用的方法。
文本預處理技術的類型
有不同的方法來預處理您的文本。以下是您應該了解的一些方法,我將嘗試強調每種方法的重要性。
統一為小寫字母
降低所有文本數據,儘管通常被忽略,但它是文本預處理中最簡單,最有效的形式之一。它適用於大多數文本挖掘和NLP問題,並且可以在數據集不是很大並且顯着有助於預期輸出的一致性的情況下提供幫助。
最近,我的一位博客讀者為相似性查找訓練了一個嵌入模型的單詞。他發現輸入資本化的不同變化(例如「加拿大」與「加拿大」)給了他不同類型的輸出或根本沒有輸出。這可能是因為數據集中出現了「加拿大」這個詞的混合情況,並且沒有足夠的證據證明神經網絡能夠有效地學習不常見版本的權重。當您的數據集相當小時,這種類型的問題肯定會發生,而小寫是處理稀疏性問題的好方法。
下面是小寫如何解決稀疏性問題的示例,其中具有不同情況的相同單詞映射到相同的小寫形式:
小寫非常有用的另一個例子是搜索。想像一下,您正在尋找包含「美國」的文檔。然而,沒有結果顯示,因為「美國」被索引為「美國」。現在,我們應該責怪誰?設置界面的UI設計者或設置搜索索引的工程師?
雖然小寫應該是標準做法,但我也有保留大寫的重要性。例如,在預測源代碼文件的編程語言時。System
Java中的單詞與system
python中的單詞完全不同。降低兩者使它們相同,導致分類器失去重要的預測特徵。雖然小寫通常很有用,但它可能不適用於所有任務。
詞幹提取
詞幹化是將詞語中的變形(例如麻煩,煩惱)減少到其根形式(例如麻煩)的過程。在這種情況下,「根」可能不是真正的根詞,而只是原始詞的規範形式。
詞幹使用粗略的啟發式過程來切斷單詞的末尾,以期正確地將單詞轉換為其根形式。因此,「麻煩」,「困擾」和「麻煩」這些詞實際上可能會被轉換為,troubl
而不是trouble
因為兩端被切斷(呃,多麼粗糙!)。
詞幹有不同的算法。最常見的算法,也稱為對英語有經驗效果,是Porters算法。以下是Porter Stemmer採取行動的一個例子:
詞幹對於處理稀疏性問題以及標準化詞彙量非常有用。我在搜索應用程序中取得了成功。這個想法是,如果你說你正在尋找「深度學習課程」,你也想要提出提及「深度學習課程 」以及「深度學習課程」的文件,儘管後者聽起來不對。但是你得到了我們的目標。您希望匹配單詞的所有變體以顯示最相關的文檔。
然而,在我之前的大多數文本分類工作中,僅僅略微提高了分類準確性,而不是使用更好的工程特徵和文本豐富方法,例如使用單詞嵌入。
詞形還原
表面上的詞形還原與詞幹非常相似,其目標是刪除變形並將單詞映射到其根形式。唯一的區別是,詞形還原試圖以正確的方式去做。它不只是切斷了它,它實際上將單詞轉換為實際的根。例如,「更好」這個詞會映射到「好」。它可以使用諸如WordNet的字典來進行映射或一些基於規則的特殊方法。以下是使用基於WordNet的方法實現的詞形還原的示例:
根據我的經驗,詞形簡化與搜索和文本分類目的相比沒有明顯的優勢。實際上,根據您選擇的算法,與使用非常基本的詞幹分析器相比,它可能要慢得多,您可能必須知道相關單詞的詞性才能得到正確的引理。本文發現,詞形還原對神經結構文本分類的準確性沒有顯着影響。
我會親自使用詞形還原。額外的開銷可能是也可能不值得。但您可以隨時嘗試查看它對您的效果指標的影響。
刪除停用詞
停用詞是一種語言中常用的詞彙。英語中的停用詞的例子是「a」,「the」,「is」,「are」等。使用停用詞背後的直覺是,通過從文本中刪除低信息詞,我們可以專註於重要詞而不是。
例如,在搜索系統的上下文中,如果您的搜索查詢是「什麼是文本預處理?」,您希望搜索系統專註於表面文檔,這些text preprocessing
文檔可以討論談論的文檔what is
。這可以通過阻止停止詞列表中的所有單詞進行分析來完成。停用詞通常應用於搜索系統,文本分類應用程序,主題建模,主題提取等。
根據我的經驗,停止刪除單詞雖然在搜索和主題提取系統中有效,但在分類系統中顯示為非關鍵。但是,它確實有助於減少所考慮的功能數量,這有助於保持模型的大小。
以下是停止刪除單詞的示例。所有停用詞都替換為虛擬角色,W:
停止單詞列表可以來自預先建立的集合,也可以為您的域創建自定義單詞列表。某些庫(例如sklearn)允許您刪除X%文檔中出現的單詞,這也可以為您提供單詞刪除效果。
規範化
一個被高度忽視的預處理步驟是文本規範化。文本規範化是將文本轉換為規範(標準)形式的過程。例如,「gooood」和「gud」這個詞可以轉換為「good」,即其規範形式。另一個例子是將近似相同的單詞(例如「停用詞」,「停止詞」和「停止詞」)映射到「停用詞」。
文本規範化對於嘈雜的文本非常重要,例如社交媒體評論,短訊和對博客文章的評論,其中縮寫,拼寫錯誤和使用詞彙外詞(oov)很普遍。本文通過使用推文的文本歸一化策略,他們能夠將情緒分類準確度提高約4%。
這是標準化之前和之後的單詞示例:
請注意變體如何映射到相同的規範形式。
根據我的經驗,文本規範化甚至可以有效地分析高度非結構化的臨床文本,其中醫生以非標準方式記筆記。我還發現它對於主題提取很有用,其中近似同義詞和拼寫差異是常見的(例如主題建模,主題建模,主題建模,主題建模)。
不幸的是,與詞幹和詞形還原不同,沒有一種標準化的文本化方法。它通常取決於任務。例如,您將臨床文本標準化的方式可能與您對短訊文本消息的標準化方式有所不同。
文本規範化的一些常用方法包括字典映射(最簡單),統計機器翻譯(SMT)和基於拼寫校正的方法。這篇有趣的文章比較了使用基於字典的方法和SMT方法來規範化文本消息。
噪音消除
噪聲去除有關刪除characters
digits
,並pieces of text
可以與您的文本分析干擾。噪聲消除是最基本的文本預處理步驟之一。它也是高度依賴域的。
例如,在推文中,噪聲可能是除了主題標籤之外的所有特殊字符,因為它表示可以表徵推文的概念。噪音的問題在於它會產生下游任務中不一致的結果。我們來看下面的例子:
請注意,上面的所有原始單詞都有一些周圍的噪音。如果你幹掉這些詞,你會發現詞幹結果看起來不太漂亮。他們都沒有正確的詞幹。但是,通過本筆記本中的一些清潔,結果現在看起來好多了:
在Text Mining和NLP中,噪聲消除是您應該首先考慮的事情之一。有各種方法可以消除噪音。這包括標點刪除,特殊字符刪除,數字刪除,html格式刪除,特定於域的關鍵字刪除 (例如轉發的’RT’),源代碼刪除,標題刪除等。這一切都取決於您正在從事哪個領域以及為您的任務帶來的噪音。我的筆記本中的代碼片段顯示了如何進行一些基本的噪音消除。
文字豐富/增強
文本豐富涉及使用您以前沒有的信息來擴充原始文本數據。文本豐富為原始文本提供了更多語義,從而提高了預測能力以及可以對數據執行的深度分析。
在信息檢索示例中,擴展用戶的查詢以改進關鍵字的匹配是一種增強形式。像查詢一樣text mining
可以成為text document mining analysis
。雖然這對人類沒有意義,但它可以幫助獲取更相關的文檔。
您可以通過豐富文本的方式獲得真正的創意。您可以使用詞性標註來獲取有關文本中單詞的更詳細信息。
例如,在文檔分類問題中,單詞書作為名詞的出現可能導致與作為動詞的書不同的分類,因為在閱讀的上下文中使用了一個,而在保留某些內容的上下文中使用另一個。本文討論了如何結合使用名詞和動詞作為輸入特徵來改進中文文本分類。
然而,隨着大量文本的可用性,人們開始使用嵌入來豐富單詞,短語和句子的含義,以便進行分類,搜索,匯總和文本生成。在基於深度學習的NLP方法中尤其如此,其中字級嵌入層非常常見。您可以從預先建立的嵌入開始,也可以創建自己的嵌入並在下游任務中使用它。
豐富文本數據的其他方法包括短語提取,您可以將複合詞識別為一個(也稱為分塊),使用同義詞進行擴展和依賴性解析。
你需要這一切嗎?
不是真的,但如果你想獲得良好,一致的結果,你必須確實做到這一點。為了讓你了解最低限度應該是什麼,我把它分解為Must Do,Should Do和Task Dependent。在決定您確實需要之前,所有依賴於任務的東西都可以進行定量或定性測試。
請記住,少即是多,您希望儘可能保持優雅。您添加的開銷越多,遇到問題時您將需要剝離的層數越多。
必須要做的:
- 噪音消除
- 小寫(在某些情況下可以依賴於任務)
應該做的:
- 簡單規範化 – (例如,標準化幾乎相同的單詞)
根據任務判斷是否要做:
- 高級標準化(例如,解決詞彙外單詞)
- 停止刪除單詞
- 詞幹/詞形還原
- 文本豐富/增強
因此,對於任何任務,您應該做的最小值是嘗試小寫文本並消除噪音。噪音取決於您的域名(請參閱噪音消除部分)。您還可以執行一些基本的規範化步驟以獲得更高的一致性,然後根據需要系統地添加其他圖層。
一般經驗法則
並非所有任務都需要相同級別的預處理。對於某些任務,您可以盡量減少。但是,對於其他人來說,數據集是如此嘈雜,如果你沒有進行足夠的預處理,它將是垃圾垃圾。
這是一般的經驗法則。這並不總是成立,但適用於大多數情況。如果你有一個很好的書面文本可以在相當普通的領域中使用,那麼預處理並不是非常關鍵; 你可以勉強逃脫(例如使用所有維基百科文本或路透社新聞文章訓練一個嵌入模型的單詞)。
但是,如果您在一個非常狹窄的領域工作(例如關於健康食品的推文)並且數據稀疏且嘈雜,您可以從更多的預處理層中受益,儘管您添加的每個層(例如,停止刪除詞,詞幹化,規範化)都需要被定量或定性地驗證為有意義的層。這是一個表格,總結了您應該對文本數據執行多少預處理:
我希望這裡的想法可以引導您為項目選擇正確的預處理步驟。記住,少即是多。我的一位朋友曾經向我提到他是如何通過拋棄不必要的預處理層來使大型電子商務搜索系統更高效,更少錯誤。
資源
本文轉載自medium,原文地址(需要科學上網)
Comments