日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决90%的NLP问题:逐步指导

發布時間:2024/9/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决90%的NLP问题:逐步指导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何解決90%的NLP問題:逐步指導

使用機器學習來理解和利用文本。

如何將5 W和H應用于文本數據!

文本數據無處不在

無論您是成熟公司還是致力于推出新服務,您始終可以利用文本數據來驗證,改進和擴展產品的功能。從文本數據中提取意義和學習的科學是一個活躍的研究主題,稱為自然語言處理(NLP)。

每天NLP產生新的和令人興奮的 結果,是一個非常大的領域。然而,Insight團隊與數百家公司合作,看到一些關鍵的實際應用程序比其他任何公司更頻繁地出現:

  • 識別不同的用戶/客戶群(例如預測流失,生命周期價值,產品偏好)
  • 準確地檢測和提取不同類別的反饋(正面和負面評論/意見,提及特定屬性,如服裝尺碼/合身......)
  • 根據意圖對文本進行分類(例如請求基本幫助,緊急問題)

雖然許多NLP論文和教程存在于網上,但我們發現很難找到有關如何從頭開始有效解決這些問題的指南和技巧。

本文如何提供幫助

在每年領導數百個項目并獲得美國各地頂級團隊的建議后,我們寫了這篇文章來解釋如何構建機器學習解決方案來解決上述問題。我們將從最簡單的方法開始,然后轉向更細微的解決方案,例如特征工程,單詞向量和深度學習。

閱讀本文后,您將了解如何:

  • 收集,準備和檢查數據
  • 構建簡單的模型,并在必要時過渡到深度學習
  • 解釋和理解您的模型,以確保您實際捕獲信息而不是噪音

我們把這篇文章寫成了一步一步的指南; 它還可以作為高效標準方法的高級概述。

這篇文章附有一個交互式筆記本,演示和應用所有這些技術。隨意運行代碼并繼續!

第1步:收集您的數據

示例數據源

每個機器學習問題都從數據開始,例如電子郵件,帖子或推文列表。常見的文字信息來源包括:

  • 產品評論(在亞馬遜,Yelp和各種應用商店)
  • 用戶生成的內容(推文,Facebook帖子,StackOverflow問題)
  • 故障排除(客戶請求,支持服務單,聊天記錄)

“社交媒體災難”數據集

對于這篇文章,我們將使用 Figure Eight慷慨提供的數據集,稱為“社交媒體上的災難”,其中:

貢獻者查看了超過

10,000

條推文,其中包括“點燃”,“隔離”和“混亂”等各種搜索,然后注意到推文是否涉及災難事件(而不是與單詞或電影評論相關的笑話或一些非災難性的事情)。

我們的任務是檢測哪些推文是關于災難性事件的,而不是像電影那樣無關緊要的話題。為什么?一個潛在的應用是完全通知執法官員緊急緊急情況,同時忽略對最近的亞當桑德勒電影的評論。這項任務的一個特殊挑戰是兩個類都包含用于查找推文的相同搜索詞,因此我們必須使用微妙的差異來區分它們。

在本文的其余部分,我們將把關于災難的推文稱為“ disaster(災難 )”,并將有關其他任何內容的推文稱為“ (irrelevant)無關緊要 ”。

標簽

我們已經標記了數據,因此我們知道哪些推文屬于哪些類別。正如Richard Socher在下面概述的那樣,通常更快,更簡單,更便宜地找到并標記足夠的數據來訓練模型,而不是試圖優化復雜的無監督方法。

Richard Socher的專業提示

第2步:清理數據

我們遵循的首要規則是:

“您的模型將永遠與您的數據一樣好。”

數據科學家的關鍵技能之一是了解下一步是應該對模型還是數據進行處理。一個好的經驗法則是首先查看數據然后進行清理。一個干凈的數據集將允許模型學習有意義的功能,而不是過度匹配無關的噪音。

