工作清單

不用训练模型,Whisper性能暴涨!背后只改了一步解码

逐字稿文字預覽

大家好,今天给大家介绍一篇比较新的paper,也是基于Visper作语音识别的。这篇论文的题目叫Visper CD,专门解决长音频的语音识别问题。如果用一句话来总结的话,这篇paper它的核心亮点就在于不改变Visper模型的参数,也无需训练。只在Visper解码时给它加一个反向的揪片器,这样专门来压制长音频的语音识别。
音频转写里面的幻觉
重复循环和漏字等问题
这就是这篇论文
它核心要解决的问题
这里面CD代表什么意思
就是一个对比解码
那我们下面来看一下
这篇PayPal它主要解决什么问题
它核心要解决的
就是可能比较长的一些语音
然后呢
以Visper为代表的一些语音识别模型
它面临的幻觉
重复循环和内容遗漏
等错误累积的问题
因为上海文太长了嘛
而且这种Visper
它是自回归的一个模型结构
所以上文的错误会累积到下文
这三种错误基本上可以看成分成以下三类
第一种就是静音区的幻觉
例如在非语音的间隔期间
但是模型呢
它还是错误的生成了文本
第二个就是跨段的重复的循环
就是模型陷入自我强化的重复模式
它会错误的不停的输出相同的字
然后一直循环一直循环
然后永远不停
第三个就是跳过
那就是遗漏了实际的语音内容
导致转路不完整
实际上就是我们语音识别里常见的三类错误
插入删除替换这三类错误
此外这个论文也指出
当前因为是自回归的语音识别模型
它会利用前一段转路的结果作为解码的上下文
那么这样就会带来一个问题
就是上面的错误会被累积
引起后面解码带来更多的错误
这就要形成了新的累积错误
这也是自卫规模型它常见的问题
那这篇paper它是如何解决这个问题的呢
它就提出了叫Visper CD
这种方式啊
不需要训练这个Visper模型的
在推理时对比干净的音频和声学扰动后的音频的一个输出
一个logis
然后从而呢
抑制长形式语音转换中的一些插入删除和替换错误
那我们就来看一下它具体是怎么做的
我们先看右面这张图吧
我把这张图看懂了
那这篇论文最精华最核心的部分也就懂了
首先白色这一部分就是输入的语音
然后这一部分呢
就是粉色的这部分就是Whisper
Whisper我们知道
它就整体过程中就不需要动
那过程是怎么样的呢
我们先看虚线这部分啊
就是上一个30秒已经识别完
识别之后的一个语音片段
那现在呢
我们要识别最新的
这个新的这30秒的语音片段
需要把它给到我们Whisper的encoder
那你看这就是黑色这部分
就是原始的这段
此外呢
我们会对原始的音频
做一些相关的扰动
把它当做复理
原来这段就当做正理
复理第一个种复理呢
就是我们加一些高斯噪声
就是在原始的这段干净音频上
加一些高斯噪声
把它变成第一种复理
也就是这个蓝色这部分
第二种复利呢
就是我们把原始的音频啊
向右稍微偏移一小段
这个就变成shift
就是偏移的这段扰动的音频
第三种音频啊
就是silence
就是完全静音的这段音频
然后呢
我们把这四种音频
同时送给Whisper
它的encoder和decoder去解码
解码之后呢
我们就得到了对应的四个输出
那黑色这部分就是原始的输出
蓝色绿色和红色分别也对应了三个输出
然后呢
我们就把正力的得分输出和负力的得分输出
进行一个整合
以叫我们叫对比的一个解码
解码之后就可以帮助我们得到
更准确的语音识别的结果
那具体它是怎么去做这个对比解码的呢
我们就来看一下论文中的原始
它是怎么说的
其实方式也很简单
正力得到的这个X就是干净的
原始干净的语音
那自回归之后
得到我们正力的一个结果
复利的呢
这个X上面加一个波浪
就是我们经过三种变换
加高斯啊
加偏移啊
和静音的变换之后的这种音频
也经过我们F
也就是Whisper之后
得到我们复利的输出
然后呢
我就通过一个α的一个超三
把这两种得分输出
把它整合在一起
然后就变成我们最终的一个CD的一个输出
那具体是怎么整合的呢
实际上就是1加上α
然后乘以我们正力的输出
减去α乘以我们负力的输出
实际上你如果把这个式子变换一下
其实就是把这个括号拆开啊
就变成正力的输出
加上正力的输出
减去负力的输出
然后再乘一个alpha的参数
对吧
所以这它代表的是什么含义呢
实际上就是我在保持正力输出不变的前提下
我把负力的那些扰动
希望都把它剪掉
然后把这些干扰项去掉
然后让它有一个对比的结果
从而帮助我更好的识别
最终的语音识别结果
这就是这篇paper最重要的
也最核心的一个机制
叫对比解码
那下面我们就来看一下
它声学扰动具体是怎么做的
基本上就是三种
一个是高斯造声的注入
就是我们随机生成
符合正态分布的高斯造声
加到原始信号上
第二个呢就是静音
我就把输入图谱
全都变成零
全零的波形
就是静音
第三个呢就是音频的时序偏移
我就把原始的30秒
向左偏移一些
然后左侧的丢弃
右侧的用零来填充
这就好了
这就是三种升学扰动的策略
然后呢
如果我们有了升学扰动的策略
那这三种策略
它是怎么结合在一起的呢
结合其实也非常简单
大家还记得我原始的诗子吧
就是1加上α乘以正力
减去α乘以负力
这里只不过负力有很多啊
就是有三种扰动策略嘛
所以负力产生的输出结果就有三种
那这三种我怎么整合到一起呢
我就把它在e的指数上
进行一个整合
先求和再求个平均
无非是这里加了一个超次参数
来控制一下
对吧
所以这个超次参数呢
一般也就设为1
那这个1其实就等于没有吗
你除它就等于没有了
那其实在原始的例子上
无非就是把三个负利的输出
进行求和再取平均
就非常简单吧
然后呢,我们再看在推理的时候。推理的时候,我们知道,呃,其实是可以并行推理的嘛,对吧?就是尽管输入的是K条额外的解码路径,但是我们可以通过P处理来计算控制的开销,也就是一次处理把它
都做完
然后整体的
它最大的优势
就是无需训练
然后我只需要在后面
只需要在解码的时候
稍加一些
所谓的工程化的处理就够了
那我们可以在这里
做一个形象的比喻
就是如果你上面
听的还不是特别懂的话
如果我们把原始的Whisper
它正常转型的时候
它就是像一个
边听边写的速记员
那这篇paper
它这个Whisper CD
它实际上做的就是
在旁边放了三个捣乱版的监听器
那一个呢
让它听起来很吵
也就是加噪音的
加高斯噪声的
一个让它几乎什么都听不到
然后就是静音的
还有一个呢
是让它错位的
就是这个偏移的
然后如果某个词
在这三种不利的条件下
它仍然特别想写出来
那这个词多半就不是真的想听到的
而是它习惯性脑补的
于是系统就把这些词的分数扣掉
然后这个解释啊
基本上或者这个比喻啊
就是整篇论文方法的本质
嗯
最后我们来看一下它的效果啊
整个论文呢
是在这五个长音频的英文测试机上来做的
然后我们看一下
它这个效果还是很不错的
就是加CD是这次改编之后的吧
然后它在两个VSPR的版本上做
我们看到原始的VSPR
像V3那种
它在这些测试机上
这个凑率都非常高
这都超过100%了
有200多500多
但是呢我们在Visper V3上加了解码上的改进之后
下降非常多
就都从200多变成45
从44变成19
从500多变成57
对吧
第二种方式呢
就是我用更强的版本
用Turbo这个版本
虽然原始的版本
直接用Visper
识别这个长文效果比V3会好一些啊
但是也不尽如人意吧
但是呢
我们加了这种CD之后
你会看到它效果像样的也是非常明显
所以这就是我觉得这篇paper非常
值得分享的吧
就是它用非常小的改动
然后实现了对常文的一个效果非常大的提升
我们最后来总结一下这篇paper
就是长音频的识别
Whisper的话会有很多严重的错误
但这些错误它大概率不是模型不会识别
而是解码的过程中
被之前的识别结果和一些上下文绑架了
导致它越识别越错
越识别越错
所以作者他不是去强化原始模型的能力
也就是没有训练原始的模型
而是直接在token选择的阶段做干预
这个角度就是在工程测作
然后也很聪明
好这期视频就给大家介绍到这

