旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 新媒體運(yùn)營(yíng) > 大數(shù)據(jù)分析Python中spaCy文本分類使用教程

大數(shù)據(jù)分析Python中spaCy文本分類使用教程

時(shí)間:2020-06-23來(lái)源:m.lb577.com點(diǎn)擊量:作者:Sissi
時(shí)間:2020-06-23點(diǎn)擊量:作者:Sissi



  文本是極其豐富的信息源。人們每分鐘都會(huì)發(fā)送數(shù)億封新電子郵件和短信。確實(shí)有大量的文本數(shù)據(jù)等待挖掘見(jiàn)解。但是,想要從所有文本數(shù)據(jù)中收集含義的數(shù)據(jù)科學(xué)家面臨著一個(gè)挑戰(zhàn):由于它以非結(jié)構(gòu)化形式存在,因此難以分析和處理。
 

  在大數(shù)據(jù)分析Python中spaCy文本分類使用教程中,我們將研究如何使用有用的Python包spaCy(文檔)將所有這些非結(jié)構(gòu)化文本數(shù)據(jù)轉(zhuǎn)換為對(duì)分析和自然語(yǔ)言處理更有用的內(nèi)容。
 

  完成此操作后,我們將能夠從文本數(shù)據(jù)中得出有意義的模式和主題。這在多種數(shù)據(jù)科學(xué)應(yīng)用程序中很有用:垃圾郵件過(guò)濾,支持通知單,社交媒體分析,上下文廣告,查看客戶反饋等。
 

  具體來(lái)說(shuō),我們將對(duì)自然語(yǔ)言處理(NLP)進(jìn)行更高層次的研究。然后,我們將完成一些重要的基本操作,以使用清理和分析文本數(shù)據(jù)spaCy。然后,我們將使用一些實(shí)際數(shù)據(jù)(亞馬遜的Alexa智能家居揚(yáng)聲器的文本評(píng)論)深入研究文本分類,特別是Logistic回歸分類。
 

  什么是自然語(yǔ)言處理?
 

  自然語(yǔ)言處理(NLP)是機(jī)器學(xué)習(xí)的一個(gè)分支,致力于處理,分析和有時(shí)生成人類語(yǔ)音(“自然語(yǔ)言”)。
 

  毫無(wú)疑問(wèn),在確定文本字符串的含義方面,人類仍然比機(jī)器好得多。但是在數(shù)據(jù)科學(xué)中,我們經(jīng)常會(huì)遇到太大的數(shù)據(jù)集,以至于人們無(wú)法在合理的時(shí)間內(nèi)對(duì)其進(jìn)行分析。我們還可能遇到?jīng)]有人可以分析和響應(yīng)一段文本輸入的情況。在這種情況下,我們可以使用自然語(yǔ)言處理技術(shù)來(lái)幫助機(jī)器對(duì)文本的含義有所了解(并在必要時(shí)做出相應(yīng)的響應(yīng))。
 

  例如,自然語(yǔ)言處理在情感分析中被廣泛使用,因?yàn)榉治鋈藛T經(jīng)常試圖從大量文本數(shù)據(jù)中確定整體情感,這對(duì)于人類進(jìn)行梳理是很費(fèi)時(shí)的。它也用于廣告匹配中-確定文本主體并自動(dòng)分配相關(guān)廣告。它用于聊天機(jī)器人,語(yǔ)音助手和其他需要機(jī)器理解并快速響應(yīng)自然人類語(yǔ)言形式的輸入的應(yīng)用程序。
 

  分析和處理文本 spaCy
 

  spaCy是Python的開(kāi)源自然語(yǔ)言處理庫(kù)。它是專門為生產(chǎn)用途而設(shè)計(jì)的,它可以幫助我們構(gòu)建可有效處理大量文本的應(yīng)用程序。首先,讓我們看一下spaCy可以處理的一些基本分析任務(wù)。
 

  正在安裝 spaCy
 

  spaCy在繼續(xù)進(jìn)行操作之前,我們需要先安裝它及其英語(yǔ)模型。我們可以使用以下命令行命令執(zhí)行此操作:
 

  pip install spacy

  python -m spacy download en
 

  我們也可以spaCy在Juypter Notebook中使用。不過(guò),它不是Jupyter默認(rèn)包含的預(yù)安裝庫(kù)之一,因此我們需要從筆記本計(jì)算機(jī)運(yùn)行這些命令以將其spaCy安裝在正確的Anaconda目錄中。請(qǐng)注意,我們!在每個(gè)命令前面都使用來(lái)讓Jupyter筆記本知道應(yīng)將其作為命令行命令讀取。
 

  !pip install spacy

  !python -m spacy download en
 

  標(biāo)記文本
 

  標(biāo)記化是將文本分成多個(gè)部分的過(guò)程,稱為標(biāo)記,并忽略標(biāo)點(diǎn)符號(hào)(,。'')和空格之類的字符。spaCy的令牌生成器以Unicode文本形式接受輸入,并輸出一系列令牌對(duì)象。
 

  讓我們看一個(gè)簡(jiǎn)單的例子。假設(shè)我們有以下文本,并且我們希望對(duì)其進(jìn)行標(biāo)記化:
 

  我們可以采用幾種不同的方法來(lái)解決這個(gè)問(wèn)題。第一種稱為單詞標(biāo)記化,即將文本分解成單個(gè)單詞。對(duì)于許多語(yǔ)言處理應(yīng)用程序而言,這是至關(guān)重要的一步,因?yàn)樗鼈兺ǔP枰詥蝹€(gè)單詞而不是更長(zhǎng)的字符串形式輸入。
 

  在下面的代碼中,我們將導(dǎo)入spaCy及其英語(yǔ)模型,并告訴我們將使用該模型進(jìn)行自然語(yǔ)言處理。然后,我們將文本字符串分配給text。使用nlp(text),我們將處理該文本spaCy并將結(jié)果分配給名為的變量my_doc。
 

  至此,我們的文本已經(jīng)被標(biāo)記化了,但是spaCy將標(biāo)記化的文本存儲(chǔ)為文檔,我們希望以列表形式查看它,因此我們將創(chuàng)建一個(gè)for循環(huán)遍歷文檔的循環(huán),并為其添加每個(gè)單詞標(biāo)記在文本字符串中找到一個(gè)名為的列表,token_list以便我們可以更好地了解單詞的標(biāo)記方式。

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  如我們所見(jiàn),spaCy生成一個(gè)包含每個(gè)標(biāo)記作為單獨(dú)項(xiàng)目的列表。請(qǐng)注意,它已經(jīng)認(rèn)識(shí)到諸如之類的收縮實(shí)際上不應(yīng)代表兩個(gè)不同的詞,因此已將它們分解為兩個(gè)不同的標(biāo)記。
 

  首先,我們需要加載語(yǔ)言詞典,在上面的示例中,我們使用English()類加載英語(yǔ)詞典并創(chuàng)建nlp nlp對(duì)象。“ nlp”對(duì)象用于創(chuàng)建具有語(yǔ)言注釋和各種nlp屬性的文檔。創(chuàng)建文檔后,我們將創(chuàng)建令牌列表。
 

  如果需要,我們還可以將文本分為句子而不是單詞。這稱為句子標(biāo)記化。在執(zhí)行句子標(biāo)記化時(shí),標(biāo)記化程序會(huì)查找介于句子之間的特定字符,例如句點(diǎn),驚嘆號(hào)和換行符。對(duì)于句子標(biāo)記化,我們將使用預(yù)處理管道,因?yàn)槭褂玫木渥宇A(yù)處理spaCy包括標(biāo)記器,標(biāo)記器,解析器和實(shí)體識(shí)別器,我們需要訪問(wèn)它們才能正確識(shí)別什么是句子,什么不是。
 

  在下面的代碼中,spaCy標(biāo)記文本并創(chuàng)建一個(gè)Doc對(duì)象。這個(gè)Doc對(duì)象使用我們預(yù)處理管道的組件標(biāo)記器,解析器和實(shí)體識(shí)別器將文本分解為組件。從該管道中,我們可以提取任何組件,但是在這里,我們將使用該sentencizer組件訪問(wèn)句子標(biāo)記。

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  同樣,spaCy已將文本正確解析為所需的格式,這一次輸出了在源文本中找到的句子列表。
 

  清理文本數(shù)據(jù):刪除停用詞
 

  我們使用的大多數(shù)文本數(shù)據(jù)將包含許多實(shí)際上對(duì)我們沒(méi)有用的單詞。這些稱為停用詞的詞在人類語(yǔ)音中很有用,但對(duì)數(shù)據(jù)分析沒(méi)有多大幫助。刪除停用詞可以幫助我們消除文本數(shù)據(jù)中的雜音和干擾,還可以加快分析時(shí)間(因?yàn)橐幚淼脑~更少)。
 

  讓我們看看spaCy默認(rèn)情況下包含的停用詞。我們將spaCy其英語(yǔ)模型中的停用詞導(dǎo)入并分配給名為的變量,spacy_stopwords以便我們進(jìn)行查看。

