Whisper 的 Prompt 和 GPT 等语言模型的 Prompt 是两种东西
与传统的 ASR 模型不同,Whisper 在某些情况下可以借助 Prompt 提升音频转文字的准确度。
如果 Whisper 的 Prompt 是 "请尽力保持每句话的完整 并给每句话都添加标点符号",你会发现这句 Prompt 没有任何作用,Whisper 的转录结果里可能还是会出现大量中断的句子,或者转录结果无标点。
Whisper 是在尝试学习 Prompt 里的「风格(style)」,而非具体的指令。
那什么是 Prompt 的「风格」?
根据 Whisper 的 cookbook、 Whisper prompt 的 issues 和我的实际体验,Prompt 的风格可以表现在下面几个方面:
风格 1:Prompt 里是否包含标点符号。
Whisper 的转录结果有时会缺乏标点符号,这个时候你可以使用带标点符号的 Prompt 的来引导 Whisper 添加标点。
「生于忧患,死于安乐。岂不快哉?」
「请为转写的文本添加标点符号」
Prompt 1 是有意义的,Prompt 2 是无意义的。
不过 Whisper 也不是能每一次都学会 Prompt 的风格添加标点符号。实测在 Whisper-large v2 模型下,通常英文内容使用 prompt 可以为结果添加标点,中文内容则要看运气。
风格2:一些容易拼写错误的人名、产品名、公司名
这里比较好理解,不同的词汇可能会有同一个发音。你可以在 Prompt 里指定你希望的拼写格式。
比如一段对话里提到了张三和李四,而「张三」的音同「章三」、「樟叁」...
那 Prompt 里就可以包含 「张三,李四。」
风格3:是否包含一些填充词(filler words)
这里直接引用官方的说法来解释,翻译成中文会有点怪异。
The model may also leave out common filler words in the audio. If you want to keep the filler words in your transcript, you can use a prompt that contains them: "Umm, let me think like, hmm... Okay, here's what I'm, like, thinking."
风格4:简体中文和繁体中文
因为中文有两种,有的时候 Whisper 会把音频以繁体中文的形式转录。此时用简体中文来陈述 Prompt 大概率可以解决此问题。
一般建议 Whisper 的 Prompt 语言和转录的音频语言一致。即英文音频用英语 Prompt,中文音频用简中/繁中 Prompt。
风格5:通过对话风格的 Prompt 变相实现转录结果区分说话人
这个技巧来自于 prompt vs prefix in DecodingOptions ,有的时候会有效果。
单纯的 Whisper 模型并不能在转录结果里区分出说话人,想要区分说话人,一般会配合 Pyannote 来做。但在某些场景下,我们可以通过 Prompt 来变相实现区分说话人——每一句的转录结果都属于单个说话人,不会出现某一句的转录结果属于多个说话人的情况。
方法就是用一个对话式的 Prompt:
「- How are you? - I'm fine, thank you.」
「- 吃了没?- 吃了。」
播客这种场景可以试试。
Whisper Prompt 的其他 Tips
Whisper 的 Prompt 应该尽可能长一些,太短的 prompt 的风格难以学习。
Whisper 的 Prompt 只会使用 224 个 token,如果超过 224 个 token 则会默认使用最后 224 个 token。token 的概念可以参考这篇文章,但 Memo 的 Prompt 直接限制了字符串长度,这里就不用在乎 token 长度了,只需要尽量让自己的 prompt 完整输入到 Memo 输入框里就行。
Whisper 的 Prompt 最好可以和音频的源语言保持一致。
怎样快速生成 Prompt?
因为我主要转录的是课程内容,所以我的 Whisper Prompt 通常会使用这节课的关键词列表。如果课程有讲义 pdf 文件,我会直接把它丢给 Claude,然后:
summarize the file, response me with format like :"keyword1, keyword2, keyword3,keyword4.."
如果课程没有讲义,我会手动输入几个关键词,或者直接从课本里随便挑一段话作为 prompt。
1 条评论
这篇文章写得深入浅出,让我这个小白也看懂了!