日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类

發布時間:2023/12/3 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?

關于自然語言處理(NLP)方面的文章、書籍非常之多,對于自然語言處理的上手,很多人是不知所措的。通過對本文的瀏覽,您應該能夠對自然語言處理會有一個能夠完整的有趣的基于Python的對自然語言處理的了解。

?

什么是文本分類

文本分類是將文本按照預定義的類別進行自動化歸類的過程。例如,我們可以將電子郵件分為垃圾郵件或非垃圾郵件,新聞文章分為不同類別,例如政治、財經,體育等。借助自然語言處理和不同的分類算法(如樸素貝葉斯,SVM 甚至 Python 中的神經網絡)來完成。

什么是自然語言處理

自然語言處理(NLP)是人工智能的一個分支,其主要內容是使計算機能夠理解和解釋人類語言。解釋人類語言的問題在于并且理解對話內容,這跟將規則或二進制數據輸入到計算機完全不是一回事。但是,隨著機器學習的最新發展,借助神經網絡的深度學習和易于使用的 Python 模型為我們打開了大門,使我們可以通過編程的方式使計算機理解復雜的人類語言。

文本分類

現在,通過監督的 ML 模型對文本進行分類來實現這一點:本文將使用具有 10,000 行文本數據的 Amazon Review 數據集,這些數據分為“標簽 1”和“標簽 2”。數據集有兩列“文本”和“標簽”。你可以從此處下載數據。

第一步:安裝工具庫

本文前面將使用以下 Python 庫。如果你本地沒有安裝,可以通過各自的網站輕松下載。推薦使用 pip 工具安裝。

import pandas as pdimport numpy as npfrom nltk.tokenize import word_tokenizefrom nltk import pos_tagfrom nltk.corpus import stopwordsfrom nltk.stem import WordNetLemmatizerfrom sklearn.preprocessing import LabelEncoderfrom collections import defaultdictfrom nltk.corpus import wordnet as wnfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn import model_selection, naive_bayes, svmfrom sklearn.metrics import accuracy_score

第二步:設置隨機種子

如果腳本保持一致,則每次都可以使用此方法來重現相同的結果,否則每次運行都會產生不同的結果。種子可以設置為任意數量。

np.random.seed(500)

第三步:添加語料庫

借助“ read_csv”功能,可以輕松將數據集添加為Pandas數據集。我將編碼設置為“latin-1”,因為文本主要是英文和很多特殊字符。如果在中文環境下,視情況可以設置為“utf-8”、“utf-8-sig”或者“gbk”

Corpus = pd.read_csv(r"D:\NLP\corpus.csv",encoding='latin-1')

第四步:數據初加工

這一步這是任何數據挖掘過程中的重要步驟。主要是將原始數據轉換為NLP模型可理解的格式。現實世界的實際數據通常不完整、不一致或缺少某些行為或趨勢,并且可能包含許多錯誤。數據預處理是解決此類問題的一種行之有效的方法,這將有助于通過分類算法獲得更好的結果。下面,我解釋了除了數據預處理中其他易于理解的步驟之外還執行的兩種技術:

  • 標記化:這是將文本流分解為單詞、短語、符號或其他稱為標記的有意義元素的過程。Token列表成為用于進一步處理的輸入。NLTK庫工具word_tokenize和send_tokenize可以輕松地將文本流分別分為單詞或句子列表。
  • 詞干提取/詞形還原:這兩個過程的目的是相同的,將每個詞的變形形式減少為一個共同的基數或詞根。詞干提取/詞形還原密切相關,不同之處在于,詞干提取在不了解上下文的情況下對單個單詞進行操作,因此無法根據詞性區分具有不同含義的單詞。但是,詞干提取通常更易于實現且運行速度更快,而精度的損失對于某些情況下可能并不重要。

詞形還原表現更好

這是執行上述數據預處理步驟的完整腳本,您始終可以添加或刪除最適合您要處理的數據集的步驟:

  • 刪除數據中的空白行(如果有)
  • 將所有文本更改為小寫
  • 詞標記化
  • 刪除停用詞
  • 刪除非字母文字
  • 詞合法化
# Step - a : Remove blank rows if any.Corpus['text'].dropna(inplace=True)# Step - b : Change all the text to lower case. This is required as python interprets 'dog' and 'DOG' differentlyCorpus['text'] = [entry.lower() for entry in Corpus['text']]# Step - c : Tokenization : In this each entry in the corpus will be broken into set of wordsCorpus['text']= [word_tokenize(entry) for entry in Corpus['text']]# Step - d : Remove Stop words, Non-Numeric and perfom Word Stemming/Lemmenting.# WordNetLemmatizer requires Pos tags to understand if the word is noun or verb or adjective etc. By default it is set to Nountag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVfor index,entry in enumerate(Corpus['text']): # Declaring Empty List to store the words that follow the rules for this step Final_words = [] # Initializing WordNetLemmatizer() word_Lemmatized = WordNetLemmatizer() # pos_tag function below will provide the 'tag' i.e if the word is Noun(N) or Verb(V) or something else. for word, tag in pos_tag(entry): # Below condition is to check for Stop words and consider only alphabets if word not in stopwords.words('english') and word.isalpha(): word_Final = word_Lemmatized.lemmatize(word,tag_map[tag[0]]) Final_words.append(word_Final) # The final processed set of words for each iteration will be stored in 'text_final'????Corpus.loc[index,'text_final']?=?str(Final_words)

