国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

自然語言處理3——玩轉(zhuǎn)文本分類 - Python NLP高級應用

這篇具有很好參考價值的文章主要介紹了自然語言處理3——玩轉(zhuǎn)文本分類 - Python NLP高級應用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

寫在開頭

隨著信息時代的不斷發(fā)展,海量的文本數(shù)據(jù)成為我們獲取知識和信息的重要來源。如何高效地從這些文本中提取有用的信息,成為數(shù)據(jù)分析和數(shù)據(jù)挖掘領(lǐng)域的熱門問題之一。本文將介紹文本分類在自然語言處理(NLP)中的高級應用,通過Python實現(xiàn),讓你輕松玩轉(zhuǎn)文本分類。

1. 文本分類的背后原理和應用場景

文本分類是一種將文本數(shù)據(jù)劃分為不同類別或標簽的自然語言處理任務。其背后原理主要基于統(tǒng)計學和機器學習技術(shù),目標是通過對文本的學習,建立一個能夠自動將新文本分類到合適類別的模型。下面詳細展開文本分類的原理和應用場景:

1.1 文本分類的原理

在文本分類的原理中,最常用的方法之一是樸素貝葉斯分類器。該分類器基于貝葉斯定理,通過統(tǒng)計文本中每個詞語在不同類別中出現(xiàn)的概率來進行分類。樸素貝葉斯假設(shè)各個詞匯之間相互獨立,從而簡化了計算過程。

另一種常見的方法是支持向量機(SVM),它通過在高維空間中找到一個超平面,將不同類別的文本分隔開。支持向量機適用于處理高維數(shù)據(jù),尤其在文本分類中,文本往往可以表示為高維的詞向量。

近年來,深度學習技術(shù)也在文本分類中取得了顯著的成就。卷積神經(jīng)網(wǎng)絡(CNN)和循環(huán)神經(jīng)網(wǎng)絡(RNN)等模型能夠?qū)W習文本中的層級特征和上下文信息,進一步提高了文本分類的準確性。

1.2 文本分類的應用場景

  • 搜索引擎優(yōu)化: 搜索引擎利用文本分類技術(shù)為用戶提供準確的搜索結(jié)果。通過分析用戶的搜索關(guān)鍵詞,搜索引擎可以將搜索結(jié)果劃分為不同的類別,提高搜索結(jié)果的相關(guān)性。

  • 垃圾郵件過濾: 文本分類在垃圾郵件過濾中起到關(guān)鍵作用。通過對郵件文本進行分類,系統(tǒng)可以自動過濾掉垃圾郵件,確保用戶收到的郵件更加清晰和有序。

  • 情感分析: 情感分析是文本分類的一個重要應用領(lǐng)域,它能夠分析文本中的情感傾向,判斷文本是正面的、負面的還是中性的。在社交媒體、產(chǎn)品評論等領(lǐng)域,情感分析對于了解用戶反饋具有重要價值。

  • 新聞分類: 自動將新聞按照主題分類是文本分類的另一個應用場景。這有助于媒體組織和用戶更輕松地找到感興趣的新聞,提高信息檢索的效率。

  • 法律文件分類: 在法律領(lǐng)域,文本分類可用于對法律文件進行分類和整理,提高法律研究和文檔管理的效率。

  • 醫(yī)學文本分類: 在醫(yī)學領(lǐng)域,文本分類可以用于對醫(yī)學文獻、病歷等進行分類,幫助醫(yī)生更好地理解和利用醫(yī)學信息。

總體而言,文本分類技術(shù)在各個領(lǐng)域都有著廣泛的應用,為處理大量文本信息提供了自動化和智能化的解決方案。

2. 使用機器學習模型進行文本分類(樸素貝葉斯、支持向量機等)

在文本分類中,機器學習模型是實現(xiàn)任務的關(guān)鍵。我們將深入介紹兩個常用的機器學習模型:樸素貝葉斯和支持向量機(SVM)。

2.1 樸素貝葉斯

樸素貝葉斯(Naive Bayes)是一種基于貝葉斯定理的統(tǒng)計分類算法,它是一類簡單但效果良好的分類算法之一。樸素貝葉斯的“樸素”一詞來源于算法對于特征之間條件獨立性的假設(shè),即每個特征在給定類別下都是獨立的,這個假設(shè)有時候在實際應用中并不成立,但在實踐中通常仍然能夠取得較好的分類效果。

2.1.1 基本原理

樸素貝葉斯算法基于貝葉斯定理,其核心思想是通過觀察先驗概率和樣本數(shù)據(jù),計算后驗概率,然后選擇具有最大后驗概率的類別作為最終的分類結(jié)果。

