2023年如何用Python创建情感分析机器人
目录
简介
在今天的课程中,我们将构建一个情感分析机器人。它可以分析我们输入的文本,并返回它的情感是否为积极、消极或中立。这个机器人非常有用,如果您想自动化与人类交互的某些事情,因为如果他们写了一些消极的东西,您可能可以以某种方式回应,如果他们对某件事表示积极,您可能可以以不同的方式回应。因此,您可以开始捕捉他们打字的语气,并相应地回应。这是聊天机器人脚本的升级,但为了演示,我们可以输入一些像“真是美好的一天”这样的话,它将给我们一个积极的评分,我们将得到一个微笑的表情。我们还可以输入一些像“我讨厌你”这样的话,我们将得到一个负分,因为这显然是一个消极的文字。现在我们可以输入一些像“狗在公园里散步”这样与任何事物无关的话,它将有一个中立的观点,所以它将返回给我们一个中立的脸,但是,您也可以说:“我喜欢你的帽子”或者其他的事情,您将得到一个积极的评分。所以,正如您所看到的,根据我们的输入,它将给我们一个情感分析评分。这就是我们将在这个脚本中构建的内容,首先您需要打开终端并键入PIP install text blob,然后text blob将为我们处理所有繁琐的工作,但一旦安装完成,我们可以键入from textblob import TextBlob
,然后from dataclasses import dataclass
,因为我想为我的数据创建一个数据类,然后我们将创建该数据类并将其命名为“Mood”,它将具有两个属性,一个类型为字符串的emoji和一个类型为浮点数的sentiment。接下来,我们要创建一个基于输入字符串获取情绪的函数,在这里我们可以键入def get_mood(input_text: str, *, threshold: float) -> Mood
,首先要做的是获取情感,情感是一个类型为浮点数的sentiment,它等于TextBlob(input_text).sentiment.polarity
,然后我们需要定义阈值,我们将有一个友好的阈值,它是一个浮点数,它只等于阈值,并且我们还需要一个敌意阈值,它的值与阈值相同,只是在阈值的前面有一个负号。阈值告诉我们聊天机器人应该有多灵敏,如果我们定义一个阈值为0.3,那么它会说小于0.3的任何内容都被视为中立,所以它不会因为一个非常小的正数而一定是一个积极的评分,我们想确保这个评分要么足够积极,要么足够消极才能产生积极或消极的结果。例如说一些如“我穿着的鞋很好”这样的话,可以被视为一个积极的句子,但是我们实际上希望将其注册为中立的句子。现在为了确定我们应该返回什么,我们将使用if sentiment >= friendly_threshold:
,然后返回带有微笑表情的情绪和情感评分,这样我们就可以看到情感评分是多少。如果情感小于等于敌意阈值,我们将返回带有愤怒表情的情绪和情感评分,否则我们只想返回带有中立表情的情绪和情感评分,这应该要么小于0.3,要么大于负0.3。然后我们只需键入return mood
,这将覆盖我们需要返回的内容,以获取情感。现在只剩下为我们创建if __name__ == '__main__':
的检查,并在其中循环,以便我们可以在测试时进行操作。因此,当为真时,我们将得到类型为字符串的文本,该文本将等于input('请输入文本:')
,无论用户插入什么,都将作为文本进行评估,然后我们要获取情绪,对于这一点,我们要键入mood: Mood = get_mood(text, threshold=0.3)
,我们将插入我们输入的文本,并定义一个阈值,阈值越高,要获得积极或消极反应的难度就越大,所以如果您希望您的机器人非常敏感,将这个值设置为较低的阈值,如果您希望它不太敏感,将其设置为更高的阈值。我发现0.3在这个例子中效果很好,然后剩下的就是打印出mood.emoji和mood.sentiment,基于文本的输入。就是这样,我们可以运行这个脚本,它将要求我们插入一些文本,虽然我不高兴,这里没有空格,所以我在那里添加了一个空格,我们运行这个脚本,这一次当我输入一些像“我喜欢吃土豆”这样的话,它将给我们一个愉快的评分,否则如果我说“我正在走路”,那么它既不消极也不积极,所以你会得到一个中立的评分。然后我们还可以说“我讨厌人工智能”,我们会得到一个消极的评分,因为它有一些消极的特征,但是我们也可以试着输入一些更复杂的话,比如“今天我感觉很好,但又是我生命中最糟糕的一天”,机器人对此可能会感到非常矛盾,因为我的意思是,这非常令人困惑,你说你今天感觉很好,但又是一个非常糟糕的一天,所以再次,您可以将这个阈值稍微降低,将其注册为负面情绪,因为它略微比积极要负面一些。textblob有一个公式,可以判断某些关键词的积极程度和消极程度,因此根据这个句子,它成功地理解了这句话比积极程度更消极。当然,最后一个是记得订阅,这也是中立的,这是完全可以的。如果您喜欢Python和这些视频,记得订阅,否则继续浏览互联网,享受乐趣。无论如何,这实际上涵盖了我想分享的有关情感分析机器人的一切,这是非常简单的编码,请在下方的评论区告诉我您对此的看法,以及是否希望我创建另一个类似于这个教程的教程。但无论如何,感谢您观看! 期待下次再见。
构建情感分析机器人
导入所需库
首先,我们需要导入所需的库。运行以下代码:
from textblob import TextBlob
from dataclasses import dataclass
创建数据类
我们将创建一个数据类来存储情绪数据。运行以下代码:
@dataclass
class Mood:
emoji: str
sentiment: float
编写情感获取函数
接下来,我们将编写一个函数来根据输入的文本获取情绪。运行以下代码:
def get_mood(input_text: str, *, threshold: float) -> Mood:
sentiment: float = TextBlob(input_text).sentiment.polarity
friendly_threshold: float = threshold
hostile_threshold: float = -threshold
if sentiment >= friendly_threshold:
return Mood("😊", sentiment)
elif sentiment <= hostile_threshold:
return Mood("😠", sentiment)
else:
return Mood("😐", sentiment)
主函数
最后,我们将编写一个主函数来测试我们的情感分析机器人。运行以下代码:
if __name__ == "__main__":
while True:
text: str = input("请输入文本:")
mood: Mood = get_mood(text, threshold=0.3)
print(mood.emoji, mood.sentiment)
结论
这篇文章介绍了如何构建一个情感分析机器人。我们使用了textblob库来处理情感分析,并编写了一个函数来获取文本的情绪。我们还编写了一个主函数来测试我们的机器人。希望这篇文章对您有所帮助!
常见问题解答
Q: 这个情感分析机器人的准确性如何?
A: 这个情感分析机器人的准确性取决于所使用的情感分析算法和训练数据。textblob库使用了一些常见的情感分析算法和数据集,它可以提供相对准确的结果,但并不是完美的。因此,在实际应用中,您可能需要根据您的具体需求对其进行调整和优化。
Q: 如何调整阈值来影响情感分析的结果?
A: 阈值的选择取决于您希望机器人对文本的敏感程度。如果您将阈值设置得更低,机器人将对较小的情感变化作出反应,并更容易给出积极或消极的评分。相反,如果您将阈值设置得更高,机器人将需要更大的情感变化才能给出积极或消极的评分。根据您的具体需求和应用场景,您可以根据需要进行细微调整。