偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

手把手教你搞定90%的NLP問題

人工智能 機器學(xué)習(xí)
作者 Emmanuel Ameisen 將在這篇文章中一步步地指導(dǎo)你如何使用機器學(xué)習(xí)的方法來解決大部分的 NLP 問題,文中會列舉一個典型的分類案例——Twitter 的內(nèi)容是否和災(zāi)難事件相關(guān),來詳細(xì)說明我們應(yīng)該按怎樣的步驟來處理文本數(shù)據(jù)。

 [[223595]]

導(dǎo)讀:作者 Emmanuel Ameisen 將在這篇文章中一步步地指導(dǎo)你如何使用機器學(xué)習(xí)的方法來解決大部分的 NLP 問題,文中會列舉一個典型的分類案例——Twitter 的內(nèi)容是否和災(zāi)難事件相關(guān),來詳細(xì)說明我們應(yīng)該按怎樣的步驟來處理文本數(shù)據(jù)。

文本數(shù)據(jù)無處不在

不論是已經(jīng)成熟的企業(yè)或是正要上線新業(yè)務(wù),你都可以利用文本數(shù)據(jù)來驗證、提升以及擴展產(chǎn)品的功能。這種從文本數(shù)據(jù)中提取含義并進行學(xué)習(xí)的科學(xué)叫做自然語言處理(Natural Language Processing, NLP),是當(dāng)前非常熱門的研究課題。

NLP 是一個非常大的研究領(lǐng)域且每天都在產(chǎn)生一些新的激動人心的成果。經(jīng)過和上百家企業(yè)的合作,我們 Insight 團隊從中發(fā)現(xiàn)了幾個關(guān)鍵的實際應(yīng)用,這些應(yīng)用會有更高的出現(xiàn)頻率:

  • 識別使用者 / 客戶不同的用戶群(例如預(yù)測用戶流失、生命周期價值、產(chǎn)品偏好等)
  • 精準(zhǔn)檢測和提取反饋分類(例如正面和負(fù)面的評論 / 觀點,對諸如衣服尺寸、舒適度等一些特別屬性的提及)
  • 根據(jù)意圖進行文本分類(例如請求普通幫助,緊急問題處理)

鑒于 NLP 的文章和指南很多都存在于網(wǎng)絡(luò)上,我們發(fā)現(xiàn)很難找到對處理這些問題徹底有效的指導(dǎo)或建議。

這篇文章能幫到你什么

我們在這一年里做了數(shù)百個項目,并吸取了全美***團隊的建議,整理出這篇文章來說明如何使用機器學(xué)習(xí)解決上述問題。我們將從最簡單可行的方法說起,然后進階到更細(xì)致的解決方案,例如特征工程、詞向量以及深度學(xué)習(xí)等。

讀完這篇文章,你將會知道如何去:

  • 收集、準(zhǔn)備和檢測數(shù)據(jù)
  • 從建立簡單模型開始,必要時使用深度學(xué)習(xí)來過渡
  • 解釋和理解模型,來確保你實際捕獲的是有效信息而不是噪聲

這篇文章是一份循序漸進的操作指南,也是一份對高效標(biāo)準(zhǔn)化過程的高度概括。

文章還附帶了一份互動筆記,里面對所有涉及到的技術(shù)都進行了論證和應(yīng)用。你可以嘗試邊運行代碼邊看下文。

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

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

每一個機器學(xué)習(xí)問題都始于數(shù)據(jù),比如一組郵件、帖子或是推文。文本信息的常見來源包括:

商品評價(來自 Amazon、Yelp 以及其他 App 商城)

用戶產(chǎn)出的內(nèi)容(推文、Facebook 的帖子、StackOverflow 的提問等)

問題解決(客戶請求、技術(shù)支持、聊天記錄)

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

在這篇文章中,我們將使用 CrowdFlower 提供的一個數(shù)據(jù)集,名為“社交媒體中的災(zāi)難(Disasters on Social Media)”。

貢獻者們查看了超過 10000 條具有類似“著火”、“隔離”、“混亂”等搜索關(guān)鍵詞的推文,然后標(biāo)記這個推文是否和災(zāi)難事件有關(guān)(與之相反的是一些玩笑、電影點評或是一些非災(zāi)難性的事件)。

