LoginSignup
6
4

More than 1 year has passed since last update.

Speech SDKからAzure Cognitive ServicesのSpeech Serviceを使って自分の英語の発音を評価する

Last updated at Posted at 2022-01-02

[追記]執筆中に気づかず投稿してしてしまいましたが、同じネタでもっと詳しい記事を一週間前に書いている方がいらっしゃったので、そちらの記事を御覧ください(しかも同じOrganizationの方でした)。

英語の自分の発音を客観的に評価するって難しいですよね?

日本語の発音なら「この人は訛ってるなー・・」とか、「この人は綺麗だなー・・・」とかわかりますが英語だと区別がつかなくなります。逆に、他人の発音が評価できるようになれば、自分の発音も改善されるのでないでしょうか?

ということで、2021年のigniteで発表されていたSpeech Serviceの発音評価機能を使って自分の発音がどれだけイケてないのか数値化したいと思います。

ぶっちゃけ、公式のドキュメント以上の情報は記載してないです。Azur初心者の方に向けてAzure Cognitive ServicesのSpeech Serviceを利用してPythonで発音評価機を行う方法を説明しています。

最後まで実施していただくと、発音を記録した音声ファイルから単語別に発音正しさをスコア化できます(音素レベルでも確認可能)。「2022年はきれいな英語で会話したい!」という方はぜひ試してください!!

Azure PortalからSpeech Serviceを作成する

この手の文章ってどこから説明するか悩むんですが、Azure Portalを開くところから始めます。

Azureのアカウント持ってないよという方はこちらからAzureのアカウントを作成してください。初めて登録した方は、200USD分のお試し用のクレジットがもらえます。

最初の画面でリソースの作成を選択

1.png

リソースの作成で「音声」と検索し、音声を選択

image.png

作成を選択

image.png

サブスクリプション、リソースグループ、名前、価格レベルを記入後、確認と作成を選択

項目 入力内容
サブスクリプション 選択できるものから適当に選択
リソースグループ こちらも適当に選択、ない場合は下の新規作成から適当に作成
リージョン 特にこだわりが無いなら初期値のまま
名前 適当に作成
価格レベル Standard S0

2.png

検証に成功しましたと表示されたら作成を選択

スクショは省略します。

リソースをデプロイしています。作成には数十秒かかるので少し休憩。

デプロイに成功しましたと表示されたら、リソースに移動を選択

image.png

キーを管理するにはここをクリックを選択

image.png

キーを表示させる

2つのキーの内1つ使います。

image.png

ローカルからSpeech SDKを利用して音声を保存したwavファイルをSpeech Serviceにアップロード

ここからは先程作成したSpeech Serviceに音声ファイルをPythonでSpeech SDKを操作することでアップロードし、発音の評価を行います。

その前に、アップロードする音声ファイルを作成する

まずは、評価してもらいたい文章を決めてください。早口言葉のようなフレームでもいいですし、長文でもOKです。

「tongue twister」で検索すれば色々出てきます。

espressoenglish.net

そしたら、その英文を音声に保存しておきます。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です。

image.png

続いて、アップロードする音声ファイルのaudio_configを作成します。

audio_filename = "<音声ファイル(WAV)のローカル上のパス>"    
audio_config = speechsdk.AudioConfig(filename=audio_filename)

speech_configaudio_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}')

さらにgranularityphonemeを設定した方は音素レベルで評価を見れてしまいます。

 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

あなたの発音はどうだったでしょうか。

以外にこの発音がだめかもしれない的なことがわかればそこを重点的に練習できますし、前から苦手な発音がある方は日々の練習の成果を確認できますね。

それでは。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4