自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

指南 | 手把手教你解決90%的NLP問題

新聞 機(jī)器學(xué)習(xí)
利用機(jī)器學(xué)習(xí)方法來理解和利用文本,從最簡單的到state-of-the-art,由淺入深,循序漸進(jìn)。

[[279869]]

文本數(shù)據(jù)到處都是

無論是一家已成立的公司,還是正在開發(fā)一項(xiàng)新服務(wù),都可以利用文本數(shù)據(jù)來驗(yàn)證、改進(jìn)和擴(kuò)展產(chǎn)品的功能。從文本數(shù)據(jù)中提取語義和學(xué)習(xí)的科學(xué)是一個(gè)被稱為自然語言處理(NLP)的活躍研究課題。

NLP每天都有新的重要的進(jìn)展,這是一個(gè)非常大的領(lǐng)域。然而,在與數(shù)百家公司合作之后,Insight團(tuán)隊(duì)發(fā)現(xiàn)一些關(guān)鍵的實(shí)際應(yīng)用比其他應(yīng)用出現(xiàn)得更頻繁:

  • 確定不同的用戶/客戶群體(例如預(yù)測客戶流失、終身價(jià)值、產(chǎn)品偏好)
  • 準(zhǔn)確檢測和提取不同類別的反饋(正面和負(fù)面的評(píng)論/意見,屬性,如衣服尺寸/合身度…)
  • 按意圖將文本分類(例如:請(qǐng)求基本幫助、緊急問題)

雖然在網(wǎng)上有許多NLP的論文和教程,但我們發(fā)現(xiàn)很難找到指導(dǎo)方針和技巧來從根本上有效地解決這些問題。

這篇文章有什么用?

在一年領(lǐng)導(dǎo)了數(shù)百個(gè)項(xiàng)目,并從美國各地的頂級(jí)團(tuán)隊(duì)獲得建議之后,我們寫了這篇文章來解釋如何構(gòu)建機(jī)器學(xué)習(xí)解決方案來解決上述問題。我們將從最簡單可行的方法開始,然后轉(zhuǎn)向更細(xì)微的解決方案,如特征工程、詞向量和深度學(xué)習(xí)。

讀完這篇文章,你會(huì)知道:

  • 收集、準(zhǔn)備和檢查數(shù)據(jù)
  • 建立簡單的模型開始,并過渡到深入學(xué)習(xí),如果必要的話
  • 解釋和理解你的模型,以確保你實(shí)際捕獲的是信息而不是噪音

我們寫這篇文章是作為一個(gè)循序漸進(jìn)的指南,它還可以作為高效標(biāo)準(zhǔn)方法的高層次概述。

第一步: 收集數(shù)據(jù)

數(shù)據(jù)源的樣例

每一個(gè)機(jī)器學(xué)習(xí)問題都是從數(shù)據(jù)開始的,比如電子郵件、帖子或tweet列表。常見的文本信息來源包括:

  • 產(chǎn)品評(píng)論(亞馬遜,Yelp,各種應(yīng)用商店)
  • 用戶生成內(nèi)容(tweet、Facebook帖子、StackOverflow問題)
  • 故障排除(客戶請(qǐng)求、支持票、聊天日志)

“Disasters on Social Media” dataset

“社交媒體災(zāi)難”數(shù)據(jù)集

對(duì)于本文,我們將使用圖8提供的數(shù)據(jù)集,名為“社交媒體上的災(zāi)難”,其中:

貢獻(xiàn)者們查看了1萬多條推文,這些推文都經(jīng)過了各種各樣的搜索,比如“著火”、“隔離”和“混亂”,然后指出這條推文是否指的是災(zāi)難事件(而不是帶有這個(gè)詞的笑話、電影評(píng)論或其他非災(zāi)難性的東西)。

我們的任務(wù)是檢測哪些tweet是關(guān)于災(zāi)難性事件的,而不是與之相關(guān)的主題,比如電影。為什么?一種潛在的應(yīng)用可能是,在不理會(huì)對(duì)Adam Sandler最新電影的評(píng)論的情況下,只向執(zhí)法官員通報(bào)緊急情況。這項(xiàng)任務(wù)的一個(gè)特殊挑戰(zhàn)是,這兩個(gè)類都包含用于查找tweet的相同搜索詞,因此我們將不得不使用更細(xì)微的差異來區(qū)分它們。

在本文的其余部分,我們將把關(guān)于災(zāi)難的tweet稱為“災(zāi)難”,而關(guān)于其他任何事情的tweet稱為“無關(guān)”。

標(biāo)簽

