当前位置:   article > 正文

OpenAI开源的能识别99种语言的语音识别系统——whisper_多语言语音识别

多语言语音识别

OpenAI 最近发布了一个名为 Whisper 的语音识别模型。与 DALLE-2 和 GPT-3 不同,Whisper 是一个免费的开源模型。
——1——
什么是Whisper语言识别模型
Whisper 是一种自动语音识别模型,基于从网络上收集的 680,000 小时多语言数据进行训练。根据 OpenAI的介绍,该模型对口音、背景噪音和技术语言具有很好的鲁棒性。此外,它还支持 99 种不同语言的转录和从这些语言到英语的翻译。

Whisper 架构是一种简单的端到端方法,实现为利用Transformer模型的编码器-解码器。输入音频被分成 30 秒一段的模块,然后转换成 log-Mel 频谱图,然后传递到编码器。编码器来计算注意力,最后把数据传递给解码器,解码器被训练来预测相应的文本,并添加特殊标记,这些标记用来单个模型执行诸如语言识别、多语言语音转录和英语语音翻译等任务。

Whisper transformer框架
可以看到Whisper 架构是一个标准的Transformer模型框架,可见Transformer模型的应用之广。

  1. 更多Transformer模型
  2. VIT 模型
  3. SWIN Transformer模型
  4. 参考头条号:人工智能研究所

动图封面

动图详解Transformer模型--NLP领域的变形金刚6.3 万播放 · 103 赞同视频​编辑​


其他现有方法经常使用更小、更紧密配对的音频文本训练数据集,或使用广泛但无监督的音频预训练。而Whisper 是在一个庞大而多样的数据集上训练的,并且没有针对任何特定的数据集进行微调,所以它不会击败专门研究 LibriSpeech 性能的模型。然而,当我们在许多不同的数据集上测量 Whisper 的零样本性能时,发现它比那些模型更加稳健,并且错误率降低了 50%。

Whisper 的音频数据集大约有三分之一是非英语的,它交替执行以原始语言转录或翻译成英语的任务。发现这种方法在学习语音到文本的翻译任务方面特别有效,并且优于SOTA模型的 CoVoST2 英语翻译零样本监督模型。
——2——
Whisper语音识别模型代码实战

Whisper支持5种不同的模型尺寸
Whisper支持5种不同的模型尺寸,其中前四种针对英文版本,我们可以先用一段英文版本的语音来测试一下

  1. !pip install --upgrade pytube
  2. !pip install git+https://github.com/openai/whisper.git –q
  3. import whisper
  4. import pytube
  5. #https://github.com/openai/whisper


首先我们安装pytube与whisper,pytube 主要的功能是从YouTube上面下载相关的视频,当然同时也支持下载视频中的音频
然后我们随便找一段英文的视频,并复制其链接地址,然后插入如下代码

  1. video = "https://www.youtube.com/watch?v=-7E-qFI"
  2. data = pytube.YouTube(video)
  3. audio = data.streams.get_audio_only()
  4. audio.download()


代码执行完成后,会自动下载此视频文件的音频文件,下载的为MP4文件,其实是只有音频的文件
这里简单提一下pytube库,此库可以下载YouTube的视频与音频文件,当然上面的代码是下载音频文件,下面的代码可以下载视频文件

  1. import pytube
  2. yt = pytube.YouTube('https://www.youtube.com/watch?v=-LIIf7E-qFI')
  3. yt.streams.filter(file_extension='mp4')
  4. [<Stream: itag="18" mime_type="video/mp4" res="360p" fps="24fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">,
  5. <Stream: itag="22" mime_type="video/mp4" res="720p" fps="24fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">,
  6. <Stream: itag="136" mime_type="video/mp4" res="720p" fps="24fps" vcodec="avc1.64001f" progressive="False" type="video">,]


可以看到视频的相关配置文件信息,我们可以从中选择不同的配置进行下载(720p)
stream = yt.streams.get_by_itag(22) #选择720p视频下载
stream.download()
言归正传,我们下载完成视频文件后,就可以使用whisper模型来进行语音识别任务了

  1. model = whisper.load_model("medium")
  2. text = model.transcribe("11.mp4")
  3. text['text']


从whisper的模型可知,其模型开源了5种模型,可以自行选择,然后把我们下载的音频文件直接使用model.transcribe("11.mp4")代码,模型便可以自动识别,并打印出识别出来的txt文本

  1. I don't know who you are.
  2. I don't know what you want. If you are looking for ransom,
  3. I can tell you I don't have money. But what I do have are a very particular set of skills.
  4. Skills I have acquired over a very long career. Skills that make me a nightmare for people like you.
  5. If you let my daughter go now, that will be the end of it.
  6. I will not look for you. I will not pursue you. But if you don't,
  7. I will look for you. I will find you. And I will kill you. Good luck.

动图封面

源视频字幕