2.1.2 數(shù)學公式

樸素貝葉斯分類算法基于貝葉斯定理,其數(shù)學表達如下:

給定一個文本文檔 D 和類別 c,我們想要計算給定文檔 D 后,它屬于類別 c 的概率 P(c|D)。根據(jù)貝葉斯定理,這個概率可以表示為:

P ( c ∣ D ) = P ( D ∣ c ) ? P ( c ) P ( D ) P(c|D) = \frac{P(D|c) \cdot P(c)}{P(D)} P(cD)=P(D)P(Dc)?P(c)?

其中:

  • P ( c ∣ D ) P(c|D) P(cD) 是后驗概率,表示在給定文檔 D 的情況下,它屬于類別 c 的概率。
  • P ( D ∣ c ) P(D|c) P(Dc) 是似然概率,表示在類別 c 的情況下,生成文檔 D 的概率。
  • P ( c ) P(c) P(c) 是先驗概率,表示類別 c 在整個數(shù)據(jù)集中的概率。
  • P ( D ) P(D) P(D) 是歸一化因子,確保后驗概率的總和等于 1。

在樸素貝葉斯算法中,對于文檔 D,我們通常將其表示為一個特征向量 X = ( x 1 , x 2 , . . . , x n ) X = (x_1, x_2, ..., x_n) X=(x1?,x2?,...,xn?),其中 x i x_i xi? 是文檔中出現(xiàn)的第 i 個特征(通常是詞語或詞匯表中的詞),n 是特征的總數(shù)?;跇闼刎惾~斯的獨立性假設(shè),我們可以將似然概率表示為各個特征的條件概率的乘積:

P ( D ∣ c ) = P ( x 1 ∣ c ) ? P ( x 2 ∣ c ) ? . . . ? P ( x n ∣ c ) P(D|c) = P(x_1|c) \cdot P(x_2|c) \cdot ... \cdot P(x_n|c) P(Dc)=P(x1?c)?P(x2?c)?...?P(xn?c)

這就是樸素貝葉斯的“樸素”之處,因為它假設(shè)在給定類別的情況下,各個特征之間是相互獨立的。

在實際應用中,我們通常比較各個類別的后驗概率,選擇具有最大后驗概率的類別作為最終的分類結(jié)果:

c ^ = arg ? max ? c P ( c ∣ D ) \hat{c} = \arg \max_c P(c|D) c^=argcmax?P(cD)

這就是樸素貝葉斯分類器的基本數(shù)學表達式。在文本分類中,特征通常是詞語,而條件概率可以通過統(tǒng)計訓練數(shù)據(jù)中屬于某一類別的文檔中各個詞語出現(xiàn)的頻率來估計。

2.1.3 一般步驟

在文本分類中,樸素貝葉斯可以用于判定一段文本屬于哪個類別,比如垃圾郵件過濾、情感分析等。下面是使用樸素貝葉斯進行文本分類的一般步驟:

  • 收集數(shù)據(jù): 收集包含已分類文本的數(shù)據(jù)集,每個文本都被標記為其所屬的類別。

  • 數(shù)據(jù)預處理: 對文本數(shù)據(jù)進行預處理,包括去除停用詞(常見但不具有實際意義的詞語,如“the”、“and”等)、轉(zhuǎn)換為小寫字母,去除標點符號等操作。

  • 建立詞向量模型: 將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)學表示,通常采用詞袋模型(Bag of Words)或詞袋模型的改進形式,如TF-IDF(Term Frequency-Inverse Document Frequency)。

  • 計算先驗概率和條件概率: 對每個類別計算先驗概率,即該類別在整個數(shù)據(jù)集中出現(xiàn)的概率。然后,對于每個詞語,計算在給定類別下的條件概率。

  • 預測: 對于一個新的文本,根據(jù)計算的先驗概率和條件概率,使用貝葉斯公式計算每個類別的后驗概率,然后選擇具有最大后驗概率的類別作為文本的分類結(jié)果。

2.1.4 簡單python代碼實現(xiàn)

以下是一個示例,展示如何在Python中使用樸素貝葉斯進行基于特定話題的文本分類。我們將使用一個電影評論數(shù)據(jù)集,并嘗試對評論進行情感分類。

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn import metrics

# 構(gòu)建電影評論
all_comments = [
    "這部電影太棒了,演員演技一流,劇情緊湊扣人心弦。",
    "一部讓人感動的電影,推薦給所有的影迷。",
    "情節(jié)極其拖沓,演員表演平平,完全不值得一看。",
    "電影畫面很美,音樂也很好聽,但故事情節(jié)有些乏味。",
    "這是一部讓人捧腹大笑的喜劇片,非常好看。",
    "失望透頂,劇情亂七八糟,真是浪費時間。",
    "影片雖然有一些硬傷,但整體來說還算可以。",
    "這部電影簡直是爛到家了,看了讓人生氣。",
    "感覺導演對故事沒有把握好,留下太多疑問。",
    "非常感動,看完后讓人回味無窮。",
    "一部扣人心弦的驚悚片,推薦給喜歡刺激的觀眾。",
    "這是一部典型的爆米花電影,娛樂性很強。",
    "劇情不錯,結(jié)尾略顯俗套,但總體來說還可以。",
    "對影片的制作水平很滿意,期待導演的下一部作品。",
    "一部令人難以忘懷的文藝片,值得一看。",
    "這個故事太老套了,完全沒有新意。",
    "影片的氛圍營造得非常成功,令人沉浸其中。",
    "這部電影的畫面效果太棒了,堪比大片。",
    "看完讓人深思,劇情引人入勝。",
    "有點拖沓,看得人有點煩。",
    "這是一部令人驚嘆的巨制,影片細膩入微,深刻人心。",
    "劇情跌宕起伏,扣人心弦,是一部不可錯過的佳作。",
    "導演功力非凡,演員表現(xiàn)出色,影片質(zhì)量上乘。",
    "故事情節(jié)新穎,讓人看得熱血沸騰。",
    "影片充滿懸念,時不時還能給觀眾一些驚喜。",
    "雖然是小成本制作,但是影片表現(xiàn)出色,值得一看。",
    "這是一部充滿智慧的影片,對人生有很深刻的剖析。",
    "劇情稍顯無聊,導演功力有限,不夠吸引人。",
    "影片節(jié)奏太快,有些情節(jié)處理得有點倉促。",
    "缺乏深度,故事單薄,是一部平庸的影片。",
    "這是一部典型的爛片,從頭到尾都讓人失望透頂。",
]

# 標簽:1表示正面,0表示負面
all_labels = [1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0,
              1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]

# 將數(shù)據(jù)集劃分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(all_comments, all_labels, test_size=0.15, random_state=12)

# 使用TF-IDF向量化文本數(shù)據(jù)
vectorizer_nb = TfidfVectorizer()
X_train_nb = vectorizer_nb.fit_transform(X_train)
X_test_nb = vectorizer_nb.transform(X_test)

# 使用樸素貝葉斯模型進行文本分類
model_nb = MultinomialNB()
model_nb.fit(X_train_nb, y_train)
y_pred_nb = model_nb.predict(X_test_nb)

# 輸出樸素貝葉斯模型性能報告
print("樸素貝葉斯模型性能報告:\n", metrics.classification_report(y_test, y_pred_nb, zero_division=1))

# 新的文本數(shù)據(jù)
new_text = ["這是一部非常感人的電影,我熱烈推薦。", "電影太差勁,缺乏深度,無聊的很"]

# 將新的文本數(shù)據(jù)轉(zhuǎn)換為TF-IDF特征向量
X_new = vectorizer_nb.transform(new_text)

# 使用建立好的樸素貝葉斯模型進行預測
predictions = model_nb.predict(X_new)

# 輸出預測結(jié)果
for text, label in zip(new_text, predictions):
    sentiment = "正面" if label == 1 else "負面"
    print(f"文本: {text},情感預測: {sentiment}")

運行上述代碼后,我們可以得出下面的結(jié)果:
自然語言處理3——玩轉(zhuǎn)文本分類 - Python NLP高級應用,自然語言處理,數(shù)據(jù)挖掘,自然語言處理,分類,python,數(shù)據(jù)挖掘,機器學習
從上述的例子中,我們可以看到模型的性能,以及對文本的預測結(jié)果,這樣就完成對文本的情感分類,在實際場景中,我們可能會基于更多的文本來進行分類。


2.2 支持向量機SVM

支持向量機(Support Vector Machine,SVM)是一種用于二分類和多分類問題的監(jiān)督學習算法。其主要思想是通過找到能夠有效區(qū)分不同類別的超平面來進行分類。在文本分類中,SVM可用于將文本數(shù)據(jù)劃分為不同的類別。

2.2.1 基本概念

基本原理:

  • SVM通過在特征空間中找到一個能夠?qū)⒉煌悇e分開的最優(yōu)超平面來進行分類。
  • 最優(yōu)超平面是指離兩個類別的最近樣本點(支持向量)最遠的決策邊界。
  • SVM支持線性和非線性分類,具體取決于選擇的核函數(shù)。

