見出し画像

ReazonSpeechで高精度の文字起こしをやってみた

今回は、日本語に特化した音声認識AI「ReazonSpeech」を使って、高精度の文字起こしをやってみました。

ReazonSpeechとは何か、どんな特徴があるか、どうやって使うか、そして使ってみた感想や今後の課題について、この記事で紹介していきます。

ReazonSpeechとは?

ReazonSpeechとは、株式会社レアゾン・ホールディングスが開発した音声認識に関するモデルやデータの総称です。

今回は音声認識モデルについて紹介します。

音声認識モデルとは、音声をテキストに変換するAIのことで、文字起こしや字幕作成などに使われます。

ReazonSpeechの音声認識モデルは、ワンセグ放送の録画データから取得した19,000時間のデータを学習させたモデルで、日本語に特化したモデルと言えます。

このモデルは、商用利用可能で無償で提供されており、Googleコラボなどで簡単に文字起こしを試すことができます。

ReazonSpeechの特徴

ReazonSpeechの音声認識モデルは、日本語に特化したモデルとしては世界最高精度を持っています。

OpenAIのWhisperという有名な音声認識モデルと比較しても、ReazonSpeechはより高い精度を示しています。

様々なデータに対するReazon Speechの精度比較
出典:https://research.reazon.jp/blog/2023-04-04-ReazonSpeech.html

また、ReazonSpeechの特徴としては、パラメータの数が小さくなっている点が挙げられます。

パラメータとは、AIが学習する際に調整する数値のことで、多ければ多いほど複雑な処理ができますが、その分計算量も増えます。

Whisperは非常に大きなパラメータを持っているため、高速な計算機が必要ですが、ReazonSpeechはWhisperのBaseぐらいのパラメータで高い精度を出せるため、比較的低スペックな計算機でも動作させることができます。

Whisperとのパラメータ比較
出典:https://research.reazon.jp/news/reazonspeech.html


ReazonSpeechの使い方

ReazonSpeechで文字起こしする方法は非常に簡単です。

最初にReazonSpeechのモデルや必要なパッケージをインストールします。

!pip install git+https://github.com/nyanta012/ReazonSpeech

import torch
from espnet2.bin.asr_inference import Speech2Text
import librosa
import reazonspeech as rs
from google.colab import files

その後、文字起こししたい動画ファイルをアップロードして、前処理を行います。

uploaded = files.upload()
file_name = list(uploaded)[0]

device = "cuda" if torch.cuda.is_available() else "cpu"

speech2text = Speech2Text.from_pretrained(
  "reazon-research/reazonspeech-espnet-next",
  beam_size=5,
  batch_size=0,
  device=device
)
SAMPLE_RATE = 13000
speech, sample_rate = librosa.load(file_name, sr=SAMPLE_RATE)

最後に、文字起こしした結果をテキストファイルや字幕ファイルとして出力します。

# srt file を作成するための関数
def create_file(file_name="transcribe", file_type="srt"):
    if not file_type in ["srt", "txt"]:
        raise NotImplementedError("ファイル拡張子は[srt, txt]を選択してください。")
    with open(f"{file_name}.{file_type}", mode="w", encoding="utf-8") as f:
        for index, _dict in enumerate(rs.transcribe(speech, speech2text)):
            start_time = _dict.start_seconds
            end_time = _dict.end_seconds
            text = _dict.text
            s_h, e_h = int(start_time//(60 * 60)), int(end_time//(60 * 60))
            s_m, e_m = int((start_time % (60 * 60))//60), int((end_time % (60 * 60))//60)
            s_s, e_s = int(start_time % 60), int(end_time % 60)
            if file_type=="srt":
                f.write(f'{index+1}\n{s_h:02}:{s_m:02}:{s_s:02},000 --> {e_h:02}:{e_m:02}:{e_s:02},000\n{text}\n\n')
            elif file_type=="txt":
                f.write(f'[{s_h:02}:{s_m:02}:{s_s:02} ===> {e_h:02}:{e_m:02}:{e_s:02}] {text}\n')

create_file(file_type="srt")

この手順はすべてGoogleコラボ上で行えるため、自分のパソコンに何かインストールする必要はありません。

また、GoogleコラボではGPUという高速な機械を無料で使うことができるため、文字起こしも早く終わります。

使ってみた感想や今後の課題

ReazonSpeechを使って文字起こしをやってみた感想は、とても高精度で驚きました。

ReazonSpeechは、日本語の発音や文法に合わせて学習されたモデルなので、日本語で文字起こしをしたい人にとっては非常に良いモデルだと思います。

また、パラメータの数が少なくても高精度なので、計算コストが低くて済むというメリットもあります。

しかし、一方で「レアゾン」という単語が「エアゾン」と誤判定されたり、話者が早口だったりすると区切りがうまくできなかったりすることがありました。

また、長い動画に対してどれくらい精度が保たれるかや、Whisperと比較してどれくらい精度が高いかなどは、まだ自分で検証できていない部分があります。

何れにせよ日本企業が自前でAIモデルを開発して、公開するというのは珍しいので、今後も応援していきたいですね。


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