借助OpenAI接口20行代码搞定情感分析

189 阅读2分钟

“情感分析”问题,是指我们根据一段文字,去判断它的态度是正面的还是负面的。比如评价是好评还是差评、说话时积极还是消极等

针对情感分析类型的问题,传统的解决方法是将其视为分类问题。具体而言,首先需要准备一部分评论数据,然后对这些评论进行手动标记,确定它们是正面还是负面的。例如,如果某用户评论了“这家外卖真不错”,那么这条评论会被标记为“正面情感”。如果某用户评论了“这个手机信号是真差”,那么相应的评论将被标记为“负面情感”。

然后就要用到朴素贝叶斯算法,还要大量的语聊进行机器学习,这对于没接触过机器学习算法的来说还是挺头疼的,但是现在我们借助OpenAI提供的 Embedding 接口就能很好实现这类问题。

对于任何给定的文本评论,我们可以使用 API 来获取其Embedding表示。然后,通过使用余弦相似度来计算该文本嵌入与“好评”和“差评”之间的相似度。接着,我们将文本嵌入与“好评”相似度减去与“差评”相似度,从而获得一个分数。如果这个分数大于零,那么说明该评论更接近于“好评”,我们可以将其分类为好评。如果这个分数小于零,那么说明该评论更接近于“差评”,我们可以将其分类为差评。

例如下面一段判断文本是对股市的看涨还是看跌:

import os  
import openai  
from openai.embeddings_utils import cosine_similarity, get_embedding  
  
openai.api_key = os.getenv("OPENAI_API_KEY")  
  
up = get_embedding("上涨")  
down = get_embedding("下跌")  
  
up_example = get_embedding("即将全面进入牛市")  
down_example = get_embedding("还没有跌到位")  
  
  
# 计算跟看涨更接近还是更看跌更相识  
def get_score(emb):  
return cosine_similarity(emb, up) - cosine_similarity(emb, down)  
  
  
print("上涨评分:", get_score(up_example))  
print("下跌评分:", get_score(down_example))

输出结果:

上涨评分: 0.02870205623065547
下跌评分: -0.02422318884479502

大语言模型里 Embedding 之间的距离,来进行情感分析,这种使用大语言模型的技巧,一般被称做零样本分类。借助OpenAI的接口几分钟轻松实现文本情感分析,是不是很酷