在文本分類中的應用:

  • 特征表示: 在文本分類任務中,文本數(shù)據(jù)需要轉(zhuǎn)換為數(shù)值特征。常用的方法包括詞袋模型(Bag of Words)和TF-IDF(Term Frequency-Inverse Document Frequency)等。

  • Kernel Trick: 當數(shù)據(jù)不是線性可分時,可以使用核函數(shù)將數(shù)據(jù)映射到高維空間,使其在高維空間中線性可分。在文本分類中,常使用文本特征的內(nèi)積作為核函數(shù)。

  • 多分類問題: SVM 本身是一個二分類器,但可以通過一對一(One-vs-One)或一對多(One-vs-All)等策略擴展到多分類問題。

  • 參數(shù)調(diào)整: SVM的性能受到參數(shù)選擇的影響,包括正則化參數(shù)C、核函數(shù)的選擇等。在文本分類中,通過交叉驗證等方法來調(diào)整這些參數(shù)以優(yōu)化模型性能。

  • 文本向量化: 在進行文本分類前,需要將文本數(shù)據(jù)向量化。這一步驟可以使用TF-IDF向量化器等工具。

2.2.2 數(shù)學公式

線性可分情況:

1). 超平面方程:
假設(shè)有一個d維的特征空間(特征數(shù)為d),超平面可以表示為:

w ? x + b = 0 w \cdot x + b = 0 w?x+b=0

其中:

  • w w w 是法向量(超平面的法向量),表示超平面的方向。
  • x x x 是輸入樣本的特征向量。
  • b b b 是截距。

對于二分類問題,樣本的類別標簽為 ? 1 -1 ?1 1 1 1。樣本點到超平面的函數(shù)間隔為:

f ( x ) = w ? x + b f(x) = w \cdot x + b f(x)=w?x+b

分類決策函數(shù)為:

h ( x ) = sign ( f ( x ) ) h(x) = \text{sign}(f(x)) h(x)=sign(f(x))

其中:

  • sign ( ? ) \text{sign}(\cdot) sign(?) 是符號函數(shù),如果參數(shù)大于等于0,結(jié)果為1,否則為-1。

2).間隔和支持向量:
樣本點到超平面的函數(shù)間隔為:

∣ f ( x ) ∣ = 1 ∥ w ∥ ∣ w ? x + b ∣ |f(x)| = \frac{1}{\|w\|} |w \cdot x + b| f(x)=w1?w?x+b

其中:

  • ∥ w ∥ \|w\| w w w w 的范數(shù)。

樣本點到超平面的幾何間隔為:

distance ( x , Hyperplane ) = 1 ∥ w ∥ ∣ w ? x + b ∣ \text{distance}(x, \text{Hyperplane}) = \frac{1}{\|w\|} |w \cdot x + b| distance(x,Hyperplane)=w1?w?x+b

支持向量是離超平面最近的那些訓練樣本點,它們滿足:

y i ( w ? x i + b ) ? 1 = 0 y_i(w \cdot x_i + b) - 1 = 0 yi?(w?xi?+b)?1=0

其中:

  • y i y_i yi? 是樣本 x i x_i xi? 的類別標簽。

軟間隔和松弛變量:

在實際問題中,數(shù)據(jù)可能不是線性可分的。為了允許一些樣本出現(xiàn)在間隔內(nèi),引入了松弛變量(slack variable)。

假設(shè)有一組松弛變量 ξ i \xi_i ξi?,則優(yōu)化問題變?yōu)椋?/p>

min ? 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i \min \frac{1}{2} \|w\|^2 + C \sum_{i=1}^{N} \xi_i min21?w2+Ci=1N?ξi?

同時滿足約束條件:

y i ( w ? x i + b ) ≥ 1 ? ξ i y_i(w \cdot x_i + b) \geq 1 - \xi_i yi?(w?xi?+b)1?ξi?

其中:

  • C C C 是一個正則化參數(shù),用于平衡間隔的大小和錯誤的容忍度。
  • ξ i \xi_i ξi? 是第 i i i 個樣本的松弛變量。

核函數(shù)和非線性分類:

當數(shù)據(jù)不是線性可分時,可以通過使用核函數(shù)將數(shù)據(jù)映射到高維空間中,使其在高維空間中變得線性可分。常用的核函數(shù)有線性核、多項式核、徑向基函數(shù)(RBF)核等。

線性核:

K ( x , y ) = x ? y K(x, y) = x \cdot y K(x,y)=x?y

多項式核:

K ( x , y ) = ( x ? y + 1 ) d K(x, y) = (x \cdot y + 1)^d K(x,y)=(x?y+1)d

徑向基函數(shù)(RBF)核:

K ( x , y ) = exp ? ( ? ∥ x ? y ∥ 2 2 σ 2 ) K(x, y) = \exp\left(-\frac{\|x - y\|^2}{2\sigma^2}\right) K(x,y)=exp(?2σ2x?y2?)

其中:

  • d d d 是多項式核的次數(shù)。
  • σ \sigma σ 是 RBF 核的帶寬參數(shù)。

在sklearn中常用的核函數(shù):
在Scikit-learn中,SVC類的kernel參數(shù)用于指定支持向量機的核函數(shù)。以下是kernel參數(shù)支持的主要核函數(shù):

1).線性核函數(shù) (linear):

  • 參數(shù)值:kernel='linear'
  • 公式: K ( x , y ) = x ? y K(x, y) = x \cdot y K(x,y)=x?y
  • 用于線性可分和線性不可分的情況。
from sklearn.svm import SVC

# 使用線性核函數(shù)
linear_svm = SVC(kernel='linear')

2). 多項式核函數(shù) (poly):

  • 參數(shù)值:kernel='poly'
  • 公式: K ( x , y ) = ( x ? y + c 0 ) d e g r e e K(x, y) = (x \cdot y + c_0)^{degree} K(x,y)=(x?y+c0?)degree
  • degree 參數(shù)控制多項式的次數(shù),c_0 是一個常數(shù)。
from sklearn.svm import SVC

# 使用多項式核函數(shù),設(shè)置次數(shù)為3
poly_svm = SVC(kernel='poly', degree=3)

3). 徑向基函數(shù)(RBF)核函數(shù) (rbf):

  • 參數(shù)值:kernel='rbf'
  • 公式: K ( x , y ) = exp ? ( ? ∥ x ? y ∥ 2 2 σ 2 ) K(x, y) = \exp\left(-\frac{\|x - y\|^2}{2\sigma^2}\right) K(x,y)=exp(?2σ2x?y2?)
  • gamma 參數(shù)控制 RBF 核的帶寬。
from sklearn.svm import SVC

# 使用徑向基函數(shù)核函數(shù),設(shè)置帶寬參數(shù)為0.1
rbf_svm = SVC(kernel='rbf', gamma=0.1)

4).Sigmoid 核函數(shù) (sigmoid):

  • 參數(shù)值:kernel='sigmoid'
  • 公式: K ( x , y ) = tanh ? ( α x ? y + c 0 ) K(x, y) = \tanh(\alpha x \cdot y + c_0) K(x,y)=tanh(αx?y+c0?)
  • coef0 參數(shù)控制函數(shù)中的常數(shù)項。
from sklearn.svm import SVC

# 使用Sigmoid核函數(shù),設(shè)置常數(shù)項為0.5
sigmoid_svm = SVC(kernel='sigmoid', coef0=0.5)

2.2.3 一般步驟

使用支持向量機(SVM)模型進行文本分類的一般步驟如下:

1).數(shù)據(jù)準備:

  • 收集文本數(shù)據(jù)集,確保每個樣本都有對應的標簽(類別)。
  • 對文本進行預處理,包括分詞、去除停用詞、詞干提取等,以便得到可用于模型訓練的特征。

2).特征提?。?/strong>

  • 將文本數(shù)據(jù)轉(zhuǎn)換為模型可以理解的特征表示。常用的方法包括詞袋模型、TF-IDF 等。
  • 對于深度學習方法,可以使用詞嵌入(Word Embeddings)等方法得到詞向量表示。

3).劃分數(shù)據(jù)集:

  • 將數(shù)據(jù)集劃分為訓練集和測試集,用于模型的訓練和評估。

4).選擇模型和核函數(shù):

  • 根據(jù)問題的性質(zhì)選擇合適的支持向量機模型,如分類任務使用 SVC。
  • 選擇合適的核函數(shù),可以嘗試線性核、多項式核、徑向基函數(shù)(RBF)核等,根據(jù)數(shù)據(jù)特點調(diào)整超參數(shù)。

5).訓練模型:

  • 將訓練集輸入到支持向量機模型中進行訓練。
  • 在訓練過程中,模型會學習出一個能夠區(qū)分不同類別的超平面或決策邊界。

6).模型評估:

  • 使用測試集對訓練好的模型進行評估,常用的評估指標包括準確率、精確度、召回率、F1 分數(shù)等。
  • 根據(jù)評估結(jié)果調(diào)整模型的超參數(shù),提高模型性能。

7).預測新數(shù)據(jù):

  • 使用訓練好的支持向量機模型對新的文本數(shù)據(jù)進行分類預測。

8).模型解釋(可選):

  • 對于黑盒模型,可以嘗試使用解釋性工具(如 SHAP、LIME)來解釋模型的決策過程。

