yeyupiaoling/Whisper-Finetune

whisper large v3 Fine-Tune 後變得不太能辨識語音

Closed this issue · 28 comments

Fine-Tune 前

[0.00s > 18.94s] 大家報告一下上週的進度
[19.20s > 21.50s] 上週主要在PPC
[21.76s > 26.12s] AVAP這邊是用那個AML模型建立生存的
[26.12s > 29.20s] 預測模型來看它的效果
[29.44s > 31.24s] 那一開始就是如上週報告
[31.50s > 34.56s] 有測試的就是不同初始值會對模型的影響
[34.82s > 36.10s] 這邊是使用同一個
[36.36s > 37.90s] 深度的模型來測試
[38.40s > 41.22s] 那測試的結果是明顯的
[41.48s > 45.06s] 初始的權重會對模型的表現性影響很大
[45.58s > 46.86s] 那這邊
[47.12s > 49.68s] 分別就是使用了三種不同的初始權重
[50.18s > 54.54s] 那他們雖然在同一個架構一層的hidden layer下面
[54.80s > 55.30s] 他們的
[55.56s > 56.08s] 表現性
[56.38s > 57.66s] 還是有明顯的不同
[58.94s > 60.48s] 等於說這是什麼專案
[60.72s > 61.76s] 這個是
[62.00s > 64.06s] 這邊是用
[64.56s > 65.84s] PVTC的
[66.10s > 66.62s] 數據
[67.12s > 69.44s] 你現在在研究的這個專案是哪一個
[69.68s > 70.46s] 現在
[70.96s > 72.24s] 這個的專案就是
[72.76s > 77.12s] 因為PVTC跟VAEP都要想要用CVAE的生成方式
[77.62s > 83.26s] 但是因為CVAE那邊生成的數據還是需要一個模型去驗證
[83.52s > 85.04s] 出來它的數據預測準不準
[85.56s > 86.08s] 那目前就是
[86.32s > 87.92s] 生成這邊就先放置然後來
......

Fine-Tune 後

[21.76s > 25.86s] ,
[25.86s > 55.86s] 的預測模型來看它的效果 那測試的結果是 明顯的初始的權重會對模型的表現性影響很大 那這邊分別就是使用的三種不同的初始權重 那他們雖戾一層的械類的下面 他們的表現

Fine-Tune 輸入資料格式

# decode 前
[ 50258, 50260, 50359, 50363, 25583, 5000, 13331, 252, 4511, 5884, 44, 25729, 27735, 50257 ]
# decode 後
'<|startoftranscript|><|zh|><|transcribe|><|notimestamps|>還是他塞到我們MongoDB<|endoftext|>'

相關套件版本

numba
numpy>=1.23.1
soundfile>=0.12.1
librosa>=0.10.0
dataclasses>=0.6
transformers>=4.35.0
bitsandbytes>=0.41.0
datasets>=2.11.0
evaluate>=0.4.0
ctranslate2>=3.21.0
faster-whisper>=0.10.0
jiwer>=2.5.1
peft>=0.6.2
accelerate>=0.21.0
zhconv>=1.4.2
tqdm>=4.62.1
soundcard>=0.4.2
uvicorn>=0.21.1
fastapi>=0.95.1
starlette>=0.26.1
tensorboardX>=2.2
tiktoken==0.3.3
openai-whisper>=20231117
notebook==6.5.4
jupyterlab==4.0.2
pydub>=0.25.1
openpyxl>=3.1.2
setuptools-rust
more-itertools

這個流程在 fine-tune whisper-large-v2 都沒什麼問題,但是換成 large-v3 的時候就會出現上述的問題,請問我到底是哪個環節出了問題?

如果在whisper-large-v2 没有问题,那数据应该是没有问题的,出现你这个种情况,我也不太清楚是什么原因。
你的数据带有时间戳吗?

如果在whisper-large-v2 没有问题,那数据应该是没有问题的,出现你这个种情况,我也不太清楚是什么原因。 你的数据带有时间戳吗?

我的數據沒有帶時間戳記,但就算沒帶時間戳記應該也不會爛成這個樣子 @@

你是不是源码安装的Transformers?不知道是不是这个的原因。

Transformers

我是直接用 pip3 install transformers==4.35.0

Transformers

我是直接用 pip3 install transformers==4.35.0

试试源码安装,训练一次看看。

Transformers

我是直接用 pip3 install transformers==4.35.0

试试源码安装,训练一次看看。

好的 我試完了結果再公布到這兒

我的large-v3辨識出來都是 "........,,,,,,!!!?????"之類的,但是tiny的版本是可以辨識出中文的

你可以试试我微调后的模型

你可以试试我微调后的模型

那樣確實沒問題,但我想知道不能跑的原因在哪~

估计是模型的问题,很多人都反映这个问题

我这里也是,前几周的微调结果都正常,现在微调后的结果变得几乎不可用,目前回忆到的变量是Transformers没有从源码安装

我这边两台服务器,之前的环境:transformers==4.36.0.dev0,都是源码安装
上周我将其中一台通过pip install git+https://github.com/huggingface/transformers 升级到了4.37.0,微调后的识别结果就不可用了,会出现空白和连续重复的字符:

Reg: [' don don of� in two two two two two aut зв зв grad звaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryary rel звrage rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel relrageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerage']
Ref: ['单是看两队实力不相伯仲的组合']

另一台还在进行训练,checkpoint的识别结果都是正常的。
模型一直是本地加载的Whisper-large-v3,数据处理格式也没有变(我不清楚ensure_ascii=False是否有影响),以下是其中一条数据:

{'audio': {'path': '/data/xxx/wavs/cantonese/wavs/train/datatang500h00000232-1123412-1132395-C1.wav'}, 'sentence': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅', 'language': 'yue', 'sentences': [{'start': 0, 8.98, 'text': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅'}], 'duration': 8.98}

我目前能回忆到的唯一改变就是transformers库的改动了

我这边两台服务器,之前的环境:transformers==4.36.0.dev0,都是源码安装
上周我将其中一台通过pip install git+https://github.com/huggingface/transformers 升级到了4.37.0,微调后的识别结果就不可用了,会出现空白和连续重复的字符:

Reg: [' don don of� in two two two two two aut зв зв grad звaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryary rel звrage rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel relrageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerage']
Ref: ['单是看两队实力不相伯仲的组合']

另一台还在进行训练,checkpoint的识别结果都是正常的。
模型一直是本地加载的Whisper-large-v3,数据处理格式也没有变(我不清楚ensure_ascii=False是否有影响),以下是其中一条数据:

{'audio': {'path': '/data/xxx/wavs/cantonese/wavs/train/datatang500h00000232-1123412-1132395-C1.wav'}, 'sentence': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅', 'language': 'yue', 'sentences': [{'start': 0, 8.98, 'text': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅'}], 'duration': 8.98}

我目前能回忆到的唯一改变就是transformers库的改动了

我看你数据集格式是没有问题的,我一直是使用 transformers==4.36.0.dev0 这个版本来微调V3版本

应该是这个版本,有空的时候我查一下我电脑的版本是多少

我这边两台服务器,之前的环境:transformers==4.36.0.dev0,都是源码安装 上周我将其中一台通过pip install git+https://github.com/huggingface/transformers 升级到了4.37.0,微调后的识别结果就不可用了,会出现空白和连续重复的字符:

Reg: [' don don of� in two two two two two aut зв зв grad звaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryaryary rel звrage rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel rel relrageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerageragerage']
Ref: ['单是看两队实力不相伯仲的组合']

另一台还在进行训练,checkpoint的识别结果都是正常的。 模型一直是本地加载的Whisper-large-v3,数据处理格式也没有变(我不清楚ensure_ascii=False是否有影响),以下是其中一条数据:

