[追記]執筆中に気づかず投稿してしてしまいましたが、同じネタでもっと詳しい記事を一週間前に書いている方がいらっしゃったので、そちらの記事を御覧ください(しかも同じOrganizationの方でした)。
英語の自分の発音を客観的に評価するって難しいですよね?
日本語の発音なら「この人は訛ってるなー・・」とか、「この人は綺麗だなー・・・」とかわかりますが英語だと区別がつかなくなります。逆に、他人の発音が評価できるようになれば、自分の発音も改善されるのでないでしょうか?
ということで、2021年のigniteで発表されていたSpeech Serviceの発音評価機能を使って自分の発音がどれだけイケてないのか数値化したいと思います。
ぶっちゃけ、公式のドキュメント以上の情報は記載してないです。Azur初心者の方に向けてAzure Cognitive ServicesのSpeech Serviceを利用してPythonで発音評価機を行う方法を説明しています。
最後まで実施していただくと、発音を記録した音声ファイルから単語別に発音正しさをスコア化できます(音素レベルでも確認可能)。「2022年はきれいな英語で会話したい!」という方はぜひ試してください!!
Azure PortalからSpeech Serviceを作成する
この手の文章ってどこから説明するか悩むんですが、Azure Portalを開くところから始めます。
Azureのアカウント持ってないよという方はこちらからAzureのアカウントを作成してください。初めて登録した方は、200USD分のお試し用のクレジットがもらえます。
最初の画面でリソースの作成を選択
リソースの作成で「音声」と検索し、音声を選択
作成を選択
サブスクリプション、リソースグループ、名前、価格レベルを記入後、確認と作成を選択
項目 | 入力内容 |
---|---|
サブスクリプション | 選択できるものから適当に選択 |
リソースグループ | こちらも適当に選択、ない場合は下の新規作成から適当に作成 |
リージョン | 特にこだわりが無いなら初期値のまま |
名前 | 適当に作成 |
価格レベル | Standard S0 |
検証に成功しましたと表示されたら作成を選択
スクショは省略します。
リソースをデプロイしています。作成には数十秒かかるので少し休憩。
###デプロイに成功しましたと表示されたら、リソースに移動を選択
###キーを管理するにはここをクリックを選択
キーを表示させる
2つのキーの内1つ使います。
ローカルからSpeech SDKを利用して音声を保存したwavファイルをSpeech Serviceにアップロード
ここからは先程作成したSpeech Serviceに音声ファイルをPythonでSpeech SDKを操作することでアップロードし、発音の評価を行います。
その前に、アップロードする音声ファイルを作成する
まずは、評価してもらいたい文章を決めてください。早口言葉のようなフレームでもいいですし、長文でもOKです。
「tongue twister」で検索すれば色々出てきます。
そしたら、その英文を音声に保存しておきます。Speach SDKからSpeech Serviceを利用する場合は保存形式がWAVである必要があるため、適当に変換しておいてください。
続いて、コードを実行
やっと本題に入ります。
まずは、Speech SDKをインポートして、speech_config
を作成します。
# Speech SDKをインポート
import azure.cognitiveservices.speech as speechsdk
# 作成したSpeech Serviceのキーとリージョンからspeech_config作成
speech_config = speechsdk.SpeechConfig(subscription="<Speech Serviceのキー>", region="<Speech Serviceのリージョン>")
azure.cognitiveservices.speechがないと怒られた方は、pipで入れてください。
pip install azure-cognitiveservices-speech
キーとリージョンは先程作成したSpeech Serviceのものを使います。キーは1つ目のものだけでOKです。
続いて、アップロードする音声ファイルのaudio_config
を作成します。
audio_filename = "<音声ファイル(WAV)のローカル上のパス>"
audio_config = speechsdk.AudioConfig(filename=audio_filename)
speech_config
とaudio_config
を作ったら2つをまとめて、speech_recognizer
を作成します。ここまでは、Speech Serviceを利用する際のお決まりの手順というところでしょうか?
speech_recognizer = speechsdk.SpeechRecognizer(
speech_config=speech_config, \
audio_config=audio_config)
実行前に発音評価のための設定であるpronunciation_assessment_config
を作成します。
pronunciation_assessment_config = \
speechsdk.PronunciationAssessmentConfig(reference_text='<発音したフレーズ>',
grading_system=speechsdk.PronunciationAssessmentGradingSystem.HundredMark,
granularity=speechsdk.PronunciationAssessmentGranularity.Phoneme)
reference_text
発音したフレーズ、grading_system
で満点の設定(HundredMark
は100点満点、FivePoint
は5点満点)、granularity
は評価の最小単位(Phoneme
は音素レベル 、word
は単語レベル、全文はFullText
)
最後に音声評価を実行します
# 発音評価を実行
pronunciation_assessment_config.apply_to(speech_recognizer)
result = speech_recognizer.recognize_once()
pronunciation_assessment_result = speechsdk.PronunciationAssessmentResult(result)
pronunciation_score = pronunciation_assessment_result.pronunciation_score]
print(f'点数:{pronunciation_score}')
何点だったでしょうか?
自分は意外と高かったので、結構評価は甘めなのかもしれません。
「え、私の発音の点数低すぎ・・・」と思ったあなた、安心してください。どの単語の発音が悪かったのかも表示できます。
for word in pronunciation_assessment_result.words:
print("*"*10)
print(f'単語: {word.word} \t点数: {word.accuracy_score}')
さらにgranularity
でphoneme
を設定した方は音素レベルで評価を見れてしまいます。
for word in pronunciation_assessment_result.words:
print("*"*10)
print(f'単語: {word.word} \t点数: {word.accuracy_score}')
for phoneme in word.phonemes:
print(f'\t音素: {phoneme.phoneme} \t点数: {phoneme.accuracy_score}')
**********
単語: They 点数: 100.0
音素: dh 点数: 100.0
音素: ey 点数: 100.0
**********
単語: are 点数: 100.0
音素: aa 点数: 100.0
音素: r 点数: 100.0
**********
単語: numberless 点数: 83.0
音素: n 点数: 100.0
音素: ah 点数: 100.0
音素: m 点数: 100.0
音素: b 点数: 100.0
音素: ax 点数: 100.0
音素: r 点数: 98.0
音素: l 点数: 95.0
音素: ax 点数: 53.0
音素: s 点数: 59.0
**********
単語: as 点数: 84.0
音素: ae 点数: 100.0
音素: z 点数: 40.0
**********
単語: the 点数: 100.0
音素: dh 点数: 100.0
音素: ax 点数: 90.0
**********
単語: sands 点数: 79.0
音素: s 点数: 83.0
音素: ae 点数: 55.0
音素: n 点数: 5.0
音素: d 点数: 98.0
音素: z 点数: 100.0
**********
単語: on 点数: 100.0
音素: aa 点数: 5.0
音素: n 点数: 100.0
**********
単語: the 点数: 100.0
音素: dh 点数: 100.0
音素: ax 点数: 100.0
**********
単語: seashore 点数: 85.0
音素: s 点数: 100.0
音素: iy 点数: 100.0
音素: sh 点数: 100.0
音素: ao 点数: 78.0
音素: r 点数: 59.0
あなたの発音はどうだったでしょうか。
以外にこの発音がだめかもしれない的なことがわかればそこを重点的に練習できますし、前から苦手な発音がある方は日々の練習の成果を確認できますね。
それでは。