9).優(yōu)化和調(diào)整:

  • 根據(jù)模型在驗證集上的性能進行調(diào)整,可能需要嘗試不同的特征提取方法、調(diào)整核函數(shù)參數(shù)等。

10).部署模型(可選):
- 如果模型在測試中表現(xiàn)良好,可以將其部署到生產(chǎn)環(huán)境中,用于實際應用。

這些步驟是一個通用的框架,具體的應用時,請根據(jù)具體問題和數(shù)據(jù)的特點而進行適當裁剪。

2.2.4 利用svm進行文本分類

下面我們將會以一些新聞的內(nèi)容數(shù)據(jù)進行文本分類,將文本內(nèi)容歸到不同的類別中:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report, accuracy_score
import jieba

# 構(gòu)建數(shù)據(jù)集
data = {
    'text': [
        "一家新的科技公司發(fā)布了一款革命性的產(chǎn)品。",
        "一場激烈的體育比賽在城市體育館舉行。",
        "科學家發(fā)現(xiàn)了一種新的治療癌癥的方法。",
        "政府宣布提高科研經(jīng)費,支持創(chuàng)新項目。",
        "最新的手機技術(shù)將在下個月發(fā)布。",
        "環(huán)保組織發(fā)起全球范圍的植樹運動。",
        "某公司發(fā)布最新款折疊屏手機。",
        "新的醫(yī)療技術(shù)有望提高手術(shù)成功率。",
        "世界各地的科技巨頭爭相投資量子技術(shù)。",
        "一家環(huán)保公司發(fā)起全球清潔能源倡議。",
        "新型電動汽車在全球市場上取得成功。",
        "科技園區(qū)引進國際一流的研發(fā)團隊。",
        "環(huán)保志愿者走進社區(qū),倡導垃圾分類。",
        "全球籃球聯(lián)賽冠軍產(chǎn)生,精彩賽事吸引關(guān)注。",
    ],
    'label': ['科技', '體育', '科技', '科技', '科技', '環(huán)保', '科技', '科技', '科技', '環(huán)保',
              '娛樂', '科技', '環(huán)保', '體育']
}

df = pd.DataFrame(data)

# 劃分數(shù)據(jù)集
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=11)

# 中文分詞
def chinese_tokenizer(text):
    return list(jieba.cut(text))

# 構(gòu)建模型
text_clf = Pipeline([
    ('tfidf', TfidfVectorizer(tokenizer=chinese_tokenizer, token_pattern=None)),
    ('svm', SVC(kernel='linear', decision_function_shape='ovr'))
])
# # 其他寫法
# tfidf = TfidfVectorizer(tokenizer=chinese_tokenizer, token_pattern=None)
# svm = SVC(kernel='linear', decision_function_shape='ovr')
# text_clf = Pipeline([('tfidf', tfidf), ('svm', svm)])

# 訓練模型
text_clf.fit(X_train, y_train)

# 在測試集上進行預測
y_pred = text_clf.predict(X_test)

# 評估模型性能
print("準確率:", accuracy_score(y_test, y_pred))
print("分類報告:\n", classification_report(y_test, y_pred))


# 添加新的新聞內(nèi)容
new_texts = [
    "一項突破性的環(huán)保技術(shù)在國際會議上首次亮相。",
    "一家科技公司宣布成功研發(fā)出新一代人工智能芯片。",
    "一場精彩的足球比賽在城市體育場上演,吸引了數(shù)萬名觀眾。"
]

# 使用模型進行標簽預測
predicted_labels = text_clf.predict(new_texts)

# 打印預測結(jié)果
for text, label in zip(new_texts, predicted_labels):
    print(f"新聞內(nèi)容: {text}")
    print(f"預測標簽: {label}\n")


運行上述代碼后,結(jié)果如下:
自然語言處理3——玩轉(zhuǎn)文本分類 - Python NLP高級應用,自然語言處理,數(shù)據(jù)挖掘,自然語言處理,分類,python,數(shù)據(jù)挖掘,機器學習

通過上面的結(jié)果,我們可以得到模型的性能非常高,這可能是運氣使然,實際運用時基本不會有這么高的準確率。從文本中,我們也看到預測的類別。


值得注意的是,這里的代碼只是一個簡單的示例,實際上在應用中你可能需要進一步調(diào)整模型的參數(shù),進行交叉驗證等來提高模型的性能。

此外,深度學習模型如卷積神經(jīng)網(wǎng)絡(CNN)和循環(huán)神經(jīng)網(wǎng)絡(RNN)在文本分類中也有出色的表現(xiàn)。在使用這些模型時,你可以考慮使用深度學習框架如TensorFlow或PyTorch,以便更好地處理復雜的語義信息。