大數(shù)據(jù)分析
 

  如我們所見(jiàn),spaCy的默認(rèn)停用詞列表包括312個(gè)條目,每個(gè)條目都是一個(gè)單詞。我們還可以看到為什么其中許多單詞對(duì)數(shù)據(jù)分析沒(méi)有用處。例如,盡管如此,過(guò)渡詞對(duì)于理解句子的基本含義并不是必需的。而諸如“ 某人”之類的詞太含糊,以至于無(wú)法用于NLP任務(wù)。
 

  如果需要,我們還可以創(chuàng)建自己的自定義停用詞列表。但是出于我們?cè)诖髷?shù)據(jù)分析Python中spaCy文本分類使用教程中的目的,spaCy提供的默認(rèn)列表會(huì)很好。
 

  從我們的數(shù)據(jù)中刪除停用詞
 

  現(xiàn)在我們有了停用詞列表,讓我們使用它從上一部分中正在研究的文本字符串中刪除停用詞。我們的文本已經(jīng)存儲(chǔ)在變量中text,因此我們不需要再次定義它。
 

  相反,我們將創(chuàng)建一個(gè)名為的空列表filtered_sent,然后遍歷doc變量以查看源文本中每個(gè)標(biāo)記化的單詞。spaCy包括一堆有用的標(biāo)記屬性,我們將使用其中的一個(gè)is_stop來(lái)識(shí)別不在停用詞列表中的單詞,然后將它們附加到filtered_sent列表中。

