如何将说话人分离与 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 支持的任何语言一起使用。

注意:#

说话人分离仅在 Riva ASR 离线 API 中受支持。说话人分离是 alpha 版本,启用该功能后会增加 ASR 延迟。有关更多信息,请参阅 性能

要求和设置#

  1. 启用说话人分离模型。
    说话人分离是一个可选模型,因此需要在 config.sh 中取消注释包含 rmir_diarizer_offline 词的行来启用它。由于说话人分离仅适用于 Riva ASR 离线 API,请确保也在 config.sh 中启用了离线 ASR 模型。

  2. 部署模型并启动 Riva 语音技能服务器。
    通过运行 bash riva_init.sh 部署上一步中启用的模型,然后通过运行 bash riva_start.sh 启动 Riva 服务器。有关更多信息,请参阅 Riva 技能快速入门指南

  3. 安装 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 结合使用的教程。

深入了解 Riva 功能#

既然您已经对 Riva ASR API 有了基本的了解,您可以尝试

更多 Riva 教程#

查看 此处 了解更多 Riva 教程,以了解如何使用 Riva ASR 的一些高级功能,包括根据您的特定需求自定义 ASR。

示例应用程序#

Riva 附带各种示例应用程序。它们演示了如何使用 API 构建各种应用程序。有关更多信息,请参阅 Riva 示例应用程序

更多资源#

有关每个 Riva API 及其功能的更多信息,请参阅 文档