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

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

時間:2020-10-16來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時間:2020-10-16點(diǎn)擊量:作者:Sissi



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

  看數(shù)據(jù)
 

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

  1)submission_time -故事提交時。

  2)url —提交的基本URL。

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

  4)headline —提交的標(biāo)題。
 

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

  自然語言處理-第一步
 

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

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

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

  刪除標(biāo)點(diǎn)符號
 

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

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

  刪除停用詞
 

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

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

  生成所有標(biāo)題的矩陣
 

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

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

  減少尺寸
 

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

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

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

  添加元功能
 

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

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

  增加更多功能
 

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

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

  做出預(yù)測
 

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

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

  評估誤差
 

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

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

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

  下一步
 

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

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

 

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




 

預(yù)約申請免費(fèi)試聽課

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

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

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

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

網(wǎng)站地圖