音声認識AIのWhisperは方言を理解できるか

こんにちは、serizawaです。すっかりしばれる季節になってきましたね。この記事は「[岩手県立大学とか、岩手の人たち Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ipu)」22日目の記事になります。この記事では今年登場したWhisperという音声認識システムを使い、岩手県民の協力を得て方言の認識を行ってみました。

# Whisperのすごいところと方言

今年の9月にOpenAIからWhisperという音声認識システムが発表されました。[公式サイト](https://openai.com/blog/whisper/)によると、Whisperは人間レベルのロバスト性と音声認識精度を持つニューラルネットワークであり、オープンソース化されています。このシステムではWeb上から収集した68万時間分もの多言語データで学習を行っており、専門用語に対する堅牢性も向上させているそうです。

私がこのシステムですごいなと思ったのは、音声データで学習させたモデルが公開されている点です。音声データは特にオープンになることが少ないため、これまで学習済みモデルが広く一般向けに公開されていることは少ないという課題がありました。Whisperによって一般の人が誰でも大規模学習済みモデルを使えるようになったことは、今後音声認識の活用がより一般に広まる機会になるのではないでしょうか。

このような非常に優秀そうなモデルが公開された際、「このモデルはどこまで専門性の高い音声認識に対応できるのだろうか」という疑問が湧きました。従来の大規模データによる音声認識の課題として、特定の条件下で使われる言葉を多く学習するため、その条件以外の専門性の高い会話 (大学の講義や方言での会話など) は正しく認識が行えないという課題がありました。一方、そのような専門性の高い会話の書き起こしや意訳の需要もあることから、用途に合わせた学習モデルの構築などの研究がなされています。

例）
・[津軽弁をAIで自動文字化　弘前大、標準語訳へ前進](https://www.nikkei.com/article/DGXMZO27091550Z10C18A2CR8000/)
・[遠野方言音声の収録と方言音声活用のための情報技術研究](https://www.soft.iwate-pu.ac.jp/project/%E9%81%A0%E9%87%8E%E6%96%B9%E8%A8%80%E9%9F%B3%E5%A3%B0%E3%81%AE%E5%8F%8E%E9%8C%B2%E3%81%A8%E6%96%B9%E8%A8%80%E9%9F%B3%E5%A3%B0%E6%B4%BB%E7%94%A8%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%83%85%E5%A0%B1/)

今回検証するWhisperは従来の学習モデルと異なり、Web上からデータを持ってきているため特定の条件に偏っていないと思われ、また公式サイトでも専門用語に対する対応も可能とうたっていることから、実際にどの程度認識できるか試してみました。

# Whisperのインストールと実行コード

Whisperはコマンド二つで導入できました。
今回は[こちらの記事](https://qiita.com/tatefuku_hiroshi/items/f060052856dcc2918e69)で紹介されている、large-v2という大きいモデルを入れています。

```
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
pip install ffmpeg-python
```

認識では以下のコードを実行しました。
今回はどのご家庭にもある一般的なGPU環境 (RTX3070) で実行しているため気になりませんでしたが、もしCPU環境で実行する場合はかなり時間がかかったりするらしいです。

`sample_path`のパスを変えてあげれば好きな音声データで認識ができます。
非常にシンプルなコードで結果が出せて感動しました。

```python
import whisper

model = whisper.load_model("large-v2")

sample_path = "../data/sample_01.mp3"
sample_result = model.transcribe(sample_path, verbose=True, language="ja")
```

# 使用した音声と認識結果

今回は学生時代のラボの友人 (岩手出身) に協力を得て方言音声を録音しました。話者曰く、今の岩手県奥州市の一部で使われている、方言の中でも独自性の強い方言らしいです。
音声は以下の動画の通り4つの発話を取得し、それぞれWhisperに認識させてみました。

### 【音声】

<iframe width="560" height="315" src="https://www.youtube.com/embed/SaX3CMqMx8c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

~~ちょっと何言ってるかわからないっすね~~
かなり独自性の強い方言となっており、言葉もなまりも標準語とは大きく異なっています。

### 【書き起こしと認識結果の比較】
意訳と話してるセリフの書き起こし、認識結果はそれぞれ以下の通りになります。

|Sample No.|意訳|書き起こし|認識結果|
|----------|----|---------|-------|
|01 |こんばんは！もうご飯食べたの？（夕食）まだ食べてないの！？ご飯食わなかった人死んだってよ*1。さぁ、早く食べましょう。|おばんでがす。なにぃ、もう、ままぐ*2ったの？なんた、まだ、ぐってねってか？ままかねやづ、しんだっつぞ。さ、はやくくべ。|おばんでガスー なにもうママ食ったの なんてまだ食ってねってが ママかねーやつ死んだっつーぞー さあ早くくべー|
|02 |何まだ起きてたの？早く、おばけ来るから寝ろ|なに"ぃ、まだ、おぎでたの。はやぐ、もっこ*3くっから、ねろぉ。|何?まだ起きてたの? 早く木刻から寝ろ!|
|03 |だめ、だめ、そんなことやったって。「は」という事もないな*4。何で分からないんだよお前。|わがね、わがね、そんなこどやっだって。はずもねぇなぁー。なんっだ、わがんねぇべ、おめー。|わがねわがねそんなことやったって はずもねーなー なんともわかんねーべお前|
|04 |このペン書ける？無理か。だったら、捨てておいて。|このペンかかさる？わがねか。んだば、なげといて。|このペン書かさる? わかんねえか ダバン投げといて|

*1 地域特有の冗談的なもの
*2 「ぐ」は「く」と「ぐ」の半分くらい
*3 もっこ: 恐らくは蒙古襲来の蒙古のこと。恐ろしいものから派生し、おばけ的な意味で使われる。
*4 意訳: 言うこと聞かないないなー

「おばんでがす」や「わがね、わがね」「このペン書かさる」など方言になっている単語を含む部分を正しく認識できていることが分かります。一方、「まだぐってねってか」を「まだ食ってねってか」、「まだおぎでたの」を「まだ起きてたの」といった、濁点になっているなまりに関しては標準語に直されて認識されています。
これらから、方言の単語はある程度学習されている or 未知語として正しくそのまま認識されている一方、『なまり』は学習データが標準語で学習されていることでそちらの方が予測で優先されているであろうと推測できます。

いずれにしても、かなり高い精度で認識できていることに驚きました。このままでもある程度意味が分かる程度に認識されており、また、なまりが修正されていることから、ちょうど意訳と書き起こしの中間みたいな文章になるのは新しい発見でした。

# まとめ

今回Whisperで方言を認識してみて、かなり良い精度で認識できることが分かりました。また、今回は岩手のごく一部で話されているようなマイナーな方言を入れましたが、Whisperはweb上から学習データを作っていることから、関西弁のような話者の多い方言であれば、もしかしたらもっと良い精度で認識できるのではとも思いました。
さらに、このモデルに対しファインチューニングをすれば、各方言での精度をさらに上げられるのではと考えられ、そうするとちょっとした作業だけで方言の書き起こしや意訳を行えるようになるのではないかと思います (実際に[ファインチューニングっぽいことをしている方](https://zenn.dev/kwashizzz/articles/ml-openai-whisper-ft)も見かけました) 。

以上、お読みいただきありがとうございました。
皆さん、よいお年を！

# 謝辞

今回記事を執筆するにあたり、方言の音声を提供いただいたご学友のデータサイエンティスト、[baibai](https://twitter.com/bai2_25)氏に深く感謝申し上げます。