「桃太郎デスマッチ」 ー Azure / AWS / GCP 学習済みAIサービスで「桃太郎」を Speech To Text してみた話

# はじめに

2019年1月23日(木) に Microsoft 主催の Ignite The Tour : Osaka に コミュニティ登壇させていただきました。
本記事は、上記イベントで発表させていただいた LT ( ライトニングトーク ) の内容を記事にしたものです。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/2a5ca413-5f23-0458-e9bc-7e0d14ba5b02.png" width="600" link="https://speakerdeck.com/futo23/gcp-de-speech-to-text-falsejie-guo-wobi-betemita">


※また、__本記事では、3大クラウドプラットフォーム ( Azure / AWS / GCP ) の Speech To Text サービスの性能を比較し、ランク付けをさせていただいておりますが、<font color="red">使用する音声の録音環境、録音デバイス、その他環境の差により、当記事の検証結果と異なる場合がございます</font>ので、使用用途に応じて各自ご自身の判断で活用するサービスの選定を行うようにしてください。__

( 3大クラウドネタとして楽しんでいただければ幸いです:spy_tone1: )

# 今回のコミュニティ登壇の経緯
私自身、普段から関西発Azureコミュニティ「Azure Tech Lab.」の主催・運営をしているのですが、今回 Ignite The Tour の主催者であるMicrosoftさんにお声がけいただき、イベント会場内でアンカンファレンスセッションを行うことになりました。アンカンファレンスという言葉はなかなか耳なじみのない言葉ですが、格式高いセミナー ( 登壇者から参加者へ一方通行 ) と違って、参加者と登壇者が一緒になって創り上げていくようなカンファレンス形式のことを指します。今回私たちのアンカンファレンスセッションでは、普段コミュニティに参加しているメンバーによるLTや参加者に対するデモ体験の実施、そして会場の皆さんからのリアルタイムな質問にお答えするといったカタチで実施させていただきました。本記事では、70分のアンカンファレンスセッションの中で私が LT ( ライトニングトーク ) をさせていただいた部分についてのみ抜粋し、ご紹介したいと思います。

