見出し画像

TOEIC学習にAIを使う試み

背景

  • 世はAIの時代!(前回のつづき、前回は以下のリンクから)

  • 賛否あると思うが、否応無しにAIが日々の生活に浸透していきそうな様相をみせている

    • もう誰も止められないと思われる

  • そんなこともあり、TOEICの学習にも、AIを活かす方法を模索する

    • といっても、現状、公開されているモデルを利用するだけだが

    • 今後、もっと面白いことができるように入門する

直近のやりたいこと

  • Part 2の音声において、「A.」、「B.」、「C.」という音声を削除したい

  • Part 2の音声で「問題」と「正解の応答」の組み合わせの音声を作りたい

    • 特典で付属している書籍もある

    • TOEIC® L&Rテスト精選模試【総合】など

  • 音声認識を使えば、音声の編集をしやすくなると考える

今回、試したモデル

  • 今回、OpenAIの Whisper を試してみた

  • Whisperは、汎用目的のスピーチを認識して文字データにできるモデル

  • 現時点で、コードとモデルの重みが MITライセンス下で公開されている

    • 筆者の誤解、変更の可能性などがあるので、GitHubを参照されたい

Whisper is a general-purpose speech recognition model.
Whisper's code and model weights are released under the MIT License.

https://github.com/openai/whisper

インストール

  • Pythonが入った環境で、以下のコマンド(pip)でインストールできる

  • インストールの詳細はGitHubが参考になる

  • モデルは、初めて使うときに別途、自動的にダウンロードされる

pip install -U openai-whisper

ざっくりと試す(音声認識した文字は伏せている)

  • 公式TOEIC問題集のPart 2の、ある問題を認識させてみる

    • 認識した英語の文字列は伏せているが、正しく認識できている

    • 権利上の問題になる場合がある、問題集のネタバレになる、ので認識した文字を伏せている

  • たったこれでけで、認識した文字列と、セグメント(台詞)ごとの開始時間と終了時間が得られる

    • languageは指定なくても自動で言語が判定されるが、

    • 自動判定は時間がかかるので、音声に含まれる言語が1つで、把握している場合は指定した方がパフォーマンスに有利

  • TSV形式のファイル(他の形式も選択できる)で、認識した文字と時間が出力される

whisper p2.mp3 --language en




  • モデルのサイズをbaseにしてみると

    • (モデルのサイズについては後ほど述べる)

  • なんと、A、B、Cが発音されるタイミングも得られた!

  • これなら、簡単に「A.」、「B.」、「C.」を削除できそう

  • と思ったが、そう簡単ではなかった

whisper p2.mp3 --language en --model base



モデルサイズについて

  • Whisperには、サイズの異なるモデルが複数用意されている

  • 「速度」と「正確性」のトレードオフをして、モデルを選択する

  • 英語専用のバージョンもあり、末尾に「.en」が付く

    • パフォーマンスに有利とのこと

モデルサイズごとに試す

閲覧注意

  • これ以降、TOEIC Programの公式サイトにある参考問題のNo. 7を文字起こしした内容が含まれる

  • 今後、問題を解こうと考えている方にとっては、知りたくない情報を得てしまう可能性がある

  • これ以降を閲覧する前に、以下のURLのページのNo. 7を解くことをお勧めする

  • 本ページの目的は、Whisperの認識精度を確認して、参考情報として公開することだが、権利上、問題になりそうならば削除する

https://www.iibc-global.org/toeic/test/lr/about/format/sample02.html



これ以降の閲覧に注意ください!(詳細は上部)








以下、モデルのサイズごとに、TOEIC Part 2の参考音声を認識した結果である
(他のハイパーパラメーターによっても変化する)


tiny

  • sevenになっているが、7の方が都合がよい

  • この例ではないが「A.」が「8.」と認識されることがあった

  • 問題番号、設問、A、B、Cとセグメントで別れるので扱いやすい

[00:00.000 --> 00:02.340]  Number seven.
[00:02.720 --> 00:04.120]  Where's the new fax machine?
[00:04.860 --> 00:07.520]  A. Next to the water fountain.
[00:08.180 --> 00:10.920]  B. I'll send a fax tomorrow.
[00:11.600 --> 00:13.600]  C. By Wednesday.

