【人工智能】使用先前训练好的BERT模型进行情感预测的Python程序

下面是一个使用先前训练好的BERT模型进行情感预测的Python程序。程序将读取指定文件夹中的多个JSON文件,并对每个文件中的评论内容进行情感分析,最后输出每个课程的正面情感比例。

import os
import json
import torch
from transformers import BertTokenizer, BertForSequenceClassification
from datasets import Dataset
import numpy as np

# 设置设备
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
print(f'Using device: {device}')

# 加载模型和tokenizer
model_save_path = './final_saved_model'
model = BertForSequenceClassification.from_pretrained(model_save_path)
tokenizer = BertTokenizer.from_pretrained(model_save_path)
model.to(device)

# 定义文件夹路径
folder_path = './comments_folder'  # 这里替换为你的文件夹路径

# 定义预测函数
def predict_sentiment(contents):
    data = {'text': contents}
    dataset = Dataset.from_dict(data)
    
    def tokenize_function(examples):
        return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=128)
    
    dataset = dataset.map(tokenize_function, batched=True)
    dataset.set_format(type='torch', columns=['input_ids', 'attention_mask'])
    
    loader = torch.utils.data.DataLoader(dataset, batch_size=16)
    
    model.eval()
    predictions = []
    with torch.no_grad():
        for batch in loader:
            input_ids = batch['input_ids'].to(device)
            attention_mask = batch['attention_mask'].to(device)
            outputs = model(input_ids, attention_mask=attention_mask)
            logits = outputs.logits
            preds = np.argmax(logits.cpu().numpy(), axis=-1)
            predictions.extend(preds)
    
    return predictions

# 定义课程正面情感比例计算函数
def calculate_positive_ratio(json_files):
    results = {}
    for file_name in json_files:
        course_name = file_name.replace('-comments.json', '')
        with open(os.path.join(folder_path, file_name), 'r', encoding='utf-8') as file:
            comments = json.load(file)
            contents = [comment['content'] for comment in comments]
            predictions = predict_sentiment(contents)
            positive_count = sum(1 for pred in predictions if pred == 0)  # 假设标签0表示正面情感
            total_count = len(predictions)
            positive_ratio = positive_count / total_count if total_count > 0 else 0
            results[course_name] = positive_ratio
    return results

# 获取文件夹中的所有JSON文件
json_files = [f for f in os.listdir(folder_path) if f.endswith('-comments.json')]

# 计算每个课程的正面情感比例
positive_ratios = calculate_positive_ratio(json_files)

# 输出结果
for course_name, ratio in positive_ratios.items():
    print(f"课程: {course_name}, 正面情感比例: {ratio:.2f}")

程序说明:

  1. 文件夹路径folder_path 是存放JSON文件的文件夹路径,你需要替换为你的实际路径。
  2. 加载模型:程序会加载之前保存的BERT模型和tokenizer。
  3. 预测函数predict_sentiment 函数会对输入的评论内容进行情感预测,返回预测标签。
  4. 计算正面情感比例calculate_positive_ratio 函数会计算每个课程的正面情感比例,并以课程名称为键存储结果。
  5. 结果输出:程序会遍历文件夹中的所有符合格式的JSON文件,并输出每个课程的正面情感比例。

运行该程序后,将会在控制台输出每个课程的正面情感比例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值