当前位置: 首页 > news >正文

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

情感分析,也被称为观点挖掘,是自然语言处理(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 个单独句子的情感。

相关文章:

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

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

算法金 | 一文读懂K均值(K-Means)聚类算法

​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 1. 引言 数据分析中聚类算法的作用 在数据分析中,聚类算法用于发现数据集中的固有分组,通过将相似对象聚集在一…...

江协科技STM32学习-1 购买24Mhz采样逻辑分析仪

前言: 本文是根据哔哩哔哩网站上“江协科技STM32”视频的学习笔记,在这里会记录下江协科技STM32开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技STM32教学视频和链接中的内容。 引用: STM32入门教程-2023版 细致讲…...

支付系统-业务账单

target:离开柬埔寨倒计时-210day 前言 最近不知道该写什么了,很多东西要写起来非常耗时间,写作是真的不容易呀 我们的支付系统账单有两大类,一个是业务账单还有一个就是资金记录,都是引发资金流后的资金变动表现&…...

AI引领天文新篇章:中科院发现107例中性碳吸收线,揭示宇宙深邃奥秘

在浩渺无垠的宇宙中,探索未知的天文现象一直是科学家们不懈的追求。近日,中科院上海天文台的研究团队在《天文物理杂志》(MNRAS)上发布了重要研究成果:利用人工智能技术,成功探测到了107例中性碳吸收线&…...

python 删除pdf 空白页

环境 python 3.10 PyPDF2 3.0.1 安装 pip install PyPDF2流程 将空白页和内容页读取出来,看看内部结构有什么不同以此为依据,遍历整个PDF 文件,标记处有内容的页面,写入到另外一个PDF文件。 python 代码 # 每一个页都是一个…...

flutter as连接网易模拟器

网易模拟器下载 Mac 使用MuMu模拟器调试 Flutter开发 Android Studio 安装第三方模拟器—网易MuMu Mac 安卓Studio使用外部模拟器 Mac电脑:Android Studio 连接 MUMU 网易模拟器 Mac 上 Android Studio 链接网易 MuMu 模拟器调试 在 .zshrc 中设置 adb 二进制文…...

fpga控制dsp6657上电启动配置

1 Verilog代码 dspboot_config.v timescale 1ns / 1ps //dsp上电启动配置 module dspboot_config (///时钟和复位input SYS_CLK_50MHz,input SYS_RST_n,//DSP启动配置output DSP_POR,output DSP_RESETFULL,output DSP_RESET,inout [12:…...

Tomcat启动闪退问题解决方法

Tomcat是一个广泛使用的开源Web服务器和Servlet容器。它的稳定性和灵活性使其在Java Web开发领域受到广泛关注。然而,在实际使用过程中,我们有时会遇到Tomcat启动后立即关闭的问题,这种现象通常被称为"闪退"。下面我将针对这个问题…...

【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型

文章目录 一、背景二、方法2.1 提升点2.2 训练样本 三、效果3.1 整体效果对比3.2 模型对于 zero-shot 形式的指令的结果生成能力3.3 模型对于 zero-shot 多语言的能力3.4 限制 四、训练4.1 数据4.2 超参 五、评测六、代码 论文:Improved Baselines with Visual Inst…...

文件编码概念

文件的读取 open()函数: 打开一个已存在的文件,或者创建一个新文件 open(name,mode,encoding) name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) mode:设置打开文件的模式(访问模式)&am…...

uni-app(优医咨询)项目实战 - 第7天

学习目标: 能够基于 WebSocket 完成问诊全流程 能够使用 uniCloud 云存储上传文件 能够完成查看电子处方的功能 能够完成医生评价的功能 一、问诊室 以对话聊天的方式向医生介绍病情并获取诊断方案,聊天的内容支持文字和图片两种形式。 首先新建一…...

推荐系统学习 二

双塔模型的结构 用户的特征,我们知道用户ID还能从用户填写的资料和用户行为中获取很多特征,包括离散特征和连续特征。所有这些特征不能直接输入神经网络,而是要先做一些处理,比如用embedding层把用户ID映射到一个向量 跟之前我们…...

Vue——组件数据传递与props校验

文章目录 前言组件数据传递的几种类型简单字符串类型数据专递其他类型数据(数字、数组、对象)传递注意事项 数据传递值校验限定数据类型 type给定默认值 default指定必选项 required 前言 组件与组件之间并不是完全独立的,他们之间可以进行一些数据的传递操作。传递…...

Java 基础面试300题 (261-290)

Java 基础面试300题 (261-290) 261.CompletableFuture.runAsync和CompletableFuture.supplyAsync方法有什么区别? 这两个方法都可用于异步运行代码。但两者之间有一些区别如下 : runAsync不返回结果,返回的是一个Com…...

音频信号分析与实践

音频信号分析与实践课程,方便理解音频信号原理和过程 1.音频信号采集与播放 两种采样模式和标准的采样流程 人说话的声音一般在2kHz一下: 采样频率的影响:采样率要大于等于信号特征频率的2倍;一般保证信号完整,需要使用10倍以上的…...

程序媛:拽姐

更多精彩内容在公众号。 最近都在玩梗图,我也来玩下拽姐的梗图。来说说拽姐做为程序媛的痛。 程序媛的痛不在于996,而在于无休止的攻关。拽姐刚入职听领导说攻关不多,一年也就一次,拽姐心中暗喜,觉得来对了地方。结果…...

前端面试题日常练-day54 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. 在PHP中,以下哪个函数用于将一个字符串转换为日期时间对象? a) date() b) strtotime() c) datetime() d) time() 2. PHP中的超全局变量$_COOKIE用于存储什么类型的数据&a…...

054、Python 函数的概念以及定义

编程大师Martin Fowler曾说过:“代码有很多种坏味道,重复是最坏的一种。” 那么遇到重复的代码,如何做?答案就是:函数。 函数就是把重复的代码封装在一起,然后通过调用该函数从而实现在不同地方运行同样的…...

今时今日蜘蛛池还有用吗?

最近不知道哪里又开始刮起“蜘蛛池”这个风气了,售卖、购买蜘蛛池的行为又开始在新手站长圈里开始蔓延和流行了起来,乍一看到“蜘蛛池”这个词给明月的感受就是陌生,要经过回忆才能想起来一些残存的记忆,所谓的蜘蛛池说白了就是利…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

深度学习水论文:mamba+图像增强

🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

Vue 实例的数据对象详解

Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...