旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析如何使用Python進行自然語言處理

大數(shù)據(jù)分析如何使用Python進行自然語言處理

時間:2020-10-16來源:lb577.com點擊量:作者:Sissi
時間:2020-10-16點擊量:作者:Sissi



  Python具有一些強大的工具,使您能夠執(zhí)行自然語言處理(NLP)。在大數(shù)據(jù)分析如何使用Python進行自然語言處理中,我們將學習如何在Python中執(zhí)行一些基本的NLP。
 

  看數(shù)據(jù)
 

  我們將查看一個數(shù)據(jù)集,該數(shù)據(jù)集包括2006年至2015年間向Hacker News提交的內(nèi)容。數(shù)據(jù)取自此處。Arnaud Drizard使用Hacker News API進行了抓取。我們10000從數(shù)據(jù)中隨機采樣了行,并刪除了所有多余的列。我們的數(shù)據(jù)只有四列:
 

  1)submission_time -故事提交時。

  2)url —提交的基本URL。

  3)upvotes -提交的投票數(shù)。

  4)headline —提交的標題。
 

  我們將使用頭條新聞來預測投票數(shù)。數(shù)據(jù)存儲在submissions變量中。
 

  自然語言處理-第一步
 

  我們最終希望訓練一種機器學習算法,使其成為標題,并告訴我們它將獲得多少票。但是,機器學習算法只能理解數(shù)字,而不能理解單詞。我們?nèi)绾螌祟}轉換為算法可以理解的內(nèi)容?
 

  第一步是創(chuàng)建一個稱為單詞袋矩陣的東西。一袋單詞矩陣給我們一個數(shù)字表示哪個單詞在哪個標題中。為了構建單詞袋矩陣,我們首先在整個標題中找到唯一的單詞。然后,我們建立一個矩陣,其中每一行都是標題,每一列都是唯一的單詞之一。然后,我們用單詞在該標題中出現(xiàn)的次數(shù)填充每個單元格。這將導致一個矩陣,其中的許多單元格的值為零,除非詞匯在標題之間大部分是共享的。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  刪除標點符號
 

  我們剛剛制作的矩陣非常稀疏-這意味著很多值都是零。在一定程度上這是不可避免的,因為標題沒有太多共享的詞匯。不過,我們可以采取一些措施來改善問題。目前,Why和why,和use和use.被視為不同的實體,但是我們知道它們指的是相同的詞。我們可以通過簡化每個單詞并刪除所有標點符號來幫助解析器認識到它們實際上是相同的。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  刪除停用詞
 

  某些字詞無法幫助您區(qū)分好壞標題。詞語,例如the,a和also發(fā)生通常足以在所有上下文中,他們沒有真正告訴我們很多關于什么是好還是不好。它們通常同樣有可能同時出現(xiàn)在頭條新聞和頭條新聞中。通過刪除這些,我們可以減小矩陣的大小,并使訓練算法更快。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  生成所有標題的矩陣
 

  現(xiàn)在我們已經(jīng)了解了基礎知識,我們可以為整個標題制作一袋單詞矩陣。我們不需要每次都手動編寫所有代碼,因此我們將使用scikit-learn中的類來自動執(zhí)行。使用scikit-learn的矢量化器來構造您的單詞矩陣包將使此過程變得更加輕松和快捷。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  減少尺寸
 

  我們已經(jīng)構造了一個矩陣,但是它現(xiàn)在具有13631唯一的單詞或列。進行預測將花費很長時間。我們想加快速度,因此我們需要以某種方式減少列數(shù)。一種方法是從信息量最大的列中選擇一個子集,也就是,區(qū)分好和壞標題的列是最好的。
 

  找出信息最多的列的一種好方法是使用一種稱為卡方檢驗的方法??ǚ綑z驗可發(fā)現(xiàn)在高度贊同的帖子和未贊同的帖子之間區(qū)別最大的單詞。這可能是在高評價的帖子中經(jīng)常出現(xiàn)的單詞,而在沒有高評價的帖子中根本沒有出現(xiàn),或者在沒有高評價的帖子中經(jīng)常出現(xiàn)但在高評價的帖子中沒有出現(xiàn)的單詞??ǚ綑z驗僅適用于二進制值,因此我們將upvotes列設置為二進制,將upvotes高于平均值to的值設置為1up to0。缺點之一是,我們使用數(shù)據(jù)集中的知識來選擇特征,從而引入一些過擬合。通過使用數(shù)據(jù)的一個子集進行特征選擇,并使用另一個子集來訓練算法,我們可以解決“現(xiàn)實世界”中的過度擬合問題?,F(xiàn)在,我們將使事情變得更簡單,然后跳過該步驟。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  添加元功能
 

  如果我們忽略標題的“元”功能,那么我們會丟失許多有用的信息。這些功能包括長度,標點數(shù)量,平均單詞長度以及其他特定于句子的功能。添加這些可以大大提高預測準確性。要添加它們,我們將遍歷標題,并對每個標題應用一個函數(shù)。一些功能將以字符為單位計算標題的長度,而其他功能將進行更高級的操作,例如計算數(shù)字位數(shù)。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  增加更多功能
 

  我們可以使用的功能不僅僅是文字功能。我們有一個名為的列submission_time,它告訴我們故事提交的時間,并且可以添加更多信息。通常在進行NLP工作時,您將能夠添加外部功能,從而使您的預測更好。一些機器學習算法可以弄清楚這些功能如何與您的文字功能進行交互(例如,“在午夜發(fā)布,標題中帶有'tacos'的單詞會獲得較高的得分”)。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  做出預測
 

  現(xiàn)在我們可以將單詞翻譯為數(shù)字,可以使用算法進行預測了。我們將隨機選擇7500標題作為訓練集,然后在2500標題測試集上評估算法的性能。在我們訓練的同一集合上預測結果將導致擬合過度,這會導致您的算法針對訓練集過度優(yōu)化-我們認為錯誤率不錯,但在新數(shù)據(jù)上實際上可能更高。對于算法,我們將使用嶺回歸。與普通的線性回歸相比,嶺回歸對系數(shù)造成了損失,從而防止了系數(shù)變得太大。像我們一樣,這可以幫助它處理大量相互關聯(lián)的預測變量(列)。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  評估誤差
 

  現(xiàn)在我們有了預測,但是我們?nèi)绾未_定它們的好壞呢?一種方法是計算測試集預測與測試集實際投票數(shù)之間的錯誤率。我們還希望巴塞爾比較錯誤,以查看結果是否良好。為此,我們可以使用一種簡單的方法為測試集進行基線估計,然后將預測的錯誤率與基線估計的錯誤率進行比較。
 

  一個非常簡單的基準是獲取訓練集中每個提交的平均投票數(shù),并將其用作每個提交的預測。我們將使用平均絕對誤差作為誤差度量。這非常簡單-只需從預測中減去實際值,取差的絕對值,然后找到所有差的平均值即可。

