AWS CLIからAmazon Transcribeのカスタム語彙を触ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Summits 2018 San Francisco で文字起こしサービスAmazon Transcribeが正式リリースされました。 正式リリースに伴い追加された機能の一つがカスタム語彙です。

AWSの製品ページからカスタム語彙のメリットを引用します。

Amazon Transcribe では音声認識語彙の拡張とカスタマイズを行うことができます。特殊な用語や専門用語、固有の製品名が発話に含まれている場合でも、ベース語彙に新規単語 (発音も含む) を追加することで、特定のユースケースに合った高精度な文字起こしテキストを生成できます。

本ブログでは AWS CLI からカスタム語彙を操作する手順を解説します。

管理コンソールからの使い方やカスタム語彙を利用した文字起こし例は次のブログを参照して下さい。

文字起こしサービスAmazon Transcribeがカスタム語彙に対応しました

AWS SDK for Python (Boto)からのカスタム語彙の操作は次のブログを参照して下さい。

AWS SDK for Python (Boto)からカスタム語彙を触ってみた

API 一覧

2018/04/08 時点でカスタム語彙に関して以下の API が存在します。

  • list-vocabularies : 語彙の一覧表示
  • create-vocabulary : 語彙の作成
  • get-vocabulary : 語彙の詳細取得
  • update-vocabulary : 語彙の更新
  • delete-vocabulary : 語彙の削除

list-vocabularies : 語彙の一覧表示

語彙の一覧を表示します。

初期状態では語彙は登録されていません。

$ aws transcribe list-vocabularies
{
    "Vocabularies": []
}

create-vocabulary : 語彙の作成

語彙を新規に作成します。

フレーズは --phrases オプションで渡します。 各語は半角スペースで分割します。

$ aws transcribe create-vocabulary \
  --vocabulary-name test \
  --language-code en-US \
  --phrases foo bar baz
{
    "VocabularyName": "test",
    "LanguageCode": "en-US",
    "VocabularyState": "PENDING"
}

作成した語彙が一覧表示されていることを確認します。

$ aws transcribe list-vocabularies
{
    "Vocabularies": [
        {
            "VocabularyName": "test",
            "LanguageCode": "en-US",
            "VocabularyState": "PENDING"
        }
    ]
}

VocabularyState は語彙作成直後は PENDING で利用可能になると READY に遷移します。

get-vocabulary : 語彙の詳細取得

$ aws transcribe get-vocabulary --vocabulary-name=test
{
    "VocabularyName": "test",
    "LanguageCode": "en-US",
    "VocabularyState": "READY",
    "LastModifiedTime": 1523049343.117,
    "DownloadUri": "https://s3.eu-west-1.amazonaws.com/aws-transcribe-dictionary-model-eu-west-1-prod/<USER_AWS_ACCOUNT_ID>/test/..."
}

語彙に登録されているフレーズの一覧は DownloadUri の URL から取得します。 登録した語彙は AWS の管理する S3 バケットから、プリサイン URL の GET リクエストで取得可能です。

  • バケット名 : aws-transcribe-dictionary-model--prod/
  • パス : USER_AWS_ACCOUNT_ID/語彙名/...

例) s3.eu-west-1.amazonaws.com/aws-transcribe-dictionary-model-eu-west-1-prod//test

この URL に対して実際に GET してみましょう。

$ curl "https://s3.eu-west-1.amazonaws.com/aws-transcribe-dictionary-model-eu-west-1-prod/<USER_AWS_ACCOUNT_ID>/test/..."
bar
baz
foo
ENDOFDICTIONARYTRANSCRIBE

辞書順にソートされ、 終端を表す「NDOFDICTIONARYTRANSCRIBE」が追加されます。

update-vocabulary : 語彙の更新

部分更新には対応しておらず、一括置換です。

Phrases に対して

  • foo
  • bar
  • baz

から

  • hoge
  • bar

に変更して登録します。

$ aws transcribe update-vocabulary \
  --vocabulary-name test \
  --language-code en-US \
  --phrases hoge bar
{
    "VocabularyName": "test",
    "LanguageCode": "en-US",
    "VocabularyState": "PENDING"
}

先程とおなじく get-vocabulary の DownloadUri から語彙ファイルを取得します。

$ curl "https://s3.eu-west-1.amazonaws.com/aws-transcribe-dictionary-model-eu-west-1-prod/…"
bar
hoge
ENDOFDICTIONARYTRANSCRIBE

phases が一括置換されています。

delete-vocabulary : 語彙の削除

最後に語彙を削除します。

$ aws transcribe delete-vocabulary \
  --vocabulary-name test
$
$ aws transcribe list-vocabularies
{
    "Vocabularies": []
}

語彙の削除は状態遷移せず、即座に反映されます。

参考

  • https://docs.aws.amazon.com/transcribe/latest/dg/custom-vocabulary-files.html
  • REST API Reference https://docs.aws.amazon.com/transcribe/latest/dg/API_Reference.html
  • CLI API Reference https://docs.aws.amazon.com/cli/latest/reference/transcribe/index.html