手把手教您解决90%的自然语言处理问题
摘要:?本文將講解如何從零開始,有效地處理自然語言問題的指南和技巧:首先解釋如何構(gòu)建機(jī)器學(xué)習(xí)解決方案來解決上面提到的問題。然后轉(zhuǎn)向更細(xì)致的解決方案。
如何將5W和H應(yīng)用于文本數(shù)據(jù)!
文本數(shù)據(jù)無處不在
從文本數(shù)據(jù)中提取有意義和值得學(xué)習(xí)的數(shù)據(jù)是自然語言處理(NLP)的一個非常重要的研究課題。NLP是一個非常大的領(lǐng)域,NLP有幾個最常使用的關(guān)鍵應(yīng)用:
·識別不同的用戶/客戶群。
·準(zhǔn)確的檢測和提取不同類別的反饋。
·根據(jù)意圖對文本進(jìn)行分類。
本文將講解如何從頭開始有效地處理這些問題的指南和技巧:首先解釋如何構(gòu)建機(jī)器學(xué)習(xí)解決方案來解決上面提到的問題。然后轉(zhuǎn)向更細(xì)致的解決方案,比如特性工程、單詞向量和深度學(xué)習(xí)。
第一步:收集你的數(shù)據(jù)
每個機(jī)器學(xué)習(xí)問題都始于數(shù)據(jù)。本文中,我們將使用一個名為“社交媒體上的災(zāi)難”的數(shù)據(jù)集:投稿人查看了超過一萬條的推文,然后指出每條推文是否提到了災(zāi)難事件。
我們的任務(wù)是檢測哪些推文是關(guān)于災(zāi)難事件的,因?yàn)橛袧撛诘膽?yīng)用專門收集緊急事件并通知執(zhí)法部門。這個任務(wù)的特殊挑戰(zhàn)是兩個類都包含用于查找推文的相同搜索條件,所以我們不得不用更微妙的差異來區(qū)分它們。
在本文中,我們將有關(guān)災(zāi)難的推文稱為“災(zāi)難”,其他推文稱為“無關(guān)緊要的”。正如Richard Socher所描述的那樣,查找和標(biāo)記足夠的數(shù)據(jù)來訓(xùn)練模型比試圖優(yōu)化復(fù)雜的無監(jiān)督方法通常更快、更簡單、更便宜。
第二步:清理你的數(shù)據(jù)
“你的模型只能和你的數(shù)據(jù)一樣好”。一個干凈的數(shù)據(jù)集能夠使模型學(xué)習(xí)有意義的特征,所以應(yīng)當(dāng)是先查看數(shù)據(jù)然后再清理數(shù)據(jù)。
以下是用來清理你的數(shù)據(jù)的清單(詳見代碼):
1、刪除所有不相關(guān)的字符,例如任何非字母數(shù)字字符。
2、把你的文章分成一個個單獨(dú)的單詞。
3、刪除不相關(guān)的單詞。
4、將所有字符轉(zhuǎn)換為小寫。
5、考慮將拼錯的單詞或拼寫單詞組合成一個單獨(dú)的表示。
6、考慮詞形化。
在遵循這些步驟并檢查額外的錯誤之后,我們可以開始使用干凈的、標(biāo)記的數(shù)據(jù)來訓(xùn)練模型!
第三步:找到一個好的數(shù)據(jù)表示
機(jī)器學(xué)習(xí)模型以數(shù)值作為輸入。我們的數(shù)據(jù)集是一個句子的列表,所以為了能夠提取數(shù)據(jù)。我們首先要找到一種方法使我們的算法能理解它:也就是數(shù)字列表。
?
一組以數(shù)據(jù)矩陣表示的笑臉
獨(dú)熱編碼(Bag of Words)
計(jì)算機(jī)文本表示的一種方法是將每個字符單獨(dú)編碼為一個數(shù)字(例如ASCII)。這對于大多數(shù)數(shù)據(jù)集來說是不可能的,所以我們需要更高層次的方法。
例如,我們可以在我們的數(shù)據(jù)集中建立一個所有的單詞的詞匯表,并將一個唯一的索引與詞匯表中的每個單詞聯(lián)系起來。每個句子被表示為一個列表,只要我們的詞匯表中有不同單詞的數(shù)量。在這個列表中的每個索引中,我們標(biāo)記出在我們的句子中出現(xiàn)了多少次給定的單詞。這被稱為Bag of Words模型,因?yàn)樗且环N完全無視我們句子中詞語順序的表現(xiàn)形式。
?
可視化嵌入
為了查看嵌入是否捕獲了與我們的問題相關(guān)的信息(例如,tweet是否與災(zāi)難有關(guān)),我們選擇可視化并查看這些類這個方法,但是由于詞匯表通常非常大,并且在20000個維度中可視化數(shù)據(jù)是不可能的,像PCA這樣的技術(shù)將有助于將數(shù)據(jù)壓縮到兩個維度。如下圖。
?
嵌入后這兩個類依舊不太好分開,僅僅是降低了維度。為了看Bag of Words特征是否有用,我們根據(jù)它們來訓(xùn)練一個分類器。
第四步:分類
當(dāng)涉及到對數(shù)據(jù)進(jìn)行分類時,邏輯回歸是最簡單可用的工具,訓(xùn)練簡單,結(jié)果可解釋,可以很容易的從模型中提取最重要的系數(shù)。將數(shù)據(jù)分成一個適用于我們的模型和測試集的訓(xùn)練集,以了解它如何推廣到不可見的數(shù)據(jù)。訓(xùn)練結(jié)束后得到了75.4%的準(zhǔn)確度,雖然這個精度足夠滿足我們的需求,但是我們還是應(yīng)該試圖去理解它是如何工作的。
第五步:檢查
混淆矩陣
第一步是了解我們模型的錯誤類型,以及哪種類型的錯誤是最不可取。在我們的例子中,誤報(bào)是將不相關(guān)的tweet歸為災(zāi)難,而漏報(bào)是將災(zāi)難歸類為不相關(guān)的tweet。如果要優(yōu)先處理每個潛在的事件,就要降低漏報(bào)率,如果受到資源的限制,那么會游戲那考慮降低誤報(bào)率。將這些信息可視化的一個好方法是使用混淆矩陣,將我們的模型與真實(shí)標(biāo)簽的預(yù)測相比較。理想情況下,矩陣將是從左上角到右下角的對角線。
?
混淆矩陣
結(jié)果顯示該分類器漏報(bào)率更高。換句話說,我們的模型最常見的錯誤是將災(zāi)難分類為不相關(guān)的。
解釋我們的模型
驗(yàn)證我們的模型并解釋它的預(yù)測結(jié)果,重要的是看它使用哪些詞作出預(yù)測。在數(shù)據(jù)有偏差時,分類器能在樣本數(shù)據(jù)中做出準(zhǔn)確預(yù)測,但是這個模型在現(xiàn)實(shí)世界中不能很好地推廣。在這里,我們?yōu)闉?zāi)難和不相關(guān)的推文繪制了最關(guān)鍵的單詞表。
?
我們分類器的詞匯庫能夠處理大量的詞匯。然而,有些詞是非常頻繁的,而且只會對我們的預(yù)測造成干擾。所以接下來,我們將嘗試用一種方法來表示能夠解釋單詞頻率的句子,看看我們是否能從我們的數(shù)據(jù)中獲得更多的信息。
第六步:掌握詞匯結(jié)構(gòu)
TF-IDF
為了幫助我們的模型更多地關(guān)注有意義的單詞,我們可以在我們的單詞模型包上使用TF-IDF評分,下圖為新嵌入的PCA投影。
?
可視化TF-IDF嵌入
我們可以看到這兩個顏色之間的區(qū)別更明顯了,這使我們的分類器更容易區(qū)分。我們在新的嵌入式系統(tǒng)上培訓(xùn)另一個邏輯回歸,并最終達(dá)到了76.2%的精確度。一個輕微的改善,提高了模型的性能,所以我們可以考慮升級這個模型了。
?
TF-IDF:文字的重要性
第七步:Leveraging semantics
Word2Vec
即使是最新的模型也沒法將訓(xùn)練中沒有遇到的單詞進(jìn)行分類,哪怕是非常相似的單詞。為了解決這個問題,我們所用的工具叫做Word2Vec。
Word2Vec是一種查找單詞連續(xù)嵌入的技術(shù)。它可以從閱讀大量的文本中學(xué)習(xí),并記住在類似的語境中出現(xiàn)的單詞。論文的作者開放了一個在非常大的語料庫中預(yù)先訓(xùn)練的模型,預(yù)先訓(xùn)練的向量可以在與這個帖子相關(guān)的存儲庫中找到。
語句級別的表示
為我們的分類器獲得一個句子嵌入的一個快速方法是平均Word2Vec得分。這跟以前一樣是Bag of Words的方法,但是這次我們只丟掉句子的語法,同時保留一些語義信息。
?
Word2Vec句子嵌入
下圖是我們使用以前的技術(shù)實(shí)現(xiàn)的新嵌入的可視化:
?
可視化Word2Vec嵌入
在訓(xùn)練了相同的模型三次(邏輯回歸)后,我們得到了77.7%的精度分?jǐn)?shù),這是現(xiàn)階段得到的最好的結(jié)果!
復(fù)雜性/ Explainability trade-oG
由于我們的嵌入沒有像以前的模型那樣被表示為每個單詞一維的矢量,所以很難看出哪些單詞與我們的分類最相關(guān)。雖然我們?nèi)匀豢梢栽L問我們的邏輯回歸的系數(shù),但它們與我們嵌入的300個維度相關(guān),而不是詞的索引。然而,對于更復(fù)雜的模型,我們可以利用LIME等黑盒解釋器來了解我們的分類器如何工作。
LIME
在GitHub上可以獲得開源的LIME。它是一種允許用戶解釋任何分類器決定的黑盒解釋器。
?
正確的災(zāi)難詞語被識別為“相關(guān)的”
?
在這里,詞語對分類的貢獻(xiàn)似乎不那么明顯
我們需要在一個有代表性的測試用例上運(yùn)行LIME,看看那些詞最關(guān)鍵,用這種方法可以得到像以前模型一樣重要的分?jǐn)?shù),并驗(yàn)證我們模型的預(yù)測結(jié)果。
Word2Vec:文字的重要性
由上圖可得,這個模型收集了相關(guān)性非常高的詞,暗示它做出了可以解釋的預(yù)測結(jié)果,所以可以放心的部署到生成中。
第八步:使用端到端的方法來利用語法
由于以上方法省略了單詞的順序,丟棄了句子的句法信息,所以這些方法不能提供足夠準(zhǔn)確的結(jié)果。為此您可以使用更復(fù)雜的模型,一種常見的方法是將一個句子作為單個單詞向量的序列,使用Word2Vec或者如GloVe、CoVe這樣的方法。
?
一個高度eGective端到端架構(gòu)(源)
卷積神經(jīng)網(wǎng)絡(luò)用于句子分類的訓(xùn)練非常迅速,并且是入門級的深度學(xué)習(xí)體系結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)在文本相關(guān)的任務(wù)中表現(xiàn)非常出色,而且通常比大多數(shù)復(fù)雜的NLP方法(例如LSTMs和編碼器/解碼架構(gòu))要快得多。這個模型保存了單詞的順序,并學(xué)習(xí)了有價值的信息,其中的單詞序列可以預(yù)測我們的目標(biāo)類。訓(xùn)練這個模型不會比之前的方法麻煩,并且能獲得79.5%的準(zhǔn)確性。所以下一步應(yīng)該是使用我們描述的方法來探索和解釋預(yù)測,以驗(yàn)證它確實(shí)是部署到用戶的最佳模型。
作者:阿里云云棲社區(qū)
原文地址:https://zhuanlan.zhihu.com/p/33797826
干貨好文,請關(guān)注掃描以下二維碼:
總結(jié)
以上是生活随笔為你收集整理的手把手教您解决90%的自然语言处理问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MaxCompute 中的Code Ge
- 下一篇: Lucene解析 - 基本概念