回覆列表
  • 1 # 52sissi

    這是python spaCy文字分類的使用教程,裡面還有機器學習模型scikit-learn,你可以參考一下,有助於你解決問題,程式碼什麼都有

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

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

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

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

      什麼是自然語言處理?

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

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

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

      分析和處理文字 spaCy

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

      正在安裝 spaCy

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

      pip install spacy

      python -m spacy download en

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

      !pip install spacy

      !python -m spacy download en

      標記文字

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

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

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

      在下面的程式碼中,我們將匯入spaCy及其英語模型,並告訴我們將使用該模型進行自然語言處理。然後,我們將文字字串分配給text。使用nlp(text),我們將處理該文字spaCy並將結果分配給名為的變數my_doc。

      至此,我們的文字已經被標記化了,但是spaCy將標記化的文字儲存為文件,我們希望以列表形式檢視它,因此我們將建立一個for迴圈遍歷文件的迴圈,併為其新增每個單詞標記在文字字串中找到一個名為的列表,token_list以便我們可以更好地瞭解單詞的標記方式。

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

      首先,我們需要載入語言詞典,在上面的示例中,我們使用English()類載入英語詞典並建立nlp nlp物件。“ nlp”物件用於建立具有語言註釋和各種nlp屬性的文件。建立文件後,我們將建立令牌列表。

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

      在下面的程式碼中,spaCy標記文字並建立一個Doc物件。這個Doc物件使用我們預處理管道的元件標記器,解析器和實體識別器將文字分解為元件。從該管道中,我們可以提取任何元件,但是在這裡,我們將使用該sentencizer元件訪問句子標記。

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

      讓我們看看spaCy預設情況下包含的停用詞。我們將spaCy其英語模型中的停用詞匯入並分配給名為的變數,spacy_stopwords以便我們進行檢視。

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

      如果需要,我們還可以建立自己的自定義停用詞列表。但是出於我們在大資料分析Python中spaCy文字分類使用教程中的目的,spaCy提供的預設列表會很好。

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

      詞彙規範化

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

      合法化

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

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

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

      詞性(POS)標記

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

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

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

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

      實體檢測

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

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

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

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

      依賴解析

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

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

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

      當然,我們還可以檢視有關依賴關係解析spaCy的文件,以更好地瞭解根據解釋每個句子的方式可能應用於文字的不同標籤。

      詞向量表示

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

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

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

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

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

      文字分類

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

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

      匯入庫

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

      載入資料中

      該資料集以製表符分隔的檔案(.tsv)的形式出現。它已經有五列:rating,date,variation,verified_reviews,feedback。

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

      該資料集包含消費者對亞馬遜Echos,Echo Dots,Alexa Firesticks等Alexa產品的評論。我們要做的是開發一個分類模型,該模型檢視評論文字並預測評論是正面還是負面。由於此資料集已在該feedback列中包含評論是肯定的還是否定的,因此我們可以使用這些答案來訓練和測試我們的模型。我們的目標是生成一個準確的模型,然後將其用於處理新的使用者評論,並快速確定它們是正面還是負面。

      首先,將資料讀取到資料pandas框中,然後使用pandas的內建函式來幫助我們仔細檢視資料。

      使用標記資料 spaCy

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

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

      定義自定義變壓器

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

      向量化特徵工程(TF-IDF)

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

      我們可以用來執行此操作的一種工具稱為Word of Words。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,就越好。

      資源和後續步驟

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

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

  • 中秋節和大豐收的關聯?
  • 懷孕多久可以檢查胎心正不正?