以下是用于清理數據的清單:( 有關詳細信息,請參閱代碼):

  • 刪除所有不相關的字符,例如任何非字母數字字符
  • 通過分詞將其分割成單個的單詞文本
  • 刪除不相關的單詞,例如“@”twitter提及或網址
  • 將所有字符轉換為小寫,以便將諸如“hello”,“Hello”和“HELLO”之類的單詞視為相同
  • 考慮將拼寫錯誤或交替拼寫的單詞組合成單個表示(例如“cool”/“kewl”/“cooool”)
  • 考慮詞形還原(將諸如“am”,“are”和“is”等詞語簡化為常見形式,例如“be”)

按照這些步驟并檢查其他錯誤后,我們可以開始使用干凈的標記數據來訓練模型!

第3步:找到一個好的數據表示

機器學習模型將數值作為輸入。例如,處理圖像的模型采用表示每個顏色通道中每個像素的強度的矩陣。

一個微笑的臉表示為數字矩陣。

我們的數據集是一個句子列表,所以為了讓我們的算法從數據中提取模式,我們首先需要找到一種方法來表示我們的算法可以理解的方式,即作為數字列表。

one-hot編碼(Bag of Words)

表示計算機文本的一種自然方式是將每個字符單獨編碼為數字(例如ASCII)。如果我們將這個簡單的表示提供給分類器,則必須僅根據我們的數據從頭學習單詞的結構,這對于大多數數據集是不可能的。我們需要使用更高級別的方法。

例如,我們可以在數據集中構建所有唯一單詞的詞匯表,并將唯一索引與詞匯表中的每個單詞相關聯。然后將每個句子表示為與我們詞匯表中不同單詞的數量一樣長的列表。在此列表中的每個索引處,我們標記給定單詞在句子中出現的次數。這被稱為Bag of Words模型,因為它是一種完全忽略句子中單詞順序的表示。這如下圖所示。

將句子表示為一Bage of Words。左邊的句子,右邊的表示。向量中的每個索引代表一個特定的單詞。

可視化嵌入

我們在“社交媒體災難”示例中的詞匯量大約有20,000個單詞,這意味著每個句子都將表示為長度為20,000的向量。向量將主要包含0,因為每個句子只包含我們詞匯表的一小部分。

為了查看我們的嵌入是否正在捕獲與我們的問題相關的信息(即推文是否與災難有關),最好將它們可視化并查看類看起來是否分離得很好。由于詞匯表通常非常大,并且不可能以20,000維度可視化數據,因此像PCA這樣的技術將有助于將數據投影到二維。這個繪制如下。

可視化詞袋嵌入

這兩個類看起來分離不是很好,這可能是我們嵌入的一個特征,或者僅僅是我們降維的一個特征。為了查看Bag of Words功能是否有用,我們可以根據它們訓練分類器。

第4步:分類

當第一個接近問題時,一般的最佳做法是從可以解決工作的最簡單的工具開始。無論何時對數據進行分類,其多功能性和可解釋性的共同點都是Logistic回歸。訓練非常簡單,結果可以解釋,因為您可以輕松地從模型中提取最重要的系數。

我們將數據分成一個訓練集,用于擬合我們的模型和一個測試集,以查看它對未見數據的概括性。經過培訓,我們得到75.4%的準確率。不是太寒酸!猜測最頻繁的分類(“不相關(irrelevant)”)將只給我們57%。然而,即使75%的精度足以滿足我們的需求,我們也絕不應該在不試圖了解它的情況下運送模型。

第五步:檢查

混亂矩陣

第一步是了解我們的模型所犯的錯誤類型,以及哪種錯誤是最不可取的。在我們的示例中,false positives將不相關的推文分類為災難,而false negatives則將災難歸類為不相關的推文。如果優先考慮對每個潛在事件作出反應,我們會希望降低我們的false negatives。但是,如果我們在資源方面受到限制,我們可能會優先考慮較低的false positives率以減少誤報。可視化此信息的一種好方法是使用混淆矩陣,該矩陣將我們的模型預測與真實標簽進行比較。理想情況下,矩陣將是從左上角到右下角的對角線(我們的預測完全匹配真相)。

