初めに
Watson Speech to Text では、独自の文書を登録してカスタムモデルをつくることができます。
社内用語等が入った文書を登録することにより、そのような単語が入った音声の認識率をあげることができます。
ここでは、そのカスタムモデルを作成する手順をご紹介します。なお、言語はPythonを使用します。
前提
IBM Cloud にて、Speech to Text の有料のインスタンスが作成されていること
※ライトプラン(無料プラン)ではカスタムモデルは使用できません。
実施手順
1. カスタムモデルの作成
文書を登録するためのカスタムモデルを作成します。
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という名前で登録します。
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. 登録文書の確認
文書が正常に登録された確認します。
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. 学習結果の確認
学習が正常に終了したかを確認します。
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. カスタムモデルを使用して、文字起こしを実行
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
}
]
},
(以下省略)