分析语音中的情绪
情感分析,也称为意见挖掘,由于其多样化的工业应用,是自然语言处理 (NLP) 中的一项流行任务。在将 NLP 技术专门应用于文本数据的上下文中,主要目标是训练一个模型,该模型可以在不同的情感类别之间对给定的文本片段进行分类。下图显示了情绪分类器的高级概述。
情绪分析模型概述(作者提供图片)
例如,三类分类问题的类可以Positive是Negative和Neutral。三类情感分析问题的一个例子是流行的Twitter 情感分析数据集,它是对 Twitter 上各种用户发布的多语言推文的实体级情感分析任务。
虽然 NLP 的大多数先前研究和开发主要集中在对文本应用情感分析,但最近,我们已经看到基于语音的交互工具在用户、转向研究人员和组织中的大量采用和流行,以构建情感分类器。演讲空间。
因此,这篇文章将演示如何使用AssemblyAI API和Python对会话数据构建情感分析系统。端到端系统在涉及严格的客户支持和反馈评估的领域具有广泛的适用性——使其成为一个需要解决的重要且有价值的问题,尤其是在语音领域。最后,我还将展示一个广泛的分析,以增强所获得结果的可解释性并从数据中得出适当的见解。
您可以在此处找到本文的代码。此外,文章的亮点如下:
对会话音频数据的情感分析 情感分析结果情感分析见解
会话音频数据的情感分析
在本节中,我将演示使用 AssemblyAI API 将给定的预先录制的语音对话中的单个句子分类为三个情感类Positive:Negative和Neutral。
通过 API 概述情绪分析模型(作者提供图片)
第 1 步:安装要求
构建情感分类器的要求很少。在 python 库方面,我们requests只需要 Python 中的包。这可以按如下方式完成:
pip 安装请求
第 2 步:生成 API 令牌
下一步是在AssemblyAI网站上创建一个帐户,您可以免费进行此操作。完成后,您将获得您的私有 API 访问密钥,我们将使用它来访问语音到文本模型。
第 3 步:上传音频文件
出于本教程的目的,我将使用两个人之间预先录制的音频对话来执行情感分析。获取 API Key 后,即可对预录的音频文件进行情感分类任务。
但是,在此之前,您需要上传音频文件,以便可以通过 URL 访问它。选项包括上传到 AWS S3 存储桶、SoundCloud 之类的音频托管服务或 AssemblyAI 的自托管服务等。我已将音频文件上传到 SoundCloud,可以在下面访问。
如果您希望将音频文件直接上传到 AssemblyAI 的托管服务,您也可以这样做。我已经在下面的代码块中演示了这个分步过程。
步骤 3.1:导入要求
我们从导入项目的需求开始。
步骤 3.2:指定文件位置和 API_Key
接下来,我们需要指定音频文件在我们本地机器上的位置以及注册后获得的 API 密钥。
步骤 3.3:指定上传端点
Step 3.4:定义上传函数
一次最多只能上传 5 MB(5,242,880 字节)的音频文件。因此,我们需要分块上传数据。然后将它们合并回服务端点。因此,您无需担心处理大量 URL。
步骤 3.5:上传
最后一步是调用 POST 请求。发布请求的响应是包含upload_url音频文件的 JSON。我将在接下来的步骤中使用这个 URL 对音频执行情感分类。
第 4 步:情绪分析
在这一步,我们已经满足了对音频文件执行情感分析任务的所有必要先决条件。现在,我们可以继续调用 API 以获取所需的结果。这是一个两步过程,将在下面的小节中进行演示。
步骤 4.1:提交文件进行转录
第一步是调用 HTTP Post 请求。这实际上将您的音频文件发送到在后台运行的 AI 模型进行转录,并指示它们对转录文本执行情感分析。
传递给POST请求的参数是:
在 JSON 响应中收到的 post 请求的当前状态是queued. 这表示当前正在转录音频。
此外,该sentiment_analysis标志也在TrueJSON 响应中。sentiment_analysis_results但是,与键对应的值是None,因为 status 是 current queued。
步骤 4.2:获取转录结果
要检查我们的 POST 请求的状态,我们需要使用id上面收到的 JSON 响应中的键发出 GET 请求。
接下来,我们可以继续执行 GET 请求,如下面的代码块所示。
传递给GET请求的参数是:
status在这里,您应该知道,在密钥更改为之前,转录结果不会准备好completed。转录所需的时间取决于输入音频文件的长度。因此,您必须定期发出重复的 GET 请求以检查转录状态。下面实现了一个简单的方法:
情绪分析结果
一旦status更改为completed,您将收到类似于下面提到的响应。
情绪分析见解
JSON 通常难以阅读和解释。因此,为了使数据更具视觉吸引力并进行进一步分析,我们将上面的情感分析结果转换为 DataFrame。我们将存储句子的the text、 the 、it和句子的 the 。这是在下面实现的:durationspeakersentiment
使用上面的代码片段生成的 DataFrame 如下图所示。在这里,我们有对话期间说出的 22 个句子以及相应的说话者标签(“A”和“B”)、它们的持续时间(以秒为单位)以及模型预测的句子情绪。
音频文件中的句子(作者提供的图片)
#1 演讲者分布
每个说话者说的句子数可以使用value_counts()如下所示的方法计算:
要查看发言者的百分比分布,我们可以传递normalize = True给value_counts()方法如下:
就句子数量而言,说话者“A”和“B”都对对话做出了同等贡献。
#2 演讲者时长分布
接下来,让我们计算对话中每个说话者的个人贡献。如下所示:
我们使用该groupby()方法并计算他们演讲的总持续时间。就持续时间而言,说话人 A 是主要说话人。
#3 情绪分布
在对话期间所说的 22 句话中,只有 3 句话被标记为negative情绪。此外,没有一个句子被预测为positive情绪。
归一化分布可以计算如下:
#4 说话者层面的情绪分布
最后,让我们计算情绪在各个说话者之间的分布。groupby()在这里,我们将使用crosstab()更好的可视化而不是使用该方法。如下所示:
说话人“A”说的否定句的比例比说话人“B”多。
#5 情绪层面的平均句子时长
最后,我们将计算属于各个情感类别的句子的平均持续时间。这是使用以下groupby()方法实现的:
句子的平均持续时间negative小于句子的平均持续时间neutral。
最后,在这篇文章中,我们讨论了 AssemblyAI API 的特定 NLP 用例。具体来说,我们看到了如何在包含多个扬声器的预先录制的音频文件上构建情感分类模块。最后,我们对情绪分析结果进行了广泛的分析。从 API 获得的结果突出了输入音频文件中 22 个单独句子的情绪。
联系我们可以找到本文的代码。
在接下来的文章中,我将从技术和实践的角度讨论 AssemblyAI API 的更多用例,例如实体检测、内容审核等。
留言与评论(共有 0 条评论) “” |