[TOC]
使用深度学习模型进行情感分析
1. 导入库
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import pandas as pd
import jieba
import re
CopyInsert
transformers
库中的pipeline
用于便捷地创建和使用预训练的模型进行任务(如情感分析)。pandas
用于数据处理和分析。jieba
是一个中文分词程序,用于对中文文本进行分词。re
是Python的正则表达式库,用于处理文本的清理和格式化。
2. 定义情感分析类
class SentimentAnalysis:
def __init__(self):
self.path = './weibo_senti_100k.csv'
CopyInsert
- 定义一个
SentimentAnalysis
类,构造函数中初始化self.path
变量,存储数据文件的路径。
3. 数据处理
def data_process(self):
index = 0
review_result = []
df = pd.read_csv(self.path)
review = df['review'].tolist()
for sentence in review:
sentence = re.sub('@.*?', '', sentence)
sentence = re.sub('@.*?:', '', sentence)
sentence = re.sub('@.*?:', '', sentence)
sentence = re.sub(r'\w+', '', sentence)
cut = jieba.lcut(sentence)
segResult = []
for word in cut:
if ('\u4e00' <= word <= '\u9fa5'):
segResult.append(word)
review_result.append(' '.join(segResult))
index += 1
return review_result
CopyInsert
- 首先读取CSV文件并将评论数据加载到
review
列表中。 - 对每条评论进行清洗处理:
- 移除@提及的用户(例如:@用户)。
- 用正则表达式移除所有非中文字符(如数字、英文字母等)。
- 使用
jieba.lcut
进行分词,对分词结果进行过滤,仅保留中文字符。 - 将处理后的结果加入到
review_result
列表中,最终返回这个列表。
4. 评估模型准确性
def evaluate(self, guess_label, real_label):
real_index = 0
fake_index = 0
for index in range(len(real_label)):
if real_label[index] == guess_label[index]:
real_index += 1
else:
fake_index += 1
return real_index/(real_index + fake_index)
CopyInsert
- 该方法接收两个列表:
guess_label
(模型预测标签)和real_label
(真实标签)。 - 通过循环比较两个标签列表,计算正确预测的数量与总预测数量的比率,返回这个比率作为准确性。
5. 加载真实标签
def load_data(self):
df = pd.read_csv(self.path)
real_label = df['label'].tolist()
return real_label
CopyInsert
- 读取CSV文件并获取'事件'列的真实标签。
6. 主函数部分
if __name__ == '__main__':
classifier = pipeline('sentiment-analysis')
sa = SentimentAnalysis()
results = classifier(sa.data_process())
guess_label = []
for result in results:
if result['label'] == 'POSITIVE':
guess_label.append(1)
else:
guess_label.append(0)
print(f'label: {result["label"]}, with score: {round(result["score"], 4)}')
real_label = sa.load_data()
ratio = sa.evaluate(guess_label, real_label)
print(ratio)
CopyInsert
- 检查是否在主模块中运行。
- 使用
pipeline
创建情感分析模型。 - 初始化
SentimentAnalysis
类实例。 - 调用
data_process()
方法处理数据,并传入情感分析模型进行分析。 - 根据模型输出生成预测标签(1表示正向情感,0表示负向情感)。
- 打印每个预测结果及其分数。
- 加载真实标签并通过
evaluate()
方法评估模型准确性,最后打印准确性。