{'audio': {'path': '/data/xxx/wavs/cantonese/wavs/train/datatang500h00000232-1123412-1132395-C1.wav'}, 'sentence': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅', 'language': 'yue', 'sentences': [{'start': 0, 8.98, 'text': '佢系通過一種抽象同埋一種呢啲怪異即一種啊即只可理喻不可解釋嘅'}], 'duration': 8.98}

我目前能回忆到的唯一改变就是transformers库的改动了

我目前是使用 transformers==4.36.0 用 pip 安裝的,但是我的 ctranslate2 是源碼安裝,(因為要在 cuda12 的環境下執行)執行出來的結果是 large-v2 lora finetune後沒什麼問題,但 large-v3 在 lora finetune 後辨識音檔的開頭一定會出現亂碼,要辨識到音檔的 20幾秒之後才會正常輸出,即便我已經把 language 設定成 'zh' 了還是這樣

另外 我發現 只要使用 timestamp 下去 finetune,出來的結果都會出現亂碼或跳針現象

範例1

A-FIN這個地方七十五 We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-P-P-P-P-P-P-P-P-P-P-P-P-P-P-PP-PP-P-PP-CP-C-C-R說說說成理 

範例2

那就直接加到 他就直接加住 APS就直接加住 APS就直接加住 APS就直接加住 APS就直接講了 APS就直接講她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她

另外 我發現 只要使用 timestamp 下去 finetune,出來的結果都會出現亂碼或跳針現象

範例1

A-FIN這個地方七十五 We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-P-P-P-P-P-P-P-P-P-P-P-P-P-P-PP-PP-P-PP-CP-C-C-R說說說成理 

範例2

那就直接加到 他就直接加住 APS就直接加住 APS就直接加住 APS就直接加住 APS就直接講了 APS就直接講她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她

使用timestamp指的是训练参数中指定timestamps=True吗

另外 我發現 只要使用 timestamp 下去 finetune,出來的結果都會出現亂碼或跳針現象
範例1

A-FIN這個地方七十五 We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-We-P-P-P-P-P-P-P-P-P-P-P-P-P-P-PP-PP-P-PP-CP-C-C-R說說說成理 

範例2

那就直接加到 他就直接加住 APS就直接加住 APS就直接加住 APS就直接加住 APS就直接講了 APS就直接講她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她的APS 她

使用timestamp指的是训练参数中指定timestamps=True吗

對喔

@bardenthenry 你试试下载最新的 v 2 模式。再训练看看,会不会跟 v3 同样的问题

@bardenthenry 你试试下载最新的 v 2 模式。再训练看看,会不会跟 v3 同样的问题

您是說 更新一下 huggingface 的 larfe-v2 模型嗎?因為我看您的 code 只有上周更新了 readme.md 而已

@bardenthenry
請問你中英混的句子
有特別 assign 什麼 "language"
感謝!

@bardenthenry 請問你中英混的句子 有特別 assign 什麼 "language" 嗎 感謝!

我還是強制請他用 zh 來做

@bardenthenry 你试试下载最新的 v 2 模式。再训练看看,会不会跟 v3 同样的问题

我發現還有其他問題 V2 finetune 在辨識逐字稿句子的segment 時間的時候,會出現這種長度只有幾百 ms 但預測出來句子很長,進去完整的因檔直接聽發現還是有這些與句,這樣代表他的 timestamp 有時候會誤判 @@

我的实验结果(large-v3)暂时正常了,目前来看很可能是peft库的问题,bitsandbytes也有可能。我将大部分库都回退到了2023年11月15日之前的commit,现在基本不会出现乱码现象。
peft==0.6.3.dev0
transformers==4.36.0.dev0
bitsandbytes==0.41.3

我的实验结果(large-v3)暂时正常了,目前来看很可能是peft库的问题,bitsandbytes也有可能。我将大部分库都回退到了2023年11月15日之前的commit,现在基本不会出现乱码现象。 peft==0.6.3.dev0 transformers==4.36.0.dev0 bitsandbytes==0.41.3

image
看起來更悲慘了 @@

@bardenthenry 建議可以用 large-v2
我目前用下來比v3穩定很多