Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于语音识别 (内含自用参数) #228

Open
ailenneko opened this issue Sep 20, 2024 · 2 comments
Open

关于语音识别 (内含自用参数) #228

ailenneko opened this issue Sep 20, 2024 · 2 comments

Comments

@ailenneko
Copy link

ailenneko commented Sep 20, 2024

最近了解到 OpenAI 的 whisper 语音转文本大模型了,于是就用了一下.因为是电脑小白,所以 OpenAI 官方的那些需要部署环境和用命令和代码操控的方式就放弃了,转而试用了一下 faster-whisper 和 WhisperDesktop.

我是想准备拿这个用来生成日本动漫里的日语字幕的,但是我发现用 faster-whisper 怎么也达不到 WhisperDesktop. 那样的生成效果.

WhisperDesktop 方面:

使用的是 ggml-model-whisper-large.bin 模型(说是v3模型,推测应该是 float32 的) 其中另外两个设置是 Wave64, always 和 Don't reshape tensors. 生成速度很快,24分钟的一集番剧2分钟就能生成好,单词识别准确度很高,英文,歌词,语气词全都能拿捏,甚至可以识别出例如关门声,来电声,多人一同发出的声音和内心的想法时的声音,而且标点符号也使用的很好,语气词也90%能捕捉到.简直是每用一次都会有一次惊喜.
缺点就是有时候词语意思会扯远,而且有时候因为用力过头导致直接在字幕前面加上括号说话人括号,乱用内心独白的格式,频繁使用字幕和对话偶尔会对不上,而且有无限循环的可能性(而且这个可能性非常高)

faster-whisper 方面:

分别使用了 float32 和 float16 的 v3 模型,也花费了几十个小时在上面调了很多参数,但就是达不到 WhisperDesktop 那样的效果. VAD 因为非常容易把语气词掐掉所以没开,单词级时间戳这个设置在我这里很"微妙",似乎关闭之后能更准确的识别出语气词和歌词,生成速度也会变快,但是更容易产生像 WhisperDesktop 那样的缺点 幻听静音阈值和静音阈值都设置为0了,搜索耐心设置为了稍微高一点的1.25,gzip压缩比阈值直接设置到了恐怖的12,采样概率阈值设置成了-1.25,循环提示打开,重复惩罚1.2,分块大小这个真的很难设置,这个我感觉最能影响词语准确性和小部分的语气词质量,但是性能开销也是最大的,而且两个数字的差距就能造成很大的质量差别,目前我主要用5,10,18,24,32.10在 float32 的 v3 下约等于 WhisperDesktop 的速度.因为这些设置的简介还是有点太费脑子搞不清楚逻辑所以不知道怎么调啊哈哈哈

faster-whisper 目前我调出来的勉强只能识别出一部分歌词和语气词和英语,似乎这三个不能找到一个很好的平衡点.似乎也不能生成像在字幕开头表示说话人呀内心独白式的文字表现呀为了情感丰富而加很多标点符号之类的效果

我真的很好奇 faster-whisper 可不可以调参数调成像 WhisperDesktop 那样的质量,同时也很好奇 WhisperDesktop 有没有自己的参数,如果有,拿来照搬能不能实现

我的参数:

这是我到现在为止最满意的参数,基本能达到 WhisperDesktop 的水平(除了识别人声之外的声音识别功能之外都能勉强做到了),还有一些缺点:有时候会忽略掉一段的声音,动漫里穿插的歌曲有时候也可能识别不出来

注意:需要以UTC-8保存/加载
该配置文件打开了"使用V3模型"开关,使用其他模型时请关闭

更新时间: JST 2024/9/21 16:16

