🔉

QA゚ンゞニアが音声合成の差分を自動怜知する仕組みを導入したはなし

に公開

株匏䌚瀟IVRy 玅組

株匏䌚瀟IVRy 玅組

こんにちは。電話AI SaaS IVRyのQA゚ンゞニアの関( @IvryQa )です。
アドベントカレンダヌの3日目を担圓したす。

IVRyの自動応答機胜では、Text-to-SpeechTTSずいう音声合成を䜿甚しおいたす。ナヌザヌは蚭定画面から自由に読み䞊げ内容を蚭定するこずができ、実際の音声も確認するこずができたす。
しかし、TTSのバヌゞョンアップデヌトによっお、同じテキストでも読み䞊げ方が倉化するこずがありたす。
䟋えば、文章䞭の改行は空癜ずしお読み䞊げられおいたものが、突劂消えおしたい違和感のある音声になっおいたり、文章自䜓は倉曎しおいないのに読み䞊げのむントネヌションが倉わっおしたうなどの事象がありたした。
このような予期せぬ倉曎は、IVRyをご利甚いただいおいナヌザヌだけではなく、実際にIVRyに電話をかけおくる゚ンドナヌザヌの䜓隓にも盎接圱響を及がす重芁な芁玠だず考えおいたす。
これたでは、䞀定の頻床で自動応答を蚭定し、実際に電話をかけお確認する䜜業を定期的に行っおいたしたが、手動での確認には限界があり、より効率的な品質保蚌の仕組みが必芁だず感じおいたした。
そこで、私たちはこれらの想定しおいない倉化を自動で怜知する仕組みを導入したした。
本蚘事では、その取り組みに぀いおご玹介しおいきたす。

倉曎を芋逃さないこずの重芁性

IVRyのような音声察話システムにおいお、音声の品質はずおも重芁な芁玠だず考えたす。
特に、IVRyに電話をかける゚ンドナヌザヌにずっお、想定しおいない箇所での空癜の欠劂は聞き取りづらさが生たれ、䞍自然なむントネヌションは違和感を䞎えおしたうず思いたす。
䟋えば、䞋蚘のような音声をお聎きください。
◌ 空癜あり
https://youtu.be/g7wnX35ZR6Q

◌ 空癜なし
https://youtu.be/FIMUch5G9Ng

聎き比べおいただくず、空癜なしの音声ファむルでは、文章が続けお読み䞊げられ䞍自然で、聞き取りづらいこずがわかりたす。

IVRyで蚭定した内容が予期せず倉曎されおしたうず、サヌビスを利甚するナヌザヌだけでなく、IVRyに電話をかけおくる゚ンドナヌザヌの䜓隓にも盎接的な圱響を䞎える重芁な芁玠だず考えおいたす。

差分怜知の仕組み

倧枠の流れは䞋蚘になりたす。

  1. IVRyの蚭定画面にお、再生するテキストを入力し、音声ファむルを䜜成し、ダりンロヌドしたす。
  2. マスタヌ音声ファむルずダりンロヌドした音声ファむルの2぀のファむルを比范し、以䞋の芳点で差分を怜知しおいたす。
    • 波圢の比范による音声パタヌンの分析
    • MFCCによる音質・むントネヌションの評䟡
    • 再生時間の比范
  3. 評䟡結果をSlackぞ通知したす。

䜿甚技術

※ 以䞋のラむブラリを掻甚しおいたす。

  • librosa[1]
    • 䞻に音声波圢の分析ず凊理、波圢デヌタの取埗で利甚
  • python_speech_featuresMFCC[2]
    • むントネヌションや音質の倉化を怜出する目的で利甚
  • Matplotlib
    • 波圢ずMFCCの可芖化
  • NumPy
    • 波圢の差分蚈算
    • MFCCの距離蚈算
      ※ 人間の音声知芚に基づいた音声特性の分析を行うこずができる。

具䜓的な実装䟋

◌ 波圢分析
2぀の音声波圢の時間を揃えた䞊で、それぞれの振幅の差を平均しお蚈算したす。この振幅差が、蚭定した閟倀0.1を超えるず「波圢に明らかな違い」ず刀定したす。

# 音声ファむルを読み蟌む
y1, sr1 = librosa.load(audio_file1, sr=None)
y2, sr2 = librosa.load(audio_file2, sr=None)

# 音声の長さを取埗
duration1 = librosa.get_duration(y=y1, sr=sr1)
duration2 = librosa.get_duration(y=y2, sr=sr2)

# 䞡ファむルの波圢長を揃える
min_len = min(len(y1), len(y2))
y1_trimmed = y1[:min_len]
y2_trimmed = y2[:min_len]

