前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 ChatGPT 进行数据增强的情感分析

使用 ChatGPT 进行数据增强的情感分析

原创
作者头像
Miloce
修改2023-09-23 08:12:37
1.1K1
修改2023-09-23 08:12:37
举报
文章被收录于专栏:鲸云鲸云

情感分析是自然语言处理(NLP)的一个子领域,旨在分辨和分类文本数据中表达的底层情感或情感。无论是了解客户对产品的意见,分析社交媒体帖子还是评估公众对政治事件的情感,情感分析在从大量文本数据中解锁有价值的见解方面发挥着重要作用。

然而,训练一个准确的情感分类模型通常需要大量标注数据,这些数据可能并不总是容易获取或耗时。这一限制促使研究人员和从业者探索创新技术,如数据增强,以生成合成数据并增强训练集。

在本文中,我们将深入研究数据增强的世界,具体使用由OpenAI开发的强大语言模型ChatGPT,生成额外的训练样本,以增强情感分类模型的性能。通过利用ChatGPT的能力,我们可以高效地创建多样且真实的数据,在有限的标注数据本应是障碍的情况下,为情感分析开辟新的可能性。

没有数据增强的情感分类

为了训练情感分

现在,让我们继续进行代码示例:

代码语言:txt
复制
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

dataset = pd.read_csv(r"D:\Datasets\IMDB Dataset.csv")
dataset.head()

dataset = dataset.head(600)
X_train, X_test, y_train, y_test = train_test_split(dataset['review'], 
                                                    dataset['sentiment'], 
                                                    test_size=0.2, 
                                                    random_state=42)

# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer()
X_train_tfidf = vectorizer.fit_transform(X_train)

# 训练随机森林模型
rf_model = RandomForestClassifier(n_estimators=500)
rf_model.fit(X_train_tfidf, y_train)

# 使用相同的向量化器转换测试数据
X_test_tfidf = vectorizer.transform(X_test)

# 预测测试数据上的情感
y_pred = rf_model.predict(X_test_tfidf)

accuracy = accuracy_score(y_test, y_pred)
print("准确度:", accuracy)

没有数据增强的情况下,我获得了0.6916的准确度。

使用ChatGPT进行数据增强

现在,让我们使用ChatGPT来增强我们的数据。我们将生成100个额外的评论。让我们开始吧。

代码语言:txt
复制
import os
import openai

api_key = os.getenv('OPENAI_KEY2')
openai.api_key = api_key

在上面的代码段中,我们正在设置用于访问OpenAI语言模型的OpenAI API,具体来说是"GPT-3.5"模型。这是ChatGPT背后使用的语言模型。

首先,我们导入所需的库。然后,我们通过从环境变量OPENAI_KEY2中检索它来设置OpenAI API密钥。这个密钥对于向OpenAI服务发出API调用是必需的。

接下来,我们通过将其分配给openai.api_key来配置openai库以使用获得的API密钥。

下一步是定义一个生成电影评论的函数。

代码语言:txt
复制
import time

def generate_reviews(review):

    content = """使用以下评论作为示例,生成一条短的IMDB电影评论。评论情感应为正面、负面或中性之一。
    评论 = {}. 还要在你的回复开头以一个词(正面、负面、中性)提到评论的情感。""".format(review)


    generated_review = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      temperature=0.7,
      messages=[
            {"role": "user", "content": content}
        ]
    )

    return generated_review["choices"][0]["message"]["content"]

上面的代码定义了一个名为generate_reviews(review)的函数,该函数使用OpenAI GPT-3.5 Turbo语言模型基于示例评论生成电影评论。函数以输入评论作为示例,并提示模型创建一个具有指定情感(正面、负面或中性)的新电影评论。temperature参数控制生成文本的创造力。

然后,函数返回生成的电影评论。这种方法允许我们轻松生成具有不同情感的多样化电影评论,充分利用了OpenAI的GPT-3.5 Turbo语言模型的能力。

接下来,我们将遍历我们训练集中的前100条电影评论,并将它们用作生成的示例。

以下代码包含一个循环,使用generate_reviews(review)函数生成100条电影评论。生成的评论存储在generated_reviews列表中。每条评论基于训练数据(X_train)的不同示例。这种方法允许我们创建多样化且富有创意的电影评论。

代码语言:txt
复制
generated_reviews = []

X_train_list = X_train.tolist()

for i in range

(100):

    review = X_train_list[i]
    generated_review = generate_reviews(review)
    generated_reviews.append(generated_review)
    print(i + 1, generated_review)

使用生成的评论进行训练

现在,我们将使用原始数据和增强数据来训练我们的机器学习模型。

首先,让我们将ChatGPT生成的评论转换为包含评论和情感列的Pandas数据帧。以下脚本遍历每个生成的评论,将评论拆分为情感和评论,并将这些值返回给调用函数。所有生成的评论的文本和情感都存储在一个字典中,然后附加到一个列表中,并转换为Pandas数据帧。

代码语言:txt
复制
import re
def split_string_into_two(input_string):

    # 将字符串拆分成单词
    words = input_string.split()

    # 用第一个单词创建第一个字符串
    first_string = words[0].lower()
    first_string = re.sub(r'[^a-zA-Z0-9]', '', first_string)

    # 使用第二个单词创建第二个字符串
    second_string = ' '.join(words[1:]) if len(words) > 1 else ''

    # 移除换行符
    second_string = second_string.replace('\n', ' ')

    return first_string, second_string

generated_reviews_dicts = []
for review in generated_reviews:
    first, second = split_string_into_two(review)
    review_dict = {'sentiment':first, 'review':second}
    generated_reviews_dicts.append(review_dict)

df = pd.DataFrame(generated_reviews_dicts)
df.sentiment.value_counts()

该脚本共生成了99条电影评论。其中,48条评论被预测为正面情感,46条评论被预测为负面情感,5条评论被标记为中性。但是,一条评论的情感被预测为文本"review",似乎是不正确的。因此,我从结果中删除了这个特定的记录,只保留了情感被分类为正面、负面或中性的评论。

接下来,我将生成的评论添加到原始训练集中的评论中:

代码语言:txt
复制
X_train_aug = df["review"]
X_train_new = X_train.append(X_train_aug)

y_train_aug = df["sentiment"]
y_train_new = y_train.append(y_train_aug)

剩下的步骤与之前相同,我们将使用TFIDF将文本转换为向量,使用随机森林算法训练我们的模型,并对测试集进行预测。

代码语言:txt
复制
# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer()
X_train_tfidf = vectorizer.fit_transform(X_train_new)

# 训练随机森林模型
rf_model = RandomForestClassifier(n_estimators=500)
rf_model.fit(X_train_tfidf, y_train_new)

# 使用相同的向量化器转换测试数据
X_test_tfidf = vectorizer.transform(X_test)

# 预测测试数据上的情感
y_pred = rf_model.predict(X_test_tfidf)

accuracy = accuracy_score(y_test, y_pred)
print("准确度:", accuracy)

在输出中,我获得了0.75的分类准确度,相对于原始的0.6916,提高了大约6%。这个结果非常令人印象深刻,仅使用100条新生成的记录。这显示了ChatGPT进行数据增强的显著能力。

希望您会喜欢这篇教程。欢迎分享您对如何进一步改进这些结果的想法。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表(https://cloud.tencent.com/developer/article/2328835?from_column=20421&from

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 没有数据增强的情感分类
  • 使用ChatGPT进行数据增强
  • 使用生成的评论进行训练
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档