我們的任務(wù)是分辨出哪些推文是真正和災(zāi)難事件相關(guān)的,而不是一些類似電影描述的不相關(guān)話題。為什么呢?一個潛在的應(yīng)用是針對突發(fā)事件對執(zhí)法人員進行專門的提醒,而不會被其他無關(guān)信息,比如 Adam Sandler 新上映的電影所干擾。這項任務(wù)中一個特別的挑戰(zhàn)是這兩種情況在搜索推文的時候都用到了相同的檢索詞,所以我們只能通過細(xì)微的差別去區(qū)分他們。

在下面的文章中,我們將把與災(zāi)難事件相關(guān)的推文稱為“災(zāi)難”,將其他推文稱為“不相關(guān)的”。

標(biāo)簽

我們已經(jīng)標(biāo)注過數(shù)據(jù),所以知道推文是如何分類的。如 Richard Socher 所說,比起優(yōu)化一個復(fù)雜的無監(jiān)督學(xué)習(xí)方法,尋找和標(biāo)記足夠多的數(shù)據(jù)來訓(xùn)練模型會更加快捷、簡單和廉價。

 

Richard Socher 的高級技巧

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

我們要遵循的首要原則是:“你的模型必須和你的數(shù)據(jù)一樣好。”

數(shù)據(jù)科學(xué)家的一個必備技能是知道自己的下一步操作是處理模型還是數(shù)據(jù)。有一個好的經(jīng)驗法則是先觀察數(shù)據(jù)然后進行數(shù)據(jù)清洗。一個干凈的數(shù)據(jù)集能使模型學(xué)習(xí)到有意義的特征而不會被一些不相關(guān)的噪聲影響。

可以借鑒下方的列表來進行數(shù)據(jù)清洗:(查看代碼獲取更多信息)

  • 去除一切不相關(guān)的字符,比如任何非字母數(shù)字的字符
  • 標(biāo)記你的文本,將他們拆分為獨立的單詞
  • 去除不相關(guān)的詞語,比如 @這類提醒或是 url 鏈接
  • 將所有字母轉(zhuǎn)換成小寫,這樣“hello”,“Hello”,“HELLO”就會被當(dāng)做同樣的單詞處理
  • 將拼錯的單詞或是多種拼法的單詞與某個特定的表達綁定(比如:“cool”/“kewl”/“cooool”)
  • 考慮詞形還原(比如將“am”,“are”,“is”都看做“be”)

完成這些步驟并檢查完其他錯誤后,我們就可以使用這些干凈的、標(biāo)記過的數(shù)據(jù)進行模型訓(xùn)練了!

步驟三:找到好的數(shù)據(jù)表達方式

機器學(xué)習(xí)模型會使用數(shù)值作為輸入。例如處理圖像的模型會用矩陣來表示每個顏色通道像素的亮度。

 

用數(shù)字矩陣表現(xiàn)的笑臉

我們的數(shù)據(jù)集是一系列的句子,為了使我們的算法能從數(shù)據(jù)中提取特征,首先需要找到一種算法能夠理解的表達方式,比如一串?dāng)?shù)字。

獨熱編碼(One-hot encoding)- 詞袋模型(Bag of Words)

通常為計算機解釋文本的方法是將每一個字符都編為一個獨立的數(shù)字(例如 ASCII 碼)。如果使用這種簡單的表達來做分類器,需要我們的數(shù)據(jù)從頭開始學(xué)習(xí)詞語的結(jié)構(gòu),這對大多數(shù)數(shù)據(jù)集來說是很難實現(xiàn)的。所以我們需要一種更上層的方法。

例如,我們可以為數(shù)據(jù)集中的所有單詞制作一張詞表,然后將每個單詞和一個唯一的索引關(guān)聯(lián)。每個句子都是由一串?dāng)?shù)字組成,這串?dāng)?shù)字是詞表中的獨立單詞對應(yīng)的個數(shù)。通過列表中的索引,我們可以統(tǒng)計出句子中某個單詞出現(xiàn)的次數(shù)。這種方法叫做 詞袋模型,它完全忽略了句子中單詞的順序。如下圖所示:

 

用詞袋模型表示句子。句子在左邊,模型表達在右邊。向量中的每一個索引代表了一個特定的單詞。