大數(shù)據(jù)分析
 

  不難理解為什么停用詞會(huì)有所幫助。刪除它們將我們的原始文本簡(jiǎn)化為僅幾個(gè)單詞,這使我們對(duì)句子正在討論的內(nèi)容有了一個(gè)很好的了解:學(xué)習(xí)數(shù)據(jù)科學(xué),并在此過(guò)程中避免挑戰(zhàn)和挫折。
 

  詞匯規(guī)范化
 

  詞典標(biāo)準(zhǔn)化是文本數(shù)據(jù)清除過(guò)程中的又一步??傮w而言,歸一化將高維特征轉(zhuǎn)換為適合任何機(jī)器學(xué)習(xí)模型的低維特征。出于這里的目的,我們只考慮lemmatization,即一種處理單詞以使其根源減少的方法。
 

  合法化
 

  合法化是一種處理以下事實(shí)的方法:盡管connect,connection,connecting,connected等詞并不完全相同,但它們都具有相同的基本含義:connect。拼寫上的差異在口語(yǔ)中具有語(yǔ)法功能,但是對(duì)于機(jī)器處理,這些差異可能會(huì)造成混淆,因此我們需要一種方法來(lái)將所有單詞形式的單詞connect變成單詞connect self。
 

  一種執(zhí)行此操作的方法稱為“ 阻止”。詞干涉及簡(jiǎn)單地去除容易識(shí)別的前綴和后綴,以產(chǎn)生通常是單詞最簡(jiǎn)單的版本。例如,連接將刪除-ion后綴,并正確地減小以連接。這種簡(jiǎn)單的詞干通常是需要的,但是詞義化(實(shí)際上是查看字典中描述的詞及其詞根(稱為lemma))(只要詞存在于字典中)更為精確。
 

  由于spaCy包含了將單詞分解為引理的內(nèi)置方法,因此我們可以簡(jiǎn)單地將其用于引理。在以下非常簡(jiǎn)單的示例中,我們將使用它.lemma_為要分析的每個(gè)單詞產(chǎn)生引理。