混淆矩陣(綠色比例高,藍色低)

我們的分類器比 false negatives(按比例)產生更多的false positives 。換句話說,我們模型最常見的錯誤是將災難分類為不相關。如果false positives代表了執法的高成本,那么這對我們的分類者來說可能是一個很好的偏見。

解釋我們的模型

為了驗證我們的模型并解釋其預測,重要的是要查看它用于做出決策的單詞。如果我們的數據有偏差,我們的分類器將對樣本數據做出準確的預測,但該模型在現實世界中不會很好地概括。在這里,我們為災難和無關的分類繪制最重要的單詞。使用Bag of Words和Logistic回歸繪制單詞重要性很簡單,因為我們可以提取和排列模型用于其預測的系數。

Bag of words:詞重要性

我們的分類器正確地采用了一些模式(廣島,大屠殺),但顯然在某些無意義的術語上過度擬合(heyoo,x1392)。現在,我們的Bag of Words模型正在處理不同單詞的巨大詞匯并平等對待所有單詞。然而,這些詞中的一些是非常頻繁的,并且只會對我們的預測產生噪音。接下來,我們將嘗試一種方法來表示可以解釋單詞頻率的句子,看看我們是否可以從我們的數據中獲取更多信號。

第六步:考慮詞匯結構

TF-IDF

為了幫助我們的模型更多地關注有意義的單詞,我們可以在我們的Bag of Words模型之上使用TF-IDF分數(Term Frequency,Inverse Document Frequency)。TF-IDF根據它們在我們的數據集中的稀有程度對單詞進行加權,對過于頻繁的單詞進行折扣并僅添加噪聲。這是我們新嵌入的PCA投影。

可視化TF-IDF嵌入

我們可以看到上面兩種顏色之間有更明確的區別。這應該使我們的分類器更容易 分離兩個組。讓我們看看這是否會帶來更好的性能。在我們的新嵌入體上訓練另一個Logistic回歸,我們得到76.2%的準確度。

一點點改進。我們的模型是否開始接受更重要的詞匯?如果我們在防止我們的模型“作弊”的同時獲得更好的結果,那么我們可以真正認為這個模型是升級。

TF-IDF:單詞重要性

它所拾取的單詞看起來更相關!盡管我們的測試集上的指標僅略有增加,但我們對模型使用的術語更有信心,因此在將與客戶交互的系統中部署它時會感覺更舒服。

第7步:利用語義

Word2Vec

我們最新模型設法獲得高信號詞。但是,如果我們部署此模型,我們很可能會遇到以前在訓練集中沒有看到過的單詞。即使在培訓期間看到非常相似的單詞,之前的模型也無法準確地對這些推文進行分類。

為了解決這個問題,我們需要捕捉詞語的語義,這意味著我們需要理解像“好”和“積極”這樣的詞比“杏”和“大陸”更接近。我們將用來幫助我們捕獲意義的工具稱為Word2Vec。

使用預先訓練過的單詞

Word2Vec是一種查找單詞連續嵌入的技術。它通過閱讀大量文本并記住哪些詞語傾向于出現在類似的語境中來學習。在對足夠的數據進行訓練之后,它為詞匯表中的每個單詞生成300維向量,其中具有相似含義的單詞彼此更接近。

該報告的作者論文開源了一個非常大的語料庫,我們可以利用到包括語義一些知識轉化成我們的模型這是預先訓練的典范。可以在與此帖相關聯的存儲庫中找到預先訓練的向量。

句子級別表示

為我們的分類器設置句子嵌入的快速方法是平均句子中所有單詞的Word2Vec分數。這是一個像之前一樣的Bag of Words方法,但這次我們只丟失了句子的語法,同時保留了一些語義信息。

Word2Vec句子嵌入