tiny.en

  • Aだけセグメントが別になった

[00:00.000 --> 00:02.080]  Number seven.
[00:02.680 --> 00:04.340]  Where's the new fax machine?
[00:05.100 --> 00:05.540]  A.
[00:06.320 --> 00:07.620]  Next to the water fountain.
[00:08.520 --> 00:10.960]  B. I'll send a fax tomorrow.
[00:11.980 --> 00:13.600]  C. By Wednesday.



base

  • sevenではなく、7になった

  • 参考ページの音声では「A.」、「B.」、「C.」のタイミングでセグメントが別にならない

    • 公式問題集でテストしたときは別になったのだが

  • 字幕などを考えると、区切られない方が扱いやすいかもしれないが、

  • 音声を編集する目的では区切ってほしいところ

[00:00.000 --> 00:01.600]  Number 7.
[00:02.540 --> 00:03.880]  Where's the new fax machine?
[00:05.100 --> 00:07.400]  A. Next to the water fountain.
[00:08.360 --> 00:10.800]  B. I'll send a fax tomorrow.
[00:11.760 --> 00:13.500]  C. By Wednesday.

base.en

  • en版の方が扱いづらそう

  • (何かを間違えたかもしれない)

[00:00.000 --> 00:09.960]  Number 7. Where's the new fax machine? A. Next to the water fountain. B. I'll send
[00:09.960 --> 00:13.340]  a fax tomorrow. C. By Wednesday.



small

  • smallでは、再び、sevenになっているが、7の方が都合がよい

  • 選択肢ごとにセグメント化されない

  • baseの方が扱いやすい

[00:00.000 --> 00:10.140]  Number seven. Where's the new fax machine? A. Next to the water fountain. B. I'll send a
[00:10.140 --> 00:13.480]  fax tomorrow. C. By Wednesday.

small.en

  • en版では7

[00:00.000 --> 00:04.000]  Number 7. Where's the new fax machine?
[00:05.360 --> 00:10.860]  A. Next to the water fountain. B. I'll send a fax tomorrow.
[00:11.820 --> 00:13.500]  C. By Wednesday.



medium

  • 選択肢ごとに区切られない

  • smallと同じ

  • GitHubにも、smallとmediumは、大きな差がないと述べられている

We observed that the difference becomes less significant for the small.en and medium.en models.

https://github.com/openai/whisper
[00:00.000 --> 00:10.280]  Number 7. Where's the new fax machine? A. Next to the water fountain. B. I'll send a
[00:10.280 --> 00:13.600]  fax tomorrow. C. By Wednesday.

medium.en

  • en版と無印で変化なし

  • よくみると、タイミングが若干違う

[00:00.000 --> 00:10.180]  Number 7. Where's the new fax machine? A. Next to the water fountain. B. I'll send a
[00:10.180 --> 00:13.540]  fax tomorrow. C. By Wednesday.



large-v3

  • 安定していそう

  • 処理に時間がかかる

[00:00.000 --> 00:03.780]  Number 7. Where's the new fax machine?
[00:05.100 --> 00:07.300]  A. Next to the water fountain.
[00:07.860 --> 00:10.600]  B. I'll send a fax tomorrow.
[00:11.300 --> 00:13.400]  C. By Wednesday.


まとめ

  • モデルのサイズを「base」にすると、速度と正確性のバランスがよさそう

  • 単語単位の時間を得ることができるみたいなので次回、試す

    • セグメント毎の認識では、「A.」「B.」「C.」のタイミングを判定できないことがありそうなので

  • TOEICの音声を認識する例においては、AI(ディープラーニング)ではなく、無音を手掛かりにした解析の方が早くて、正確かもしれない(というのは内緒で)

    • Part 2の音声は、

    • 「設問番号」、「無音」、「問」、「無音」

    • 「A.」、「無音」、「Aの応答」、「無音」

    • 「B.」、「無音」、「Bの応答」、「無音」

    • 「C.」、「無音」、「Cの応答」、「無音」

    • という流れは固定なので

費用面

  • 「ローカルで実行する形式」と「WebのAPI形式」で費用感も比較したいところ



めちゃくちゃ時間を使ってしまった、んなことより、TOEICの勉強せねば…


この記事が気に入ったらサポートをしてみませんか?