3. 模型評估和性能優(yōu)化

一個好的文本分類模型不僅需要選擇合適的算法,還需要進行充分的評估和性能優(yōu)化。

3.1 樸素貝葉斯(Naive Bayes)

模型評估:

  • 1).準確率(Accuracy): 表示分類正確的樣本數(shù)占總樣本數(shù)的比例。計算公式為 (TP + TN) / (TP + TN + FP + FN),其中 TP 為真正例,TN 為真負例,F(xiàn)P 為假正例,F(xiàn)N 為假負例。

  • 2).精確度(Precision): 表示預測為正例中實際為正例的比例。計算公式為 TP / (TP + FP)。

  • 3).召回率(Recall): 表示實際為正例中被正確預測為正例的比例。計算公式為 TP / (TP + FN)。

  • 4).F1 分數(shù): 是精確度和召回率的調(diào)和平均值,計算公式為 2 * (Precision * Recall) / (Precision + Recall)

性能優(yōu)化:

  • 1).特征選擇: 選擇關(guān)鍵特征可以提高模型的性能,可以使用信息增益、卡方檢驗等方法進行特征選擇。

  • 2).平滑處理: 在樸素貝葉斯中,當某個詞在訓練集中未出現(xiàn)時,會導致概率為零,可以使用平滑處理(如拉普拉斯平滑)來避免這個問題。

  • 3).處理不平衡數(shù)據(jù): 如果正負樣本不平衡,可以考慮采用過采樣或欠采樣等方法來平衡數(shù)據(jù)。

3.2 支持向量機(SVM)

模型評估

  • 1).準確率、精確度、召回率、F1 分數(shù): 同樣適用于SVM,采用混淆矩陣來計算這些指標。

  • 2).SVM的決策函數(shù): SVM在預測時可以得到樣本到超平面的距離,可以根據(jù)距離的閾值來調(diào)整分類的靈敏度。

性能優(yōu)化

  • 1).核函數(shù)選擇: SVM的性能高度依賴于核函數(shù)的選擇,可以嘗試不同的核函數(shù)(如線性核、多項式核、高斯核等)來找到最適合數(shù)據(jù)的模型。

  • 2).正則化參數(shù)(C參數(shù))調(diào)優(yōu): 調(diào)整正則化參數(shù)C,以平衡模型的復雜度和訓練集擬合度。

  • 3).特征工程: 對文本進行適當?shù)奶卣鞴こ?,如使用TF-IDF向量表示文本。

  • 4).調(diào)整類別權(quán)重: 對于不平衡的數(shù)據(jù)集,可以通過調(diào)整類別權(quán)重來平衡模型對不同類別的關(guān)注度。

  • 5).交叉驗證: 使用交叉驗證來評估模型在不同子集上的性能,確保模型的泛化能力。

此外,隨著深度學習技術(shù)的不斷發(fā)展,調(diào)整深度學習模型的參數(shù)和結(jié)構(gòu)也是提高文本分類性能的有效途徑。深度學習模型在學習大規(guī)模語料庫中的復雜特征方面具有獨特優(yōu)勢,可以進一步提升文本分類的水平。

寫在最后

通過本文的學習,你不僅了解了文本分類的原理和應用,還掌握了在Python中實現(xiàn)高級文本分類的方法。在解決實際問題時,你可以靈活選擇不同的模型和參數(shù),提高分類效果。文本分類作為NLP領(lǐng)域的重要技術(shù),為我們更好地理解和利用文本信息提供了強有力的工具。希望本文能夠幫助你在數(shù)據(jù)分析和數(shù)據(jù)挖掘的旅程中更進一步。繼續(xù)保持學習,探索NLP的更多可能性吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-775499.html

