Watson Speech to Text (STT) 概要編

#はじめに
ちまたにWatson STTの記事が少ないなということで勉強がてら自分で書いてみることにしました。

#Watson STTの特徴
私が軽く調べた限り大手ベンダー界隈の音声認識では、
各社の音声認識ソリューションについて性能を比較した記事によると、
我らがGoogle先生のCloud Speech-to-Textがイケてるという声が目立つかもですね。
(きっと検索エンジンの膨大な音声検索のデータとか集めてるからでしょうね)

Watson STTの売りとしてはカスタマイズできるよっていうところを押しているみたいです。
素の状態で使うならGoogleで、ドメインに特化ならWatsonっていう使い分けですかね。


とりあえずWatsonさんの認識精度がなんぼのもんじゃいという方はこちらから
(Watsonさんは素の状態でも、お前なかなかイケるやんってカンジですね。。。)
https://speech-to-text-demo.ng.bluemix.net/
1. Voice Modelに「Japanese model」を選択
2. Record Audioをクリックすると音声認識がスタート
![スクリーンショット 2019-04-03 0.37.37.png](https://qiita-image-store.s3.amazonaws.com/0/130492/2480e5d4-78cf-e968-8742-b326434906e3.png)
「Watsonは日本語は得意ですか」と入力してみたところ、このような結果に。
単語毎に確信度や代替案が付与されていますね。
音声認識の結果をさらに人手で校正する場合に、この確信度や代替案が使えそうですね。
![スクリーンショット 2019-04-03 1.45.51.png](https://qiita-image-store.s3.amazonaws.com/0/130492/49945e83-0f46-a398-bd43-07645549e2b9.png)

#カスタマイズすると出来ること
[The customization interface 英語のドキュメント原文](https://console.bluemix.net/docs/services/speech-to-text/custom.html#customization)
つまり要約すると、、、

- IBMが一般的な用語をカバーしている事前学習済みのモデルをユーザーが好きにカスタマイズできる
- カスタマイズにはLanguage model(言語モデル)とAcoustic model(音響モデル)の2種類がある

|カスタマイズ|学習データ|できること|
|:----|:----|:-----|
|言語モデル|テキストデータ(単語や例文)|ボキャブラリーの拡張|
|音響モデル|音声ファイル|ノイズに強くなるor発話スピードの調整or発音の調整| 

- 言語モデルの補足：話者の音声から文字へ変換する際に辞書や例文を使っていて、この辞書や例文に登録されてないものに対応するためにはボキャブラリーの拡張が必要ということ
- 音響モデルの補足：モデルを環境や話者へ調整できるということ、雑音の多い環境、早口、英語圏だと方言で異なるアクセントなどに対応できるということ

※注意点:カスタマイズはフリープランでは使えません(2019年7月 執筆時点)

#Language model(言語モデル)について
[Creating a custom language model 英語のドキュメント原文](https://console.bluemix.net/docs/services/speech-to-text/language-create.html#languageCreate)
要約すると、このようなことですね、、、
corpusが例文集のテキストファイル単位を表すというところがちょっと解読しにくかったですね

- custom corporaという例文登録をするURLに、corpus(例文集のテキストファイル)を配置してtrainすると例文を学習できる。
    - /v1/customizations/{customization_id}/corpora/{corpus_name}
    - ホストネームはIBM CloudのどのリージョンでSTTのインスタンスを作ったか[エンドポイント一覧](https://cloud.ibm.com/apidocs/speech-to-text#service-endpoint)
    - 登録の制限は10万語まで(maximum of 10 million total words、日本語だと1語の単位が不明)
- custom wordsという単語を登録するURLに、out-of-vocabulary (OOV) な単語をjsonで引き渡してtrainすると未知な単語を学習できる。
    - /v1/customizations/{customization_id}/words
    - 登録の制限は3万語まで(30 thousand new (OOV) words、日本語だと1語の単位が不明)

#Acoustic model(音響モデル)について
[Creating a custom acoustic model 英語のドキュメント原文](https://console.bluemix.net/docs/services/speech-to-text/acoustic-create.html#acoustic)
 ~~日本語用意してくれや~~
つまり要約するとですね、このようなことですね、はい、、、

- custom acousticという音声ファイルを配置するURLに、オーディオファイルを配置してtrainすると音声ファイルを学習できる。
    - /v1/acoustic_customizations/{customization_id}/audio/{audio_name}
    - 音声ファイルの形式は.wavや.mp3や.flacなど一般的な形式にはだいたい対応してる
    - 音声ファイルはアーカイブも可(複数ファイルをzipしてまとめたもの)
    - 音声ファイルは10分以上〜100時間以下、容量は100MB以下

#感想
- 素の状態でも結構イケる。単語単体で発話よりも文章にするとより認識精度が上がる。(まずは単語単体を認識してから文章で補正するからみたい)
- Language model(言語モデル)で、未知の単語を学習させてみたところ、もちろん認識するようになった。単語や例文を増やすほどドメインをカバーでき、音声認識の精度向上が期待できそうです。STTのカスタマイズで行う作業は主に、言語モデルでボキャブラリーを拡充させることと思われる。
- Acoustic model(音響モデル)で、雑音タップリの音声ファイルを学習してみたところ、不容易に文字起こししにくくなった。ただし、拾ってほしいところも拾いにくくなるデメリットもあった。トレーニング時間が死ぬほど長い、数時間かかった。データをとにかく増やせばどんどん精度が向上するってわけでもないかも(使い方が間違っとるんかな？定常的な雑音の帯域はカットされとるんかな？知らんけど。)
- つまりまとめると、言語モデルは音声を文字へ変換する際にどの単語や例文が近いかを判断するための材料(ボキャブラリー)を拡充するもの、テキストなので理解しやすくデータ量を増すほどよさそう。音響モデルは音源の波形から単語を認識する波長や振幅や間隔をチューニングするもの、音声認識の仕組の知識がないとチューニングが難しいかもしれませんね。[音声認識のしくみの解説サイト](http://recognition.web.fc2.com/)
- curlを使わせるとは、Watsonさんは意外と硬派なんですな<br>
[curlのリファレンス](https://cloud.ibm.com/apidocs/speech-to-text)

#関連記事
[Watson Speech to Text (STT) 基本操作curl編](https://qiita.com/Kchan/items/5b9231d3e93d75d4a021)
[Watson Speech to Text (STT) 挙動確認編](https://qiita.com/Kchan/items/1a81fa0be7da2e4595a8)
[音声認識の精度測定、単語誤り率(WER)と文字誤り率(CER)](https://qiita.com/Kchan/items/7bba1f066234ba24898b)