大數(shù)據(jù)分析如何使用Python進行自然語言處理
 

  下一步
 

  此方法在該數(shù)據(jù)集上合理有效,但效果并不理想。我們發(fā)現(xiàn)標題和其他列具有一定的預測價值。我們可以通過使用不同的預測算法(例如隨機森林或神經(jīng)網(wǎng)絡)來改進此方法。在生成詞袋矩陣時,我們也可以使用ngram,例如bigrams和trigram。
 

  在矩陣上 嘗試tf-idf轉換也可能會有所幫助-scikit-learn有一個可自動執(zhí)行此操作的類。我們還可以考慮其他數(shù)據(jù),例如提交文章的用戶,并生成指示諸如用戶的業(yè)力和用戶的近期活動之類的特征。有關已提交網(wǎng)址的其他統(tǒng)計信息(例如,從該網(wǎng)址收到的已提交upuptes的平均數(shù)量)也可能很有用。

 

  進行這些操作時請務必謹慎,以僅考慮進行預測的提交之前存在的信息。所有這些添加都將比我們到目前為止花費更多的時間來運行,但是會減少錯誤。希望您有一些時間來嘗試一下!如果您想與NLP合作,請查看我們的交互式《大數(shù)據(jù)分析課程》。




 

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權所有
備案號:京ICP備12034770號

?2007-2022/ lb577.com 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