我們已經(jīng)標(biāo)記了數(shù)據(jù),所以我們知道哪些tweet屬于哪些類別。正如Richard Socher在下面所概述的,找到和標(biāo)記足夠的數(shù)據(jù)來訓(xùn)練模型通常更快、更簡單、更便宜,而不是試圖優(yōu)化一個(gè)復(fù)雜的無監(jiān)督方法。

手把手教你解決90%的NLP問題

第二步: 數(shù)據(jù)清洗

我們遵循的第一條規(guī)則是:“你的模型永遠(yuǎn)只會(huì)和你的數(shù)據(jù)一樣好。”

數(shù)據(jù)科學(xué)家的關(guān)鍵技能之一是知道下一步應(yīng)該是處理模型還是數(shù)據(jù)。一個(gè)好的經(jīng)驗(yàn)法則是先查看數(shù)據(jù),然后整理它。一個(gè)干凈的數(shù)據(jù)集將允許模型學(xué)習(xí)有意義的特征,而不會(huì)在不相關(guān)的噪聲上過擬合

這里有一個(gè)清單,可以用來清理你的數(shù)據(jù):

  1. 刪除所有不相關(guān)的字符,例如任何非字母數(shù)字字符
  2. Tokenize通過將文本分隔成單個(gè)單詞來實(shí)現(xiàn)文本的標(biāo)記
  3. 刪除不相關(guān)的單詞,比如twitter上提到的“@”或url
  4. 將所有字符轉(zhuǎn)換為小寫,以便對(duì)“hello”、“hello”和“hello”等單詞一視同仁
  5. 考慮將拼寫錯(cuò)誤或交替拼寫的單詞組合成一個(gè)表示(例如“cool”/“kewl”/“cooool”)
  6. 考慮詞型還原(將“am”、“are”和“is”等單詞簡化為“be”等常見形式)

在遵循這些步驟并檢查其他錯(cuò)誤之后,我們可以開始使用干凈的、有標(biāo)記的數(shù)據(jù)來訓(xùn)練模型!

第三步:找一個(gè)好的數(shù)據(jù)表示

機(jī)器學(xué)習(xí)模型以數(shù)值作為輸入。例如,處理圖像的模型采用矩陣表示每個(gè)顏色通道中的每個(gè)像素的強(qiáng)度。

手把手教你解決90%的NLP問題

用數(shù)字矩陣表示的笑臉

我們的數(shù)據(jù)集是一個(gè)句子列表,所以為了讓我們的算法從數(shù)據(jù)中提取模式,我們首先需要找到一種方法,以我們的算法能夠理解的方式來表示它,即作為一個(gè)數(shù)字列表。

One-hot編碼(詞袋)

表示計(jì)算機(jī)文本的一種自然方法是將每個(gè)字符單獨(dú)編碼為一個(gè)數(shù)字。如果我們要將這個(gè)簡單的表示形式提供給分類器,那么它就必須僅基于我們的數(shù)據(jù)從零開始學(xué)習(xí)單詞的結(jié)構(gòu),這對(duì)于大多數(shù)數(shù)據(jù)集來說是不可能的。我們需要使用更高層次的方法。

例如,我們可以為數(shù)據(jù)集中所有惟一的單詞構(gòu)建一個(gè)詞匯表,并為詞匯表中的每個(gè)單詞關(guān)聯(lián)一個(gè)惟一索引。然后,每個(gè)句子都被表示為一個(gè)列表,這個(gè)列表與我們?cè)~匯表中不同單詞的數(shù)量一樣長。在這個(gè)列表的每個(gè)索引處,我們標(biāo)記給定單詞在我們的句子中出現(xiàn)的次數(shù)。這稱為詞袋模型,因?yàn)樗且粋€(gè)完全忽略句子中單詞順序的表示。如下圖所示。

手把手教你解決90%的NLP問題

把句子表示成詞袋。左邊是句子,右邊是描述。向量中的每個(gè)索引表示一個(gè)特定的單詞。

嵌入的可視化

在“社交媒體災(zāi)難”的例子中,我們的詞匯量大約有20000個(gè)單詞,這意味著每個(gè)句子都將被表示為一個(gè)長度為20000的向量。向量中大部分都是0,因?yàn)槊總€(gè)句子只包含詞匯表的一個(gè)非常小的子集。

為了查看我們的嵌入是否捕獲了與我們的問題關(guān)的信息(即tweet是否與災(zāi)難有關(guān)),將它們可視化并查看類之間是否有很好的分隔是一個(gè)好主意。由于詞匯表通常非常大,并且不可能在20,000個(gè)維度中可視化數(shù)據(jù),因此PCA等技術(shù)將幫助將數(shù)據(jù)投射到兩個(gè)維度。下圖所示。

