Whisper + NemoASR + ChatGPT 实现语言转文字、说话人识别、内容总结等功能

cybozu发表于:2023年09月05日 14:42:50更新于:2024年03月13日 10:52:35

Index

引言

2023年,IT领域的焦点无疑是ChatGPT,然而,同属OpenAI的开源产品Whisper似乎鲜少引起足够的注意。

Whisper是一款自动语音识别系统,可以识别来自99种不同语言的语音并将其转录为文字。

如果说ChatGPT为计算机赋予了大脑,那么Whisper则为其赋予了耳朵。

想象一下,在企业应用领域,我们能够利用Whisper将语音转化为文字,然后再借助ChatGPT来进行翻译或总结。

接下来,我们将以实际操作为出发点,逐步向您介绍如何利用AI实现音频、视频的内容总结。


前期准备

GPU

首先,我们需要解决硬件方面的问题。

虽然OpenAI提供了HTTP API来调用Whisper,但对于企业而言,将内部内容交给OpenAI始终存在一定的安全风险。

本地运行AI模型则需要大量的计算资源。

如果仅使用CPU进行计算,一个大约10分钟的语音转录任务可能需要花费4倍以上的时间。

因此,我们必须引入GPU进行计算加速。

考虑到Colab在国内无法访问,我们建议在Kaggle上运行演示。

请大家注册Kaggle账户,并完成手机号验证(Kaggle的GPU需要完成手机号验证后才能使用)。

00164f6d0b55250aa2648c3456dad0d

Azure ChatGPT

ChatGPT是我们语音内容总结的核心工具。

我们建议使用Azure OpenAI服务。

您可以参考以下文章来申请:Azure OpenAI Service申请教程


kintone

kintone是我们用来存储记录的平台。我们需要创建一个名为“Reports”的应用程序(APP),并定义以下表单字段:

名称字段类型code备注
title

单行文本框

title标题

summary

多行文本框

summary

总结

最后,我们需要发布一个具有添加记录权限的API令牌,以便将记录存储到kintone中。


运行

您可以在这里找到演示代码:

https://github.com/kintone-samples/SAMPLE-kintone-narrator-cn

点击“open in kaggle”。

00164f6dc8a7463221b0c1bb9b2d132

请按照以下步骤操作:

1.点击Edit,进入编辑状态

00164f6dd30805db352f635f6511303

2.在右侧的Notebook options中,我们需要将Acceleator选为GPU T4*2

00164f6de1cb8f79ede4e3cedd09de5

00164f6de75531264fadfc118551c7e

注:

  1. 没验证手机的账户不会显示Acceleator选项。

  2. GPU P100不支持当前默认float16运算,选择该显卡的用户请将“语音转录&对齐”中的compute_type设为float32。

  3. TPU尚未测试支持。


3.找到名为“Azure OpanAI ChatGPT 总结”和“将总结内容上传”的代码单元(cell),然后根据您自己的环境设置进行配置。

00164f6e1d975a5e44ae378895cf138

00164f6e294a2cedda5abe87c7d923b

4.点击页面上方的“Run All”按钮以开始运行演示。

00164f6e0f2c6d0a761f9e64df41428

等待程序运行结束即可。

下面我将对会每个代码单元的功能进行简要说明,感兴趣的可以继续往下研究:

安装依赖

这个部分负责安装所需的第三方库,这可能需要一些时间。

下载视频,或上传您自己的文件

在这一步,您可以选择默认的YouTube上的kintone宣传案例视频,

或者更改URL以使用其他视频,

也可以上传您自己的音/视频文件到相应的工作目录。

预处理工作目录中的最新音/视频文件

此步骤将提取工作目录中最新的.mp4或.wav文件,

将人声从背景音中分离出来,并将音频采样率转换为16000Hz。

语音转录和对齐

在这一步,语音将被转录成带有时间戳的文本,并使用Wav2Vec进行对齐。

说话人分类(Nemo分类)

这一步是说话人分类,根据语音特征将不同时间段的语音进行分类。

通常有两个常用工具,即PyAnnote和Nvidia的Nemo。

在本演示中,我们选择了Nvidia的Nemo ASR来进行分类,因为它具有更多的参数选择,并相对容易调试。

合并

在这一步中,我们需要将“speakers”中的说话人信息按说话时间顺序输入人名。

Nemo生成的RTTM文件中的说话人信息和Whisper转录的语音信息需要一一对应。

由于存在一定的误差,我们使用最近交集和覆盖率算法来计算说话人和文字的匹配度。

Azure OpenAI ChatGPT 总结

在这一步中,说话人和文字将被输入ChatGPT进行总结。

需要注意的是,ChatGPT的上下文长度有限制,而不同模型的费用也不同。

我们建议使用gpt-3.5-turbo-16k模型。

如果音视频内容超过最大token数,程序会发出警告,请自行进行调整。

上传总结内容

最后,将生成的总结内容上传到kintone,包括相应的标题和总结。


附件:0314学习会demo.zip • 13.23KB • 下载