大數(shù)據(jù)分析
 

  詞性(POS)標(biāo)記
 

  單詞的詞性定義了它在句子中的功能。例如,名詞標(biāo)識(shí)一個(gè)對(duì)象。形容詞描述一個(gè)對(duì)象。動(dòng)詞描述動(dòng)作。在句子的上下文中識(shí)別和標(biāo)記每個(gè)單詞的語(yǔ)音部分稱為詞性標(biāo)記或POS標(biāo)記。
 

  讓我們嘗試使用POS標(biāo)記spaCy!我們需要導(dǎo)入其en_core_web_sm模型,因?yàn)槠渲邪M(jìn)行此分析所需的字典和語(yǔ)法信息。然后,我們需要做的就是將這個(gè)模型加載.load()并遍歷我們的新docs變量,使用確定每個(gè)單詞的詞性.pos_。
 

  (注意û中u"All is well that ends well."表示該字符串是Unicode字符串。)

大數(shù)據(jù)分析
 

  spaCy已正確識(shí)別出該句子中每個(gè)單詞的詞性。能夠識(shí)別詞性在各種與NLP相關(guān)的上下文中很有用,因?yàn)樗兄诟??準(zhǔn)確地理解輸入句子并更準(zhǔn)確地構(gòu)建輸出響應(yīng)。
 

  實(shí)體檢測(cè)
 

  實(shí)體檢測(cè),也稱為實(shí)體識(shí)別,是語(yǔ)言處理的一種更高級(jí)形式,它可以識(shí)別文本輸入字符串中的重要元素,例如位置,人物,組織和語(yǔ)言。這對(duì)于快速?gòu)奈谋局刑崛⌒畔⒎浅S袔椭驗(yàn)槟梢钥焖偬暨x出重要的主題或確定文本的關(guān)鍵部分。
 

  我們將為.label文本中檢測(cè)到的每個(gè)實(shí)體獲取一個(gè)標(biāo)簽,然后使用spaCy的displaCy顯示工具以更直觀的格式查看這些實(shí)體。

大數(shù)據(jù)分析
 

  使用這種技術(shù),我們可以識(shí)別文本中的各種實(shí)體。該spaCy文檔提供了受支持的實(shí)體類型的完整列表,從上面的簡(jiǎn)短示例中我們可以看出,它能夠識(shí)別各種不同的實(shí)體類型,包括特定位置(GPE),與日期相關(guān)的單詞(DATE),重要數(shù)字(CARDINAL),特定個(gè)人(PERSON)等。
 

  使用displaCy我們還可以可視化我們的輸入文本,每個(gè)標(biāo)識(shí)的實(shí)體都用顏色突出顯示并標(biāo)記。我們將style = "ent"用來(lái)告訴displaCy我們要在此處可視化實(shí)體。

