如何将说话人分离与 Riva ASR 结合使用?
目录

如何将说话人分离与 Riva ASR 结合使用?#
本教程将引导您了解 Riva ASR 提供的说话人分离功能。
NVIDIA Riva 概述#
NVIDIA Riva 是一个 GPU 加速的 SDK,用于构建针对您的用例定制并提供实时性能的语音 AI 应用程序。
Riva 提供丰富的语音和自然语言理解服务,例如
自动语音识别 (ASR)
文本到语音合成 (TTS)
一系列自然语言处理 (NLP) 服务,例如命名实体识别 (NER)、标点符号和意图分类。
在本教程中,我们将展示如何将说话人分离功能与 Riva ASR 结合使用,以获取转录文本,其中每个词都标有说出该词的说话人的 ID。
要了解 Riva ASR API 的基础知识,请参阅 Riva ASR Python 入门。
有关 Riva 的更多信息,请参阅 Riva 开发者文档。
说话人分离与 Riva ASR API#
说话人分离是按说话人标签分割录音的过程,旨在回答“谁在何时说话?”的问题。Riva ASR 支持说话人分离,可以通过传递 SpeakerDiarizationConfig
并将 enable_speaker_diarization
设置为 True
来启用。Riva 说话人分离功能分割输入音频,提取音频段的说话人嵌入,计算说话人数量,然后为每个音频段分配相应的说话人标签。启用说话人分离后,Riva ASR 会将 ASR 转录文本以及转录文本中每个词的说话人标签返回给客户端。说话人分离与语言无关,可以与 Riva ASR 支持的任何语言一起使用。
要求和设置#
启用说话人分离模型。
说话人分离是一个可选模型,因此需要在config.sh
中取消注释包含rmir_diarizer_offline
词的行来启用它。由于说话人分离仅适用于 Riva ASR 离线 API,请确保也在config.sh
中启用了离线 ASR 模型。部署模型并启动 Riva 语音技能服务器。
通过运行bash riva_init.sh
部署上一步中启用的模型,然后通过运行bash riva_start.sh
启动 Riva 服务器。有关更多信息,请参阅 Riva 技能快速入门指南。安装 Riva 客户端库。
执行 Riva 客户端的要求和设置部分中的步骤来安装 Riva 客户端库。
导入 Riva 客户端库#
让我们导入一些必需的库,包括 Riva 客户端库。
import io
import IPython.display as ipd
import grpc
import riva.client
创建 Riva 客户端并连接到 Riva 语音 API 服务器#
以下 URI 假定 Riva 语音 API 服务器的本地部署在默认端口上。如果服务器部署在不同的主机上或通过 Kubernetes 上的 Helm Chart 进行,请使用适当的 URI。
# Instantiate client
auth = riva.client.Auth(uri='localhost:50051')
riva_asr = riva.client.ASRService(auth)
# Load a sample audio file from local disk
# This example uses a .wav file with LINEAR_PCM encoding.
# Sample file taken from https://freesound.org/people/SamKolber/sounds/203020/
path = "audio_samples/interview-with-bill.wav"
with io.open(path, 'rb') as fh:
content = fh.read()
ipd.Audio(path)
# Creating RecognitionConfig
config = riva.client.RecognitionConfig(
language_code="en-US",
max_alternatives=1,
enable_automatic_punctuation=True,
enable_word_time_offsets=True,
)
# Use utility function to add SpeakerDiarizationConfig with enable_speaker_diarization=True
# Value of max_speaker_count in SpeakerDiarizationConfig has no effect as of now. It will be honoured in future.
riva.client.asr.add_speaker_diarization_to_config(config, diarization_enable=True)
# ASR inference call with Recognize
response = riva_asr.offline_recognize(content, config)
print("ASR Transcript with Speaker Diarization:\n", response)
ASR 转录文本根据语音停顿拆分为多个结果。对于每个结果,转录文本中的每个词都会分配一个说话人标签,指示哪个说话人说了该词。
# Pretty print transcript with color coded speaker tags. Black color text indicates no speaker tag was assigned.
for result in response.results:
for word in result.alternatives[0].words:
color = '\033['+ str(30 + word.speaker_tag) + 'm'
print(color, word.word, end="")
这就完成了关于将说话人分离与 Riva ASR 结合使用的教程。