到了這里,關(guān)于自然語言處理3——玩轉(zhuǎn)文本分類 - Python NLP高級應用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 探索 Python:發(fā)現(xiàn)有趣的庫——第 3 章:玩轉(zhuǎn)自然語言處理

    代碼俠和算法仙正在一間充滿科技感的實驗室里探討自然語言處理(NLP)的奧秘。 代碼俠 : 嘿,算法仙,我最近在研究自然語言處理,但感覺有點復雜啊。 算法仙 : 呵呵,別擔心,我來帶你入門。首先,我們得安裝兩個強大的庫,NLTK 和 spaCy。 代碼俠 : 好的,我已經(jīng)安

    2024年01月21日
    瀏覽(32)
  • 自然語言處理入門:使用Python和NLTK進行文本預處理

    文章標題:自然語言處理入門:使用Python和NLTK進行文本預處理 簡介 自然語言處理(NLP)是人工智能領(lǐng)域的一個重要分支,它致力于使計算機能夠理解、分析和生成人類語言。本文將介紹如何使用Python編程語言和NLTK(Natural Language Toolkit)庫進行文本預處理,為后續(xù)的文本分析

    2024年02月19日
    瀏覽(23)
  • 【Python入門系列】第十八篇:Python自然語言處理和文本挖掘

    【Python入門系列】第十八篇:Python自然語言處理和文本挖掘

    Python自然語言處理(Natural Language Processing,簡稱NLP)和文本挖掘是一門涉及處理和分析人類語言的學科。它結(jié)合了計算機科學、人工智能和語言學的知識,旨在使計算機能夠理解、解釋和生成人類語言。 NLTK(Natural Language Toolkit):它是Python中最受歡迎的NLP庫之一,提供了豐

    2024年02月15日
    瀏覽(36)
  • 【自然語言處理】用Python從文本中刪除個人信息-第二部分

    【自然語言處理】用Python從文本中刪除個人信息-第二部分

    做一個簡單介紹, 酒架 年近48 ,有20多年IT工作經(jīng)歷,目前在一家500強做企業(yè)架構(gòu).因為工作需要,另外也因為興趣涉獵比較廣,為了自己學習建立了三個博客,分別是【全球IT瞭望】,【架構(gòu)師酒館】和【開發(fā)者開聊】,有更多的內(nèi)容分享,謝謝大家收藏。 企業(yè)架構(gòu)師需要

    2024年02月04日
    瀏覽(28)
  • 自然語言文本分類模型代碼

    ????????以下是一個基于PyTorch的文本分類模型的示例代碼,用于將給定的文本分為多個預定義類別: ????????該模型將輸入的文本作為整數(shù)序列傳遞給嵌入層,然后通過多層LSTM層進行處理,最終輸出每個類別的預測概率。 ????????在訓練模型之前,需要將文本序列

    2024年02月14日
    瀏覽(26)
  • 自然語言之文本預處理

    自然語言之文本預處理

    概念 分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列的過程。在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符。分詞過程就是找到這樣分界符的過程. 作用 詞作為語言

    2024年02月06日
    瀏覽(28)
  • 自然語言處理-文本表示: Embedding技術(shù)

    目錄 I. 引言 A. 文本表示介紹 B. 引入Embedding技術(shù)的重要性和應用領(lǐng)域 II. 傳統(tǒng)文本表示方法 A. One-Hot編碼 B. 詞袋模型 C. TF-IDF III. 什么是文本表示-Embedding A. 定義和概念 B. Embedding的目標和作用 IV. 常見Embedding技術(shù) A. Word2Vec 1. CBOW模型 2. Skip-gram模型 3. 結(jié)構(gòu)與訓練方法 B. GloVe 1. 全局

    2024年02月16日
    瀏覽(94)
  • 【自然語言處理】實驗3,文本情感分析

    【自然語言處理】實驗3,文本情感分析

    清華大學馭風計劃課程鏈接? 學堂在線 - 精品在線課程學習平臺 (xuetangx.com) 代碼和報告均為本人自己實現(xiàn)(實驗滿分),只展示主要任務實驗結(jié)果,如果需要詳細的實驗報告或者代碼可以私聊博主 有任何疑問或者問題,也歡迎私信博主,大家可以相互討論交流喲~~ 情感分析

    2024年02月19日
    瀏覽(23)
  • 自然語言處理實戰(zhàn)9-大語言模型的訓練與文本生成過程

    大家好,我是微學AI,今天給大家介紹一下自然語言處理實戰(zhàn)項目9-大語言模型的訓練與文本生成過程,詳細步驟介紹。大語言模型的訓練是通過深度學習技術(shù)實現(xiàn)的。首先,需要準備一個龐大的文本數(shù)據(jù)集作為訓練樣本,這些文本可以是網(wǎng)頁、書籍、新聞等大量的非結(jié)構(gòu)化文

    2024年02月07日
    瀏覽(29)
  • 【自然語言處理(NLP)】基于ERNIE語言模型的文本語義匹配

    【自然語言處理(NLP)】基于ERNIE語言模型的文本語義匹配

    作者簡介 :在校大學生一枚,華為云享專家,阿里云專家博主,騰云先鋒(TDP)成員,云曦智劃項目總負責人,全國高等學校計算機教學與產(chǎn)業(yè)實踐資源建設(shè)專家委員會(TIPCC)志愿者,以及編程愛好者,期待和大家一起學習,一起進步~ . 博客主頁 : ぃ靈彧が的學習日志

    2024年02月10日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包