我正在尝试对用例进行情感分析。大多数时候,它会给出正确的结果,但在某些情况下,即使是积极的评论也会被标记为消极的。如何修复我的代码以获得更高的准确性?
我的代码
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")))
输入数据
前两次都没有弄好,但修好后就修好了。
响应时间非常好 -- 注意 看起来像是拼写错误,但他的评论是积极的
最初的代理联系无法解决我的问题,但很快将问题升级给可以解决的人。
对于这个输入,我期望所有的都应该是积极,而不是我得到消极
您的代码非常好,但问题在于模型如何解释您的输入,而不是实现本身。 我直接在 distilbert-base-uncased-finetuned-sst-2-english 的 Hugging Face 模型页面上运行了您的输入。
第一个示例(“前两次没有得到正确的结果,但是当它被修复时,它被修复得很好”)按预期返回正值。 然而,其他两个示例返回负值,确认问题不是您的代码,而是模型处理这些输入的方式。 这些模型是在一般数据集上进行训练的,并且可能会误解特定领域或细微差别的输入,尤其是具有混合情感信号或拼写错误(例如示例中的“grate”)的输入。第三个输入中的“无法解决我的问题”之类的短语可能比“迅速将问题升级给可以解决的人”中的积极情绪更重要。
我建议您探索以下内容: