Amazon Transcribe でiPhoneのボイスメモ（日本語）を自動的に文字に起こしてみる

この記事は[アラタナアドベントカレンダー2019](https://qiita.com/advent-calendar/2019/aratana)の12日目の記事になります。
（諸事情で投稿は1日遅れてしまいました）。

[![at-adventcalendar2019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/5ef318e0-bd49-8f89-bafa-50b68dc7ffeb.jpeg)](https://qiita.com/advent-calendar/2019/aratana)

[Amazon Transcribe](https://aws.amazon.com/jp/transcribe/) という、音声ファイルから文字を起こしてくれるサービスがあります。
会議の議事録やイベントなどの音声、カスタマーサポート業務の電話応対の記録を文字情報として残すなど、なんらか文字に起こさないといけない場合に重宝しそうです。

日本語にも対応しているとのことで、昨日行われた飲み会中にこっそり録音し、
それがどのくらいの精度で文字おこしされるのか試してみました。
（飲み屋で録音しているので、非常に雑音がおおかったですが・・・笑）


![スクリーンショット 2019-12-13 7.54.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/7592c019-d9b5-f758-9f90-dee9f5126b33.png)
https://aws.amazon.com/jp/transcribe/

##料金
[アジアパシフィック（東京）リージョンの場合の料金](https://aws.amazon.com/jp/transcribe/pricing/?nc=sn&loc=3)は、1秒あたり 0.0004USD のレートで月ごとに課金されます。使用料は 1 秒ごとに課金され、15 秒未満のリクエストについては 15 秒分の料金が発生するとのこと（公式サイト記載から抜粋）。
なので、最低15s x 0.0004USD = 0.006USD（2019/12/13時点、約0.66 円）となります。

10分程度なら0.24USD（約26.28 円）、1時間なら1.44USD（約157.63 円）と、ものすごくリーズナブルです。

##準備
1. Amazon AWSアカウント
2. S3のなんらかバケットを作っておく（音声ファイルを置いておく場所）
3. 音声ファイル（今回はiPhoneで録音した「.m4a」拡張子ファイル）

##手順
1. S3上に任意のバケット名のバケットを作成（または既存のバケットを選択）し、音声ファイルを配置しておく。今回はバケット名は「audio-dev-test」。
2. [Amazon Transcribe](https://aws.amazon.com/jp/transcribe/) にアクセスし、「Amazon Transcribe の使用を開始する」ボタンをクリックする。
3. （ログインしていなければ）ログインする。
4. （おそらく）英語のサイト（下にキャプチャ貼り付けました）に飛ぶので、オレンジ色の「Create transcription job」ボタンをクリックする。![スクリーンショット 2019-12-13 7.51.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/77b45135-8895-67b5-5dc6-ab41ac472718.png)
***上記「手順3.」の英語サイトキャプチャー***


5. Create transcription job のページに飛ぶと、以下のような項目があります。
![スクリーンショット 2019-12-13 8.16.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/6aef93c8-d148-3fdf-e4cf-60958a1948a3.png)

### 【Job settings】
適当なJobの名前を「Name」に入力します。
Nameは現時点では日本語は使えず、「a-z, A-Z, 0-9, . (period), _ (underscore), and – (hyphen)」が使えるようです。
「Language」は今回は「Japanese(Japan)」を選択。

### 【Input Data】
「Input file location on S3」には、S3上に配置した音声ファイルのURLを指定します（S3に配置したファイル概要情報の「オブジェクト URL」で良い）。
FormatやAudio sampling rate、Custom vocabularyや今回は何も選択しませんでした。
より精密な文字おこしをする場合は、この辺のオプションをきちんと設定してあげると、精度が向上しそうです。

### 【Output data】
「Data Location」を「Customer specified」で指定してあげれば、任意のS3バケットに文字おこし後のデータも配置してくれそうでしたので、「audio-dev-test」を指定してみました。それ以外は初期値です。

以上でセッティング完了です。簡単ですね。
画面下にある「Create」というオレンジボタンをクリックすると、（特にエラーがなければ）文字おこし処理が開始されます。

![スクリーンショット 2019-12-13 8.39.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/de9d0dd8-1c9b-af90-87d2-38f019e97779.png)
***In progressは処理中です***

## 文字おこし速度感
約8分の日本語音声ファイル（3.9MB)を試しましたが、約5分で文字おこしが完了しました。早い！
アウトプットされたテキストファイルはJSON形式で、指定したバケット（今回は音声ファイルと同じバケットを指定）に、Jobの名前がついて生成されました。JSONファイルは約121 KBでした。

![スクリーンショット 2019-12-13 8.47.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/cb6c03b3-c1fe-6104-8ccc-25603724f900.png)


## 文字おこし精度感
元の音声ファイルは人間が聞けば十分聞き取れる音量で録音されていました。
複数人の話し言葉（しかも酔っぱらってる）、飲み屋のガヤガヤ状態だと、要所のキーワードが文字起こしできている感じで、文字をみただけでは全然なんの会話かわかりませんでした（笑）
会議や電話など、あんまり双方の会話が入り混じらない、周りのノイズも少ない音声だともっと精度はあがりそうです。
（ただ、今回は時間がないので、割愛します）

JSONの一部を抜粋します。
飲み会参加したメンバーのヘアースタイルがイケてる・イケてないの話に発展し、そこから最近アラタナメンバーの外丸（とまる）さんという方が最近ヘアースタイルを変更された話題になりました。そのヘアースタイルが手持ちのワックスだと決まらなかったってことで、昼休みに美容室に行ってカット時につかってくれたワックスを買いに行ったらしい、という話をしていたのですが、「泊まりさん」になっていたり、ヘアースタイルが「部屋スタイル」になってたり（あるある）、その辺は流石に翻訳難しかっただろうなとは思います（外丸さん、会話ネタにしてごめん笑）

JSONは１ファイルでしたが、中身はJSONの配列になっていて
音声から文字おこしした文章と、それらを形態素解析したようなデータの２つに分かれていました。
何かに活用できるかもしれません。

<img width="622" alt="スクリーンショット 2019-12-13 8.58.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/0934e8c2-09ec-0164-9bbc-1378ae80343e.png">
***文字おこし部分の抜粋***

<img width="504" alt="スクリーンショット 2019-12-13 8.58.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217773/652a5c5e-e6fb-ea09-e6c1-e42a79e88a37.png">
***形態素解析ではないかもしれないが、それぽい部分***


## 所感
今回はシチュエーションとして結構厳しめの状況でレビューしてみました。
結果としては上記の通り期待値を超える感じではなかったものの、
Google翻訳などと同様に、ツールを使う側がいかに文字おこしできやすいように話すかとか、
ノイズをできるだけ外せるか、専門用語は「Custom vocabulary」に登録するとか
そういう努力も必要かなと思ってます。

日本語を認識してアウトプットはできているので、
手応えはあり！という感じですね！

素晴らしいサービスを低価格で提供していただけて、感謝です。