# 波圢の差分を蚈算
waveform_diff = np.mean(np.abs(y1_trimmed - y2_trimmed))

# 評䟡結果を返す
if waveform_diff > 0.1:
    return f"波圢に明らかな違いがありたす差分: {waveform_diff:.4f}。"
else:
    return f"波圢は類䌌しおいたす差分: {waveform_diff:.4f}。"

◌ MFCC分析
音声波圢を時間で揃えたあず、MFCCを抜出しお、2぀の音声のMFCCの差分を蚈算しおいたす。

# 波圢を揃えおからMFCCを抜出
mfcc1 = mfcc(y1_trimmed, sr1)
mfcc2 = mfcc(y2_trimmed, sr2)

# MFCCの差分を蚈算
mfcc_dist = float(np.sum(np.abs(mfcc1 - mfcc2)))

# 評䟡結果を返す
if mfcc_dist > 10000:
    evaluation.append("音質やむントネヌションに違いがありたす。")
else:
    return f"音質やむントネヌションは類䌌しおいたすMFCC差分: {mfcc_dist:.4f}。"

差分の評䟡のポむント

  • 波圢比范による音声パタヌンの違いがあるか
  • MFCCによる音質・むントネヌションの倉化があるか
  • 再生時間の差異があるか

怜知できる倉曎パタヌン

◌ 空癜の欠劂
â–Œ Slack通知

â–Œ 波圢

◌ むントネヌションの倉化
â–Œ Slack通知

â–Œ 波圢

※ 差分なしのパタヌンは、䞋蚘のようなSlack通知がきたす。

導入効果

音声差分の自動怜知を導入したこずで、倧きく2぀の効果が埗られたした。
1぀目は、確認䜜業の時間短瞮です。これたで手動で30分ほど掛かっおいた確認䜜業が、わずか1〜2分で完了できるようになりたした。
2぀目は、定期的なモニタリングの実珟です。人による確認では、どうしおも他の優先タスクずの兌ね合いで埌手に回っおしたうこずがありたした。しかし、自動化により決たったタむミングで確実にチェックを実行できるようになり、継続的な品質監芖が可胜になりたした。
この仕組みにより、より安定的で効率的な品質保蚌ができおいるのは倧きな成果だず感じおいたす。

改善ポむント

珟状の仕組みには、改善の䜙地がありたす。䞀぀は、環境の課題です。珟圚は蚭定画面からダりンロヌドした音声ファむルを比范しおいたすが、実際の゚ンドナヌザヌにより近い䜓隓を怜蚌するには、実際の電話環境での怜蚌が必芁だず考えおいたす。
ただし、通信環境によるノむズの混入や音質の倉化が発生するこずで誀怜知が増える可胜性があり、ここが䞀぀の課題ず感じおいたす。たた、評䟡の粟床に関する課題もありたす。
珟状の閟倀蚭定は、0に近い数倀で行っおいたすが、埮劙な差異でも怜知しおしたうこずがあるので、ここは、䞀぀目の課題ずセットで怜蚎しおいく必芁があるず考えおいたす。
现かいですが、可芖化された波圢やMFCCのグラフの芋やすさも改善の䜙地があるず考えたす。より盎感的に差分を把握できるような衚瀺の工倫も怜蚎しおいきたいず考えおいたす。

たずめ

今回は、音声合成の差分を自動怜知する仕組みに぀いお玹介したした。
この仕組みは、音楜掻動の経隓が長い瀟内の゚ンゞニアの音響や技術の知芋を掻かすこずで、実珟するこずができたした。
今埌も継続的な改善を重ね、䞀定の品質を安心しお利甚しおもらえるよう取り組んでいきたいです。たた、音声品質の定量評䟡基準ずしおも掻甚できるのではないかず考えおいたす。

他にも、Webアプリケヌションのテストだけでなく、音声認識や電話自動応答システムの自動化ずいった新しい分野にも積極的に取り組んでいきたいず考えおいたす。
ぜひ、興味を持っおいただけた方は、お声がけください

https://ivry-jp.notion.site/IVRy-e1d47e4a79ba4f9d8a891fc938e02271

https://herp.careers/v1/ivry/wmZiOSAmZ4SQ

脚泚
  1. librosaは、librosa development teamによっお開発され、ISCラむセンスのもず提䟛されおいたす。本蚘事では、その䞀郚を掻甚しおいたす。 ↩

  2. MFCCMel-Frequency Cepstral Coefficientsメル呚波数ケプストラム係数は、人間の聎芚特性に基づいた音声分析手法です。 ↩

IVRyテックブログ

Discussion