AI活用

Whisper会把金额数字弄错:small、medium不一致,large-v3一致的语音转写设置

Whisper会把金额数字弄错:small、medium不一致,large-v3一致的语音转写设置

早上好,我是まさきん。

我把一次兴趣班的体验说明录了音,用 Whisper 转成了文字。文章读起来像模像样,唯独金额的数字不对。我想这件事和把录音当作家庭收支判断依据的人有关,所以结合官方信息整理一下。

※本文内容以发布时为准。最新条件请以官方网站为准。

POINT
  • 用 faster-whisper 转写约11分钟的说明录音,small 模型下金额全都不对
  • medium 下费用的数字仍然是别的数字,到 large-v3 才终于和宣传单一致
  • 在 initial_prompt 里加了提示之后,安静的片段里提示词本身被反复输出
  • 我觉得确认金额时,只把相关部分截出来交给 large-v3 比较安全
  • 设置以不加 prompt 和 condition_on_previous_text=False 为基础,最后再和纸质资料核对

语音转写会把金额的数字听错

我把某个兴趣班的体验说明录了约11分钟。因为想事后静下心来比较月费等内容。

转写用的是 faster-whisper。出来的文字,从说话的脉络来看读着很自然。可是和发下来的宣传单放在一起一比,金额对不上。

比如,几千日元档的月费,千位变成了别的数字。作为句子是成立的,所以如果没有宣传单,我想我是发现不了的。

small 和 medium 的数字都不对

最先用的是 small。作为金额出来的数字,全都和宣传单不一样。

接着用 medium 重新转写。这次费用的数字也还是别的数字。看来并不是把尺寸提高一档就能解决的事。

麻烦的是,错误看起来不像错误。“月费是◯千日元”这样的形式保留着。只有数字被换掉了,所以读起来不会觉得别扭。

用 large-v3 转写截出的片段,和宣传单一致

最后,我只把讲金额的部分截了出来。把这段很短的音频用 large-v3 转写,结果和宣传单上的金额一致。

所以在我手头,得出的结果是“确认数字用 large-v3”。话虽如此,这只是一段录音的情况。我觉得还不能说用 large-v3 就一定对得上。

之所以能核实,是因为手头有纸质的宣传单。没有只凭转写就把金额定下来,从结果看或许是对的。

模型尺寸的比较(官方README的数值)

OpenAI 的 Whisper 官方仓库里,列有模型尺寸的一览。我把 README 里的表原样整理了一下。

尺寸参数量所需VRAM参考值相对速度
tiny39 M约1GB约10倍
base74 M约1GB约7倍
small244 M约2GB约4倍
medium769 M约5GB约2倍
large1550 M约10GB1倍
turbo809 M约6GB约8倍

相对速度是以 large 为1时的参考值。README 里写着,这是在名为 A100 的GPU上转写英语音频测得的数值。同时也提醒,实际速度会因语言、语速和设备而有很大差异。

表里的 large 有不同版本。据模型卡介绍,large-v2 于2022年12月推出。large-v3 则是2023年11月发布。

turbo 是2024年9月新增的。README 说明它是 large-v3 的优化版。据说精度下降极小,而速度有所提升。顺便一提,turbo 的参数量在 README 里是 809 M,在模型卡里却是 798 M。

faster-whisper 有什么不同

faster-whisper 是用另一种推理引擎来运行 Whisper 的重新实现。官方 README 说明,它使用名为 CTranslate2 的高速推理引擎。

同一份 README 里写着,在与原版相同精度的前提下最高快4倍。内存占用据说也更少。还提到通过8位量化可以进一步提高效率。

模型名像 WhisperModel("large-v3") 这样指定。据说这样写的话,转换好的模型会自动下载。

initial_prompt 和 condition_on_previous_text 的含义

这次涉及的设置有2个。两者在原版和 faster-whisper 里都有。

initial_prompt 是传给第一个窗口的提示文本。原版源码的说明里,举的例子是让专有名词和特有词汇更容易识别对。

condition_on_previous_text 是指是否把上一段的输出当作下一段的提示。默认值是 True。说明里提到,关掉之后各段之间的写法可能会不统一。另一方面也写着,这样更不容易陷入重复同一句话之类的失败循环。

设置含义(官方说明)确认金额时的推荐
模型尺寸越大越慢,所需内存也越多只对相关部分用 large-v3
initial_prompt传给第一个窗口的提示文本不加
condition_on_previous_text把上一段的输出当作下一段的提示(默认为 True)设为 False
vad_filter去掉没有人声的部分(faster-whisper)设为 True
language指定所说的语言指定为 ja

右边一列是我根据官方说明和这次的体验选的。并不是说官方推荐这个组合。

无需签约也能获得100积分的资费模拟 用录音核实费用之后,顺便用乐天移动比一比每月的手机费

点击后会跳转到乐天登录页面,登录后即可看到活动内容。

传了提示词,结果提示词本身被重复输出

为了让数字识别得准,我试着在 initial_prompt 里传了提示。结果在安静的片段里,出现了重复提示词本身的输出。

也就是说,没有人说过的话,以文字的形式排在了那里。明明想确认金额,返回的却是提示的原文。这就起不到确认的作用了。

所以我认为,确认金额时不加提示词更安全。在提示里写上数字,恐怕也有混进输出的风险。

官方关于幻觉的说明

输出没有人说过的话这一现象,官方的模型卡里也有记载。这就是所谓的幻觉。

据模型卡介绍,Whisper 是用大量夹杂噪声的数据训练的。因此,输出里有时会包含音频中实际并没有说过的文字。

关于重复也有说明。由于模型结构的原因,它容易反复生成同样的文字。用束搜索等方法可以在一定程度上抑制,但并不彻底。

注意

语音转写的错误,是以看似合理的文字形式出现的。即使数字不对,作为句子也读得通,我觉得这是最大的陷阱。

无声片段可以用 vad_filter 去掉

faster-whisper 有一个叫 VAD 过滤器的功能。它会在转写之前把没有人声的部分去掉。官方 README 说明,它内置了名为 Silero VAD 的模型。

用法只需加上 vad_filter=True。README 里写着,默认行为比较保守,只去掉超过2秒的无声。细节可以通过 vad_parameters 调整。

另外还有一个叫 hallucination_silence_threshold 的设置。它在启用单词级时间戳时可以使用。说明是:在怀疑出现幻觉的地方,跳过比指定秒数更长的无声。

官方关于日语精度的说明

官方 README 里写着,精度会因语言而有很大差异。large-v3 和 large-v2 各语言的成绩是用图表示的。

模型卡里还有训练数据的构成。68万小时中,65%是英语音频和英语转写文本。英语以外的音频及其对应语言的转写文本占17%。

里面也提到,数据较少的语言精度会下降。据说幻觉和重复在这些语言里恶化的可能性也更高。至于日语处于什么水平的具体数字,本文没有列出。

按用途区分使用

大概没有必要全部都用 large-v3 来转写。如果只是把握说话的脉络,我想很多场合轻量的模型也够用。

用途模型范围确认方法
把握整体脉络·做摘要轻量的模型整段录音细节不要过于相信
确认金额·日期·次数large-v3只限相关部分与纸质或官方资料核对
确认与合同相关的条件large-v3只限相关部分最后用自己的耳朵重听

关键在于,只把出现数字的部分区别对待。整体的转写可以当作一张地图,用来找“在哪里讲到了金额”。

只确认金额的步骤

把我做的流程写成步骤,是这样的。

  1. 用轻量的模型转写整体,记下讲到金额的时间点
  2. 用 ffmpeg 只截出那一段
  3. 用 large-v3 转写截出的音频
  4. 不传提示词,把 condition_on_previous_text 设为 False
  5. 把出来的数字与宣传单或书面资料核对

截取用 ffmpeg 一行就行。据官方文档,放在 -i 前面的 -ss 指的是起始位置。同样,-t 是读取的长度。下面的例子是从5分30秒的位置取出60秒。

ffmpeg -ss 00:05:30 -t 60 -i recording.m4a clip.wav

转写的部分,以官方 README 的写法为基础是这样的。README 里也有没有GPU时的写法,我就照那个来了。

from faster_whisper import WhisperModel

model = WhisperModel("large-v3", device="cpu", compute_type="int8")
segments, info = model.transcribe(
    "clip.wav",
    language="ja",
    condition_on_previous_text=False,
    vad_filter=True,
)
for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

README 里有一条提醒。segments 是生成器,据说要在循环里遍历时才会真正开始处理。

常见的失误·陷阱

回顾这次的事,我觉得容易栽跟头的大概是这些地方。

我中的是前3条。最后一条,因为当时发了宣传单,才算得救。

我想也有只有口头说明、没有资料的场合。这种时候,只把金额当场记下来或许最可靠。录音终究只是用来重听的材料。

开始之前要确认的事

为想用语音转写来核实说明录音的朋友整理了一下。

我觉得第二项尤其重要。只要有可以核对的对象,语音转写用起来就轻松得多。

把语音转写用于家庭收支判断时的分寸

说明会和合同的说明,信息太多根本记不全。录下来转成文字,事后就能静下心来比较。我觉得这非常方便。

不过,对家庭收支的判断起作用的是金额和日期。而这恰恰是最容易出错的地方,这就是这次的发现。方便的部分和可以信任的部分,原来并不是同一块。

在工作中,数字也是要对照原始数据来确认的。摘要用来把握脉络,数字看原件。在家里或许也可以用同样的界线。

关于处理纸质信息的事,我在把学校通知单登记到日历的机制里也写过。至于交给AI的范围该怎么划线,我觉得拜托AI完成需要登录的预约那件事比较接近。关于汇总通话内容的功能,还有一篇Rakuten Link 的AI通话摘要功能的文章。

CHECK
  • 整体脉络:用轻量的模型转写,用于摘要和检索
  • 金额和日期:截出相关部分,用 large-v3 转写
  • 最终确认:与纸质或官方资料放在一起比对。没有的话就用自己的耳朵重听

常见问题

