[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

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

avatar-img
128會員
215內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_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
最近國泰世華CUBE App推出的「美股定期定額」功能,讓使用者可以方便地進行跨境理財(但讀者仍需根據自身需求審慎考量),除了享有美股定期定額的新功能,也同時享有台股定期定額的功能,可以一站滿足我們理財的需求! 透過國泰世華CUBE App線上開台股證券戶+複委託戶,流程最快僅需要5分鐘。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
一部期待已久的電影🎞,以下開始爆雷📣還沒看過的可以先跳過🙂 每個情緒都有它的功用,彼此也作為調節劑,讓主人在面對各樣的狀況像社交、自我保護,還是對事情的反應時有適當的情緒展現,雖然有時也有失誤、失控讓主人犯錯的時候,但正常的情況下都是可以調整回來的。以下是我看完有所感觸
https://www.youtube.com/watch?v=wjZofJX0v4M 這是我看過最好的AI科普影片了;現在流行的GPT使用的大語言模型 (large language model, LLM), 是把每一個單字都當作一個高維度向量 影片中GPT3共儲存50257個英文單字, 每
一部法國自然環境/溫馨電影,適合心情疲憊且喜歡接觸自然者觀看。
包含一大堆劇透,和關於電影內容的碎碎念,這是一部不錯的藝術作品。
Thumbnail
語言模型與文字表示以不同的方式來分析自然語言的詞語分佈及語意關係。本文章簡要介紹了語言模型、Word2vec、FastText、GloVe和Transformer等技術,並提供了實際的應用參考點,幫助讀者深入理解自然語言處理的技術。
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。
Thumbnail
最近國泰世華CUBE App推出的「美股定期定額」功能,讓使用者可以方便地進行跨境理財(但讀者仍需根據自身需求審慎考量),除了享有美股定期定額的新功能,也同時享有台股定期定額的功能,可以一站滿足我們理財的需求! 透過國泰世華CUBE App線上開台股證券戶+複委託戶,流程最快僅需要5分鐘。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
一部期待已久的電影🎞,以下開始爆雷📣還沒看過的可以先跳過🙂 每個情緒都有它的功用,彼此也作為調節劑,讓主人在面對各樣的狀況像社交、自我保護,還是對事情的反應時有適當的情緒展現,雖然有時也有失誤、失控讓主人犯錯的時候,但正常的情況下都是可以調整回來的。以下是我看完有所感觸
https://www.youtube.com/watch?v=wjZofJX0v4M 這是我看過最好的AI科普影片了;現在流行的GPT使用的大語言模型 (large language model, LLM), 是把每一個單字都當作一個高維度向量 影片中GPT3共儲存50257個英文單字, 每
一部法國自然環境/溫馨電影,適合心情疲憊且喜歡接觸自然者觀看。
包含一大堆劇透,和關於電影內容的碎碎念,這是一部不錯的藝術作品。
Thumbnail
語言模型與文字表示以不同的方式來分析自然語言的詞語分佈及語意關係。本文章簡要介紹了語言模型、Word2vec、FastText、GloVe和Transformer等技術,並提供了實際的應用參考點,幫助讀者深入理解自然語言處理的技術。
Thumbnail
運用大數據文本分析,所得出來的結果,皆有科學論文實證。