[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()方法评估模型准确性,最后打印准确性。