如何将情感分类器应用于数据框[重复]

Posted

技术标签:

【中文标题】如何将情感分类器应用于数据框[重复]【英文标题】:How to apply a sentiment classifier to a dataframe [duplicate] 【发布时间】:2021-01-28 05:29:35 【问题描述】:

我有一个包含调查答案的数据框。其中三列是开放式答案。使用 HuggingFace NLP 我正在使用预先训练的情感分析分类器。请在下面找到代码:

from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
classifier("This community is so helpful!")

分类器测试的结果是:"['label': '5 stars', 'score': 0.800311]

我想做的是让分类器在我的开放式响应上运行,并在我的数据框的新列中包含星级和排名分数。

任何帮助将不胜感激。

编辑:我通过本地 csv 上传了数据集。我要使用的数据框列名称是“Q72”

【问题讨论】:

这信息太多了。您正在搜索的是如何在列上应用函数并使用结果创建新列。 NLP 不会为这个问题添加任何有用的东西。一旦您以这种方式提出问题,就会有很多现有答案,例如***.com/questions/16236684/… 这能回答你的问题吗? Apply pandas function to column to create multiple new columns? 【参考方案1】:

在一个列上应用模型并使用分配函数创建另一个列:

df = (
    df
    .assign(sentiment = lambda x: x['Q72'].apply(lambda s: classifier(s)))
    .assign(
         label = lambda x: x['sentiment'].apply(lambda s: (s[0]['label'])),
         score = lambda x: x['sentiment'].apply(lambda s: (s[0]['score']))
    )
)

【讨论】:

这太棒了。太感谢了!有没有办法分离出结果(即第一个结果列是星号,下一个结果列是分数)?还是您认为这会是一个额外的步骤,例如将文本值分成不同的列? @CIHAnalytics 更新了答案,现在您在单独的列中有这 2 个字段 我收到一条错误消息,提示“字符串索引必须是整数”。我该如何解决? 您能否更新问题并让我知道您如何加载数据集和。你有哪些专栏以及如何应用我解释的内容?以便我可以帮助您。 我已经更新了问题。我通过本地 csv 上传了数据集。我正在应用您的答案的列是“Q72”。所以我用 x['Q72'] 替换了你的答案中的 x['sentiment']。该列中的答案是测试答案,因此它们仅包括“Love it”、“Meh”和“Hate it”。类型错误指向标签位。

以上是关于如何将情感分类器应用于数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

分类:推文情感分析 - 步骤顺序

使用 Mahout 进行朴素贝叶斯分类的情感分析

朴素贝叶斯构建“饥饿站台”豆瓣短评情感分类器

Spark mllib多层分类感知器在情感分析中的实际应用

基于朴素贝叶斯分类器的情感分析

#私藏项目实操分享# Java实现基于朴素贝叶斯的情感词分析