语言检测器总会给出一个答案,哪怕只是一声咳嗽。对于清晰或多语混合的音频,请保持自动检测;当只有一种语言且背景有噪声或口音较重时,请指定语言。
每次转录都始于一个读者看不到的问题:这是什么语言?如果判断错了,流程的其余部分就会竭尽全力地生成流畅却毫无意义的内容。本文将介绍语言检测器究竟在听什么,它在实时音频和文件中的表现如何,以及在哪些情况下您最好自行指定语言。
语言检测器并不理解所说的内容。它关注的是声音本身:辅音和元音的组成、音节的重音方式、短语的节奏,以及每种语言都大量使用的那些简短高频词。西班牙语有自己的元音系统和节奏;荷兰语和德语有很多共同之处,但在若干音上有所不同。几秒钟清晰的语音通常就足以区分它们。
许多识别器是在识别词语的同时顺带完成这一判断的。它们根据音频开头部分决定语言,并为其所知的每种语言给出一个概率。这种设计带来两点后果。概率之和恒为一,因此不存在“无语言”的答案:静音、咳嗽或音乐提示音都会被判定为某种语言,而且往往附带很高的置信度。另外,判断只基于开头部分,而开头恰恰是最糟糕的取样位置。许多录音一开始是问候语、人名和地名,这些内容几乎不包含语言特征:“Good morning, Maria, welcome to Berlin”听起来几乎和英语一样像德语。还有些录音以静音或咳嗽开场,若让检测器在此时做判断,它依然会自信地给出结论,而其依据却什么都没有。真实的音频也会出现这种情况:一段罗马尼亚语布道以房间噪声和“Bună dimineața”开场,很可能被完全自信地听成意大利语的“Buona domenica”。
错误答案的代价也比听起来更严重。识别器若以错误的语言解码,不只是拼错单词,而是会重写内容。“For God so loved the world”若被当作罗马尼亚语解码,会变成“Forgot to love the world”。罗马尼亚语的“mândria slujește”若被当作英语解码,会变成“Pride serves”,这是对一句无人要求翻译的句子所做的准确翻译。这些文字读起来很流畅,转录文本也看不出任何异常,这正是错误代价高昂之处。
最容易骗过检测器的五种情况:
这些情况中哪一种会影响您,取决于音频是实时传入,还是已经存放在文件中。
对于实时转录,并不存在可供整体分析的完整录音。音频随着说话传入,转录文本也必须同步输出。因此,语言是在说话人讲话的同时被检测的,如果说话人切换了语言,系统也会随之跟进。这正是您在控制台中开始实时转录时,Spoken language(口语语言)开关旁边提示的含义:说话人的语言会被自动检测,且说话人可以随时切换。
切换语言在生效前需要先得到确认,因此一小段噪声不会把转录文本带入另一种语言。薄弱之处在于开头:如果开头是一句带噪声的问候,第一行转录文本可能会是错误的语言。指定语言可以避免这一问题。
文件的处理方式则不同,因为整段录音都已经存在。
对文件来说,问题更容易处理:无需依赖前几秒的内容。对于文件,语言是根据整段录音判定的,因此开头一句带噪声的问候无法左右结果。
文件的语言仍然只是一个工作假设,而非最终结论。如果录音中途确实切换了语言,例如一段访谈的后半段从英语转为罗马尼亚语,系统会跟随这种变化,而不是强行统一;如果录音在多种语言之间反复交替,系统同样能够处理。
一个只判断一次、从不回头重新审视的检测器,往往会在错误的地方充满自信。
当整段录音都充满噪声时,语言检测帮不上太多忙。检测是默认选项,因为它大多数时候都是正确的,而且不会增加任何成本。不过,对于某些录音,您应该指定语言,控制台也会告诉您哪些情况需要这样做:指定口语语言能提高噪声录音和口音较重录音的准确率。
这些正是检测所能依据的信息最少的情况。噪声会去除检测器赖以判断的线索;较重的口音会使这些线索偏向另一种语言;而亲缘关系很近的语言对本身提供的线索就少。一位带有浓重葡萄牙口音的英语母语者在混响较强的大厅里讲话,仅凭声音很难判断其语言;如果检测器判断错误,只要错误持续,转录文本就会把他说的英语变成葡萄牙语。指定语言则省去了这个判断,所有的精力都可以集中在识别内容本身上。
简要清单如下:
指定语言是转录任务的设置,而非账户设置,因此您可以按录音逐一决定。以上所有内容归结为一个 API 选项。
spokenLanguage 即为自动检测;流式传输中的 session.update在 API 中,spokenLanguage 是语言代码,例如 en;若省略该参数,则自动检测语言。它出现在文件或链接转录的 settings 中,以及实时会话的选项中。检测与指定所覆盖的是相同的 100 种语言。翻译至其中最多 10 种语言是另一项独立的选择,它不取决于检测到或指定的是哪种语言。翻译如何跟上语音的速度,将在实时翻译延迟解析一文中讨论。
{ "name": "Board meeting", "settings": { "spokenLanguage": "en", "speakerLabels": "auto" } }
实时会话在创建时同样接受此选项,并且您可以在音频传输过程中更改它。一个带有新 spokenLanguage 的 session.update 文本帧会从此刻起对语音生效;将其设为 "" 或 "auto" 则使会话恢复为自动检测;不受支持的代码会被忽略。带有语言按钮的字幕视图可以让操作员在看到错误的第一行时,立即指定语言,而无需重新连接。
{ "type": "session.update", "spokenLanguage": "ro" }
获取语言代码及其名称的列表,请访问 GET /v1/languages,该接口无需密钥。完整的实时流程(从在服务器上创建会话,到读取草稿和确认内容)请参阅通过 WebSocket 进行实时转录,交互式参考文档位于 {{api}}/docs。在控制台中,同一选项对应您开始新转录时的 Spoken language 开关;API 密钥则位于 Developers 下。