😽
Azure AI Speechで音声発話を評価する
英語の発音を評価するとかそういうやつをAzure AI SpeechのSpeech to Textで実現するみたいなのを調べたのでメモ的に残しておきます。
音声評価系のAPIは色々ありそうですが、今回Azure AI Speechを使った理由は、特に無くアカウントが既にあり調べやすかっただけです。
実装としては、わりとドキュメントそのまま。
準備
Azureアカウントを用意して認証情報を払い出す
実装
今回はWebAudioのマイクから録音してwavに変換し、wavバイナリを渡して結果を取得する方法を取りました。
WebAudioのマイクから録音してwavに変換する等は割愛(調べれば出てきますがこのあたりを参考にしました)
AzureAI
認証
sdk.SpeechConfig.fromSubscriptionでspeechConfigを生成しSpeechRecognizerに渡すだけ
const speechConfig = sdk.SpeechConfig.fromSubscription(
API_KEY,
REGION
);
基本的な音声認識
先程のspeechConfigでspeechRecognizerを生成し、アップロードされたファイルを渡してリクエスト
const language = req.body.language || 'ja-JP';
speechConfig.speechRecognitionLanguage = language;
const audioConfig = sdk.AudioConfig.fromWavFileInput(req.file.buffer);
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
const result = await new Promise((resolve, reject) => {
speechRecognizer.recognizeOnceAsync(
result => {
speechRecognizer.close();
resolve(result);
},
error => {
speechRecognizer.close();
reject(error);
}
);
});
発音評価
上記の基本形にPronunciationAssessmentConfigを追加
// 発音評価の設定
const pronunciationAssessmentConfig = new sdk.PronunciationAssessmentConfig(
referenceText,
sdk.PronunciationAssessmentGradingSystem.HundredMark,
sdk.PronunciationAssessmentGranularity.Phoneme,
false
);
pronunciationAssessmentConfig.enableProsodyAssessment = true;
const audioConfig = sdk.AudioConfig.fromWavFileInput(req.file.buffer);
const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
pronunciationAssessmentConfig.applyTo(speechRecognizer);
//以降は同じ
レスポンスの処理
下記で取得
const pronunciationResult = sdk.PronunciationAssessmentResult.fromResult(result);
とりあえず検証なのでLLMに投げ込んだら適当にパースして結果を分析してくれる。
精度みたいな部分の検証は不十分だが、自分が発音した内容に関してはそれっぽい結果は得られた。
※実運用を考えるなら、分割するか不要なものを削るなり文字数のかさまないフォーマットにするなりした方が良い。
その他のAPI
Azure AI Speech以外
Elsa
SpeechAce
SpeechSuper
Language Confidence
Discussion