{
    "theme": "dark",
    "demucs": {
        "overlap": 0.25,
        "segment": 30.0,
        "tracks": 1
    },
    "model_param": {
        "localModel": true,
        "onlineModel": false,
        "model_path": "",
        "modelName": 6,
        "use_v3_model": true,
        "device": 1,
        "deviceIndex": "0",
        "preciese": 5,
        "thread_num": "24",
        "num_worker": "1",
        "download_root": "",
        "local_files_only": true
    },
    "vad_param": {
        "use_VAD": false,
        "threshold": 0.5,
        "minSpeechDuration": "250",
        "minSilenceDuration": "100",
        "maxSpeechDuration": "30",
        "speechPad": "2000"
    },
    "setting": {
        "saveConfig": true,
        "autoLoadModel": false,
        "language": 0,
        "huggingface_user_token": "",
        "autoGoToOutputPage": 2,
        "autoClearTempFiles": false,
        "themeColor": "#cb457d"
    },
    "Transcription_param": {
        "aggregate_contents": false,
        "language": 10,
        "task": false,
        "beam_size": "10",
        "best_of": "5",
        "patience": "1.0",
        "length_penalty": "2.0",
        "temperature": "0.2,0.4,0.6,0.8,1.0",
        "compression_ratio_threshold": "2.4",
        "log_prob_threshold": "-1.0",
        "no_speech_threshold": "0",
        "condition_on_previous_text": true,
        "initial_prompt": "",
        "prefix": "",
        "suppress_blank": true,
        "suppress_tokens": "-1",
        "without_timestamps": false,
        "max_initial_timestamp": "9999999.0",
        "word_timestamps": false,
        "prepend_punctuations": "\"'“¿([{-",
        "append_punctuations": "\"'.。,,!!??::”)]}、",
        "repetition_penalty": "1.0",
        "no_repeat_ngram_size": "0",
        "prompt_reset_on_temperature": "0.5",
        "chunk_length": "30",
        "clip_mode": 0,
        "max_new_tokens": "448",
        "clip_timestamps": "",
        "hallucination_silence_threshold": "0",
        "hotwords": "这是一个日本动漫,请检测出所有语气词,使用更多标点符号来丰富情感,比如省略号,问号,句号,感叹号,破折号(... ? !)",
        "language_detection_threshold": "0.5",
        "language_detection_segments": "1"
    },
    "output_whisperX": {
        "tabMovable": true,
        "tabScrollable": false,
        "tabShadowEnabled": false,
        "tabMaxWidth": 230,
        "closeDisplayMode": 0,
        "whisperXMinSpeaker": 0,
        "whisperXMaxSpeaker": 0,
        "outputFormat": 5,
        "outputEncoding": 1
    }
}

里面的提示词可以替换或者加上角色名字,加了"使用标点符号丰富情感"之类的确实能提高这方面的能力
注意:这个只拿来试过日本动漫,不知道英语和中文以及其他语言的识别质量如何

拿来生成作为参考动漫:

  • 星灵感应 (星屑テレパス)
  • 鹿乃子乃子虎视眈眈 (鹿の子のこ虎視眈々)
  • 不时用俄语小声说真心话的邻桌艾莉同学 (時々ボソッとロシア語でデレる隣のアーリャさん)
  • 败北女角太多了! (負けヒロインが多すぎる!)

星灵感应的语气词比较多,特别是有一个说话容易卡壳的主角,更能考验模型识别的能力(看模型能准确识别出多少个说出来的但又不是完整的单词),鹿乃子对单词准确性比较考究,剩下的则是平均的感觉

追加内容:

  • 2024/9/21 似乎使用"热词/提示词"功能能在不调整性能等其他参数的情况下可以些许增加总体的识别质量
  • 2024/9/21 分块大小似乎从1510的质量都很棒,一直用说话容易卡壳的主角的星灵感应动漫进行测试,似乎5~10以上的采样反而不能识别出一些语气词了,而且对用标点符号来丰富字幕这件事也变得差了一点(特别是?和!和...的使用)
  • 2024/9/21 现在才发现"重复惩罚"惩罚的似乎并不是时间戳与时间戳之间的重复,而是一个时间戳内的内容的重复,调回 1.0 之后之前不会识别的语气词和顿挫也能很好的表现了,标点符号用的也多了,感觉是朝着好的方向进展着,但是这东西调回去之后一段话真的好长,不会断句,就算"惩罚常数"(指数级别的长度惩罚常数)开到最高32也还是一点变化都没有,难道这个不是限制句子长度的参数...? 既然"重复惩罚"会删掉一些语气词,那我打开"单词级时间戳"是不是也不会产生什么较大的影响,而且还能提升识别精度?这就去试试
@CheshireCC CheshireCC pinned this issue Oct 15, 2024
@fishpigbird
Copy link

  • 感谢你分享的配置文件,真的非常棒👍
  • 注意这个配置文件要以utc-8加载,其他编码格式软件不支持
  • 上文配置文件打开了“模型参数”V3开关,如果是Medium模型,请关闭,否则用不了。
  • 建议再手动打开“单词级时间戳”,我这里测试Medium,如果不打开,时间戳有点平移的偏差。但是打开后,几乎完美匹配时间戳。
  • 我还改了模型识别语言到英语,同时把prompt翻译成了英语,指向了<目标语言>,其他内容都是按照楼主的设定翻译的。(prompt改成英文不知道是否会增强识别效果。)
    • This is a English anime, please detect all inflections and use more punctuation to enrich the emotion, such as ellipses, question marks, full stops, exclamation points, dashes(...) ? !
  • 这样识别出来后,动漫开头是对话,正常识别了。然后进入开头曲,一句也没识别,很好。然后识别后文,内容正确,并且时间戳准确率在90%-95%,如果不是强迫症,完全不需要手动调整了。

@ailenneko
Copy link
Author

嗯...这么说来,我这个配置文件很有可能只是对large-v3的float32版本进行特调的配置文件,还没考虑过其他模型的效果
(比较可惜的是 现在我看动漫一般都会找有中日双语字幕的了,可能以后不太会用到这个 所以配置文件不能及时更新了)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants