[Python][自然語言]利用NLTK建立自己的情感分析模型

閱讀時間約 9 分鐘

先前上一篇是使用NLT內置的電影評論數據集 movie_reviews,來訓練出情感分析模型,此篇文章介紹可以導入自己的訓練資料集來建立情感分析模組。

[Python][自然語言]NLTK 實現電影評論情感分析


所需套件

pip install pandas
pip install scikit-learn
pip install nltk

本機的套件版本

紀錄一下程式範例目前可成功使用的套件版本,因為有套件更新時可能語法就會跟著改變需要修正。

Python 3.10.12
scikit-learn 1.2.2
pandas 2.0.3
nltk 3.8.1


建立自己的情感分析模型,可以透過以下步驟來實現:

步驟一:準備自己的訓練資料集

首先,你需要準備帶有情感標籤的文本數據集。這些文本可以是來自於社交媒體、產品評論、新聞文章等,並且需要標記它們的情感類別,如正面、負面或中性。

例如,假設你有一個包含電影評論的 CSV 文件,每行包括評論文本和相應的情感類別(positive, negative, neutral):

text,sentiment
"This movie was fantastic!",positive
"I didn't like this film.",negative
"The plot was boring.",negative
"This film exceeded my expectations.",positive
"This movie is okay.",neutral

利用pandas來創立CSV文件

import pandas as pd

# 創建資料
data = {
'text': [
"This movie was fantastic!",
"I didn't like this film.",
"The plot was boring.",
"This film exceeded my expectations.",
"This movie is okay."
],
'sentiment': [
'positive',
'negative',
'negative',
'positive',
'neutral'
]
}

# 將資料轉換為 DataFrame
df = pd.DataFrame(data)

# 儲存成 CSV 檔案
df.to_csv('movie_reviews.csv', index=False)

print("CSV 檔案儲存完成。")


步驟二:讀取並處理資料

使用 Python 來讀取並處理 CSV 文件,準備用於訓練和測試的資料。

train_test_split 函數來自於 Scikit-Learn 套件(sklearn.model_selection),它的作用是將資料集分割成訓練集和測試集

train_test_split 需要的資料格式是list或 numpy 陣列。

import pandas as pd
from sklearn.model_selection import train_test_split

# 讀取 CSV 文件
df = pd.read_csv('your_dataset.csv')

# 處理文本和情感標籤
documents = [(text, sentiment) for text, sentiment in zip(df['text'], df['sentiment'])]

# 分割訓練集和測試集
train_documents, test_documents = train_test_split(documents, test_size=0.2, random_state=42)

# test_size=0.2 表示將資料集的 20% 分割為測試集,剩餘的 80% 作為訓練集
# random_state=42 用於設置隨機種子,保證每次運行結果一致



步驟三:特徵提取

使用 NLTK 或其他自然語言處理工具來提取文本特徵,例如詞袋模型、TF-IDF 向量等。這些特徵將作為機器學習模型的輸入。

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfVectorizer

# 初始化停用詞集
stop_words = set(stopwords.words('english'))

# 定義特徵提取函數,這裡使用 TF-IDF 向量作為特徵
def extract_features(document):
words = word_tokenize(document.lower()) # 分詞並轉為小寫
words = [word for word in words if word.isalpha() and word not in stop_words] # 去除停用詞和非字母字符
return ' '.join(words)

# 提取特徵並轉換成 TF-IDF 向量
vectorizer = TfidfVectorizer(preprocessor=extract_features)
X_train = vectorizer.fit_transform([text for text, label in train_documents])
y_train = [label for text, label in train_documents]
X_test = vectorizer.transform([text for text, label in test_documents])
y_test = [label for text, label in test_documents]



步驟四:訓練機器學習模型

選擇適合的機器學習算法(如單純貝斯分類器、支持向量機、深度學習模型等),並使用準備好的特徵和標籤進行模型訓練。

from sklearn.naive_bayes import MultinomialNB

# 初始化並訓練分類器
classifier = MultinomialNB()
classifier.fit(X_train, y_train)

# 評估模型準確率
accuracy = classifier.score(X_test, y_test)
print('Accuracy:', accuracy)

輸出

評估準確率太低,因訓練資料數據過少,哈哈,因測試用只有五行。

Accuracy: 0.0



步驟五:部署模型

最後,使用訓練好的模型進行情感分析。你可以將模型保存為文件,並在需要時進行載入使用。

import pickle

# 指定要保存模型的文件名
model_file = 'your_sentiment_classifier.pkl'

# 儲存模型
with open(model_file, 'wb') as f:
pickle.dump(classifier, f)

# 載入模型
with open(model_file, 'rb') as f:
loaded_classifier = pickle.load(f)

# 使用載入的模型進行情感分析
def sentiment_analysis(text):
text_features = vectorizer.transform([extract_features(text)])
return loaded_classifier.predict(text_features)[0]

# 測試 情感分析模型
text1 = "I love this product!"
text2 = "This movie is terrible."

print("Text 1 sentiment:", sentiment_analysis(text1))
print("Text 2 sentiment:", sentiment_analysis(text2))

輸出

因為訓練資料過少,所以模型是沒有辦別能力的。

Text 1 sentiment: positive 
Text 2 sentiment: positive

這樣,你就可以根據自己的資料集訓練出自己的情感分析模型,並在需要時使用它。

120會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
情感分析是一種自然語言處理技術,用於自動識別和分析文本中的情感傾向,通常是正向、負向或中性。 我們可以使用 NLTK 來實現一個基於單純貝斯分類器的情感分析模型。
本文介紹了流行的Python套件NLTK(Natural Language Toolkit)的主要特點、功能和在中文和英文語料上的應用。從安裝到實際應用,深入介紹了分詞、停用詞去除、詞性標註、命名實體識別等NLP任務的具體實現和步驟,幫助讀者理解和應用NLTK。
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
情感分析是一種自然語言處理技術,用於自動識別和分析文本中的情感傾向,通常是正向、負向或中性。 我們可以使用 NLTK 來實現一個基於單純貝斯分類器的情感分析模型。
本文介紹了流行的Python套件NLTK(Natural Language Toolkit)的主要特點、功能和在中文和英文語料上的應用。從安裝到實際應用,深入介紹了分詞、停用詞去除、詞性標註、命名實體識別等NLP任務的具體實現和步驟,幫助讀者理解和應用NLTK。
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
在求學階段,你已經對代數的計算熟到不能再熟,所以變數(variable)對你來說應該不至於太陌生,先來看看以下這個例子:   
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
在求學階段,你已經對代數的計算熟到不能再熟,所以變數(variable)對你來說應該不至於太陌生,先來看看以下這個例子:   
Thumbnail
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表