音频数据上的会话情感分析

news2024/9/21 0:48:59

情感分析,也被称为观点挖掘,是自然语言处理(NLP)中一个流行的任务,因为它有着广泛的工业应用。在专门将自然语言处理技术应用于文本数据的背景下,主要目标是训练出一个能够将给定文本分类到不同情感类别的模型。下图给出了情感分类器的高级概述。

例如,三类分类问题的类可以是 Positive 、 Negative 和 Neutral 。三类情感分析问题的一个例子是流行的 Twitter 情感分析数据集(https://www.kaggle.com/datasets/jp797498e/twitter-entity-sentiment-analysis),这是一个实体级别的情感分析任务,针对 Twitter 上不同用户发布的多语言推文。

尽管以往大多数自然语言处理(NLP)研究和开发主要集中在对文本进行情感分析,但最近我们看到语音互动工具已被广泛采用和流行,使得研究人员和组织着手构建语音领域的情感分类器。

因此,这篇文章将演示如何使用 AssemblyAI API 和 Python 在对话数据上构建情感分析系统。端到端系统在涉及严格客户支持和反馈评估的领域有广泛的适用性,这使其成为一个重要而有价值的问题,特别是在语音领域。最后,我还将进行深入分析,以增强所得结果的可解释性,并从数据中得出适当的见解。

本文的代码在这里:https://deepnote.com/workspace/jacky-su-683574b3-f209-4c4a-871f-2917f8e4b220/project/Conversational-Sentiment-Analysis-Duplicate-4d2c8161-1773-4114-a416-d37e393c3ee5/notebook/sentiment%20analysis-0476d5b83f0346d3958dba74bc803e83。
文中有很多处本应该有嵌入代码,但是CSDN编辑器不支持展示,所以最好对照着代码链接来看文章,代码链接中的代码也是按照本文的目录结构分的,所以很容易对应。

对话音频数据的情感分析

在这一部分,我将演示如何使用 AssemblyAI API 将给定录音对话中的单句分类为三种情感类别: Positive 、 Negative 和 Neutral 。

步骤 1:安装要求

构建情感分类器的要求非常少。就 Python 库而言,我们只需要 requests 包。可以按照以下方式进行:

pip install requests

步骤 2:生成您的 API 令牌

下一步是在 AssemblyAI 网站(https://www.assemblyai.com/)上创建一个免费账户。完成后,您将获得私有 API 访问密钥,我们将使用它来访问语音转文本模型。

第 3 步:上传音频文件

为了完成本教程,我将使用两人之间的预录音对话来执行情感分析。一旦您获得 API 密钥,就可以开始对预录音文件进行情感分类任务。

然而,在此之前,您需要上传音频文件,以便通过 URL 访问。选项包括上传到 AWS S3 存储桶、SoundCloud 等音频托管服务,或 AssemblyAI 的自托管服务等。我已将音频文件上传到 SoundCloud,可以在下面访问。

如果您希望将音频文件直接上传到 AssemblyAI 的托管服务,您也可以这样做。我已在下面的代码块中逐步演示了这一步骤。

步骤 3.1:导入需求

我们从导入项目所需的要求开始。

步骤 3.2:指定文件位置和 API_Key

接下来,我们需要指定本地机器上音频文件的位置以及注册后获得的 API 密钥。

第 3.3 步:指定上传端点

  • endpoint : 这指定了要调用的服务,在本例中是"上传"服务。
  • headers :这包含了 API 密钥和内容类型。

步骤 3.4:定义上传函数

音频文件一次最多只能上传 5MB(5,242,880 字节)。因此需要分块上传数据,然后在服务端合并这些块。因此您无需担心处理大量 URL。

步骤 3.5:上传

最后一步是发起 POST 请求。POST 请求的响应是一个 JSON,其中包含了音频文件的 upload_url 。我将在执行音频情感分类的下一步骤中使用这个 URL。

第 4 步:情感分析

在这一步中,我们已经完成了执行对音频文件进行情感分析任务所需的所有必要前提条件。现在,我们可以继续调用 API 来获取所需的结果。这是一个分两步进行的过程,将在下面的小节中进行演示。

第 4.1 步:提交文件进行转录

第一步是调用一个 HTTP POST 请求。这实质上是将您的音频文件发送到后台运行的 AI 模型以进行转录,并指示它们对转录的文本执行情感分析。

发送到 POST 请求的参数是:

  1. endpoint :它指定要调用的转录服务。
  2. json :这包含你的音频文件的 URL 作为 audio_url 键。由于我们希望对对话数据进行情感分析, sentiment_analysis 标志和 speaker_labels 被设置为 True 。
  3. headers :这包含了 authorization 键和 content-type 。

在收到的 JSON 响应中,当前的 post 请求状态为 queued 。这表示音频正在进行转录。

此外, sentiment_analysis 标志也出现在 JSON 响应中。但是,与 sentiment_analysis_results 键相对应的值为 None,因为当前状态为 queued 。

步骤 4.2:获取转录结果

要检查我们的 POST 请求的状态,我们需要使用上面收到的 JSON 响应中的 id 键发出一个 GET 请求。

接下来,我们可以进行一个 GET 请求,如下面的代码块所示。

传递给 GET 请求的参数为:

  1. endpoint :这指定了通过 id 键确定的调用的服务和 API 调用标识符。
  2. headers :这里保存您的唯一 API 密钥。

在这里,您应该知道转录结果在 status 键变为 completed 之前是不会准备好的。转录所需的时间取决于输入音频文件的长度。因此,您必须定期重复 GET 请求来检查转录状态。下面实现了一种简单的方法:

情感分析结果

一旦 status 变为 completed ,您将收到类似于下面提到的响应。

  1. 在 JSON 响应中, status 被标记为 completed 。这表示在转录音频时没有出现错误。
  2. text 键包含了输入音频对话的全部转录文本,其中包括22个句子。
  3. 由于音频文件由多个扬声器组成,我们在 words 键中看到所有 speaker 键均为非空。 speaker 键要么为"A"要么为"B"。
  4. 我们可以看到所有个别单词和整个转录文本的置信度得分。该得分范围从 0 到 1,0 为最低,1 为最高。
  5. 对于音频中 22 个单独句子的情感分析结果可以通过 JSON 响应中的 sentiment_analysis_results 键访问。
  6. 与每个句子相对应,我们获得一个与上述第 4 点类似的 confidence 分数。
  7. 每个句子的情感可以使用句子字典的 sentiment 键来检索。以下显示了第二句的情感分析结果:

情感分析洞见

JSON 通常很难阅读和解释。因此,为了使数据更具有视觉吸引力,并进行进一步分析,让我们将上述情感分析结果转换为 DataFrame。我们将存储句子的 text 、 duration 、 speaker 和 sentiment 。下面是实现:

在上述代码生成的 DataFrame 如下图所示。其中包括对话中说的 22 句话,以及相应的说话者标签(“A"和"B”)、持续时间(秒)和模型预测的情绪。

演讲者的分布

每个演讲者发言的句子数量可以使用如下所示的 value_counts() 方法进行计算:

想查看说话人的百分比分布,可以像下面这样将 normalize = True 传递给 value_counts() 方法:

演讲者"A"和"B"在句子数量方面对对话做出了同等贡献。

扬声器持续时间分布

接下来,让我们计算对话中每位发言者的个人贡献。如下所示:

我们使用 groupby() 方法并计算他们演讲的总时长。A 人是演讲持续时间最长的主要演讲者。

#3 情绪分布

在通话过程中说的 22 句话中,只有三句被标记为 negative 情感。此外,没有任何一句被预测为 positive 情感。

正态分布可以按以下方式计算:

#4 发言人层面的情感分布

最后,让我们计算个人发言者的情感分布。这里,我们将使用 crosstab() 而不是 groupby() 方法来实现更好的可视化效果。这如下所示:

发言人"A"说出的否定性句子的比例高于发言人"B"。

#5 情感层面平均句子持续时间

最后,我们将计算属于个别情绪类别的句子的平均持续时间。这是使用 groupby() 方法实现的:

平均 negative 句子的持续时间小于 neutral 句子的持续时间。

总之,在这篇文章中,我们讨论了 AssemblyAI API 的一个特定的 NLP 用例。具体来说,我们看到如何在一个由多个说话者组成的预录音音频文件上构建一个情感分类模块。最后,我们对情感分析结果进行了深入分析。从 API 获得的结果突出了输入音频文件中 22 个单独句子的情感。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始理解AdaBoost算法:设计思路与算法流程(二)【权值更新与加权表决、数学公式】

设计思路 AdaBoost算法属于Boosting算法家族中的一种,其基本思路是将多个弱分类器组合成一个强分类器。 “强分类器”是指一个分类准确率较高的模型“弱分类器”则是指分类准确率略高于随机猜测的简单模型。 AdaBoost的核心思想是通过 加权 的方式逐步提高分类器…

Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

Tomcat源码系列文章 Tomcat源码解析(一):Tomcat整体架构 Tomcat源码解析(二):Bootstrap和Catalina Tomcat源码解析(三):LifeCycle生命周期管理 Tomcat源码解析(四):StandardServer和StandardService Tomcat源码解析(五)&…

keda-P0460. 潜水员

可达信奥 - 登录 - 可达信奥https://kedaoi.cn/p/P0460 代码思路: 01背包DP。 思路也是比较经典的,就是看用这个水缸的最小值小,还是不用这个水缸的最小值小。但是这里涉及到一个初始化的问题,因为要求最小所以初始化理应…

使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端

要使用NetAssist网络调试助手在同一台计算机上配置一个实例作为服务器(server)和另一个实例作为客户端(client),可以按照以下步骤进行操作: 前提条件 确保已经安装NetAssist网络调试助手,并了…

streamlit:如何快速构建一个应用,不会前端也能写出好看的界面

通过本文你可以了解到: 如何安装streamlit,运行起来第一个demo熟悉streamlit的基本语法,常用的一些组件使用streamlit库构建应用 大模型学习参考: 大模型学习资料整理:如何从0到1学习大模型,搭建个人或企业…

鞠小云张霖浩闪耀北京广播电视台春晚发布会,豪门姐弟感爆棚

昨日,2025年北京广播电视台“追梦春晚”全国海选发布会在杭州举行,中国内地青年女演员鞠小云同人气幕后张霖浩,受主办方盛情邀请出席本次活动。从现场流露出的照片中可以看出,鞠小云一袭白色长裙灵动温婉素雅,而张霖浩…

springboot与flowable(1):介绍、Flowable-ui使用

一、工作流引擎使用场景 工作流在企业管理系统中是高频使用的功能,一个最常见的例子是请假加班申请与审批的过程。事实上,工作流引擎能支持的业务场景远远不止单据审批,几乎所有涉及到业务流转、多人按流程完成工作的场景背后都可以通过工作流…

Vue3【二】 VSCode需要安装的Vue语法插件

VSCode需要安装的 适配Vue3的插件 Vue-Official插件安装

A股所有公司ZL申请与创新绩效分析(2000-2022年)

数据简介:专利是创新成果的主要载体,专利所包含的技术、经济、法律等信息主要通过结构化专利专利文献著录项的形式加以呈现。专利申请与创新绩效已成为衡量上市公司竞争力的重要指标。目前,各国ZSCQ管理部门开发管理的开放式平台是获取ZL数据…

PyQt5 多进程 多任务 多线程实现进度条功能 无边框 含源码

概述: 在项目 中我们常遇到,大量计算或者加载数据时,需要用到多线程,此时只能等待,我们这个时间需要添加一下进度条,告诉用户当前需要等待,这时间就需要用到多线程和等待进度条; 效…

【STM32】GPIO输出(江科大)

一、GPIO简介 1.GPIO:通用输入输出口 2.可配置为8种输入输出模式 3.引脚电平:0-3.3V(输出最大3.3V),部分引脚可容忍5V(输入,有FT) 4.输出模式下,可控制端口输出高低电平…

94、二叉树的迭代遍历

实现对二叉树的前后序非递归遍历 题解: 递归的实现就是:递去,归来。每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是…

MySQL系列-安装配置使用说明(MAC版本)

1、前言 本文将介绍MySQL的安装配置以及基本语法操作说明 环境:mac 版本:MySQL 8.0.28 之前电脑安装卸载过,后面在装的时候遇到一些问题,用了四五天才解决,主要是参考 https://blog.csdn.net/zz00008888/article/deta…

IPv6 自动配置流程图

IPv6 自动配置流程图 IPv6 自动配置生命周期 Mark

人事信息管理系统(Java+MySQL)

一、项目背景 在现代企业中,管理大量员工的工作信息、薪资、请假、离职等事务是一项非常繁琐和复杂的任务。传统的手工管理方式不仅效率低下,而且容易出错。为了提高人事管理的效率,减少人工操作带来的错误,企业迫切需要一个高效…

乒乓球烧拍日记之一结构分析

先上图 这是这两年烧过的球拍,最贵的是palio C2 80元左右,大部分球拍儿都是十多元,其中横拍儿是小朋友用的,直拍是我自己用的。照片中球拍儿的分类是按结构特点和材料来分的,最下面的两个剑轮球拍是成品拍儿。胶皮也都…

基于运动控制卡的圆柱坐标机械臂设计

1 方案简介 介绍一种基于运动控制卡制作一款scara圆柱坐标的机械臂设计方案,该方案控制器用运动控制卡制作一台三轴机械臂,用于自动抓取和放料操作。 2 组成部分 该机械臂的组成部分有研华运动控制卡,触摸屏,三轴圆柱坐标的平面运…

多目标融合参数搜索

多目标融合 权重分类目人群。 trick normlize 不同Score之间含义、量级和分布差异较大:评分计算的不同部分的意义、范围和分布存在显著差异,这使得直接比较或融合它们的结果变得困难。显式反馈(如点赞率)存在用户间差异&#…

2、数据操作

索引从0开始 一行 [1,:] 一列[:,1] 子区域:[1:3,1:] 第一行和第二行,从第一列开始 [::3,::2] 每3行一跳,每2列一跳 torch.tensor([[1,2,3,4]] 按位置算 xy ,x-y x*y x**y(幂) 1、广播机制形状不一样,…

2021 hnust 湖科大 操作系统课设 报告+原代码+指导书+流程图源文件

2021 hnust 湖科大 操作系统课设 报告原代码指导书流程图源文件 详情 目录 验证类实验: 1 实验一:Windows进程管理 1 一、 实验题目: 1 二、 实验目的 1 三、 实验内容 1 四、 实验结果与分析 2 五、 小结与心得体会 5 实验二:L…