以下是使用以前技術的新嵌入的可視化:

可視化Word2Vec嵌入

這兩組顏色看起來更加分離,我們的新嵌入應該有助于我們的分類器找到兩個類之間的分離。在第三次訓練相同模 型(Logistic回歸)后,我們得到77.7%的準確度得分,我們的最佳結果呢!是時候檢查我們的模型了。

復雜性/可解釋性權衡

由于我們的嵌入不像我們之前的模型那樣表示為每個單詞一維的向量,因此很難看出哪些單詞與我們的分類最相關。雖然我們仍然可以訪問Logistic回歸的系數,但它們與嵌入的300維有關,而不是單詞的索引。

對于如此低的準確度增益,失去所有可解釋性似乎是一種嚴厲的權衡。但是,對于更復雜的模型,我們可以利用LIME等黑盒解釋器,以便深入了解分類器的工作原理。

LIME

LIME 可通過開源軟件包在Github上獲得。黑盒解釋器允許用戶通過擾亂輸入(在我們的情況下從句子中刪除單詞)并查看預測如何變化來解釋任何分類器在一個特定示例上的決定。

讓我們看一下我們數據集中句子的幾個解釋。

挑選正確的災難詞語以歸類為“相關”。在這里,單詞對分類的貢獻似乎不太明顯

但是,我們沒有時間探索數據集中的數千個示例。我們要做的是在有代表性的測試用例樣本上運行LIME,看看哪些詞會繼續成為強大的貢獻者。使用這種方法,我們可以像以前的模型一樣獲得單詞重要性分數,并驗證模型的預測。

Word2Vec:單詞重要性

看起來該模型選擇了高度相關的詞語,暗示它似乎做出了可以理解的決定。這些似乎是以前所有型號中最相關的詞,因此我們更愿意部署到生產中。

步驟8:使用端到端方法利用語法

我們已經介紹了生成緊湊句嵌入的快速有效方法。但是,通過省略單詞的順序,我們將丟棄句子的所有句法信息。如果這些方法不能提供足夠的結果,您可以使用更復雜的模型,將整個句子作為輸入并預測標簽,而無需構建中間表示。要做到這一點的常用方法是把一個句子中的單詞矢量序列使用或者Word2Vec或更近的方法,比如GloVe或GoVe。這是我們將在下面做的。

高效的端到端架構(源代碼)

用于句子分類的卷積神經網絡訓練非常快,并且作為入門級深度學習架構運行良好。雖然卷積神經網絡(CNN)主要以其在圖像數據上的性能而聞名,但它們在文本相關任務上提供了出色的結果,并且通常比大多數復雜的NLP方法(例如LSTM和編碼器/解碼器架構)更快地進行訓練。該模型保留了單詞的順序,并學習了有關哪些單詞序列可以預測目標類的有價值信息。與之前的型號相反,它可以區分“Alex吃植物”和“植物吃Alex”之間的區別。

訓練此模型不需要比以前的方法更多的工作(詳見代碼),并為我們提供了比以前更好的模型,準確度達到79.5%!與上述模型一樣,下一步應該是使用我們描述的方法探索和解釋預測,以驗證它確實是部署到用戶的最佳模型。到現在為止,您應該自己解決這個問題。

最后的筆記

以下是我們成功使用的方法的簡要回顧:

  • 從快速簡單的模型開始
  • 解釋它的預測
  • 了解它正在犯的錯誤
  • 使用該知識為下一步提供信息,無論是對您的數據還是更復雜的模型。

這些方法適用于特定的示例案例,使用為理解和利用短文本(如推文)而定制的模型,但這些思想廣泛適用于各種問題。我希望這對你有幫助,我們很樂意聽到你的意見和問題!

點擊英文原文

更多文章歡迎訪問 http://www.apexyun.com/

聯系郵箱:public@space-explore.com

(未經同意,請勿轉載)


總結

以上是生活随笔為你收集整理的如何解决90%的NLP问题:逐步指导的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。