大數(shù)據(jù)分析
 

  依賴解析
 

  獨(dú)立性分析是一種語(yǔ)言處理技術(shù),它使我們可以通過(guò)分析句子的構(gòu)造來(lái)確定各個(gè)單詞之間的相互關(guān)系,從而更好地確定句子的含義。
 

  例如,考慮句子“比爾擲球”。我們有兩個(gè)名詞(比爾和球)和一個(gè)動(dòng)詞(擲)。但是我們不能只單獨(dú)看這些話,否則我們可能最終以為球在扔比爾!為了正確理解句子,我們需要查看單詞順序和句子結(jié)構(gòu),而不僅僅是單詞及其詞性。
 

  這樣做非常復(fù)雜,但值得慶幸的是,spaCy它將為我們完成工作!在下面,讓我們spaCy從新聞?lì)^條中再加上一句話。然后,我們將使用另一個(gè)spaCy名為的noun_chunks,它將輸入分解為名詞和描述它們的單詞,并遍歷源文本中的每個(gè)塊,從而識(shí)別單詞,其詞根,其依賴項(xiàng)標(biāo)識(shí)以及它屬于哪個(gè)塊。

大數(shù)據(jù)分析
 

  該輸出可能有點(diǎn)難以理解,但是由于我們已經(jīng)導(dǎo)入了displaCy可視化工具,因此我們可以使用它來(lái)查看依賴關(guān)系圖,其中使用style = "dep"起來(lái)更容易理解:
 

大數(shù)據(jù)分析
大數(shù)據(jù)分析


  當(dāng)然,我們還可以查看有關(guān)依賴關(guān)系解析spaCy的文檔,以更好地了解根據(jù)解釋每個(gè)句子的方式可能應(yīng)用于文本的不同標(biāo)簽。
 

  詞向量表示
 

  當(dāng)我們單看單詞時(shí),機(jī)器很難理解人類會(huì)立即理解的聯(lián)系。例如,引擎和汽車似乎有一個(gè)明顯的連接(汽車使用引擎運(yùn)行),但是這種鏈接對(duì)計(jì)算機(jī)而言并不那么明顯。
 

  值得慶幸的是,有一種方法可以表示可以捕獲更多此類連接的單詞。甲字矢量是commuicates其換句話說(shuō)關(guān)系的詞的數(shù)字表示。
 

  每個(gè)單詞都被解釋為唯一且冗長(zhǎng)的數(shù)字?jǐn)?shù)組。您可以將這些數(shù)字視為GPS坐標(biāo)之類的東西。GPS坐標(biāo)由兩個(gè)數(shù)字(緯度和經(jīng)度)組成,如果我們看到兩組GPS坐標(biāo)在數(shù)字上彼此接近(如43--70和44--70),我們會(huì)知道這兩個(gè)位置相對(duì)緊靠在一起。詞矢量與此類似,雖然有很多分配給每個(gè)單詞超過(guò)兩個(gè)坐標(biāo),所以他們對(duì)人類眼球更難。
 

  使用spaCy的en_core_web_sm模型,讓我們看一個(gè)單詞的向量長(zhǎng)度,以及使用.vector和看起來(lái)的向量.shape。

大數(shù)據(jù)分析
 

  人們無(wú)法觀察到該數(shù)組并將其識(shí)別為“芒果”的含義,但是以這種方式表示該單詞對(duì)機(jī)器而言效果很好,因?yàn)樗刮覀兡軌虼碓搯卧~的含義及其與其他相似單詞的“接近度”使用數(shù)組中的坐標(biāo)。
 

  文字分類
 

  現(xiàn)在,我們已經(jīng)看了一些spaCy一般可以完成的很酷的事情,讓我們看一下這些自然語(yǔ)言處理技術(shù)中的一些更大的實(shí)際應(yīng)用:文本分類。通常,我們可能會(huì)發(fā)現(xiàn)自己想要根據(jù)一些參數(shù)(例如,每個(gè)片段的主題)進(jìn)行分類的一組文本數(shù)據(jù),而文本分類將幫助我們做到這一點(diǎn)。
 

  下圖顯示了在對(duì)文本進(jìn)行分類時(shí)我們想要做什么的全景視圖。首先,我們從源文本(及其附帶的任何標(biāo)簽或元數(shù)據(jù))中提取所需的功能,然后將清理后的數(shù)據(jù)饋送到為我們進(jìn)行分類的機(jī)器學(xué)習(xí)算法中。

