ブログ

Watson Speech to Text でカスタムモデルを使う

初めに

Watson Speech to Text では、独自の文書を登録してカスタムモデルをつくることができます。
社内用語等が入った文書を登録することにより、そのような単語が入った音声の認識率をあげることができます。
ここでは、そのカスタムモデルを作成する手順をご紹介します。なお、言語はPythonを使用します。

カスタムモデルの効果については、弊社サービス「こえカラモジ」で、ご体験できます。

前提

IBM Cloud にて、Speech to Text の有料のインスタンスが作成されていること
※ライトプラン(無料プラン)ではカスタムモデルは使用できません。

実施手順

1. カスタムモデルの作成

文書を登録するためのカスタムモデルを作成します。create_cutommodel.py

import json
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

language_model = speech_to_text.create_language_model(
    'Test Custom Model',
    'ja-JP_BroadbandModel',
    description='Test Custom Model'
).get_result()
print(json.dumps(language_model, indent=2))

実行結果

python create_cusommodel.py

{
  "customization_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

cusomization_idの値は、このあと使用します。

2. 文書の登録

作成したカスタムモデルに文書を登録します。
ここでは、corpus1.txtという文書ファイルをcorpus1という名前で登録します。add_corpus.py

from os.path import join, dirname
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定
customization_id = ''    # モデル作成時に生成されたIDを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

with open(join(dirname(__file__), './.', 'corpus1.txt'),
               'rb') as corpus_file:
    speech_to_text.add_corpus(
        customization_id,
        'corpus1',
        corpus_file
    )

実行結果

python add_corpus.py

※正常実行された場合は、何も出力されません

3. 登録文書の確認

文書が正常に登録された確認します。get_corpus.py

import json
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定
customization_id = ''    # モデル作成時に生成されたIDを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

corpus = speech_to_text.get_corpus(
    customization_id,
    'corpus1'
).get_result()
print(json.dumps(corpus, indent=2))

実行結果

python get_cusommodel.py

{
  "out_of_vocabulary_words": 0,
  "total_words": 115,
  "name": "corpus1",
  "status": "analyzed"
}

※statusがanalyzedになっていることを確認します。

4. カスタムモデルの学習

登録した文書を反映させるために、学習を行います。

train_custommodel.py
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定
customization_id = ''    # モデル作成時に生成されたIDを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

speech_to_text.train_language_model(customization_id)

実行結果

python train_custommodel.py

※正常実行された場合は、何も出力されません

5. 学習結果の確認

学習が正常に終了したかを確認します。get_custommodel.py

import json
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定
customization_id = ''    # モデル作成時に生成されたIDを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

language_model = speech_to_text.get_language_model(customization_id).get_result()
print(json.dumps(language_model, indent=2))

実行結果

python get_custommodel.py

{
  "owner": "xxxxxxxxxxxxxxxxxxxxxxxxx",
  "base_model_name": "ja-JP_BroadbandModel",
  "customization_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "dialect": "ja-JP",
  "versions": [
    "ja-JP_BroadbandModel.v2020-09-10"
  ],
  "created": "2023-01-31T00:29:34.370Z",
  "name": "Test Custom Model",
  "description": "Test Custom Model",
  "progress": 100,
  "language": "ja-JP",
  "updated": "2023-01-31T00:43:09.439Z",
  "status": "available"
}

※statusがavailableになっていることを確認します。

6. カスタムモデルを使用して、文字起こしを実行

transcribe.py

from os.path import join, dirname
import json
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apiKey = ''     # インスタンスのAPIKeyを指定
url = ''                # インスタンスのEndPoint URLを指定
customization_id = ''    # モデル作成時に生成されたIDを指定

authenticator = IAMAuthenticator(apiKey)
speech_to_text = SpeechToTextV1(
    authenticator=authenticator
)

speech_to_text.set_service_url(url)

with open(join(dirname(__file__), './.', 'sample-medical1.wav'),
               'rb') as audio_file:
    speech_recognition_results = speech_to_text.recognize(
        audio=audio_file,
        content_type='audio/wav',
        model='ja-JP_BroadbandModel',
        language_customization_id=customization_id
    ).get_result()
print(json.dumps(speech_recognition_results, indent=2, ensure_ascii=False))

実行結果

python transcribe.py

{
  "result_index": 0,
  "results": [
    {
      "final": true,
      "alternatives": [
        {
          "transcript": "技術 の 概要 に つきまして ご説明 させて いただきます ",
          "confidence": 0.76
        }
      ]
    },
(以下省略)

2024/2/1更新:『こえカラモジ』の提供を終了しました。

pagetop