Google Speech-to-Textで話者識別
先日はWisperで音声から文字起こし(STTという)を行って満足のできる成果を確認しました。
次は、議事録などで重要となる「話者」が識別できる文字起こしとして注目を集めているGoogle社のSpeech-to-Textを調査してみました。
結論から言うと。。
結論から言うと、まだ商用利用には耐えられないのではないでしょうか。
入力した音声はこちら↓
https://saratec.me/contents/sample.wav
上記、音声を話者別に文字起こしをすると、次のようになれば100点です。
話者A:ご住所の変更でございますね。ご連絡ありがとうございます。恐れ入りますが、ご契約内容を確認いたしますので、お電話を頂いてる方は契約者ご本人様でいらっしゃいますか?
話者B:はい、そうです本人です。
話者A:それでは、お電話をいただいておりますお客様の、お名前をお願い致します。
話者B:山田太郎です。
話者A:山田太郎様でいらっしゃいますね。では、契約者ご本人様確認のため、恐れ入りますが、山田様の生年月日をお願いいたします。
話者B:はい。生年月日が、1937年6月17日です。
実際に実行すると
APIをpythonで組み込み話者情報付きで変換したところ、次のようになりました。
話者A:ご住所の変更でございますねご連絡ありがとうございます恐れ入りますがご契約内容を確認いたしますのでお電話を頂いてる方は契約者ご本人様でいらっしゃいますかはいそうです本人です
話者B:それではお電話をいただいておりますお客様のお名前をお願い致します山田太郎です山田太郎様でいらっしゃいますねでは契約者ご本人様確認のため恐れ入りますが山田様の生年月日をお願いいたしますはい生年月日が1937年6月17日です
うーん。話者が2名いるのは分かってもらえたらしいのですが。。。
もっと、上手くプログラムを作ると、より良くなるのかなぁ。というのが正直な感想です。
話者識別って、難しいのですね。
プログラム(抜粋)は次の通り
from google.cloud import speech
client = speech.SpeechClient()
audio = speech.RecognitionAudio(uri=gcs_uri)
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=8000,
language_code="ja-JP",
diarization_config={
"enable_speaker_diarization": True, #"True" にすると話者識別ができます
"min_speaker_count": 2 #最小話者数 何も設定していない時、default値は2です
}
)
operation = client.long_running_recognize(config=config, audio=audio)
print("Waiting for operation to complete...")
response = operation.result(timeout=600)
responsに入ってくるAIが解釈した文字を出力する箇所は省略させていただきました。
わずか数行のプログラムで音声変換ができる時代はすごいなと思います。
讃良屋安明公式ブログあります。お時間のある時に覗いてみてください。
会社のサイトはこちら