欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

python提取文本中的一類詞給個思路是什么?

錢琪琛2年前14瀏覽0評論

這是pythonspaCy文本分類的使用教程,里面還有機器學習模型scikit-learn,你可以參考一下,有助于你解決問題

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

在大數據分析Python中spaCy文本分類使用教程中,我們將研究如何使用有用的Python包spaCy(文檔)將所有這些非結構化文本數據轉換為對分析和自然語言處理更有用的內容。

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

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

什么是自然語言處理?

自然語言處理(NLP)是機器學習的一個分支,致力于處理,分析和有時生成人類語音(“自然語言”)。

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

例如,自然語言處理在情感分析中被廣泛使用,因為分析人員經常試圖從大量文本數據中確定整體情感,這對于人類進行梳理是很費時的。它也用于廣告匹配中-確定文本主體并自動分配相關廣告。它用于聊天機器人,語音助手和其他需要機器理解并快速響應自然人類語言形式的輸入的應用程序。

分析和處理文本spaCy

spaCy是Python的開源自然語言處理庫。它是專門為生產用途而設計的,它可以幫助我們構建可有效處理大量文本的應用程序。首先,讓我們看一下spaCy可以處理的一些基本分析任務。

正在安裝spaCy

spaCy在繼續進行操作之前,我們需要先安裝它及其英語模型。我們可以使用以下命令行命令執行此操作:

pipinstallspacy

python-mspacydownloaden

我們也可以spaCy在JuypterNotebook中使用。不過,它不是Jupyter默認包含的預安裝庫之一,因此我們需要從筆記本計算機運行這些命令以將其spaCy安裝在正確的Anaconda目錄中。請注意,我們!在每個命令前面都使用來讓Jupyter筆記本知道應將其作為命令行命令讀取。

!pipinstallspacy

!python-mspacydownloaden

標記文本

標記化是將文本分成多個部分的過程,稱為標記,并忽略標點符號(,。'')和空格之類的字符。spaCy的令牌生成器以Unicode文本形式接受輸入,并輸出一系列令牌對象。

讓我們看一個簡單的例子。假設我們有以下文本,并且我們希望對其進行標記化:

我們可以采用幾種不同的方法來解決這個問題。第一種稱為單詞標記化,即將文本分解成單個單詞。對于許多語言處理應用程序而言,這是至關重要的一步,因為它們通常需要以單個單詞而不是更長的字符串形式輸入。

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

至此,我們的文本已經被標記化了,但是spaCy將標記化的文本存儲為文檔,我們希望以列表形式查看它,因此我們將創建一個for循環遍歷文檔的循環,并為其添加每個單詞標記在文本字符串中找到一個名為的列表,token_list以便我們可以更好地了解單詞的標記方式。

如我們所見,spaCy生成一個包含每個標記作為單獨項目的列表。請注意,它已經認識到諸如之類的收縮實際上不應代表兩個不同的詞,因此已將它們分解為兩個不同的標記。

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

如果需要,我們還可以將文本分為句子而不是單詞。這稱為句子標記化。在執行句子標記化時,標記化程序會查找介于句子之間的特定字符,例如句點,驚嘆號和換行符。對于句子標記化,我們將使用預處理管道,因為使用的句子預處理spaCy包括標記器,標記器,解析器和實體識別器,我們需要訪問它們才能正確識別什么是句子,什么不是。

在下面的代碼中,spaCy標記文本并創建一個Doc對象。這個Doc對象使用我們預處理管道的組件標記器,解析器和實體識別器將文本分解為組件。從該管道中,我們可以提取任何組件,但是在這里,我們將使用該sentencizer組件訪問句子標記。

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

清理文本數據:刪除停用詞

我們使用的大多數文本數據將包含許多實際上對我們沒有用的單詞。這些稱為停用詞的詞在人類語音中很有用,但對數據分析沒有多大幫助。刪除停用詞可以幫助我們消除文本數據中的雜音和干擾,還可以加快分析時間(因為要處理的詞更少)。

讓我們看看spaCy默認情況下包含的停用詞。我們將spaCy其英語模型中的停用詞導入并分配給名為的變量,spacy_stopwords以便我們進行查看。

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

如果需要,我們還可以創建自己的自定義停用詞列表。但是出于我們在大數據分析Python中spaCy文本分類使用教程中的目的,spaCy提供的默認列表會很好。

從我們的數據中刪除停用詞

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

相反,我們將創建一個名為的空列表filtered_sent,然后遍歷doc變量以查看源文本中每個標記化的單詞。spaCy包括一堆有用的標記屬性,我們將使用其中的一個is_stop來識別不在停用詞列表中的單詞,然后將它們附加到filtered_sent列表中。

