最好做成一个开关,因为需要将 AI 生成的内容判断情绪需要消耗 Token。
:::info 我们认为,之前经过预训练的大语言模型里面,已经蕴含了情感分析的知识。我们只需要简单利用大语言模型里面知道的“好评”和“差评”的概念信息,就能判断出它从未见过的评论到底是好评还是差评。
因此在我们的虚拟偶像开发中,我们可以通过 OpenAI 的 Embedding 接口来简单计算 OpenAI 返回文本与不同情绪之间的余弦相似性来实现
情绪:
- 喜悦(Joy)
- 悲伤(Sadness)
- 愤怒(Anger)
- 恐惧(Fear)
- 惊讶(Surprise)
- 厌恶(Disgust)
这是 6 种比较基础的人类情绪,其他还有
- 信任(Trust)
- 预期/期待(Anticipation)
- 羞愧
- 内疚
- 骄傲
- 羡慕
- 同情
- 感激
等
:::
什么是情感分析 from GPT4
情感分析(Sentiment Analysis)是自然语言处理(NLP)的一个分支,它专注于识别和提取文本数据中的情感内容。简而言之,情感分析的目标是确定一个文本表达的情感倾向,通常是正面、负面或中立。 情感分析广泛应用于社交媒体监控、产品和服务评论分析、市场研究、政治舆情分析等领域。它可以帮助企业和组织了解公众对于品牌、产品或服务的感受,从而做出相应的策略调整。 情感分析可以分为几个层次:- 文档级别:在这个层次上,整个文档(如一篇评论或一篇博客文章)被认为是表达单一情感的实体。任务是判断整篇文档所表达的情感倾向。
- 句子级别:在这个层次上,分析的焦点是单个句子。每个句子被视为表达独立情感的单位,分析的目标是判断每个句子的情感色彩。
- 方面级别:更细粒度的情感分析,不仅识别情感的倾向,还识别情感关联的特定方面或属性。例如,在一条关于手机的评论中,“电池寿命长”可能被判断为对电池方面的正面评价。
- 基于规则的方法:使用预先定义的规则和情感词典来识别文本中的情感表达。这种方法依赖于情感词汇表,如AFINN、SentiWordNet等。
- 机器学习方法:通过训练分类器(如支持向量机、随机森林、朴素贝叶斯等)来识别情感。这通常需要大量标记的训练数据。
- 深度学习方法:使用神经网络(如卷积神经网络CNN、循环神经网络RNN、长短期记忆网络LSTM等)来捕捉文本中的复杂模式,并进行情感分类。
余弦距离 & 余弦相似性
余弦距离是一种衡量两个向量在多维空间中的相似性的度量方式。它是通过计算两个向量的夹角的余弦值来确定的,因此被称为余弦相似性(Cosine Similarity)。余弦距离通常用于文本分析中,特别是在处理文本数据的向量化表示时(如TF-IDF或Word2Vec)。 余弦相似性的计算公式如下: [ \text{Cosine Similarity} (A, B) = \frac{A \cdot B}{||A|| \times ||B||} ] 其中:- ( A ) 和 ( B ) 是两个非零向量。
- ( A \cdot B ) 表示 ( A ) 和 ( B ) 的点积。
- ( ||A|| ) 和 ( ||B|| ) 分别表示 ( A ) 和 ( B ) 的欧几里得范数(即向量的长度)。
- 当余弦相似性为 1 时,表示两个向量方向完全相同。
- 当余弦相似性为 0 时,表示两个向量是正交的,即它们在多维空间中是独立的。
- 当余弦相似性为 -1 时,表示两个向量方向完全相反。
如何实现
可以使用 OpenAI 的 Embedding 接口计算向量距离
示例代码
import openai
import os
from openai.embeddings_utils import cosine_similarity, get_embedding
# 获取访问open ai的密钥
openai.api_key = os.getenv("OPENAI_API_KEY")
# 选择使用最小的ada模型
EMBEDDING_MODEL = "text-embedding-ada-002"
# 获取"好评"和"差评"的
positive_review = get_embedding("好评")
negative_review = get_embedding("差评")
positive_example = get_embedding("买的银色版真的很好看,一天就到了,晚上就开始拿起来完系统很丝滑流畅,做工扎实,手感细腻,很精致哦苹果一如既往的好品质")
negative_example = get_embedding("降价厉害,保价不合理,不推荐")
def get_score(sample_embedding):
return cosine_similarity(sample_embedding, positive_review) - cosine_similarity(sample_embedding, negative_review)
positive_score = get_score(positive_example)
negative_score = get_score(negative_example)
print("好评例子的评分 : %f" % (positive_score))
print("差评例子的评分 : %f" % (negative_score))