手把手教你解決90%的NLP問題

詞袋嵌入的可視化

這兩個(gè)類看起來沒有很好地分離,這可能是我們的嵌入的一個(gè)特性,或者僅僅是維數(shù)減少的一個(gè)特性。為了了解詞袋特征是否有用,我們可以訓(xùn)練一個(gè)基于詞袋特征的分類器。

第四步: 分類

當(dāng)?shù)谝淮翁幚硪粋€(gè)問題時(shí),一般的最佳實(shí)踐是從能夠解決該工作的最簡單的工具開始。每當(dāng)涉及到對(duì)數(shù)據(jù)進(jìn)行分類時(shí),由于其通用性和可解釋性,最受歡迎的是Logistic Regression。它的訓(xùn)練非常簡單,結(jié)果是可解釋的,因?yàn)槟憧梢院苋菀椎貜哪P椭刑崛∽钪匾南禂?shù)。

我們將數(shù)據(jù)分成兩個(gè)部分,一個(gè)是用于擬合模型的訓(xùn)練集,另一個(gè)是測試集,以查看它對(duì)不可見數(shù)據(jù)的泛化程度。經(jīng)過訓(xùn)練,我們得到了75.4%的準(zhǔn)確率。還可以!猜測出現(xiàn)最多的類別(“無關(guān)緊要”)只會(huì)給我們57%的答案。然而,即使75%的精度已經(jīng)足夠滿足我們的需求,我們不能在不理解模型的情況下就發(fā)布模型。

第五步:檢查

混淆矩陣

第一步是了解我們的模型所犯錯(cuò)誤的類型,以及哪些錯(cuò)誤是最不可取的。在我們的示例中,false positive 將不相關(guān)的tweet分類為災(zāi)難,false negative 將災(zāi)難分類為不相關(guān)的tweet。如果我們的首要任務(wù)是對(duì)每一個(gè)潛在的事件做出反應(yīng),我們就會(huì)想要降低我們的false negative 。然而,如果我們?cè)谫Y源上受到限制,我們可能會(huì)優(yōu)先考慮較低的假陽性率,以減少虛警。將這些信息可視化的一個(gè)好方法是使用混淆矩陣,它將我們的模型做出的預(yù)測與真實(shí)的標(biāo)簽進(jìn)行比較。理想情況下,矩陣應(yīng)該是一條從左上角到右下角的對(duì)角線(我們的預(yù)測與事實(shí)完全吻合)。

手把手教你解決90%的NLP問題

混淆矩陣(綠色表示比例高,藍(lán)色表示比例低)

我們的分類器創(chuàng)建的假陰性比假陽性多(按比例)。換句話說,我們的模型最常見的錯(cuò)誤是不準(zhǔn)確地將災(zāi)難分類為無關(guān)緊要的。如果假陽性代表執(zhí)法的高成本,對(duì)我們的分類器,這可能是一個(gè)很好的偏見。

解釋我們的模型

為了驗(yàn)證我們的模型并解釋它的預(yù)測,很重要的是看看它使用哪些詞匯來做決策。如果我們的數(shù)據(jù)是有偏差的,我們的分類器會(huì)在樣本數(shù)據(jù)中做出準(zhǔn)確的預(yù)測,但是模型在現(xiàn)實(shí)世界中不能很好地推廣。在這里,我們?yōu)闉?zāi)難類和無關(guān)類繪制最重要的單詞。由于我們只需要提取模型用于預(yù)測的系數(shù)并對(duì)其進(jìn)行排序,因此用詞袋模型和邏輯回歸來繪制單詞重要性圖非常簡單。

手把手教你解決90%的NLP問題

詞袋:單詞重要性

我們的分類器正確地選擇了一些模式(廣島,大屠殺),但顯然似乎在一些無意義的術(shù)語上過擬合(heyoo, x1392)?,F(xiàn)在,我們的詞袋模型正在處理大量不同單詞的詞匯,并且平等地對(duì)待所有單詞。然而,其中一些詞匯非常頻繁,而且只會(huì)對(duì)我們的預(yù)測產(chǎn)生干擾。接下來,我們將嘗試一種表示句子的方法來解釋單詞的頻率,看看我們能否從數(shù)據(jù)中獲取更多的信號(hào)。

第6步:詞匯結(jié)構(gòu)計(jì)數(shù)

TF-IDF