不難理解為什么停用詞會有所幫助。刪除它們將我們的原始文本簡化為僅幾個單詞,這使我們對句子正在討論的內容有了一個很好的了解:學習數據科學,并在此過程中避免挑戰和挫折。

詞匯規范化

詞典標準化是文本數據清除過程中的又一步。總體而言,歸一化將高維特征轉換為適合任何機器學習模型的低維特征。出于這里的目的,我們只考慮lemmatization,即一種處理單詞以使其根源減少的方法。

合法化

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

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

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

詞性(POS)標記

單詞的詞性定義了它在句子中的功能。例如,名詞標識一個對象。形容詞描述一個對象。動詞描述動作。在句子的上下文中識別和標記每個單詞的語音部分稱為詞性標記或POS標記。

讓我們嘗試使用POS標記spaCy!我們需要導入其en_core_web_sm模型,因為其中包含進行此分析所需的字典和語法信息。然后,我們需要做的就是將這個模型加載.load()并遍歷我們的新docs變量,使用確定每個單詞的詞性.pos_。

(注意?中u"Alliswellthatendswell."表示該字符串是Unicode字符串。)

spaCy已正確識別出該句子中每個單詞的詞性。能夠識別詞性在各種與NLP相關的上下文中很有用,因為它有助于更準確地理解輸入句子并更準確地構建輸出響應。

實體檢測

實體檢測,也稱為實體識別,是語言處理的一種更高級形式,它可以識別文本輸入字符串中的重要元素,例如位置,人物,組織和語言。這對于快速從文本中提取信息非常有幫助,因為您可以快速挑選出重要的主題或確定文本的關鍵部分。

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

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

使用displaCy我們還可以可視化我們的輸入文本,每個標識的實體都用顏色突出顯示并標記。我們將style="ent"用來告訴displaCy我們要在此處可視化實體。

依賴解析

獨立性分析是一種語言處理技術,它使我們可以通過分析句子的構造來確定各個單詞之間的相互關系,從而更好地確定句子的含義。

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

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

該輸出可能有點難以理解,但是由于我們已經導入了displaCy可視化工具,因此我們可以使用它來查看依賴關系圖,其中使用style="dep"起來更容易理解:

當然,我們還可以查看有關依賴關系解析spaCy的文檔,以更好地了解根據解釋每個句子的方式可能應用于文本的不同標簽。

詞向量表示

當我們單看單詞時,機器很難理解人類會立即理解的聯系。例如,引擎和汽車似乎有一個明顯的連接(汽車使用引擎運行),但是這種連接對計算機而言并不那么明顯。

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

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

使用spaCy的en_core_web_sm模型,讓我們看一個單詞的向量長度,以及使用.vector和看起來的向量.shape。

人們無法觀察到該數組并將其識別為“芒果”的含義,但是以這種方式表示該單詞對機器而言效果很好,因為它使我們能夠代表該單詞的含義及其與其他相似單詞的“接近度”使用數組中的坐標。

文字分類

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

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

導入庫

我們將從導入此任務所需的庫開始。我們已經導入了spaCy,但是我們也想要pandas并scikit-learn幫助進行分析。

加載數據中

上面,我們看了一些使用進行文本分析的簡單示例spaCy,但是現在我們將使用進行一些Logistic回歸分類scikit-learn。為了使這一點更加現實,我們將使用真實的數據集-這組AmazonAlexa產品評論。

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

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

該數據集包含消費者對亞馬遜Echos,EchoDots,AlexaFiresticks等Alexa產品的評論。我們要做的是開發一個分類模型,該模型查看評論文本并預測評論是正面還是負面。由于此數據集已在該feedback列中包含評論是肯定的還是否定的,因此我們可以使用這些答案來訓練和測試我們的模型。我們的目標是生成一個準確的模型,然后將其用于處理新的用戶評論,并快速確定它們是正面還是負面。

首先,將數據讀取到數據pandas框中,然后使用pandas的內置函數來幫助我們仔細查看數據。

使用標記數據spaCy

現在我們知道我們正在使用什么,讓我們使用創建一個自定義標記器函數spaCy。我們將使用此功能自動從每個評論中剝離不需要的信息,例如停用詞和標點符號。

我們將從導入所需的英語模型spaCy以及Python的string模塊開始,該模塊包含一個有用的清單,其中列出了我們可以在中使用的所有標點符號string.punctuation。我們將創建包含要刪除的標點符號和停用詞的變量,以及一個通過spaCy英文模塊運行輸入的解析器。

