Pyspark情感分析无效输出

问题描述 投票:0回答:1

我正在尝试对用例进行情感分析。大多数时候,它会给出正确的结果,但在某些情况下,即使是积极的评论也会被标记为消极的。如何修复我的代码以获得更高的准确性?

我的代码

from pyspark.sql.functions import udf, col
from pyspark.sql.types import StringType
from transformers import pipeline
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# Define the filter_stopwords function
def filter_stopwords(sentence):
    stop_words = set(stopwords.words('english'))
    word_tokens = word_tokenize(sentence)
    filtered_sentence = [w for w in word_tokens if not w in stop_words]
    return " ".join(filtered_sentence)

# Initialize the sentiment analysis pipeline with a different model
sentiment_pipeline = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")

# Define a function to get sentiment using the pipeline
def get_sentiment(text):
    filtered_text = filter_stopwords(text)
    result = sentiment_pipeline(filtered_text)[0]
    return result['label'].lower()  # returns 'positive', 'negative', etc.

# Register the function as a UDF
sentiment_udf = udf(get_sentiment, StringType())

# df = df.withColumn("sentiment", sentiment_udf(col("text_column")))

输入数据

  1. 前两次都没有弄好,但修好后就修好了。

  2. 响应时间非常好 -- 注意 看起来像是拼写错误,但他的评论是积极的

  3. 最初的代理联系无法解决我的问题,但很快将问题升级给可以解决的人。

对于这个输入,我期望所有的都应该是积极,而不是我得到消极

pyspark nlp nltk huggingface-transformers
1个回答
0
投票

您的代码非常好,但问题在于模型如何解释您的输入,而不是实现本身。 我直接在 distilbert-base-uncased-finetuned-sst-2-english 的 Hugging Face 模型页面上运行了您的输入。

第一个示例(“前两次没有得到正确的结果,但是当它被修复时,它被修复得很好”)按预期返回正值。 然而,其他两个示例返回负值,确认问题不是您的代码,而是模型处理这些输入的方式。 这些模型是在一般数据集上进行训练的,并且可能会误解特定领域或细微差别的输入,尤其是具有混合情感信号或拼写错误(例如示例中的“grate”)的输入。第三个输入中的“无法解决我的问题”之类的短语可能比“迅速将问题升级给可以解决的人”中的积极情绪更重要。

我建议您探索以下内容:

  1. 直接在 HhuggingFace 上测试不同情绪分析模型的异常值示例。您可能会发现更符合数据性质的模型。
  2. 预处理您的数据以修复拼写错误和/或重新措辞不明确或混合情感短语。
  3. 最后,如果仍然对结果不满意并且不能容忍边际误差,那么你应该注释你的数据并用它来微调情感分析模型。
© www.soinside.com 2019 - 2024. All rights reserved.