為了幫助我們的模型更多地關(guān)注有意義的單詞,我們可以在我們的詞袋模型上使用TF-IDF score (Term Frequency, Inverse Document Frequency)。TF-IDF根據(jù)單詞在我們的數(shù)據(jù)集中的稀有程度來衡量單詞,對(duì)過于頻繁且只會(huì)增加噪音的單詞進(jìn)行減弱。這是我們新的嵌入的PCA投影。

手把手教你解決90%的NLP問題

TF-IDF嵌入可視化

從上面我們可以看到,這兩種顏色的區(qū)別更加明顯。這將使我們的分類器更容易地將兩個(gè)組分開。讓我們看看這是否會(huì)帶來更好的性能。在我們的新嵌入上訓(xùn)練另一個(gè)邏輯回歸,我們得到了76.2%的準(zhǔn)確率。

非常輕微的改善。我們的模型是否開始學(xué)習(xí)更重要的單詞?如果我們?cè)诜乐鼓P?ldquo;作弊”的同時(shí)獲得了更好的結(jié)果,那么我們就可以真正地將該模型視為一個(gè)升級(jí)。

手把手教你解決90%的NLP問題

TF-IDF:單詞重要性

選到到的單詞看起來更相關(guān)了!盡管我們測試集上的準(zhǔn)確率只增加了一點(diǎn)點(diǎn),但是我們對(duì)我們的模型所使用的術(shù)語有了更多的信心,因此在一個(gè)與客戶交互的系統(tǒng)中部署它會(huì)更舒服。

第7步:語義的威力

Word2Vec

我們最新的模型能夠識(shí)別高頻詞。然而,如果我們部署這個(gè)模型,很有可能會(huì)遇到以前在我們的訓(xùn)練集中沒有見過的單詞。之前的模型不能準(zhǔn)確地對(duì)這些tweet進(jìn)行分類,即使在訓(xùn)練期間看到了非常相似的單詞。

為了解決這個(gè)問題,我們需要捕捉單詞的語義,這意味著我們需要理解像“good”和“positive”這樣的單詞要比“apricot”和“continent”更接近。我們用來幫助我們捕捉語義的工具叫做Word2Vec。

使用預(yù)訓(xùn)練的單詞

Word2Vec是一種為單詞尋找連續(xù)嵌入的技術(shù)。它通過閱讀大量的文本和記憶在相似的語境中出現(xiàn)的單詞來學(xué)習(xí)。在對(duì)足夠的數(shù)據(jù)進(jìn)行訓(xùn)練后,它為詞匯表中的每個(gè)單詞生成一個(gè)300維的向量,具有相似含義的單詞彼此之間距離更近。

這篇論文的作者(https://arxiv.org/abs/1301.3781)公開了一個(gè)模型的源代碼,這個(gè)模型是在一個(gè)非常大的語料庫上預(yù)先訓(xùn)練的,我們可以利用這個(gè)語料庫將一些語義知識(shí)包含到我們的模型中??梢栽谂c本文關(guān)聯(lián)的repository中找到預(yù)先訓(xùn)練好的向量。

語義級(jí)別的表示

為我們的分類器獲得一個(gè)句子嵌入的快速方法是平均我們句子中所有單詞的Word2Vec得分。這是一個(gè)詞袋的方法,就像以前一樣,但是這次我們只丟失了我們句子的語法,而保留了一些語義信息。

手把手教你解決90%的NLP問題

Word2Vec句子的嵌入

使用之前的技術(shù)可視化的我們的新嵌入:

手把手教你解決90%的NLP問題

Word2Vec嵌入可視化

這兩組顏色在這里看起來更加分離,我們的新嵌入應(yīng)該有助于我們的分類器找到這兩個(gè)類之間的分離。經(jīng)過第三次對(duì)同一模型的訓(xùn)練(Logistic回歸),我們得到的準(zhǔn)確率為77.7%,是我們目前最好的結(jié)果!是時(shí)候檢查我們的模型了。

復(fù)雜性和可解釋性的權(quán)衡

由于我們的嵌入不像之前的模型中那樣以每個(gè)單詞一維的向量來表示,所以很難看出哪些單詞與我們的分類最相關(guān)。雖然我們?nèi)匀豢梢栽L問邏輯回歸的系數(shù),但它們與嵌入的300個(gè)維度有關(guān),而不是與單詞的索引有關(guān)。

對(duì)于如此低的精確度,失去所有的可解釋性似乎是一個(gè)艱難的權(quán)衡。但是,對(duì)于更復(fù)雜的模型,我們可以利用黑匣子解釋器,比如LIME,以便深入了解分類器的工作原理。

LIME

LIME可在Github上獲得通過一個(gè)開源包。黑盒解釋器允許用戶通過擾動(dòng)輸入(在我們的例子中是從句子中刪除單詞)并查看預(yù)測如何變化來解釋任何分類器對(duì)一個(gè)特定示例的決策。

讓我們從我們的數(shù)據(jù)集中看一些句子的解釋。

手把手教你解決90%的NLP問題

選擇正確的災(zāi)難詞匯來分類為“相關(guān)”。

手把手教你解決90%的NLP問題

在這里,單詞對(duì)分類的貢獻(xiàn)似乎不那么明顯。

然而,我們沒有時(shí)間研究數(shù)據(jù)集中的數(shù)千個(gè)示例。相反,我們要做的是對(duì)一個(gè)具有代表性的測試用例樣本運(yùn)行LIME,并查看哪些單詞會(huì)不斷出現(xiàn),成為強(qiáng)大的貢獻(xiàn)者。使用這種方法,我們可以得到單詞重要性評(píng)分,就像我們之前的模型一樣,并驗(yàn)證我們的模型的預(yù)測。

手把手教你解決90%的NLP問題

Word2Vec: 單詞重要性

看起來這個(gè)模型選擇了高度相關(guān)的詞匯,這意味著它似乎做出了可以理解的決定。在所有之前的模型中,這些似乎是最相關(guān)的詞匯,因此我們更愿意將它們部署到生產(chǎn)環(huán)境中。

第8步:利用語義,使用端到端的方法

我們已經(jīng)介紹了生成密集的語句嵌入的快速而有效的方法。然而,通過忽略單詞的順序,我們丟棄了我們句子的所有語法信息。如果這些方法不能提供足夠的結(jié)果,你可以使用更復(fù)雜的模型,它將整個(gè)句子作為輸入并預(yù)測標(biāo)簽,而不需要構(gòu)建中間表示。一種常見的方法是使用Word2Vec或更近期的方法如GloVe或CoVe將一個(gè)句子視為單個(gè)單詞向量的序列。這就是我們下面要做的。

手把手教你解決90%的NLP問題

高效的端到端的結(jié)構(gòu)

Convolutional Neural Networks for Sentence Classification訓(xùn)練非??欤且环N入門級(jí)的深度學(xué)習(xí)架構(gòu)。而卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要是圖像數(shù)據(jù)性能著稱,他們?cè)谖谋鞠嚓P(guān)的任務(wù)上也能提供優(yōu)秀的結(jié)果。和通常最復(fù)雜的NLP訓(xùn)練方法(如[LSTMs]和編碼器/解碼器架構(gòu)更快。這個(gè)模型保存單詞的順序,并學(xué)習(xí)有價(jià)值的信息,以及哪些單詞序列可以預(yù)測我們的目標(biāo)類。與之前的模型相反,它可以區(qū)分“Alex eats plants”和“Plants eat Alex”。

與以前的方法相比,訓(xùn)練這個(gè)模型并不需要更多的工作,并為我們提供了一個(gè)比以前的方法更好的模型,獲得79.5%的準(zhǔn)確率!與上面的模型一樣,下一步應(yīng)該是使用我們描述的方法探索和解釋預(yù)測,以驗(yàn)證它確實(shí)是部署到用戶的最佳模型。到目前為止,你應(yīng)該已經(jīng)習(xí)慣了自己處理這個(gè)問題。

要點(diǎn)總結(jié)

下面是我們成功使用的方法的快速回顧:

  • 從一個(gè)快速簡單的模型開始
  • 解釋其預(yù)測
  • 了解它正在犯的錯(cuò)誤
  • 使用這些知識(shí)來指導(dǎo)下一步,無論是處理數(shù)據(jù)還是更復(fù)雜的模型。

 

責(zé)任編輯:張燕妮 來源: AI公園
相關(guān)推薦

2018-03-23 20:45:23

機(jī)器學(xué)習(xí)NLP文本數(shù)據(jù)

2020-04-14 10:20:12

MySQL數(shù)據(jù)庫死鎖

2024-10-16 11:40:47

2024-03-11 08:00:00

位置偏差算法矩陣分解算法

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)

2017-12-01 05:01:35

WiFi干擾無線網(wǎng)絡(luò)

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2021-02-26 11:54:38

MyBatis 插件接口

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2009-12-24 13:52:57

網(wǎng)絡(luò)接入控制解決方案

2021-09-26 16:08:23

CC++clang_forma

2021-07-13 10:17:25

GitHubLinux代碼

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

2022-07-27 08:16:22

搜索引擎Lucene
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)