【Reazon Speech】世界最高レベルの日本語音声特化の音声認識モデル！　Reazon Speechの使用感と導入方法のまとめ

# はじめに
[Reazon Speech](https://research.reazon.jp/projects/ReazonSpeech/)という日本語音声特化の音声認識用のモデル兼toolkit兼コーパスをご存知でしょうか？
「Reazon Speech」は、レアゾン・ヒューマンインタラクション研究所が開発した高精度な音声認識モデルを中心とするプロダクト群です。
2023年1月18日に公開されました。
それぞれ以下のような特徴があります。（[PR TIMESの記事](https://prtimes.jp/main/html/rd/p/000000003.000102162.html)から引用）

* ReazonSpeech音声認識モデル: OpenAI Whisper※に匹敵する高精度な日本語音声認識モデル。商用利用可
* ReazonSpeechコーパス作成ツール: TV録画データ等から音声コーパスを自動抽出するソフトウェアツール。商用利用可
* ReazonSpeech音声コーパス: 世界最大19,000時間の高品質な日本語音声認識モデル学習用コーパス
* いずれも無償にて公開

ライセンスは学習済みのモデルとコーパス構築ツールキットがApache-2.0で、日本語音声コーパスがCDLA-Sharing-1.0 (ただし利用目的は著作権法３０条の４に定める情報解析に限る)です。

この製品を試してみたところ、日本語の音声認識としてかなり精度がよかったです。
どれくらい精度がよかったかというと、めちゃくちゃ早口で話した以下の文を、完全に話そうとした内容と同じ文章で読み取れたほどでした。


発声した文章：「何言ってるかわかんない感じで話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/mpPY6vvgorU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


日本語の音声認識は英語の音声認識に比べて、学習データ量の不足などが原因で一段階精度が低い印象ですが、音声コーパスから作成した結果、このモデルはとても実用的に感じました。
本記事では、この「Reazon Speech」のどれくらいまで認識できるかの実験とローカルへのインストール方法、実験結果の考察について解説する予定です。
また、[公式サイト](https://research.reazon.jp/projects/ReazonSpeech/)で上記のようなデモ版を簡単に試すことができるので、興味がある人は試してみてください。

## 追記
reazon speechをローカルで使うための環境構築が思った以上に大変だったので、cudaや
espnetなどの環境構築用のDocker環境をgithubで公開しました。
Readmeに従って実行してもらえれば、音声ファイルの音声認識までは行えるはずです。
良ければお使いください。

https://github.com/gyokuro33/reazon_speech


# 実験
## 実験環境
実験には公式サイトのデモとして公開されている音声認識を使用します。
また、マイクとしてはロジクール製の比較的安価な（2000円ぐらい）Webカメラを使用しています。

## 実験内容
速度以外の条件をなるべく同等にするため、実験1~4の発話内容は以下の二文を実験対象としています。
「音声認識をテストします。テスト結果を撮影中」
「適当にこうやって日常会話みたいに話してみる」

また早口言葉では以下の二文を発声しました。
「隣の客はよく柿食う客だ」
「赤巻き貝青巻き貝黄巻き貝」

## 1. ゆっくりめに話す
発声した文章：「音声認識をテストします」
認識結果：「音声認識をテストします」
<iframe width="560" height="315" src="https://www.youtube.com/embed/zTO9fI6DmMY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

発声した文章：「適当にこうやって日常会話みたいに話してみる」
認識結果：「適当にこうやって日常会話みたいに話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/O3HyiYx5Xms" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 2. 日常会話レベルの速度で話す
発声した文章：「音声認識をテストします。テスト結果を撮影中」
認識結果：「音声認識をテストしますテスト結果を撮影中」
<iframe width="560" height="315" src="https://www.youtube.com/embed/BUKvmq-bmWU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

発声した文章：「適当にこうやって日常会話みたいに話してみる」
認識結果：「適当にこうやって日常会話みたいに話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/kaYFZcXt0-A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 3. 早口で話す
発声した文章：「音声認識をテストします。テスト結果を撮影中」
認識結果：「本性認識をテストしますテスト結果を撮影中」
<iframe width="560" height="315" src="https://www.youtube.com/embed/lzPRcvC7crw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

発声した文章：「適当にこうやって日常会話みたいに話してみる」
認識結果：「適当にこうやって日常会話みたいに話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/gohfnBcpWRo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 4. 自分でも何を言っているかわからないかもしれないレベルで話す
発声した文章：「音声認識をテストします。テスト結果を撮影中」
認識結果：「おせん機が先生の立て続けっから成長」
<iframe width="560" height="315" src="https://www.youtube.com/embed/LwUsCv2saUI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

発声した文章：「適当にこうやって日常会話みたいに話してみる」
認識結果：「一緒にこうやって一応帰る手話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/79krKfok-p8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 5. 早口で早口言葉を話す

発声した文章「隣の客はよく柿食う客だ」
認識結果「隣の客はよく書き食う客だ」
<iframe width="560" height="315" src="https://www.youtube.com/embed/bhHSQTWaBFU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

発声した文章：「青巻き貝赤巻き貝黄巻き貝」
認識結果：「青巻き貝や赤巻きが一巻き貝」
<iframe width="560" height="315" src="https://www.youtube.com/embed/m3Zb_C7p5lM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


## 6. 認識の失敗例
発声した文章：「適当にこうやって日常会話みたいに話してみる」
認識結果：「適当にこうやって日曜火曜みたいに話してみる」
<iframe width="560" height="315" src="https://www.youtube.com/embed/5WJ5FV5_P2s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# 導入手順
## 概要
この項では[Reazon Speech]の導入手順を紹介します。
導入手順は[公式サイトのクイックスタート](https://research.reazon.jp/projects/ReazonSpeech/quickstart.html)を参考に、補足情報を追加したものです。
わからないことがあれば公式サイトのクイックスタートを参照してください。

## 1. 仮想環境構築
以下のコマンドで仮想環境を構築する。
環境の名前は適当に。

```
$ python3 -m venv reazon
$ source reazon/bin/activate
```

## 2. ESPnetのセットアップ
必要要件：
Python 3.6.1+
gcc 4.9+ for PyTorch1.0.0+
Cuda 8.0, 9.0, 9.1, 10.0 depending on each DNN library
Cudnn 6+, 7+
NCCL 2.0+ (for the use of multi-GPUs)

ESPnetとはE2E音声処理のためのオープンソースツールキットで、Reazon Speechの使用に必要です。
以上の必要要件を環境にインストールした後、以下のコマンドでESPnetをインストールします。

```
$ git clone https://github.com/espnet/espnet
$ cd espnet/tools
$ ./setup_anaconda.sh anaconda espnet 3.8
$ make
$ . activate_python.sh
```

### 注意点
ここで注意しないといけないのは、pytorchのバージョンによって使えるcudaのバージョンが限定されている点。
pytorchがどの組み合わせで使えるかは[このページ](https://pytorch.org/get-started/previous-versions/)に記載されています。

## 3. 以下のコードと音声を保存

decode.py
```
import sys
import soundfile
from espnet2.bin.asr_inference import Speech2Text

speech2text = Speech2Text.from_pretrained(
  "reazon-research/reazonspeech-espnet-v1"
)

speech, rate = soundfile.read(sys.argv[1])
print(speech2text(speech)[0][0])
```

サンプル音声 (speech-001.wav):
[speech-001.wav](https://research.reazon.jp/_downloads/a8f2c35bb3d351a76212b2257d5bfc85/speech-001.wav) からダウンロードできます。

## 4. コマンドで音声認識を実行

以下のコマンドで音声認識を実行する。
実行出来たら成功

```
$ python3 decode.py speech-001.wav
```

音声認識に使用する音声の文章
```
気象庁は雪や路面の凍結による交通への影響暴風雪や
高波に警戒するとともに雪崩や屋根からの落雪にも
十分注意するよう呼びかけています
```

# おわりに
全体的に非常に良い精度の日本語音声認識モデルだと思いました。
今までの音声認識モデルの日本語の音声認識では、日常会話レベルの速度の発声でもわりと間違えるし、早口レベルになるとまず間違える、という精度でした。
しかし[Reazon Speech]では日常会話レベルの速度では多少滑舌が悪くてもほぼ正確に認識してくれますし、出来る限り早口で話しても、ある程度はっきり言えば正確に認識してくれます。
日常的に使う分には、かなり実用的な精度だと思われます。
ただデモ版では音声を認識してからの出力するまでの時間が多少かかっている（1,2秒ぐらい）ので、速度面に関しては要検証です。
この速度はWeb上で不特定多数の人間の音声を読み取る必要があるから遅いのか、それともモデル自体がデータを解釈するまでにある程度の時間が必要なのか。
時間が必要な場合短縮することは可能なのか。
次の記事では音声認識モデルの実行時間について、検証してみたいと思います。