Amazon Transcribe(トランスクライブ=書き起こし)は、音声をテキストに変換してくれる AWS の自動音声認識 (ASR) サービスです。オンラインストレージの Amazon S3 に保存した音声ファイルを Amazon Transcribe で分析することで、簡単に音声の書き起こしをすることができます。そこで今回は、日本語音声を Amazon Transcribe を使ってテキストに変換する手順をまとめてみました。
変換する音声ファイルの準備
Amazon Transcribe は、FLAC、WAV、MP3、MP4 の音声ファイルフォーマットに対応しています。最善の結果を得るには非圧縮形式の FLAC または WAV が推奨されています。また、音声ファイルの長さは4時間以内、容量は2GB以下の制限がありますが、通常の利用であれば十分な長さと容量でしょう。
参考資料:Speech Input - Amazon Transcribe
今回は、他社の音声認識サービスと変換精度を比較するため、Google Speech API や IBM Watson Speech to Text の記事で使った以下のFLAC形式の音声ファイルをテキストに変換してみたいと思います。(下の原稿を私が読んだものです。滑舌が悪くてすみません、、)
■青森県八戸市で古くから愛される郷土料理「せんべい汁」
漁や狩りでとった獲物を具材にした汁ものに、
ちぎった「南部せんべい」を入れて食べたのが「せんべい汁」の始まりです。
ダシ汁がたっぷりしみ込んでいる煎餅の不思議な食感を楽しめます
音声ファイルを Amazon S3 にアップロード
まずはじめに、オンラインストレージの Amazon S3 に適当なバケットを作成し、そこにテキストに変換したい音声ファイルをアップロードしておきます。(すでにあるバケットにアップロードしても構いません)
バケットの作成
AWSのマネジメントコンソールにログインしたら「サービス」→「S3」をクリックします。
「+バケットを作成する」をクリックします。
適当なバケット名を入力して、左下の「作成」をクリックします。リージョンは Amazon Transcribe が提供されているリージョンを選択してください、日本にお住まいなら「アジアパシフィック(東京)」がよいでしょう。
以上でバケットが作成されました。このバケットに音声ファイルをアップロードします。
音声ファイルのアップロード
作成したバケットをクリックしてください。
「アップロード」をクリックします。
音声ファイルを追加して、左下の「アップロード」をクリックします。
アップロードされた音声ファイルを選択し、「コピーパス」をクリックして、音声ファイルのパス(例:s3://test-20191211/senbeijiru.flac)をコピーしておいてください
以上で音声ファイルの準備完了です。この音声ファイルを Amazon Transcribe でテキストに変換してみましょう。
Amazon Transcribe でテキストに変換
「サービス」→「Amazon Transcribe」を選択します。(探すのが大変なので「Amazon Transcribe」で検索するのがよいでしょう)
右上に表示されているリージョンが、音声ファイルをアップロードした S3のリージョンと一致していることを確認します。(一致していない場合は S3と同じリージョンを選択してください)
「Create job」をクリックします。
「Name」に適当なジョブ名を入力し、「Language」で音声ファイルの言語(今回は日本語)を選択します。(次に続きます)
「Input file location on S3」に先ほどコピーした音声ファイルのパスを入力して、画面下にある「Create」をクリックします。(オプションのオーディオのフォーマットやサンプリングレートは自動認識してくれますので入力不要ですが、正しく認識してくれない時は入力するのがよいでしょう)
ジョブが開始しますので、しばらく待ちます。
Status が「Complete」なれば、音声ファイルからテキストへの変換完了です。ジョブ名をクリックしてください。
Amazon Transcribe で書き起こしされたテキストが確認できます。
他社の音声認識サービスとの比較
Amazon Transcribe の精度を他社の音声認識サービスと比較してみました。
音声ファイルのナレーション原稿(正解)
■青森県八戸市で古くから愛される郷土料理「せんべい汁」
漁や狩りでとった獲物を具材にした汁ものに、
ちぎった「南部せんべい」を入れて食べたのが「せんべい汁」の始まりです。
ダシ汁がたっぷりしみ込んでいる煎餅の不思議な食感を楽しめます
Amazon Transcribe
漢字の間違えはありますが、ほぼ完璧にテキストに変換してくれています。滑舌が悪いため他社サービスでうまく変換できなかった「具材」の部分もしっかり変換できています。
Google Cloud Speech API
関連記事:Google Speech API の使い方 日本語音声をテキストに変換してみよう
IBM Watson Speech to Text
領野 仮 で 撮った 獲物 ござい に した 汁物 に
ちぎった 南部 せんべい を 入れて 食べた のが せんべい 汁 の 始まり です
だし汁 が たっぷり 染み込んで いる せんべい の 不思議な 食感 を 楽しめ ます
関連記事:Watson Speech to Text の使い方 日本語音声をテキストに変換してみよう
Amazon Transcribe API を利用するための下準備
ここまで AWSコンソールから Amazon Transcribe を使ってきましたが、本番環境や PoC (概念実証) を実施する場合には、プログラムによるインターフェイス(API)を使うことが推奨されています。今回は、AWS CLI(コマンド・ライン・インターフェース)から Amazon Transcribe API を利用する手順をご紹介します。
AWS CLI は、本稼働環境での使用に適したバージョン1と、テストと評価を目的としたバージョン2があります。現時点(2019年12月10日)ではバージョン1をインストールするのが無難でしょう。
参考資料:AWS Command Line Interface とは | AWS ドキュメント
AWS CLI のインストール
パソコンのOSが macOS や Linux の場合は、Python 2 バージョン 2.7 以降または Python 3 バージョン 3.4 以降がインストールされていることを確認します。
パソコンのOSが Windows の場合は MSIインストーラが提供されていますので、そちらからインストールしてください。
MSI インストーラを使用して AWS CLI バージョン 1 をインストールする
AWS CLI のインストーラーをダウンロードして解凍します。
unzip awscli-bundle.zip
AWS CLI をインストールします。
aws コマンド(AWS CLI)が実行できることを確認します。
(以下のような表示がされればOKです)
aws-cli/1.16.293 Python/2.7.16 Darwin/19.0.0 botocore/1.13.29
参考資料:バンドルされたインストーラを使用して AWS CLI バージョン 1 をインストールする (Linux, macOS, or Unix)
アクセスキーとシークレットアクセスキーの取得
AWS CLI から AWS の各種サービスに接続するため、アクセスキーとシークレットアクセスキーが必要になります。
AWSコンソール右上のユーザー名をクリックして「マイセキュリティ資格情報」を選択します。
アクセスキーセクションを開いて「新しいアクセスキーの作成」をクリックします。
「キーファイルのダウンロード」をクリックすれば、アクセスキーとシークレットアクセスキーが記載されたCSVファイルをダウンロードできます。(シークレットアクセスキーは再度表示したりダウンロードすることはできないので注意してください)
AWS CLI の設定
取得したアクセスキーとシークレットアクセスキーを AWS CLI に設定します。
AWS CLI の設定コマンドを実行します。
対話形式で AWS CLI の設定が始まりますので、取得したアクセスキーとシークレットアクセスキーをそれぞれコピペしてください。「Default region name」と「Default output format」は指定せずに空エンターでも構いません。(お好みで設定してください)
AWS Secret Access Key [None]: <取得したシークレットアクセスキー>
Default region name [None]: ap-northeast-1
Default output format [None]: json
AWS のサービスに接続できることを確認します。
(ご自分のS3バケット名が表示されていればOKです)
2019-12-10 03:38:03 test-20191211
再度 aws configure コマンドを実行すれば、AWS CLI を再設定することができます。また、設定した内容は以下の場所に保存されています。
config credentials
Amazon Transcribe API でテキストに変換
Amazon Transcribe API でテキストに変換する場合でも、音声ファイルを Amazon S3 にアップロードしておくことは変わりませんので、先ほどアップロードしたせんべい汁の音声ファイルを Amazon Transcribe API でテキストに変換してみましょう。
まず下のような JSONファイルを作成します。「TranscriptionJobName」には重複しないジョブ名を指定してください。
test-start-command.json
{ "TranscriptionJobName": "test2", "LanguageCode": "ja-JP", "MediaFormat": "flac", "Media": { "MediaFileUri": "s3://test-20191211/senbeijiru.flac" } }
以下のコマンドを実行します。今回 --region は東京(ap-northeast-1)を指定していますが、ご自分がお使いのリージョンを指定してください。
--region ap-northeast-1 \
--cli-input-json file://test-start-command.json
以下のようなレスポンスが返って来ればOKです。Amazon Transcribe でテキストへの変換ジョブが開始しました。
{ "TranscriptionJob": { "TranscriptionJobName": "test2", "LanguageCode": "ja-JP", "TranscriptionJobStatus": "IN_PROGRESS", "Media": { "MediaFileUri": "s3://test-20191211/senbeijiru.flac" }, "CreationTime": 1576012154.804, "MediaFormat": "flac" } }
しばらく待ってから、テキストへの変換ジョブの結果を取得します。
--region ap-northeast-1 \
--transcription-job-name "test2"
「TranscriptionJobStatus」が「COMPLETED」になっていればテキストへの変換完了です。「TranscriptFileUri」(長いです)をクオート含めてコピーしてください。
{ "TranscriptionJob": { "TranscriptionJobName": "test2", "LanguageCode": "ja-JP", "MediaSampleRateHertz": 44100, "TranscriptionJobStatus": "COMPLETED", "Settings": { "ChannelIdentification": false, "ShowAlternatives": false }, "Media": { "MediaFileUri": "s3://test-20191211/senbeijiru.flac" }, "CreationTime": 1576012154.804, "CompletionTime": 1576012191.755, "MediaFormat": "flac", "Transcript": { "TranscriptFileUri": "https://s3.ap-northeast-1.amazonaws.com/aws-transcribe-ap-northeast-1-prod /(略)" } } }
curl コマンドなどで TranscriptFileUri から変換したテキスト情報を取得します。
JSON形式で変換したテキスト情報が取得できます。単語単位で開始と終了の時間も表示してくれるのが Amazon Transcribe API の特徴です。動画の字幕を作成する場合などに便利そうですね。
{"jobName":"test2","accountId":"029120023574","results":{"transcripts":[{"transcript":"青森 県 八戸 市 で 古く から アイサ れる 郷土 料理 煎餅 ジル 量 や 仮 で 取っ た 獲物 を 具 材 に し た 汁物 に ちぎっ た 南部 煎餅 を 入れ て、 食べ た の が 鮮明 ジル の 始まり です だし汁 が たっぷり 染み込ん で いる 煎餅 の 不思議 な 食 感 を 楽しめ ます"}],"items":[{"start_time":"0.23","end_time":"0.69","alternatives":[{"confidence":"1.0","content":"青森"}],"type":"pronunciation"},{"start_time":"0.69","end_time":"0.95","alternatives":[{"confidence":"1.0","content":"県"}],"type":"pronunciation"},{"start_time":"0.95","end_time":"1.48","alternatives":[{"confidence":"1.0","content":"八戸"}],"type":"pronunciation"},{"start_time":"1.48","end_time":"1.62","alternatives":[{"confidence":"1.0","content":"市"}],"type":"pronunciation"},{"start_time":"1.62","end_time":"1.76","alternatives":[{"confidence":"1.0","content":"で"}],(略)
参考資料:Amazon Transcribe のご利用開始にあたって (AWS Command Line Interface)
あとかたずけ
少なからず課金されますので Amazon S3にアップロードした音声ファイルやテスト用のバケット、Amazon Transcribe のジョブは削除しておきましょう。
おわりに
Amazon Transcribe の日本語対応を待ちに待っていた方は多いのではないでしょうか。色々試してみたいですね。
コメント