本文档介绍了使用 Speech-to-Text 的基础知识。 本概念指南说明您可以对 Speech-to-Text 发出的请求类型、如何构建这些请求以及如何处理其响应。 我们建议所有 Speech-to-Text 用户先阅读本指南和相关教程之一,再深入了解该 API 本身。
Speech-to-Text 识别请求
Speech-to-Text 有三种主要方法来执行语音识别,如下所列:
同步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API,对该数据执行识别,并在所有音频内容处理完毕后返回结果。同步识别请求仅限于持续时间不超过 1 分钟的音频数据。
异步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API 并启动长时间运行的操作。使用此操作,您可以定期轮询识别结果。异步请求可用于任何持续时间不超过 480 分钟的音频数据。
流式识别(仅限 gRPC)对 gRPC 双向流内提供的音频数据执行识别。流式请求专为实时识别(例如从麦克风采集实时音频)而设计。流式识别可以在采集音频的同时提供临时结果,例如当用户还在讲话时就显示结果。
请求包含配置参数以及音频数据。识别请求可以选择性地包含recognizer,这是一个存储的和可重复使用的识别配置。
音频元数据
对于大多数音频文件,Speech-to-Text API 可以自动推断音频元数据。Speech-to-Text 会解析文件头并根据该信息对其进行解码。如需了解支持的文件类型,请参阅编码页面。
对于无文件头的音频文件,Speech-to-Text API 允许在识别配置中明确指定音频元数据。如需了解详情,请参阅编码页面。
对源素材进行编码时,如果可以选择,请使用 16000 Hz 的采样率采集音频。低于此值可能损害语音识别的准确性,但更高的采样率对语音识别质量并没有明显影响。
但是,如果您的音频数据已经录制完毕,但并非采用 16000 Hz 的采样率,请勿将音频重新采样为 16000 Hz。例如,大多数传统电话音频使用 8000 Hz 的采样率,这可能会产生不够准确的结果。但如果您必须使用此类音频,请将其以原生采样率提供给 Speech-to-Text API。
语言
Speech-to-Text 的识别引擎支持大量语言和方言。您可以使用 BCP-47 标识符在请求配置的 languageCode
字段中指定音频语言(以及国家或地区方言)。
语言支持页面提供了各项功能所支持语言的完整列表。
识别功能
Speech-to-Text API 还有其他识别功能,例如自动加注标点符号和字词级置信度。它们在请求的识别配置中启用。请参阅上述链接中提供的示例代码和语言页面,了解这些功能的可用性。
模型选择
Speech-to-Text 可以从多种机器学习模型中选择一种来转录音频文件。Google 已经针对特定的音频类型和来源对这些语音识别模型进行了训练。 请参阅模型选择文档,了解可用模型以及如何在请求中选择模型。
嵌入音频内容
如果在请求的 audio_source
字段中传递 content
参数,嵌入音频将被包含在语音识别请求中。对于在 gRPC 请求中作为内容提供的嵌入音频,该音频必须与 Proto3 序列化兼容,并以二进制数据的形式提供。对于在 REST 请求中作为内容提供的嵌入音频,该音频必须与 JSON 序列化兼容,并首先进行 Base64 编码。如需了解详情,请参阅[使用 Base64 对音频进行编码][base64-编码]。
在使用 Google Cloud 客户端库构建请求时,通常您会直接在 content
字段中写出此二进制(或 base64 编码)数据。
传递通过 URI 引用的音频
更常见的做法是,您在 Speech-to-Text API 请求的 audio_source
字段内传递一个 uri
参数,指向位于 Cloud Storage 中的一个音频文件(二进制格式,不是 base64 编码),格式如下:
gs://bucket-name/path/to/audio/file
Speech-to-Text 使用服务账号访问 Cloud Storage 中的文件。默认情况下,服务账号可以访问同一项目中的 Cloud Storage 文件。
服务账号电子邮件地址如下所示:
service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com
如需转写另一个项目中的 Cloud Storage 文件,您可以向此服务账号授予另一个项目中的 Speech-to-Text Service Agent 角色:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/speech.serviceAgent
如需详细了解项目 IAM 政策,请参阅管理对项目、文件夹和组织的访问权限
您还可以通过向服务账号授予对特定 Cloud Storage 存储桶的权限,为服务账号授予更精细的访问权限:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
--role=roles/storage.admin
如需详细了解如何管理对 Cloud Storage 的访问权限,请参阅 Cloud Storage 文档中的创建和管理访问控制列表。
Speech-to-Text API 响应
处理音频后,Speech-to-Text API 会在 SpeechRecognitionResult
消息中返回同步和批量请求的转写结果,在 StreamingRecognitionResult
消息中返回流式请求的转写结果。在同步和批量请求中,RPC 响应包含结果列表。识别出的音频列表将以连续顺序显示。对于流式响应,所有标记为 is_final
的结果以连续顺序显示。
选择备选项
成功的同步识别响应中的每个结果可以包含一个或多个 alternatives
(如果 max_alternatives
大于 1
)。如果 Speech-to-Text 确定备选项具有足够高的置信度值,则该备选项将包含在响应中。响应中的第一个备选项始终是最佳(可能性最高)选择。
将 max_alternatives
设置为高于 1
的值并不保证一定会返回多个备选项。通常,多个备选项更适合为通过流式识别请求获取结果的用户提供实时选项。
处理转录
响应中提供的每个备选项都将包含一个 transcript
,其中包含识别出的文字。如果为您提供了按顺序的备选项,则您应当将这些转录串连起来。
置信度值
confidence
值是 0.0 到 1.0 之间的估计值。它是通过汇总分配给音频中每个字词的“可能性”值来计算的。数值越大,表示估计字词被正确识别的可能性越高。此字段通常只为最有可能的假设提供,并且仅适用于 is_final=true
时的结果。例如,您可以使用 confidence
值来决定是向用户显示备选结果还是要求用户确认。
不过请注意,该模型在确定排名最靠前的“最佳”结果时,并非单纯基于 confidence
分数,而会考虑更多的信息(例如句子上下文)。因此,在少数情况下,排名最靠前的结果并一不定具有最高的置信度分数。如果您未要求多个备选结果,返回的单个“最佳”结果的置信度值可能低于预期。例如,在使用生僻字词时就可能出现这种情况。一个很少使用的字词即使被正确识别,也可能分配一个较低的“可能性”值。如果模型根据上下文确定该生僻字词是最可能的选项,那么即使该结果的 confidence
值低于备选项,也会作为最佳结果返回。