可以看到,模型识别效果极高,针对本段音频,其识别正确率为100%,当然模型支持99种语言,大家可以使用模型来识别不同语言的语音。

模型识别精度对比

  1. 模型训练数据
  2. 当然,模型除了识别英文语音外,还可以识别其他语言,
  3. 我们这里使用一个中文语音,当然这里顺便我们把中文语音识别完成后,再翻译成中文
  4. import ipywidgets as widgets
  5. languages = {"af_za": "Afrikaans", "am_et": "Amharic", "ar_eg": "Arabic", "as_in": "Assamese", "az_az": "Azerbaijani", "be_by": "Belarusian", "bg_bg": "Bulgarian", "bn_in": "Bengali", "bs_ba": "Bosnian", "ca_es": "Catalan", "cmn_hans_cn": "Chinese", "cs_cz": "Czech", "cy_gb": "Welsh", "da_dk": "Danish", "de_de": "German", "el_gr": "Greek", "en_us": "English", "es_419": "Spanish", "et_ee": "Estonian", "fa_ir": "Persian", "fi_fi": "Finnish", "fil_ph": "Tagalog", "fr_fr": "French", "gl_es": "Galician", "gu_in": "Gujarati", "ha_ng": "Hausa", "he_il": "Hebrew", "hi_in": "Hindi", "hr_hr": "Croatian", "hu_hu": "Hungarian", "hy_am": "Armenian", "id_id": "Indonesian", "is_is": "Icelandic", "it_it": "Italian", "ja_jp": "Japanese", "jv_id": "Javanese", "ka_ge": "Georgian", "kk_kz": "Kazakh", "km_kh": "Khmer", "kn_in": "Kannada", "ko_kr": "Korean", "lb_lu": "Luxembourgish", "ln_cd": "Lingala", "lo_la": "Lao", "lt_lt": "Lithuanian", "lv_lv": "Latvian", "mi_nz": "Maori", "mk_mk": "Macedonian", "ml_in": "Malayalam", "mn_mn": "Mongolian", "mr_in": "Marathi", "ms_my": "Malay", "mt_mt": "Maltese", "my_mm": "Myanmar", "nb_no": "Norwegian", "ne_np": "Nepali", "nl_nl": "Dutch", "oc_fr": "Occitan", "pa_in": "Punjabi", "pl_pl": "Polish", "ps_af": "Pashto", "pt_br": "Portuguese", "ro_ro": "Romanian", "ru_ru": "Russian", "sd_in": "Sindhi", "sk_sk": "Slovak", "sl_si": "Slovenian", "sn_zw": "Shona", "so_so": "Somali", "sr_rs": "Serbian", "sv_se": "Swedish", "sw_ke": "Swahili", "ta_in": "Tamil", "te_in": "Telugu", "tg_tj": "Tajik", "th_th": "Thai", "tr_tr": "Turkish", "uk_ua": "Ukrainian", "ur_pk": "Urdu", "uz_uz": "Uzbek", "vi_vn": "Vietnamese", "yo_ng": "Yoruba"}
  6. selection = widgets.Dropdown(
  7. options=[("Select language", None), ("----------", None)] + sorted([(f"{v} ({k})", k) for k, v in languages.items()]),
  8. value="ko_kr",
  9. description='Language:',
  10. disabled=False,
  11. )
  12. selection
  13. 首先,这里我们需要选择我们识别的语音是那个语言
  14. lang = selection.value
  15. language = languages[lang]
  16. assert lang is not None, "Please select a language"
  17. print(f"Selected language: {language} ({lang})")
  18. 这里,我们选择Chinese
  19. # Selected language: Chinese (cmn_hans_cn)
  20. import pandas as pd
  21. pd.options.display.max_rows = 100
  22. pd.options.display.max_colwidth = 1000
  23. audio = '2233.mp3'
  24. transcriptions = []
  25. translations = []
  26. options = dict(language=language, beam_size=5, best_of=5)
  27. transcribe_options = dict(task="transcribe", **options)
  28. translate_options = dict(task="translate", **options)
  29. transcription = model.transcribe(audio, **transcribe_options)["text"]
  30. translation = model.transcribe(audio, **translate_options)["text"]
  31. transcriptions.append(transcription)
  32. translations.append(translation)
  33. data = pd.DataFrame(dict(
  34. transcription=transcriptions, translation=translations))
  35. data


这里,我们使用一段中文语音,并设置task为transcribe,意思是语音识别,另外设置一个task为translate,意思是翻译,最后模型识别出语音,也会自动翻译其中文到英文

transcriptiontranslation
0你可将此文本替换为所需的任何文本。你可在此文本框中编写或在此处粘贴你自己的文本。请尽情使用文本转语音功能。You can replace this document with any other document you need. You can write or paste your own documents in this document box. Please use the text translation feature.


模型可以识别的99种语音如下,大家可以根据自己的应用选择不同的模型与语音

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/418397
推荐阅读
相关标签
  

闽ICP备14008679号