來源:transcript.txt

本次執行流程與問題處理

  1. 下達指令

    指令:videonote https://b23.tv/iCBpyqs --language zh --auto-source-subtitles

    來源:https://b23.tv/iCBpyqs

    辨識語言:zh | 參數:--language zh --auto-source-subtitles

  2. 預期流程

    依指令產生的處理順序:

    1. 自動字幕優先,Whisper 作為備援
    2. 來源選擇與品質檢查
    3. 文字校正與句子單元
    4. 筆記與發布
    5. 公開網頁發布
  3. 1. 下載與語音辨識

    工具:videonote-transcribe-url(主辨識管線:下載、Whisper 辨識與選稿)

    處理:下載音訊、以 Whisper 辨識並選出最佳逐字稿

    產出:yt_dlp_meta.json(影片元資料)、audio_16k_mono.wav(16kHz 單聲道音訊)、transcript.whisper.json(Whisper 辨識結果)、transcript.json(正式逐字稿)、transcript_selection_report.json(來源選擇報告)

    耗時:48.5 秒

    關係:依序執行

    結果:完成

  4. 2. 全文快速校讀

    工具:videonote_rapid_transcript_review.py

    處理:先速讀完整逐字稿,再修正高可信突兀詞句並列出待確認項目

    產出:rapid_transcript_review_report.json(產出檔案)

    耗時:41.9 秒

    關係:依序執行

    結果:完成

  5. 3. 建立句子單元

    工具:videonote-build-sentence-units

    處理:將逐字稿切成帶時間軸的句子單元

    產出:sentence_units.json(句子單元)

    耗時:0.9 秒

    關係:依序執行

    結果:完成

  6. 4. 句子密度平衡

    工具:videonote_balance_sentence_units.py

    處理:平衡句子長度與密度

    產出:sentence_units.json(句子單元)

    耗時:0.9 秒

    關係:依序執行

    結果:完成

  7. 5. 時間軸稽核

    工具:videonote_timeline_audit.py

    處理:檢查時間軸與音訊對齊

    產出:timeline_audit_report.json(時間軸稽核)

    耗時:1.0 秒

    關係:依序執行

    結果:完成

  8. 6. 品質檢查

    工具:videonote_controlled_quality.py(檢查時間軸與品質)

    處理:檢查語言、時間軸與可讀性品質

    產出:controlled_quality_report.json(品質報告)、language_sanity_report.json(語言檢查)

    耗時:1.0 秒

    關係:依序執行

    結果:完成

  9. 7. 播放時間軸回填

    工具:videonote_rebase_display_timeline.py

    處理:將網頁播放時間軸回填為校正字幕時間

    產出:display_timeline_rebase_report.json(時間軸回填報告)

    耗時:0.0 秒

    關係:依序執行

    結果:完成

  10. 8. 逐字稿交叉檢查

    工具:videonote_cross_check_transcript.py

    處理:交叉檢查逐字稿與來源字幕

    產出:transcript_crosscheck_report.json(交叉檢查)

    耗時:0.1 秒

    關係:依序執行

    結果:完成

  11. 9. 來源句整理

    工具:videonote_prepare_source_entries.py

    處理:整理來源句子供時間軸與頁面使用

    產出:sentence_units.json(句子單元)

    耗時:0.1 秒

    關係:依序執行

    結果:完成

  12. 10. 生成筆記摘要

    工具:videonote-generate-note(生成筆記摘要)

    處理:生成筆記摘要與重點

    產出:note.md(筆記 Markdown)、note.html(筆記 HTML)

    耗時:93.2 秒

    關係:依序執行

    結果:完成

  13. 11. 建立筆記頁面

    工具:videonote-render-html(產生筆記 HTML)

    處理:產生可閱讀的筆記 HTML 頁面

    產出:note.html(筆記 HTML)

    耗時:0.3 秒

    關係:依序執行

    結果:完成

  14. 12. 發布公開頁面

    工具:videonote-publish(發布公開頁面)

    處理:發布到公開網站與每日列表

    產出:公開筆記網址、result.json(管線結果)

    耗時:0.4 秒

    關係:依序執行

    結果:完成

手動來源字幕

自動來源字幕

Whisper 字幕

Qwen 字幕

Parakeet 字幕

MOSS 字幕

聲學時間證據(PyAnnote / WhisperX)

校正前後逐字稿

目前待解決問題與初步改善方向

進一步精進字幕與筆記
使用 Workbench 上傳校正字幕、中文參考稿或回饋 SRT,重新產生雙語與學習單元。
開啟 Workbench