嵌入可視化

在“社交媒體中的災(zāi)難”樣本詞表中大概會有 20000 個單詞,這意味著每句句子都會用一個長度為 20000 的向量來表示。向量的 大部分會被 0 填充,因為每句話只包含了詞表中很小的一個子集。

為了看出嵌入的工作是否真正抓住了和問題相關(guān)的信息(比如推文是否與災(zāi)難相關(guān)),有一個好方法是將它們可視化,然后觀察結(jié)果是否有很好的分布。考慮到詞表通常很大,而且用 20000 維的數(shù)據(jù)做可視化是基本不可能的,所以我們使用了 PCA 這種技術(shù)將數(shù)據(jù)降到二維。繪制如下:

 

詞袋模型嵌入的可視化

兩個分類看起來沒有很好的分離,這可能是我們選擇的嵌入方法的特征或是單純因為維度的減少引起的。為了了解詞袋模型的特征是否會起一些作用,我們可以試著基于它訓(xùn)練一個分類器。

步驟四:分類

當(dāng)初次接觸一個問題,通常來說***的方法是先挑選一個能解決問題的最簡單的工具。當(dāng)提到數(shù)據(jù)分類時,一般***的是通用性和可解釋性兼具的邏輯回歸算法。這種算法很容易訓(xùn)練而且結(jié)果也是可解釋的,你可以很輕松地從模型中提取出最重要的一些系數(shù)。

我們將數(shù)據(jù)分為兩個集合,訓(xùn)練集用于匹配模型,測試集用于觀察應(yīng)用在未知數(shù)據(jù)上的效果。訓(xùn)練后我們得到了 75.4% 的精確度。結(jié)果還不錯!推測出現(xiàn)最多的類(“不相關(guān)”)只能達到 57%。但是,即使是 75% 的精確度也已經(jīng)足夠好了,我們決不能在還沒有理解模型的情況下就開始應(yīng)用它。

步驟五:檢驗

混淆矩陣

***步是理解我們的模型會產(chǎn)生哪些錯誤類型,哪些錯誤是我們最不希望出現(xiàn)的。在例子中,誤報(false positive)是指將不相關(guān)的推文歸為災(zāi)難,漏報(false negative)是指將真實災(zāi)難歸為不相關(guān)的。如果需要優(yōu)先響應(yīng)所有潛在事件,我們需要降低漏報率。如果是資源有限,我們就需要優(yōu)先降低誤報率來減少錯誤告警。我們可以使用混淆矩陣來可視化這些信息,它能將模型的預(yù)測與真實的標(biāo)簽進行比較。理想狀態(tài)下,矩陣將形成一條貫穿左上角至右下角的對角線(此時預(yù)測值和真實值***匹配)。

 

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

我們的分類器生成的漏報要比誤報多(按比例)。換句話說,我們模型最常見的錯誤是將災(zāi)難事件錯誤地劃分到了不相關(guān)的分類。如果誤報會造成法律實施上的高昂成本,這對我們的分類器來說可能是個好事。

解釋和說明模型

為了驗證我們的模型并解釋它的預(yù)測,就需要觀察它是用哪些詞來做決策的。如果我們的數(shù)據(jù)本身有偏差,分類器能基于樣例數(shù)據(jù)做出準(zhǔn)確的預(yù)測,但是將模型應(yīng)用在真實世界中的結(jié)果就不會很理想。我們繪制出了災(zāi)難類和不相關(guān)類中最重要的一些詞。用詞袋模型和邏輯回歸來繪制單詞重要性非常簡單,我們只需要將模型預(yù)測時使用的系數(shù)進行提取和排序。

 

詞袋模型:單詞重要性

我們的分類器正確地找出了一些特征(hiroshima, massacre),但很顯然在一些無意義的詞上出現(xiàn)了過擬合(heyoo, x1392)?,F(xiàn)在,我們的詞袋模型處理著大量的詞匯,且每個單詞都是被平等對待的。但是,有些詞出現(xiàn)的頻率非常高,卻只會對預(yù)測提供噪聲。接下來,我們會嘗試一種能解釋詞頻的方法來表達句子,來看是否能從數(shù)據(jù)中獲取更多信息。