Q. Whisper 为什么会把数字弄错?

我没能找到明确写出原因的官方说明。模型卡里写着,输出里有时会包含没有说过的文字。这并不是专门针对数字的说明,所以原因我不下定论。

Q. small 和 medium 哪个更准确?

官方 README 说明,各个尺寸在速度和精度之间存在权衡。在我的录音里,两者的金额数字都不对。如果目的是确认数字,比起比较尺寸,优先做核对似乎更好。

Q. 用 large-v3 金额就一定对吗?

我觉得不能说一定对。我的情况是,截出的片段和宣传单一致。话虽如此,这只是一段录音的结果,所以与纸质材料的核对还是不要省略比较安全。

Q. turbo 和 large-v3 有什么不同?

官方 README 说明,turbo 是 large-v3 的优化版。精度下降极小,相对速度的参考值约为8倍。我没有用 turbo 试过,所以它对数字的识别情况我不清楚。

Q. 是不是最好不要用 initial_prompt?

让专有名词更容易识别对的用法,官方说明里也有记载。所以我觉得使用它本身并没有什么不好。只是我在安静的片段里遇到了提示词被重复输出的情况。所以在确认金额时我把它去掉了。

Q. 把 condition_on_previous_text 设为 False 会有什么变化?

上一段的输出不再被用作下一段的提示。据官方说明,各段之间的写法可能会不统一。相应地,更不容易陷入重复的循环。

Q. vad_filter 一开始就是启用的吗?

在普通的 transcribe 里,默认值是 False。所以要用的时候得自己指定为 True。据 README 介绍,在批处理那边它是默认启用的。

Q. 使用 faster-whisper 需要 ffmpeg 吗?

faster-whisper 的 README 说明,不需要另外安装 ffmpeg。因为它已经包含在用于读取音频的库里。不过,如果要用命令来截取片段,就需要 ffmpeg 本体。

参考的官方信息

总结

语音转写是保留说话脉络时非常得力的工具。不过,金额的数字无论 small 还是 medium 都不对。用 large-v3 转写截出的片段,才终于和宣传单一致。

所以我决定整体用轻量的模型来转写。只有数字的地方另外确认。不传提示词,最后和纸质材料放在一起比对。

手头有说明录音的朋友,不妨哪怕只把金额的部分和资料对照着看一看。

无需签约也能获得100积分的资费模拟 核实完家庭收支的数字之后,顺便用乐天移动重新看看通信费

点击后会跳转到乐天登录页面,登录后即可看到活动内容。

本文包含联盟营销广告。如果您通过本站链接申请相关商品或服务,我们可能会从合作企业获得报酬。此外,运营者是乐天集团的员工,也可能通过员工推荐计划获得报酬。文章内容与评价均基于运营者的真实体验与调查完成,与是否存在广告无关,但请您在阅读前了解上述关系。详情请参阅免责声明与联盟营销说明。 免责声明与联盟营销说明

本文包含机器翻译内容。正式条件请以乐天移动官方网站的多语言页面为准。

如果您对乐天移动的通信区域·信号状况有疑问,可以通过官方的 电波改善调查申请表 进行咨询。

ABOUT THE AUTHOR
まさきん

乐天集团员工·数字营销人(持有FP资格)

40岁出头,双职工家庭、四个孩子的父亲。在乐天集团担任数字营销工作的同时,也活用理财规划师(FP)资格,专注于家庭理财与资产配置。

查看简介

相关文章

RELATED
Gemini(Google AI Pro)家庭共享最多5名家人|设置步骤与共享范围 AI活用

Gemini(Google AI Pro)家庭共享最多5名家人|设置步骤与共享范围

Google AI Pro除管理员外最多可与5名家人共享。Gemini App和存储空间可以共享,YouTube Premium Lite仅限管理员,Flow的上限由全家分摊。本文根据官方帮助整理了设置步骤和儿童账号的处理方式。

2026.10.13 · 阅读约9分钟
AI订阅扣款日与记账对不上的3个原因|Claude升级后扣款日会改变 AI活用

AI订阅扣款日与记账对不上的3个原因|Claude升级后扣款日会改变

Claude在月中升级到Max时,计费周期会重置,当天成为新的扣款日。美元换算日元的汇率在数据到达发卡公司时确定,账单和记账App的同步也会晚几天。本文整理了以收据邮件为准来确定月份的5个步骤。

2026.10.13 · 阅读约10分钟
把freee会计的未处理明细改成每月一次的核销班次:每月5日7:30、分3类、最多15条交给人处理的设计 AI活用

把freee会计的未处理明细改成每月一次的核销班次:每月5日7:30、分3类、最多15条交给人处理的设计

freee会计里有大约18条未处理明细,连续6次每周检查都原封不动地留着。这里整理一下每月5日早上7:30在家里的Mac上运行的核销班次的设计,以及“能确定的部分每月合并成1个任务、拿不准的明细逐条交给人、上限15条”的界线。

2026.10.12 · 阅读约11分钟
转到乐天移动,最高可获14,000积分 无需签约也能获得100积分的资费模拟 →
立即申请 →