大數(shù)據(jù)分析
 

  導(dǎo)入庫(kù)
 

  我們將從導(dǎo)入此任務(wù)所需的庫(kù)開(kāi)始。我們已經(jīng)導(dǎo)入了spaCy,但是我們也想要pandas并scikit-learn幫助進(jìn)行分析。

大數(shù)據(jù)分析
 

  加載數(shù)據(jù)中
 

  上面,我們看了一些使用進(jìn)行文本分析的簡(jiǎn)單示例spaCy,但是現(xiàn)在我們將使用進(jìn)行一些Logistic回歸分類scikit-learn。為了使這一點(diǎn)更加現(xiàn)實(shí),我們將使用真實(shí)的數(shù)據(jù)集-這組Amazon Alexa產(chǎn)品評(píng)論。
 

  該數(shù)據(jù)集以制表符分隔的文件(.tsv)的形式出現(xiàn)。它已經(jīng)有五列:rating,date,variation,verified_reviews,feedback。
 

  rating表示每個(gè)用戶給Alexa的評(píng)分(滿分5分)。date指示審查日期,并variation描述用戶審查的型號(hào)。verified_reviews包含每個(gè)評(píng)論的文本,并feedback包含一個(gè)情感標(biāo)簽,其中1表示正面情緒(用戶喜歡),0表示負(fù)面情緒(用戶不喜歡)。
 

  該數(shù)據(jù)集包含消費(fèi)者對(duì)亞馬遜Echos,Echo Dots,Alexa Firesticks等Alexa產(chǎn)品的評(píng)論。我們要做的是開(kāi)發(fā)一個(gè)分類模型,該模型查看評(píng)論文本并預(yù)測(cè)評(píng)論是正面還是負(fù)面。由于此數(shù)據(jù)集已在該feedback列中包含評(píng)論是肯定的還是否定的,因此我們可以使用這些答案來(lái)訓(xùn)練和測(cè)試我們的模型。我們的目標(biāo)是生成一個(gè)準(zhǔn)確的模型,然后將其用于處理新的用戶評(píng)論,并快速確定它們是正面還是負(fù)面。
 

  首先,將數(shù)據(jù)讀取到數(shù)據(jù)pandas框中,然后使用pandas的內(nèi)置函數(shù)來(lái)幫助我們仔細(xì)查看數(shù)據(jù)。

大數(shù)據(jù)分析
大數(shù)據(jù)分析
 

  使用標(biāo)記數(shù)據(jù) spaCy
 

  現(xiàn)在我們知道我們正在使用什么,讓我們使用創(chuàng)建一個(gè)自定義標(biāo)記器函數(shù)spaCy。我們將使用此功能自動(dòng)從每個(gè)評(píng)論中剝離不需要的信息,例如停用詞和標(biāo)點(diǎn)符號(hào)。
 

  我們將從導(dǎo)入所需的英語(yǔ)模型spaCy以及Python的string模塊開(kāi)始,該模塊包含一個(gè)有用的清單,其中列出了我們可以在中使用的所有標(biāo)點(diǎn)符號(hào)string.punctuation。我們將創(chuàng)建包含要?jiǎng)h除的標(biāo)點(diǎn)符號(hào)和停用詞的變量,以及一個(gè)通過(guò)spaCy英文模塊運(yùn)行輸入的解析器。
 

  然后,我們將創(chuàng)建一個(gè)spacy_tokenizer()函數(shù),該函數(shù)接受一個(gè)句子作為輸入,并將該句子處理為標(biāo)記,執(zhí)行詞形化,小寫并刪除停用詞。這類似于我們?cè)诖髷?shù)據(jù)分析Python中spaCy文本分類使用教程前面的示例中所做的操作,但是現(xiàn)在我們將所有內(nèi)容放到一個(gè)函數(shù)中,以預(yù)處理要分析的每個(gè)用戶評(píng)論。

