如何解决90%的NLP问题:逐步指导
如何解決90%的NLP問(wèn)題:逐步指導(dǎo)
使用機(jī)器學(xué)習(xí)來(lái)理解和利用文本。
如何將5 W和H應(yīng)用于文本數(shù)據(jù)!文本數(shù)據(jù)無(wú)處不在
無(wú)論您是成熟公司還是致力于推出新服務(wù),您始終可以利用文本數(shù)據(jù)來(lái)驗(yàn)證,改進(jìn)和擴(kuò)展產(chǎn)品的功能。從文本數(shù)據(jù)中提取意義和學(xué)習(xí)的科學(xué)是一個(gè)活躍的研究主題,稱為自然語(yǔ)言處理(NLP)。
每天NLP產(chǎn)生新的和令人興奮的 結(jié)果,是一個(gè)非常大的領(lǐng)域。然而,Insight團(tuán)隊(duì)與數(shù)百家公司合作,看到一些關(guān)鍵的實(shí)際應(yīng)用程序比其他任何公司更頻繁地出現(xiàn):
- 識(shí)別不同的用戶/客戶群(例如預(yù)測(cè)流失,生命周期價(jià)值,產(chǎn)品偏好)
- 準(zhǔn)確地檢測(cè)和提取不同類別的反饋(正面和負(fù)面評(píng)論/意見,提及特定屬性,如服裝尺碼/合身......)
- 根據(jù)意圖對(duì)文本進(jìn)行分類(例如請(qǐng)求基本幫助,緊急問(wèn)題)
雖然許多NLP論文和教程存在于網(wǎng)上,但我們發(fā)現(xiàn)很難找到有關(guān)如何從頭開始有效解決這些問(wèn)題的指南和技巧。
本文如何提供幫助
在每年領(lǐng)導(dǎo)數(shù)百個(gè)項(xiàng)目并獲得美國(guó)各地頂級(jí)團(tuán)隊(duì)的建議后,我們寫了這篇文章來(lái)解釋如何構(gòu)建機(jī)器學(xué)習(xí)解決方案來(lái)解決上述問(wèn)題。我們將從最簡(jiǎn)單的方法開始,然后轉(zhuǎn)向更細(xì)微的解決方案,例如特征工程,單詞向量和深度學(xué)習(xí)。
閱讀本文后,您將了解如何:
- 收集,準(zhǔn)備和檢查數(shù)據(jù)
- 構(gòu)建簡(jiǎn)單的模型,并在必要時(shí)過(guò)渡到深度學(xué)習(xí)
- 解釋和理解您的模型,以確保您實(shí)際捕獲信息而不是噪音
我們把這篇文章寫成了一步一步的指南; 它還可以作為高效標(biāo)準(zhǔn)方法的高級(jí)概述。
這篇文章附有一個(gè)交互式筆記本,演示和應(yīng)用所有這些技術(shù)。隨意運(yùn)行代碼并繼續(xù)!
第1步:收集您的數(shù)據(jù)
示例數(shù)據(jù)源
每個(gè)機(jī)器學(xué)習(xí)問(wèn)題都從數(shù)據(jù)開始,例如電子郵件,帖子或推文列表。常見的文字信息來(lái)源包括:
- 產(chǎn)品評(píng)論(在亞馬遜,Yelp和各種應(yīng)用商店)
- 用戶生成的內(nèi)容(推文,Facebook帖子,StackOverflow問(wèn)題)
- 故障排除(客戶請(qǐng)求,支持服務(wù)單,聊天記錄)
“社交媒體災(zāi)難”數(shù)據(jù)集
對(duì)于這篇文章,我們將使用 Figure Eight慷慨提供的數(shù)據(jù)集,稱為“社交媒體上的災(zāi)難”,其中:
貢獻(xiàn)者查看了超過(guò)
10,000條推文,其中包括“點(diǎn)燃”,“隔離”和“混亂”等各種搜索,然后注意到推文是否涉及災(zāi)難事件(而不是與單詞或電影評(píng)論相關(guān)的笑話或一些非災(zāi)難性的事情)。
我們的任務(wù)是檢測(cè)哪些推文是關(guān)于災(zāi)難性事件的,而不是像電影那樣無(wú)關(guān)緊要的話題。為什么?一個(gè)潛在的應(yīng)用是完全通知執(zhí)法官員緊急緊急情況,同時(shí)忽略對(duì)最近的亞當(dāng)桑德勒電影的評(píng)論。這項(xiàng)任務(wù)的一個(gè)特殊挑戰(zhàn)是兩個(gè)類都包含用于查找推文的相同搜索詞,因此我們必須使用微妙的差異來(lái)區(qū)分它們。
在本文的其余部分,我們將把關(guān)于災(zāi)難的推文稱為“ disaster(災(zāi)難 )”,并將有關(guān)其他任何內(nèi)容的推文稱為“ (irrelevant)無(wú)關(guān)緊要 ”。
標(biāo)簽
我們已經(jīng)標(biāo)記了數(shù)據(jù),因此我們知道哪些推文屬于哪些類別。正如Richard Socher在下面概述的那樣,通常更快,更簡(jiǎn)單,更便宜地找到并標(biāo)記足夠的數(shù)據(jù)來(lái)訓(xùn)練模型,而不是試圖優(yōu)化復(fù)雜的無(wú)監(jiān)督方法。
Richard Socher的專業(yè)提示第2步:清理數(shù)據(jù)
我們遵循的首要規(guī)則是:
“您的模型將永遠(yuǎn)與您的數(shù)據(jù)一樣好。”數(shù)據(jù)科學(xué)家的關(guān)鍵技能之一是了解下一步是應(yīng)該對(duì)模型還是數(shù)據(jù)進(jìn)行處理。一個(gè)好的經(jīng)驗(yàn)法則是首先查看數(shù)據(jù)然后進(jìn)行清理。一個(gè)干凈的數(shù)據(jù)集將允許模型學(xué)習(xí)有意義的功能,而不是過(guò)度匹配無(wú)關(guān)的噪音。
以下是用于清理數(shù)據(jù)的清單:( 有關(guān)詳細(xì)信息,請(qǐng)參閱代碼):
- 刪除所有不相關(guān)的字符,例如任何非字母數(shù)字字符
- 通過(guò)分詞將其分割成單個(gè)的單詞文本
- 刪除不相關(guān)的單詞,例如“@”twitter提及或網(wǎng)址
- 將所有字符轉(zhuǎn)換為小寫,以便將諸如“hello”,“Hello”和“HELLO”之類的單詞視為相同
- 考慮將拼寫錯(cuò)誤或交替拼寫的單詞組合成單個(gè)表示(例如“cool”/“kewl”/“cooool”)
- 考慮詞形還原(將諸如“am”,“are”和“is”等詞語(yǔ)簡(jiǎn)化為常見形式,例如“be”)
按照這些步驟并檢查其他錯(cuò)誤后,我們可以開始使用干凈的標(biāo)記數(shù)據(jù)來(lái)訓(xùn)練模型!
第3步:找到一個(gè)好的數(shù)據(jù)表示
機(jī)器學(xué)習(xí)模型將數(shù)值作為輸入。例如,處理圖像的模型采用表示每個(gè)顏色通道中每個(gè)像素的強(qiáng)度的矩陣。
一個(gè)微笑的臉表示為數(shù)字矩陣。我們的數(shù)據(jù)集是一個(gè)句子列表,所以為了讓我們的算法從數(shù)據(jù)中提取模式,我們首先需要找到一種方法來(lái)表示我們的算法可以理解的方式,即作為數(shù)字列表。
one-hot編碼(Bag of Words)
表示計(jì)算機(jī)文本的一種自然方式是將每個(gè)字符單獨(dú)編碼為數(shù)字(例如ASCII)。如果我們將這個(gè)簡(jiǎn)單的表示提供給分類器,則必須僅根據(jù)我們的數(shù)據(jù)從頭學(xué)習(xí)單詞的結(jié)構(gòu),這對(duì)于大多數(shù)數(shù)據(jù)集是不可能的。我們需要使用更高級(jí)別的方法。
例如,我們可以在數(shù)據(jù)集中構(gòu)建所有唯一單詞的詞匯表,并將唯一索引與詞匯表中的每個(gè)單詞相關(guān)聯(lián)。然后將每個(gè)句子表示為與我們?cè)~匯表中不同單詞的數(shù)量一樣長(zhǎng)的列表。在此列表中的每個(gè)索引處,我們標(biāo)記給定單詞在句子中出現(xiàn)的次數(shù)。這被稱為Bag of Words模型,因?yàn)樗且环N完全忽略句子中單詞順序的表示。這如下圖所示。
將句子表示為一Bage of Words。左邊的句子,右邊的表示。向量中的每個(gè)索引代表一個(gè)特定的單詞。可視化嵌入
我們?cè)凇吧缃幻襟w災(zāi)難”示例中的詞匯量大約有20,000個(gè)單詞,這意味著每個(gè)句子都將表示為長(zhǎng)度為20,000的向量。向量將主要包含0,因?yàn)槊總€(gè)句子只包含我們?cè)~匯表的一小部分。
為了查看我們的嵌入是否正在捕獲與我們的問(wèn)題相關(guān)的信息(即推文是否與災(zāi)難有關(guān)),最好將它們可視化并查看類看起來(lái)是否分離得很好。由于詞匯表通常非常大,并且不可能以20,000維度可視化數(shù)據(jù),因此像PCA這樣的技術(shù)將有助于將數(shù)據(jù)投影到二維。這個(gè)繪制如下。
可視化詞袋嵌入這兩個(gè)類看起來(lái)分離不是很好,這可能是我們嵌入的一個(gè)特征,或者僅僅是我們降維的一個(gè)特征。為了查看Bag of Words功能是否有用,我們可以根據(jù)它們訓(xùn)練分類器。
第4步:分類
當(dāng)?shù)谝粋€(gè)接近問(wèn)題時(shí),一般的最佳做法是從可以解決工作的最簡(jiǎn)單的工具開始。無(wú)論何時(shí)對(duì)數(shù)據(jù)進(jìn)行分類,其多功能性和可解釋性的共同點(diǎn)都是Logistic回歸。訓(xùn)練非常簡(jiǎn)單,結(jié)果可以解釋,因?yàn)槟梢暂p松地從模型中提取最重要的系數(shù)。
我們將數(shù)據(jù)分成一個(gè)訓(xùn)練集,用于擬合我們的模型和一個(gè)測(cè)試集,以查看它對(duì)未見數(shù)據(jù)的概括性。經(jīng)過(guò)培訓(xùn),我們得到75.4%的準(zhǔn)確率。不是太寒酸!猜測(cè)最頻繁的分類(“不相關(guān)(irrelevant)”)將只給我們57%。然而,即使75%的精度足以滿足我們的需求,我們也絕不應(yīng)該在不試圖了解它的情況下運(yùn)送模型。
第五步:檢查
混亂矩陣
第一步是了解我們的模型所犯的錯(cuò)誤類型,以及哪種錯(cuò)誤是最不可取的。在我們的示例中,false positives將不相關(guān)的推文分類為災(zāi)難,而false negatives則將災(zāi)難歸類為不相關(guān)的推文。如果優(yōu)先考慮對(duì)每個(gè)潛在事件作出反應(yīng),我們會(huì)希望降低我們的false negatives。但是,如果我們?cè)谫Y源方面受到限制,我們可能會(huì)優(yōu)先考慮較低的false positives率以減少誤報(bào)。可視化此信息的一種好方法是使用混淆矩陣,該矩陣將我們的模型預(yù)測(cè)與真實(shí)標(biāo)簽進(jìn)行比較。理想情況下,矩陣將是從左上角到右下角的對(duì)角線(我們的預(yù)測(cè)完全匹配真相)。
混淆矩陣(綠色比例高,藍(lán)色低)我們的分類器比 false negatives(按比例)產(chǎn)生更多的false positives 。換句話說(shuō),我們模型最常見的錯(cuò)誤是將災(zāi)難分類為不相關(guān)。如果false positives代表了執(zhí)法的高成本,那么這對(duì)我們的分類者來(lái)說(shuō)可能是一個(gè)很好的偏見。
解釋我們的模型
為了驗(yàn)證我們的模型并解釋其預(yù)測(cè),重要的是要查看它用于做出決策的單詞。如果我們的數(shù)據(jù)有偏差,我們的分類器將對(duì)樣本數(shù)據(jù)做出準(zhǔn)確的預(yù)測(cè),但該模型在現(xiàn)實(shí)世界中不會(huì)很好地概括。在這里,我們?yōu)闉?zāi)難和無(wú)關(guān)的分類繪制最重要的單詞。使用Bag of Words和Logistic回歸繪制單詞重要性很簡(jiǎn)單,因?yàn)槲覀兛梢蕴崛『团帕心P陀糜谄漕A(yù)測(cè)的系數(shù)。
Bag of words:詞重要性我們的分類器正確地采用了一些模式(廣島,大屠殺),但顯然在某些無(wú)意義的術(shù)語(yǔ)上過(guò)度擬合(heyoo,x1392)。現(xiàn)在,我們的Bag of Words模型正在處理不同單詞的巨大詞匯并平等對(duì)待所有單詞。然而,這些詞中的一些是非常頻繁的,并且只會(huì)對(duì)我們的預(yù)測(cè)產(chǎn)生噪音。接下來(lái),我們將嘗試一種方法來(lái)表示可以解釋單詞頻率的句子,看看我們是否可以從我們的數(shù)據(jù)中獲取更多信號(hào)。
第六步:考慮詞匯結(jié)構(gòu)
TF-IDF
為了幫助我們的模型更多地關(guān)注有意義的單詞,我們可以在我們的Bag of Words模型之上使用TF-IDF分?jǐn)?shù)(Term Frequency,Inverse Document Frequency)。TF-IDF根據(jù)它們?cè)谖覀兊臄?shù)據(jù)集中的稀有程度對(duì)單詞進(jìn)行加權(quán),對(duì)過(guò)于頻繁的單詞進(jìn)行折扣并僅添加噪聲。這是我們新嵌入的PCA投影。
可視化TF-IDF嵌入我們可以看到上面兩種顏色之間有更明確的區(qū)別。這應(yīng)該使我們的分類器更容易 分離兩個(gè)組。讓我們看看這是否會(huì)帶來(lái)更好的性能。在我們的新嵌入體上訓(xùn)練另一個(gè)Logistic回歸,我們得到76.2%的準(zhǔn)確度。
一點(diǎn)點(diǎn)改進(jìn)。我們的模型是否開始接受更重要的詞匯?如果我們?cè)诜乐刮覀兊哪P汀白鞅住钡耐瑫r(shí)獲得更好的結(jié)果,那么我們可以真正認(rèn)為這個(gè)模型是升級(jí)。
TF-IDF:單詞重要性它所拾取的單詞看起來(lái)更相關(guān)!盡管我們的測(cè)試集上的指標(biāo)僅略有增加,但我們對(duì)模型使用的術(shù)語(yǔ)更有信心,因此在將與客戶交互的系統(tǒng)中部署它時(shí)會(huì)感覺更舒服。
第7步:利用語(yǔ)義
Word2Vec
我們最新模型設(shè)法獲得高信號(hào)詞。但是,如果我們部署此模型,我們很可能會(huì)遇到以前在訓(xùn)練集中沒(méi)有看到過(guò)的單詞。即使在培訓(xùn)期間看到非常相似的單詞,之前的模型也無(wú)法準(zhǔn)確地對(duì)這些推文進(jìn)行分類。
為了解決這個(gè)問(wèn)題,我們需要捕捉詞語(yǔ)的語(yǔ)義,這意味著我們需要理解像“好”和“積極”這樣的詞比“杏”和“大陸”更接近。我們將用來(lái)幫助我們捕獲意義的工具稱為Word2Vec。
使用預(yù)先訓(xùn)練過(guò)的單詞
Word2Vec是一種查找單詞連續(xù)嵌入的技術(shù)。它通過(guò)閱讀大量文本并記住哪些詞語(yǔ)傾向于出現(xiàn)在類似的語(yǔ)境中來(lái)學(xué)習(xí)。在對(duì)足夠的數(shù)據(jù)進(jìn)行訓(xùn)練之后,它為詞匯表中的每個(gè)單詞生成300維向量,其中具有相似含義的單詞彼此更接近。
該報(bào)告的作者論文開源了一個(gè)非常大的語(yǔ)料庫(kù),我們可以利用到包括語(yǔ)義一些知識(shí)轉(zhuǎn)化成我們的模型這是預(yù)先訓(xùn)練的典范。可以在與此帖相關(guān)聯(lián)的存儲(chǔ)庫(kù)中找到預(yù)先訓(xùn)練的向量。
句子級(jí)別表示
為我們的分類器設(shè)置句子嵌入的快速方法是平均句子中所有單詞的Word2Vec分?jǐn)?shù)。這是一個(gè)像之前一樣的Bag of Words方法,但這次我們只丟失了句子的語(yǔ)法,同時(shí)保留了一些語(yǔ)義信息。
Word2Vec句子嵌入以下是使用以前技術(shù)的新嵌入的可視化:
可視化Word2Vec嵌入這兩組顏色看起來(lái)更加分離,我們的新嵌入應(yīng)該有助于我們的分類器找到兩個(gè)類之間的分離。在第三次訓(xùn)練相同模 型(Logistic回歸)后,我們得到77.7%的準(zhǔn)確度得分,我們的最佳結(jié)果呢!是時(shí)候檢查我們的模型了。
復(fù)雜性/可解釋性權(quán)衡
由于我們的嵌入不像我們之前的模型那樣表示為每個(gè)單詞一維的向量,因此很難看出哪些單詞與我們的分類最相關(guān)。雖然我們?nèi)匀豢梢栽L問(wèn)Logistic回歸的系數(shù),但它們與嵌入的300維有關(guān),而不是單詞的索引。
對(duì)于如此低的準(zhǔn)確度增益,失去所有可解釋性似乎是一種嚴(yán)厲的權(quán)衡。但是,對(duì)于更復(fù)雜的模型,我們可以利用LIME等黑盒解釋器,以便深入了解分類器的工作原理。
LIME
LIME 可通過(guò)開源軟件包在Github上獲得。黑盒解釋器允許用戶通過(guò)擾亂輸入(在我們的情況下從句子中刪除單詞)并查看預(yù)測(cè)如何變化來(lái)解釋任何分類器在一個(gè)特定示例上的決定。
讓我們看一下我們數(shù)據(jù)集中句子的幾個(gè)解釋。
挑選正確的災(zāi)難詞語(yǔ)以歸類為“相關(guān)”。在這里,單詞對(duì)分類的貢獻(xiàn)似乎不太明顯但是,我們沒(méi)有時(shí)間探索數(shù)據(jù)集中的數(shù)千個(gè)示例。我們要做的是在有代表性的測(cè)試用例樣本上運(yùn)行LIME,看看哪些詞會(huì)繼續(xù)成為強(qiáng)大的貢獻(xiàn)者。使用這種方法,我們可以像以前的模型一樣獲得單詞重要性分?jǐn)?shù),并驗(yàn)證模型的預(yù)測(cè)。
Word2Vec:單詞重要性看起來(lái)該模型選擇了高度相關(guān)的詞語(yǔ),暗示它似乎做出了可以理解的決定。這些似乎是以前所有型號(hào)中最相關(guān)的詞,因此我們更愿意部署到生產(chǎn)中。
步驟8:使用端到端方法利用語(yǔ)法
我們已經(jīng)介紹了生成緊湊句嵌入的快速有效方法。但是,通過(guò)省略單詞的順序,我們將丟棄句子的所有句法信息。如果這些方法不能提供足夠的結(jié)果,您可以使用更復(fù)雜的模型,將整個(gè)句子作為輸入并預(yù)測(cè)標(biāo)簽,而無(wú)需構(gòu)建中間表示。要做到這一點(diǎn)的常用方法是把一個(gè)句子中的單詞矢量序列使用或者Word2Vec或更近的方法,比如GloVe或GoVe。這是我們將在下面做的。
高效的端到端架構(gòu)(源代碼)用于句子分類的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練非常快,并且作為入門級(jí)深度學(xué)習(xí)架構(gòu)運(yùn)行良好。雖然卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要以其在圖像數(shù)據(jù)上的性能而聞名,但它們?cè)谖谋鞠嚓P(guān)任務(wù)上提供了出色的結(jié)果,并且通常比大多數(shù)復(fù)雜的NLP方法(例如LSTM和編碼器/解碼器架構(gòu))更快地進(jìn)行訓(xùn)練。該模型保留了單詞的順序,并學(xué)習(xí)了有關(guān)哪些單詞序列可以預(yù)測(cè)目標(biāo)類的有價(jià)值信息。與之前的型號(hào)相反,它可以區(qū)分“Alex吃植物”和“植物吃Alex”之間的區(qū)別。
訓(xùn)練此模型不需要比以前的方法更多的工作(詳見代碼),并為我們提供了比以前更好的模型,準(zhǔn)確度達(dá)到79.5%!與上述模型一樣,下一步應(yīng)該是使用我們描述的方法探索和解釋預(yù)測(cè),以驗(yàn)證它確實(shí)是部署到用戶的最佳模型。到現(xiàn)在為止,您應(yīng)該自己解決這個(gè)問(wèn)題。
最后的筆記
以下是我們成功使用的方法的簡(jiǎn)要回顧:
- 從快速簡(jiǎn)單的模型開始
- 解釋它的預(yù)測(cè)
- 了解它正在犯的錯(cuò)誤
- 使用該知識(shí)為下一步提供信息,無(wú)論是對(duì)您的數(shù)據(jù)還是更復(fù)雜的模型。
這些方法適用于特定的示例案例,使用為理解和利用短文本(如推文)而定制的模型,但這些思想廣泛適用于各種問(wèn)題。我希望這對(duì)你有幫助,我們很樂(lè)意聽到你的意見和問(wèn)題!
點(diǎn)擊英文原文
更多文章歡迎訪問(wèn) http://www.apexyun.com/
聯(lián)系郵箱:public@space-explore.com
(未經(jīng)同意,請(qǐng)勿轉(zhuǎn)載)
總結(jié)
以上是生活随笔為你收集整理的如何解决90%的NLP问题:逐步指导的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Rokid发布YodaOS 并宣布代码开
- 下一篇: OpenTTD 1.9.0-beta3