【问题标题】:How to take just the score from HuggingFace Pipeline Sentiment Analysis如何仅从 HuggingFace 管道情绪分析中获取分数
【发布时间】:2022-05-21 08:34:20
【问题描述】:

我对整个 HuggingFace 管道世界还很陌生,我偶然发现了一些我无法弄清楚的东西。我已经用谷歌搜索了很多答案,但还没有找到任何东西,所以任何帮助都会很棒。 我试图从 HF 管道情感分类器而不是标签中获取分数,因为我想将分数应用于包含许多文本单元格的数据帧。 我知道如何只用一句话就可以做到这一点,就像这样:

from transformers import pipeline
classifier = pipeline("sentiment-analysis")

result = classifier("This is a positive sentence")[0]
(result['score'])

这给了我以下输出:

0.9994597434997559

我知道如何将分类器应用于我的数据框。但是,当我将上面的代码调整为数据框时,如下所示:

result = df['text'].apply(lambda x: classifier(x[:512]))[0]
df['sentiment'] = result['score']

我的代码在第二行失败,出现以下错误:

TypeError: list indices must be integers or slices, not str

有谁知道如何解决这个问题?我已经尝试了一些事情,但到目前为止我还无法弄清楚。任何帮助将不胜感激!

【问题讨论】:

    标签: python sentiment-analysis huggingface-transformers


    【解决方案1】:

    主要问题是第一行的最后一部分(即[0])应该最外面的括号内,这样它就是你的lambda函数的一部分。

    此外,分数和您的标签包含冗余信息(所选标签基于分数),并且负分数和正分数相互替代(例如,pos = 1 - neg)。因此,提取一个标签(正面或负面)的分数就足够了。这可以通过在构造或调用管道时打开return_all_scores 标志来完成。

    classifier = pipeline("sentiment-analysis", return_all_scores=True)
    

    之后,提取正(或负)分就很简单了:

    df['pos_score'] = df['text'].apply(
      lambda x: classifier(x[:512])[0][1].get('score')
    )
    

    还要记住,这是一个顺序操作(不是批处理),因此速度很慢。最后,我不建议直接解释或使用分数。这是一种分类,“倾向”得分或“确定性”通常未经校准,并且已知神经元网络过度自信(=您的得分将分布在 0 和 1 左右)。

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 2013-02-02
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      相关资源
      最近更新 更多