Whisper ではサイズの異なる5種類の学習済みモデルが公開されています.これをダウンロードして読み込むと,簡単に音声認識を実行できます.サイズの大きな学習済みモデルでは高い精度で認識が可能です.その一方で認識には多くの時間を要し,実行時の消費メモリも大きくなるので注意が必要です.
利用できるモデルの一覧は次のとおりです.なお,消費メモリや実行時間は M1 Max チップ(32GBメモリ)搭載の Mac Studio でおよそ30秒の音声データを認識した結果です.搭載メモリの小さなPCでサイズの大きなモデルを利用すると,計算できなかったり,計算に長時間かかる可能性があります.
モデル |
ファイルサイズ |
パラメータ数 |
消費メモリ |
実行時間 |
---|---|---|---|---|
tiny | 72MB | 3900万 | 100MB | 7秒 |
base | 139MB | 7400万 | 500MB | 3秒 |
small | 461MB | 2億4400万 | 1.3GB | 15秒 |
medium | 1.42GB | 7億6900万 | 3.5GB | 45秒 |
large | 2.87GB | 15億5000万 | 6.5GB | 80秒 |
それでは実際に音声認識を行います.今回利用した音声データは audio.m4a ファイルで,プログラムと同じフォルダに置いているものとします.なお,.m4a 形式以外にも .mp3 など多くのファイル形式で認識できるようです.まずは whisper をインポートします.
import whisper
次に最も小さな tiny モデルを読み込みます.初めて実行するときには学習済みモデルがダウンロードされます.なお,ダウンロードされた学習済みモデルは Mac では ~/.cashe/whisper/ に,Windows では C:\Users\UserName\.cache\whisper\ に保存されます.
model = whisper.load_model('tiny')
100%|█████████████████████████████████████| 72.1M/72.1M [00:02<00:00, 33.6MiB/s]
音声認識を実行します.なお,%%time
は実行時間を計測するためのマジックコマンドです.
%%time
result = model.transcribe('audio.m4a', fp16=False)
CPU times: user 6.56 s, sys: 1.85 s, total: 8.41 s Wall time: 5.02 s
認識結果を確認します.
print(result['text'])
パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。овd
なお,result
には次のような結果が格納されています.
print(result)
{'text': 'パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。小さいアイスタムオブジェクトでは、独製とメソットを作成することができるようになりました。独製とメソットを作成することができるようになります。', 'segments': [{'id': 0, 'seek': 0, 'start': 0.0, 'end': 11.5, 'text': 'パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。', 'tokens': [23268, 8040, 42668, 4824, 9581, 31348, 3065, 18743, 28889, 14655, 28571, 10825, 7588, 1550, 243, 9249, 9581, 31348, 2972, 2257, 9335, 4767, 1543, 23268, 8040, 42668, 4824, 16719, 33188, 22381, 7355, 5196, 95, 33188, 3203, 7594, 2659, 28043, 2996, 5998, 18743, 28889, 14655, 28571, 10825, 7588, 3193, 8822, 3416, 109, 11267, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 1, 'seek': 0, 'start': 11.5, 'end': 16.98, 'text': '生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。', 'tokens': [8244, 33188, 39823, 2972, 18743, 28889, 14655, 28571, 10825, 7588, 7355, 12376, 40498, 2972, 18743, 28889, 14655, 28571, 10825, 7588, 3203, 7594, 49261, 45032, 3203, 44726, 5142, 23700, 9254, 2474, 22851, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 2, 'seek': 0, 'start': 16.98, 'end': 20.98, 'text': '独自のカスタムオブジェクトを作成することもできます。', 'tokens': [18637, 105, 9722, 2972, 10111, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 5998, 11914, 11336, 22570, 13235, 4801, 2474, 22851, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 3, 'seek': 0, 'start': 20.98, 'end': 29.5, 'text': 'このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。', 'tokens': [13303, 10111, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 16719, 1231, 18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 12088, 37430, 8822, 4035, 2889, 3193, 11386, 2474, 23131, 13876, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 19420, 1543], 'temperature': 0.0, 'avg_logprob': -0.2949866524225549, 'compression_ratio': 1.9453125, 'no_speech_prob': 0.13070355355739594}, {'id': 4, 'seek': 2950, 'start': 29.5, 'end': 36.5, 'text': '小さいアイスタムオブジェクトでは、独製とメソットを作成することができるようになりました。', 'tokens': [7322, 19557, 12817, 8040, 9550, 12144, 32026, 18743, 28889, 14655, 28571, 10825, 7588, 16719, 1231, 18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 11914, 11336, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 36941, 1543], 'temperature': 0.4, 'avg_logprob': -0.9031797315253586, 'compression_ratio': 1.7796610169491525, 'no_speech_prob': 0.0367562472820282}, {'id': 5, 'seek': 2950, 'start': 36.5, 'end': 43.5, 'text': '独製とメソットを作成することができるようになります。', 'tokens': [18637, 105, 8083, 121, 3193, 21647, 42668, 31978, 5998, 11914, 11336, 22570, 13235, 5142, 43200, 4895, 17010, 22615, 19420, 1543], 'temperature': 0.4, 'avg_logprob': -0.9031797315253586, 'compression_ratio': 1.7796610169491525, 'no_speech_prob': 0.0367562472820282}], 'language': 'ja'}
モデル名を変更するだけでサイズの異なるモデルで実行が可能です.例えば base
モデルに変更してみます.
model = whisper.load_model('base')
result = model.transcribe('audio.m4a', fp16=False)
全てのモデルで実行した認識結果をまとめます.この結果を見る限り,small 以上のモデルが良さそうです.
モデル |
認識結果 |
---|---|
tiny | パイソン現語はオブジェクト仕方現語の一つです。パイソンでは数字や関数などすべてをオブジェクトとして扱います。生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、独製とメソットを定義して人まと目で管理することができるようになります。овd |
base | パイソン言語はオブジェクト 四高言語の一つですパイソンでは数値や関数などを全てをオブジェクトとして扱います生数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます独自のカスタムオブジェクトを作成することもできますこのカスタムオブジェクトでは続生とメソッドを定義して人まとめで管理することができるようになりますこのカスタムオブジェクトを作成することもできます |
small | Python言語はオブジェクト思考言語の一つです.pythonでは数値や関数など全てをオブジェクトとして扱います.整数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます.独自のカスタムオブジェクトを作成することもできます.このカスタムオブジェクトでは属性とメソッドを定義して一まとめで管理することができるようになります. |
medium | Python 言語はオブジェクト指向言語の一つです Python では数値や関数などすべてをオブジェクトとして扱います 整数型のオブジェクトやリストのオブジェクトなど様々なものが利用できます 独自のカスタムオブジェクトを作成することもできます このカスタムオブジェクトでは属性とメソッドを定義して 一まとめで管理することができるようになりますご覧いただきありがとうございます |
large | Python言語はオブジェクト思考言語の一つです。Pythonでは数値や関数などすべてをオブジェクトとして扱います。整数型のオブジェクトやリストのオブジェクトなど、様々なものが利用できます。独自のカスタムオブジェクトを作成することもできます。このカスタムオブジェクトでは、属性とメソッドを定義して、数値とメソッドのまとめで管理することができるようになります。 |