步驟六:解釋詞語結(jié)構(gòu)

TF-IDF

為了使我們的模型能更多地關(guān)注有意義的單詞,我們可以在詞袋模型上進行 TF-IDF(Term Frequency, Inverse Document Frequency)評分。TF-IDF 根據(jù)單詞在數(shù)據(jù)集中的稀有程度打分,會對一些出現(xiàn)太過頻繁且只會增加噪聲的詞進行削減。下圖是我們新嵌入的 PCA 投影圖:

 

TF-IDF 嵌入的可視化

上圖中我們可以看到,兩種顏色有了更清晰的區(qū)分。這能使我們的分類器能更容易地區(qū)分兩個組。讓我們看看這樣是否會形成更好的結(jié)果。用我們新的嵌入訓(xùn)練的另一個邏輯回歸模型得到了 76.2% 的精確度。

這是一個非常微小的提升。我們的模型開始注意到更重要的單詞了嗎?如果我們在保證模型沒有“欺騙”行為的情況下得到了更好的結(jié)果,那么可以認(rèn)為這個模型有了提升。

 

TF-IDF: 單詞重要性

被選出的單詞看起來更相關(guān)了!雖然我們測試集的矩陣只有略微的增長,但是我們對模型選用的詞匯有了更多的信心,因此能更放心地將它部署到一些需要和客戶交互的系統(tǒng)中。

步驟七:利用語義

Word2Vec

我們***的模型設(shè)法注意到了高層的信號詞。但是如果我們部署了這個模型,很有可能會遇到在訓(xùn)練集中沒有出現(xiàn)過的單詞。那么之前的模型可能就無法準(zhǔn)確地為這些推文分類,即使在訓(xùn)練時已經(jīng)遇到過類似的詞語。

為了解決這個問題,我們需要獲取到詞語的語義,也就是說我們需要理解“good”和“positive”比“apricot”和“continent”更接近。我們會使用一個叫做 Word2Vec 的工具來幫助我們獲取含義。

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

Word2Vec 是一種用來為單詞尋找連續(xù)嵌入的技術(shù)。它通過讀取大量文本并記憶出現(xiàn)在相似上下文中的單詞來進行學(xué)習(xí)。在經(jīng)過足夠的數(shù)據(jù)訓(xùn)練后,它會為詞表中的每個單詞生成一個 300 維的向量,具有相似含義的單詞會靠的更近。

這篇文章的作者開源了一個在很大的語料庫上預(yù)先訓(xùn)練過的模型,我們可以利用它來為我們的模型引入一些語義的知識。預(yù)先訓(xùn)練的向量可以在這篇文章的資源庫中找到。

句子級別的表達

一種讓句子快速嵌入我們分類器的方法是對句子中所有單詞取 Word2Vec 分?jǐn)?shù)的平均值。用的是和之前一樣的詞袋方法,但是這次我們在保留一些語義信息的時候,僅丟失了句子的語法。

 

Word2Vec 句子嵌入

下面是使用之前所說的技術(shù)形成的新嵌入的可視化:

 

Word2Vec 嵌入可視化

兩組顏色區(qū)分的更明顯了,這次新的嵌入會幫助我們的分類器找到兩類之間的分隔。在對同一個模型訓(xùn)練了三次之后(邏輯回歸),我們得到了 77.7% 的準(zhǔn)確率,這是至今最棒的結(jié)果了!是時候檢驗?zāi)P土恕?/p>

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

鑒于在之前的模型中,我們的嵌入不是表達成每個單詞對應(yīng)一個一維向量,這就更難判斷出哪些單詞和我們的分類是最相關(guān)的。但是我們?nèi)匀豢梢允褂眠壿嫽貧w的系數(shù),因為它和我們嵌入的 300 個維度相關(guān)而不和單詞的索引相關(guān)。

對于準(zhǔn)確性上如此微弱的提升,丟失所有可解釋性似乎是一種很苛刻的權(quán)衡。但是在使用更復(fù)雜的模型時,我們可以利用 LIME這類黑盒解釋器 來查看我們的分類器是怎么工作的。

LIME

LIME 可以在 Github 的開源包里獲取到。黑盒解釋器允許用戶利用一個典型的案例來解釋任何一個分類器的決定,可以通過擾動輸入(在我們的案例中,是從句子中移除單詞)來觀察預(yù)測的變化。

來看一下我們數(shù)據(jù)集中句子的一組解釋。

 

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

 

這里,單詞對分類的影響似乎不明顯

但我們沒有時間去探索數(shù)據(jù)集中成千上萬的案例。取而代之的是我們會用 LIME 跑在具有代表性的測試樣本上來看哪些單詞會一直有很強的貢獻。使用這種方法,我們就能像之前的模型一樣得到單詞重要性得分,并驗證模型的預(yù)測。

 

Word2Vec: 單詞重要性

似乎能找出高度相關(guān)詞語的模型就意味著能夠做出可理解的決策。這些應(yīng)該是使用之前模型產(chǎn)出的最相關(guān)的單詞,因此我們能更安心地應(yīng)用到生產(chǎn)中了。

步驟八:用端到端方法處理語法

之前文章的內(nèi)容涵蓋了用于生成緊湊句子嵌入的快速有效的方法。但是,由于忽略了單詞的順序,我們失去了句子中所有語法信息。如果這些方法無法提供足夠有效的結(jié)果,你可以用一些更復(fù)雜的模型,它們會把整句句子作為輸入,并在不需要構(gòu)建中間表達的情況下預(yù)測標(biāo)簽。通常的做法是用 Word2Vec 或是一些更新的方法,比如 GloVe 或 CoVe,把句子當(dāng)做一系列獨立的單詞向量。我們下面便會這么做。

 

一個高效的端到端架構(gòu)(源)

用于句子分類的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)訓(xùn)練起來非??欤欠浅:糜玫娜腴T級深度學(xué)習(xí)架構(gòu)。CNN 廣為人知的是它在圖像數(shù)據(jù)上的表現(xiàn),但是它在處理文本相關(guān)的任務(wù)時也能提供極好的效果,而且通常會比大多數(shù)復(fù)雜的 NLP 算法訓(xùn)練的更快(例如 LSTMs 和 Encoder/Decoder 架構(gòu))。這個模型保留了單詞的順序,并且從我們可預(yù)測單詞順序的目標(biāo)類中學(xué)習(xí)有價值的信息。與之前的模型相反,他可以區(qū)分出“Alex eats plants”和“Plants eat Alex”。

訓(xùn)練這個模型并不會比之前的方法花費更多功夫(更詳細(xì)的內(nèi)容可以參考代碼),但效果會比之前的都好,精確度能達到 79.5%!用著上述的模型,我們下一步的操作將是探索和解釋用我們描述的方法做出的預(yù)測,來證實這的確是能夠交付給用戶的***的模型?,F(xiàn)在,你可以放心地嘗試親自操作了。

***

讓我們把之前提到過的成功方法快速的過一下:

  • 從一個快速簡單的模型開始
  • 解釋它的預(yù)測
  • 理解它產(chǎn)生的錯誤
  • 用這些信息來判斷你的下一步操作,是否對你的數(shù)據(jù)起作用,或是需要一個更復(fù)雜的模型

這些方法應(yīng)用到了特殊的案例上,用的是理解和處理像推文一樣小段文字的模型,但是這種思考模式可以廣泛地應(yīng)用到其他問題上。希望這篇文章可以對你有所幫助,也希望可以從你那里聽到一些建議或是咨詢!請在下方盡情地留言,也可以在這里或是 Twitter 上聯(lián)系 EmmanuelAmeisen。

責(zé)任編輯:龐桂玉 來源: AI前線
相關(guān)推薦

2019-10-22 14:30:11

機器學(xué)習(xí)人工智能計算機

2020-12-08 10:32:15

Python郵件tcp

2020-04-14 10:20:12

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

2024-10-16 11:40:47

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2022-02-23 20:53:54

數(shù)據(jù)清洗模型

2021-07-14 09:00:00

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

2020-12-07 09:01:58

冪等系統(tǒng)f(f(x)) =f(

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

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

2021-09-26 16:08:23

CC++clang_forma

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

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

2022-03-14 14:47:21

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

2022-07-27 08:16:22

搜索引擎Lucene

2022-12-07 08:42:35

2020-10-28 14:03:22

NLP自然語言分詞
點贊
收藏

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