大數(shù)據(jù)分析
 

  定義自定義變壓器
 

  為了進(jìn)一步清除文本數(shù)據(jù),我們還需要?jiǎng)?chuàng)建一個(gè)自定義轉(zhuǎn)換器,以刪除開(kāi)頭和結(jié)尾的空格并將文本轉(zhuǎn)換為小寫形式。在這里,我們將創(chuàng)建一個(gè)predictors繼承TransformerMixin類的自定義類。該類重寫transform,fit和get_parrams方法。我們還將創(chuàng)建一個(gè)clean_text()刪除空格并將文本轉(zhuǎn)換為小寫字母的函數(shù)。

大數(shù)據(jù)分析
 

  矢量化特征工程(TF-IDF)
 

  在對(duì)文本進(jìn)行分類時(shí),最終得到的是與相應(yīng)標(biāo)簽匹配的文本片段。但是我們不能在我們的機(jī)器學(xué)習(xí)模型中簡(jiǎn)單地使用文本字符串。我們需要一種將文本轉(zhuǎn)換為可以用數(shù)字表示的內(nèi)容的方法,就像標(biāo)簽(正數(shù)為1,負(fù)數(shù)為0)一樣。在正面和負(fù)面標(biāo)簽中對(duì)文本進(jìn)行分類稱為情感分析。因此,我們需要一種數(shù)字表示文本的方法。
 

  我們可以用來(lái)執(zhí)行此操作的一種工具稱為Word of Words。BoW將文本轉(zhuǎn)換為給定文檔中單詞出現(xiàn)的矩陣。它著眼于給定單詞在文檔中是否出現(xiàn),并生成一個(gè)矩陣,我們可以將其稱為BoW矩陣或文檔術(shù)語(yǔ)矩陣。
 

  我們可以通過(guò)為我們的文本數(shù)據(jù)弓矩陣scikit-learn的CountVectorizer。在下面的代碼中,我們告訴CountVectorizer使用spacy_tokenizer構(gòu)建的自定義函數(shù)作為其標(biāo)記生成器,并定義所需的ngram范圍。
 

  N-gram是給定文本中相鄰單詞的組合,其中n是插入標(biāo)記中的單詞數(shù)。例如,句子“誰(shuí)將在2022年贏得世界杯足球賽?” 字母組合是一個(gè)單詞序列,例如“ who”,“ will”,“ win”等。二元組將是兩個(gè)連續(xù)單詞的序列,例如“誰(shuí)將”,“將獲勝”,等等。因此,ngram_range我們將在下面的代碼中使用的參數(shù)設(shè)置ngram的上下限(我們將使用unigram)。然后,我們將ngram分配給bow_vector。

大數(shù)據(jù)分析
 

  我們還希望查看術(shù)語(yǔ)的TF-IDF(術(shù)語(yǔ)頻率-反文檔頻率)。這聽(tīng)起來(lái)很復(fù)雜,但這只是通過(guò)查看每個(gè)單詞的頻率與文檔頻率的比較來(lái)規(guī)范我們的單詞袋(BoW)的一種方式。換句話說(shuō),這是一種表示特定術(shù)語(yǔ)在給定文檔中的重要性的方法,它基于該術(shù)語(yǔ)出現(xiàn)了多少次以及該術(shù)語(yǔ)出現(xiàn)在其他文檔中的數(shù)量。TF-IDF越高,這個(gè)詞對(duì)那個(gè)文件更重要。
 

  我們可以用以下數(shù)學(xué)方程式表示:

大數(shù)據(jù)分析
 

  當(dāng)然,我們不必手工計(jì)算!我們可以使用scikit-learn的TfidfVectorizer 自動(dòng)生成TF-IDF 。再次,我們將告訴它使用與我們一起構(gòu)建的自定義標(biāo)記生成器,spaCy然后將結(jié)果分配給變量tfidf_vector。

