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

情感分析,也被称为观点挖掘,是自然语言处理(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.rhkb.cn/news/345001.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客热题:最长公共子序列Ⅱ

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:最长公共子序列Ⅱ题目链接方法一…

网络安全形势与WAF技术分享

我一个朋友的网站,5月份时候被攻击了,然后他找我帮忙看看,我看他的网站、网上查资料,不看不知道,一看吓一跳,最近几年这网络安全形势真是不容乐观,在网上查了一下资料,1、中国信息通…

vue2的form利用插槽修改错误提示UI

1. 需求 很多时候我们使用el-form想修改下错误提示的UI,比如table中使用form校验这类场景下错误提示的UI调整就非常重要。 2. 了解文档 Form-Item Scoped Slot name说明error自定义表单校验信息的显示方式,参数为 { error } 3.实际使用 html里使用…

Python Flask实现蓝图Blueprint配置和模块渲染

Python基础学习: Pyhton 语法基础Python 变量Python控制流Python 函数与类Python Exception处理Python 文件操作Python 日期与时间Python Socket的使用Python 模块Python 魔法方法与属性 Flask基础学习: Python中如何选择Web开发框架?Pyth…

数据结构笔记 4 树和二叉树

二叉树和完全二叉树的区别? 二叉树和完全二叉树的主要区别在于它们的结构特性和节点排列方式: 1. **二叉树**: - 是一种数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。 - 节点的子节点数量…

git凭证

默认是manager # 将凭证缓存到内存中,默认缓存15分钟 git config --global credential.helper cache# 将凭证存储到磁盘上的纯文本文件中 git config --global credential.helper store# 使用 Git 凭证管理器 git config --global credential.helper manager-core查…

图文详解Windows系统下搭建mysql开发环境——mysql Community 8 和 navicat Premium 17 的安装和使用

在正式开始学习使用MySQL之前,我们有必要先搭建一个良好的开发环境,让我们的学习和工作效率事半功倍。 本文涉及到的软件百度云盘:链接:https://pan.baidu.com/s/1jj_YajEv8adeEjMrXLhOTQ?pwd1023 提取码:1023 目录 …

元宇宙数字藏品交易所,未来发展的大趋势

随着科技的飞速进步,元宇宙以其独特的魅力为数字世界绘制了一幅前所未有的宏伟蓝图。在这一宏大的背景下,数字藏品交易所作为连接虚拟与现实的桥梁,正以其卓越的优势,引领着数字藏品市场迈向新的高度。 首先,元宇宙为…

三十六篇:未来架构师之道:掌握现代信息系统典型架构

未来架构师之道:掌握现代信息系统典型架构 1. 引言 在企业的数字化转型浪潮中,信息系统架构的角色变得日益重要。它不仅承载了企业的IT战略,更是确保企业在复杂、动态的市场环境中稳定运行的关键。作为信息系统的骨架,一个精心设…

HTML5+CSS3+JS小实例:网格图库

实例:网格图库 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

Python中猴子补丁是什么,如何使用

1、猴子补丁奇遇记 &#x1f412; 在Python的世界深处&#xff0c;隐藏着一种神秘而又强大的技巧——猴子补丁&#xff08;Monkey Patching&#xff09;。这是一项允许你在程序运行时动态修改对象&#xff08;如模块、类或函数&#xff09;的行为的技术。它得名于其“快速修补…

算法导论实战(六)(算法导论习题三十四、三十五章)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;算法启示录 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 前言 算法导论的知识点学习将持续性更新在算…

Docker 基础使用(2) 镜像与容器

文章目录 镜像的含义镜像的构成镜像的作用镜像的指令容器的含义容器的状态容器的指令 Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使用&#xff08;2&#xff09; 镜像与容器 Docker 基础使用&#xff08;3&#xff09; 存…

2024年【天津市安全员C证】免费试题及天津市安全员C证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员C证免费试题是安全生产模拟考试一点通生成的&#xff0c;天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材汇编出天津市安全员C证仿真模拟考试。2024年【天津市安全员C证】免费试题及天津市…

VBA excel 表格将多行拆分成多个表格或 文件 或者合并 多个表格

excel 表格 拆分 合并 拆分工作表按行拆分为工作表工作表按行拆分为工作薄 合并操作步骤 拆分 为了将Excel中的数万行数据拆分成多个个每个固定行数的独立工作表&#xff0c;并且保留每个工作表的表头&#xff0c;你可以使用以下VBA脚本。这个脚本会复制表头到每个新的工作表&…

行心科技中禄松波携手,开启智能健康新时代

在2024年第34届健博会暨中国大健康产业文化节的盛大舞台上&#xff0c;广州市行心信息科技有限公司&#xff08;以下简称“行心科技”&#xff09;与浙江中禄松波生物工程有限公司&#xff08;以下简称“中禄松波”&#xff09;宣布达成战略合作&#xff0c;共同推动医康养产业…

socket通信(C语言+Python)

在socket文件夹下创建server.c和client.c。 服务端代码&#xff08;server.c&#xff09;&#xff1a; #include <stdio.h> #include <Winsock2.h> void main() {WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested MAKEWORD( 1, 1 );err WSAS…

探索 Noisee AI 的奇妙世界与变现之旅

日赚800&#xff0c;利用淘宝/闲鱼进行AI音乐售卖实操 如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 抖音主播/电商人员有福了&#xff0c;利用Suno创作产品宣传&#xff0c;让产品动起来-小米Su7 用sunoAI写粤语歌的方法&#xff0c;博主已经亲自实践可行 五音不全也…

通道堵塞自动识别摄像机

通道堵塞自动识别摄像机是一种利用先进的人工智能和图像识别技术来监测和识别通道堵塞情况的装置&#xff0c;广泛应用于交通管制、商场管理等领域。这项技术的出现极大地提高了通道管理的效率和准确性&#xff0c;为改善人们的出行体验和商场营运提供了新的解决方案。 传统的通…

Vue3【十一】08使用toRefs和toRef

08使用toRefs和toRef toRefs()函数将person对象中的name和age属性转换为响应式引用&#xff0c;并返回一个对象&#xff0c;对象中的name和age属性都是响应式引用&#xff0c;具有响应式功能。 toRef()函数将person对象中的name属性转换为响应式引用&#xff0c;并返回一个响应…