私の LT 登壇タイトルは、__「桃太郎デスマッチ - Azure/AWS/GCP で Speech To Text の結果を比較してみた」__ 。Microsoftさん主催のイベントで、他社クラウドの話をぶち込むのはなかなか勇気がいったのですが、私の主催しているコミュニティのテーマが__<font color="black">「クラウドベンダーの垣根を超えたエンジニアの交流」</font>__ということもあるので、半ば強引に LT をさせていただきました。しかも、10分の LT のはずが気が付いたら20分も話してました。。ごめんなさい。登壇資料は、こちらの [SpeakerDeck](https://speakerdeck.com/futo23/gcp-de-speech-to-text-falsejie-guo-wobi-betemita) にも公開しております。

結論から言うと、<font color="red">__GCP ( Google Cloud Platform )__</font> が一番精度が高かったです。
ただ、単純な性能差以外にも、様々な評価軸で多角的に評価してみたので、
そちらの内容を記事中で事細かくお伝えできればと思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本日の MS Ignite Osaka での登壇資料はこちらです！<br>桃太郎デスマッチ ー Azure / AWS / GCP で Speech-To-Text の結果を比べてみた！<a href="https://twitter.com/hashtag/MSIgniteTheTour?src=hash&amp;ref_src=twsrc%5Etfw">#MSIgniteTheTour</a> <a href="https://twitter.com/hashtag/UNC10033?src=hash&amp;ref_src=twsrc%5Etfw">#UNC10033</a> <a href="https://twitter.com/hashtag/azuretechlove?src=hash&amp;ref_src=twsrc%5Etfw">#azuretechlove</a> <a href="https://twitter.com/hashtag/Azure?src=hash&amp;ref_src=twsrc%5Etfw">#Azure</a> <a href="https://twitter.com/hashtag/AWS?src=hash&amp;ref_src=twsrc%5Etfw">#AWS</a> <a href="https://twitter.com/hashtag/GCP?src=hash&amp;ref_src=twsrc%5Etfw">#GCP</a> <a href="https://twitter.com/hashtag/TTS?src=hash&amp;ref_src=twsrc%5Etfw">#TTS</a> <a href="https://t.co/XmmVVpqn13">https://t.co/XmmVVpqn13</a></p>&mdash; Futo Horio (@Futo_Horio) <a href="https://twitter.com/Futo_Horio/status/1220325349096951808?ref_src=twsrc%5Etfw">January 23, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



会場の雰囲気や登壇時の写真等は、以下のブログに記載があるのでそちらをご覧ください。

- [Microsoftが開催するテクニカルカンファレンス【Ignite The Tour Osaka】で登壇してきました](https://www.kdl.co.jp/blog/2020/02/msignite2020.html) ( KDLブログ )


それでは、長い前置きは終わりにして、本題に移りたいと思います。

# さて本題 ⇒ 桃太郎デスマッチ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/a67000f7-a551-0d66-4db5-f25edb4e6417.png" width="1000">

という訳で、事前学習済みAIサービスという位置づけで3大クラウドで展開されているサービス内容を調査し、性能検証を行いました。

### 学習済みAI ( 人工知能 ) サービス比較表
まずは、3大クラウド ( Azure / AWS/ GCP ) 概要
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/2f14bd7e-121e-3e99-b968-ea2c5a7e114b.png" width="1200">

### 学習済みAI ( 人工知能 ) サービスラインナップ (5分類)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/45dc5e4e-7656-46a4-6715-bd13935ffffe.png" width="1200">

続いて、各ベンダーのサービスの性能を比較してみます。

### 学習済みAI ( 人工知能 ) サービス: Speech To Text スペック比較

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/120481b5-fbec-aa70-bf08-daac2f27128f.png" width="1200">

各ベンダーごとに特色があり、同じ Speech To Text だからと一概に比較できるものではないですが、今回は以下環境下における検証を実施いたしました。

# 続いて、今回行った検証内容...

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/993c934e-0fd0-665a-b97f-9b8dd30bc4b8.png" width="1200">

※ちなみに、今回の検証には自分の声をスマートフォンで録音した音声ファイル ( 短文、長文 ※詳細後述 ) を使用しました。サンプル音声録音に使用したアプリは「PCM録音」という iOSアプリです。ファイル形式やサンプリング周波数など、音声ファイルの設定が簡単に変更できるのでサクッと検証する分にはこちらのアプリを使用されるのがおすすめです。

# 検証環境の準備 ( 各プラットフォーム )

## ( Azure )  Speech To Text [ 10 ~ 15 min ]

- Azrue MarketPlace より ``Speech Service サブスクリプションキー`` を発行する

1. ``Azure-Samples/cognitive-services-speech-sdk`` の GitHubリポジトリをクローン
2. ``pip install --upgrade azure-cognitiveservices-speech`` ( SDKインストール )
3. ``quickstart.py`` に修正を加える (サブスクリプションキー&使用リージョン&ファイルパス)
4. 日本語変換に対応するため ``speech_config`` の設定を追加する 
5. resource 配下に 対象の音声ファイルを追加 
6. ``$ python quickstart.py`` を実行

## ( AWS )  Amazon Transcribe [ 10 ~ 15 min ]

- AWS CLI セットアップ / SDK for Python (boto3) インストール

1. 今回解析する 音声ファイル (mp4) を S3 にアップロードする
2. ご利用開始にあたって ( ``SDK for Python`` ) ページを開く
3. サンプルの Python スクリプトを追加＆修正を加える (音声の言語指定&ファイル拡張子＆リージョン)
4. python スクリプトを実行 (今回はコンソール画面で結果を確認)

## ( GCP )  Cloud Speech-to-Text API [ 20 ~ 25 min ]

- プロジェクトの作成 / Cloud SDK のインストール / 環境変数の設定 ( ``GOOGLE_APPLICATION_CREDENTIALS`` )

1. クライアントライブラリをインストールする
2. サンプルの Python スクリプトを追加＆修正を加える  
 <font color="red">__( ※ 音声ファイルパス & エンコード方式 & サンプリング周波数を指定 )__</font>
4. python スクリプトを実行 ( 結果確認 )

<font color="red">__※サンプリング周波数、エンコード方式がソースコードと異なる場合、APIを実行できないので注意！__</font>



# 検証に使用した音声ファイルはこちら
まずは、短文での性能検証を行い、続いて長文を行いました。

- [短文 ( 音声 )](https://drive.google.com/open?id=18EzUmVm2fuqsOK7RAAnYSswv_4Or-5Et)  
みなさん、こんにちは。こちらは UNC10033 のアンカンファレンスセッションになります。
- [長文 ( 音声 )](https://drive.google.com/open?id=1i-LdEE_LrkZCpo_kanI7jwcazBKSAeM8)  
昔々、あるところにおじいさんとおばあさんが住んでいました。おじいさんは山へ芝刈りに... ( 続く )


# 短文編 ( 結果 )

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/2c6e5f80-6576-ca06-24ba-fdb4e2d2404a.png" width="1200">


# 長文編 ( 結果 )
## 検証音声ファイル書き起こし全文 ( 桃太郎 )

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/4aef51ab-25d0-b919-6a7c-e1a7904cdf78.png" width="1200">

## 認識結果 ( Azure )

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/3e50748e-7b6a-fd96-45ec-ac4294bdb3dc.png" width="1200">

## 認識結果 ( AWS )
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/ccde9d19-9006-7885-7152-426ad2855b22.png" width="1200">

## 認識結果 ( GCP )

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/aab94840-eb8f-0448-b4fc-198ffd0c466f.png" width="1200">


# 検証結果
以下、5つの軸で評価してみました。( 主観含む )

- 対応ファイル形式
- 音声認識の精度
- 料金体系
- 開発のしやすさ
- ドキュメントの読みやすさ

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/5ff45629-86a0-7221-01e1-b8b0c3a88f64.png" width="1200">

- 精度の順で並べると、残念ながら今回は GCP> Azure > AWS の順となった。
- ドキュメントきめ細やかさは Azure > GCP > AWS のように感じた ( 主観 )
- 開発SDKの豊富さの順でも Azure ＝ GCP > AWS となった ( CLI含む )

# まとめ
__精度と導入しやすさバランスを取るなら__ <font color="red">__Azure__</font>
__AWS他サービスとの連携を重視するなら__ <font color="red">__AWS__</font>
__とにもかくにも精度が一番大事なら__ <font color="red">__GCP__</font>

- カスタムせずに汎用的なモデルのみを使用する場合だと GCP が一番精度が高いです。
- 学習済みAIサービスの種類(数)は、Azure ≫ AWS > GCP の順となり、  
明確な用途があるのであれば Azure が一番手っ取り早く導入できる印象を受けました。
- <font color="red">__句読点が反映されるのは Azure だけ ( 標準設定 ) でした。__</font>
- 利用料金でいうと、Azure < AWS = GCP となるので Azure が一番安いです。
- GCPは細かなチューニングができる分、検証時に詰まるポイントが多いように感じました。( GCP力が低いだけかも )


# 最後に
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180432/4e38f0c1-3711-9a66-16f4-dfa9d4da9bb4.png" width="400">
イベント会場は想像以上に盛況でした。アンケートの自由記入欄にも上記のようなコメントがあり、MicrosoftのイベントでAWSやGCPなど、他の3大クラウドベンダーとの性能比や開発コストの差を盛り込んで良かったと思います。コミュニティを運営していると楽しいことばかりではないこともたまにはありますが、このような貴重な登壇機会を頂き、コミュニティメンバー一同大喜びでした。このセッションを機に、Azure Tech Lab. コミュニティへの参加者が少しでも増えることを願ってやみません。このような貴重な機会をいただいた心の広い Microsoft の担当者のみなさんに感謝しかありません。ありがとうございました！