然后,我們將創建一個spacy_tokenizer()函數,該函數接受一個句子作為輸入,并將該句子處理為標記,執行詞形化,小寫并刪除停用詞。這類似于我們在大數據分析Python中spaCy文本分類使用教程前面的示例中所做的操作,但是現在我們將所有內容放到一個函數中,以預處理要分析的每個用戶評論。

定義自定義變壓器

為了進一步清除文本數據,我們還需要創建一個自定義轉換器,以刪除開頭和結尾的空格并將文本轉換為小寫形式。在這里,我們將創建一個predictors繼承TransformerMixin類的自定義類。該類重寫transform,fit和get_parrams方法。我們還將創建一個clean_text()刪除空格并將文本轉換為小寫字母的函數。

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

在對文本進行分類時,最終得到的是與相應標簽匹配的文本片段。但是我們不能在我們的機器學習模型中簡單地使用文本字符串。我們需要一種將文本轉換為可以用數字表示的內容的方法,就像標簽(正數為1,負數為0)一樣。在正面和負面標簽中對文本進行分類稱為情感分析。因此,我們需要一種數字表示文本的方法。

我們可以用來執行此操作的一種工具稱為WordofWords。BoW將文本轉換為給定文檔中單詞出現的矩陣。它著眼于給定單詞在文檔中是否出現,并生成一個矩陣,我們可以將其稱為BoW矩陣或文檔術語矩陣。

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

N-gram是給定文本中相鄰單詞的組合,其中n是插入標記中的單詞數。例如,句子“誰將在2022年贏得世界杯足球賽?”字母組合是一個單詞序列,例如“who”,“will”,“win”等。二元組將是兩個連續單詞的序列,例如“誰將”,“將獲勝”,等等。大數據分析Python中spaCy文本分類使用教程
https://www.aaa-cg.com.cn/xmt/2338.html因此,ngram_range我們將在下面的代碼中使用的參數設置ngram的上下限(我們將使用unigram)。然后,我們將ngram分配給bow_vector。

我們還希望查看術語的TF-IDF(術語頻率-反文檔頻率)。這聽起來很復雜,但這只是通過查看每個單詞的頻率與文檔頻率的比較來規范我們的單詞袋(BoW)的一種方式。換句話說,這是一種表示特定術語在給定文檔中的重要性的方法,它基于該術語出現了多少次以及該術語出現在其他文檔中的數量。TF-IDF越高,這個詞對那個文件更重要。

我們可以用以下數學方程式表示:

當然,我們不必手工計算!我們可以使用scikit-learn的TfidfVectorizer自動生成TF-IDF。再次,我們將告訴它使用與我們一起構建的自定義標記生成器,spaCy然后將結果分配給變量tfidf_vector。

將數據分為訓練集和測試集

我們正在嘗試建立分類模型,但是我們需要一種方法來了解其實際表現。將數據集分為訓練集和測試集的方法是經過實踐檢驗的。我們將一半的數據集用作訓練集,其中將包含正確的答案。然后,我們將使用數據集的另一半測試模型,而無需給出答案,以查看其執行的準確性。

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

創建管道并生成模型

現在我們已經完成了所有的設置,現在是時候實際構建模型了!我們將從導入LogisticRegression模塊并創建LogisticRegression分類器對象開始。

然后,我們將創建一個包含三個組件的管道:清理器,向量器和分類器。清潔器使用我們的predictors類對象來清潔和預處理文本。向量器使用countvector對象為文本創建詞袋矩陣。分類器是執行邏輯回歸以對情感進行分類的對象。

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

評估模型

讓我們看一下我們的模型實際表現如何!我們可以使用中的metrics模塊執行此操作scikit-learn。現在我們已經訓練了模型,我們將把測試數據通過管道進行預測。然后,我們將使用metrics模塊的各種功能來查看模型的準確性,準確性和召回率。

1)準確性是指我們的模型做出的完全正確的預測總數中的百分比。

2)精度描述了我們預測中真實陽性與真實陽性加假陽性的比率。

3)回憶描述了我們的預測中真實陽性與真實陽性加假陰性的比率。

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

換句話說,總體而言,我們的模型在94.1%的時間內正確地識別了評論的情緒。當它預測評論是正面的時,該評論實際上在95%的時間內是正面的。當進行正面評價時,我們的模型將其確定為正面評價的時間為98.6%

資源和后續步驟

在大數據分析Python中spaCy文本分類使用教程的整個過程中,我們已經從執行一些非常簡單的文本分析操作spaCy到使用來構建自己的機器學習模型scikit-learn。當然,這僅僅是個開始,兩者還有很多spaCy,scikit-learn必須提供給Python數據科學家。

https://www.toutiao.com/i6841453880681693710/