大數(shù)據(jù)分析
 

  將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集
 

  我們正在嘗試建立分類模型,但是我們需要一種方法來(lái)了解其實(shí)際表現(xiàn)。將數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集的方法是經(jīng)過(guò)實(shí)踐檢驗(yàn)的。我們將一半的數(shù)據(jù)集用作訓(xùn)練集,其中將包含正確的答案。然后,我們將使用數(shù)據(jù)集的另一半測(cè)試模型,而無(wú)需給出答案,以查看其執(zhí)行的準(zhǔn)確性。
 

  便利,scikit-learn為我們提供了一個(gè)內(nèi)置的這樣做的功能:train_test_split()。我們只需要告訴它要分割的功能集(X),要對(duì)其進(jìn)行測(cè)試的標(biāo)簽(ylabels)以及要用于測(cè)試集的大小(以十進(jìn)制形式的百分比表示)。

大數(shù)據(jù)分析
 

  創(chuàng)建管道并生成模型
 

  現(xiàn)在我們已經(jīng)完成了所有的設(shè)置,現(xiàn)在是時(shí)候?qū)嶋H構(gòu)建模型了!我們將從導(dǎo)入LogisticRegression模塊并創(chuàng)建LogisticRegression分類器對(duì)象開(kāi)始。
 

  然后,我們將創(chuàng)建一個(gè)包含三個(gè)組件的管道:清理器,向量器和分類器。清潔器使用我們的predictors類對(duì)象來(lái)清潔和預(yù)處理文本。向量器使用countvector對(duì)象為文本創(chuàng)建詞袋矩陣。分類器是執(zhí)行邏輯回歸以對(duì)情感進(jìn)行分類的對(duì)象。
 

  建立此管道后,我們將使用來(lái)裝配管道組件fit()。

大數(shù)據(jù)分析
 

  評(píng)估模型
 

  讓我們看一下我們的模型實(shí)際表現(xiàn)如何!我們可以使用中的metrics模塊執(zhí)行此操作scikit-learn?,F(xiàn)在我們已經(jīng)訓(xùn)練了模型,我們將把測(cè)試數(shù)據(jù)通過(guò)管道進(jìn)行預(yù)測(cè)。然后,我們將使用metrics模塊的各種功能來(lái)查看模型的準(zhǔn)確性,準(zhǔn)確性和召回率。
 

  1)準(zhǔn)確性是指我們的模型做出的完全正確的預(yù)測(cè)總數(shù)中的百分比。

  2)精度描述了我們預(yù)測(cè)中真實(shí)陽(yáng)性與真實(shí)陽(yáng)性加假陽(yáng)性的比率。

  3)回憶描述了我們的預(yù)測(cè)中真實(shí)陽(yáng)性與真實(shí)陽(yáng)性加假陰性的比率。
 

  上面的文檔鏈接提供了每個(gè)術(shù)語(yǔ)的更多詳細(xì)信息和更精確的定義,但最重要的是,所有三個(gè)指標(biāo)的測(cè)量范圍均為0到1,其中1完全正確地預(yù)測(cè)了所有指標(biāo)。因此,模型的得分越接近1,就越好。

大數(shù)據(jù)分析
 

  換句話說(shuō),總體而言,我們的模型在94.1%的時(shí)間內(nèi)正確地識(shí)別了評(píng)論的情緒。當(dāng)它預(yù)測(cè)評(píng)論是正面的時(shí),該評(píng)論實(shí)際上在95%的時(shí)間內(nèi)是正面的。當(dāng)進(jìn)行正面評(píng)價(jià)時(shí),我們的模型將其確定為正面評(píng)價(jià)的時(shí)間為98.6%
 

  資源和后續(xù)步驟
 

  在大數(shù)據(jù)分析Python中spaCy文本分類使用教程的整個(gè)過(guò)程中,我們已經(jīng)從執(zhí)行一些非常簡(jiǎn)單的文本分析操作spaCy到使用來(lái)構(gòu)建自己的機(jī)器學(xué)習(xí)模型scikit-learn。當(dāng)然,這僅僅是個(gè)開(kāi)始,兩者還有很多spaCy,scikit-learn必須提供給Python數(shù)據(jù)科學(xué)家。

 

預(yù)約申請(qǐng)免費(fèi)試聽(tīng)課

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

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

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

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

網(wǎng)站地圖