第五步:準備訓練和測試數據集

語料庫將分為兩個數據集:培訓和測試。訓練數據集將用于擬合模型,并對測試數據集進行預測,這可以通過sklearn庫中的train_test_split完成。由于我們設置了參數test_size=0.3,因此訓練數據將占主體的70%,測試數據將擁有剩余的30%。

Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split(Corpus['text_final'],Corpus['label'],test_size=0.3)

第六步:轉化代碼

標簽對目標變量進行編碼-這樣做是為了將數據集中的字符串類型的分類數據轉換為模型可以理解的數值。

Raw LabelsEncoded Labels
__label__10
Encoder = LabelEncoder()Train_Y = Encoder.fit_transform(Train_Y)Test_Y = Encoder.fit_transform(Test_Y)

第七步:向量化

這是將文本文檔集合轉換為數字特征向量的一般過程,它們有很多將文本數據轉換為模型可以理解的向量的方法,但到目前為止,最流行的方法稱為TF-IDF。這是首字母縮寫詞,而不是“術語頻率-反向文檔”頻率的縮寫,它們是分配給每個單詞的結果分數的組成部分。

  • 詞頻:總結給定單詞在文檔中出現的頻率。
  • 反向文檔頻率:縮小文檔中出現的單詞的比例。TF-IDF是詞頻得分,無需突出數學內容,它們就會嘗試突出顯示更有趣的詞,例如經常出現在文檔中,但不是跨文檔。可以使用以下語法首先將TG-IDF模型擬合到整個語料庫。這將幫助TF-IDF建立從語料庫數據中學到的單詞詞匯,并將為每個單詞分配一個唯一的整數。由于我們設置了參數max_features = 5000,因此它們最多可包含5000個唯一字/功能。最后,我們將Train_X和Test_X轉換為向量化Train_X_Tfidf和Test_X_Tfidf。現在,它們將為每一行包含一個唯一整數列表,以及由TF-IDF計算出的其相關重要性。
Tfidf_vect = TfidfVectorizer(max_features=5000)Tfidf_vect.fit(Corpus['text_final'])Train_X_Tfidf = Tfidf_vect.transform(Train_X)Test_X_Tfidf = Tfidf_vect.transform(Test_X)

您可以使用以下語法查看從語料庫學到的詞匯

print(Tfidf_vect.vocabulary_)

此時的輸出應該如下:

?{‘even’:?1459,?‘sound’:?4067,?‘track’:?4494,?‘beautiful’:?346,?‘paint’:?3045,?‘mind’:?2740,?‘well’:?4864,?‘would’:?4952,?‘recomend’:?3493,?‘people’:?3115,?‘hate’:?1961,?‘video’:?4761?…………}

您可以直接打印矢量化數據以查看其外觀

print(Train_X_Tfidf)

1-"Train_X_Tfidf"的行號;
2-第一行中每個單詞的唯一整數號;
3-由TF-IDF矢量化器計算的得分;

現在,我們的數據集已準備好輸入不同的分類算法了。

第八步:使用機器學習算法預測結果

首先,讓我們嘗試一下樸素貝葉斯分類器算法。

# fit the training dataset on the NB classifierNaive = naive_bayes.MultinomialNB()Naive.fit(Train_X_Tfidf,Train_Y)# predict the labels on validation datasetpredictions_NB = Naive.predict(Test_X_Tfidf)# Use accuracy_score function to get the accuracyprint("Naive Bayes Accuracy Score -> ",accuracy_score(predictions_NB, Test_Y)*100)

輸出如下:

Naive Bayes Accuracy Score -> 83.1%

然后我們再試一下SVM分類算法。

# Classifier - Algorithm - SVM# fit the training dataset on the classifierSVM = svm.SVC(C=1.0, kernel='linear', degree=3, gamma='auto')SVM.fit(Train_X_Tfidf,Train_Y)# predict the labels on validation datasetpredictions_SVM = SVM.predict(Test_X_Tfidf)# Use accuracy_score function to get the accuracyprint("SVM Accuracy Score -> ",accuracy_score(predictions_SVM, Test_Y)*100)

輸出如下:

SVM Accuracy Score -> 84.6%

總結

相信這能很好地解釋什么是文本分類以及如何在Python中輕松實現它。下一步,您可以嘗試以下操作:

  • 進行數據預處理步驟,看看它如何影響準確性。
  • 嘗試使用其他字向量化技術,例如Count Vectorizer和Word2Vec。
  • 在這些算法上,嘗試使用GridSearchCV進行參數調整。
  • 嘗試其他分類算法,例如線性分類器,Boosting模型甚至神經網絡。

參考文獻:

  • https://medium.com/@bedigunjit/simple-guide-to-text-classification-nlp-using-svm-and-naive-bayes-with-python-421db3a72d34

  • https://neptune.ai/blog/text-classification-tips-and-tricks-kaggle-competitions

  • 總結

    以上是生活随笔為你收集整理的用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。