STT評価でWERが表記ゆれを罰しないように正規化器を作った

Reddit r/MachineLearning / 2026/4/24

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • この記事では、STT評価においてWERが実際の認識品質と無関係な書式の違い(例:「$50」対「it is fifty dollars」や「3:00PM」対「3 pm」)により不当に罰される問題があると説明しています。
  • それを解決するために、著者らはWER算出の前に両方の文字起こしを正規化する、設定可能な正規化ライブラリを作成しました。
  • 「gladia-normalization」として、YAMLで定義された順序通りに動作する決定論的で、バージョン管理・制御可能な正規化パイプラインを提供しています(例として「It’s $50 at 3:00PM」を「it is 50 dollars at 3 pm」に変換)。
  • ライブラリは英語・フランス語・ドイツ語・イタリア語・スペイン語・オランダ語に対応するプリセットを現在提供しており、非英語の挙動改善のために母語話者の協力を募っています。
  • このプロジェクトはMITライセンスで公開されており、STTのWER評価における正規化の扱いについて他者の取り組みも共有してほしいと呼びかけています。

やあみんな!うちの会社ではSTTエンジンをたくさんベンチマークしてきたんですが、ずっと同じ問題にぶつかっていました。WERが、実際の認識品質とは関係ないのにフォーマットの違いをペナルティしてしまうんです。たとえば「It's $50」と「it is fifty dollars」、「3:00PM」と「3 pm」。どちらも完璧な書き起こしですが、エラー率はひどいことになります。

解決策は採点の前に両方を正規化することですが、これまでのプロジェクトではそれぞれ別のスクリプトが、少しずつ違うやり方で正規化していました。そこで、きちんとしたライブラリを作り、オープンソース化しました。

そこで導入したのが gladia-normalization です。WERを計算する前に、設定可能な正規化パイプラインを使って書き起こしを実行できます。

from normalization import load_pipeline pipeline = load_pipeline("gladia-3", language="en") pipeline.normalize("It's $50 at 3:00PM") # => "it is 50 dollars at 3 pm" 

パイプラインはYAMLで定義されているので、何がどの順番で実行されるのかが正確に分かります。決定論的で、バージョン管理可能で、カスタマイズできます。

現在は英語、フランス語、ドイツ語、イタリア語、スペイン語、オランダ語に対応しています。とはいえ、英語以外のプリセットは改善の余地があることは分かっており、それぞれの言語に対して挙動を正しくするために、ネイティブスピーカーの方々の貢献を積極的に募っています!

MITライセンス、リポジトリはこちら → https://github.com/gladiaio/normalization

みんなはこの問題をどう扱っているのか気になります。同じことで困っていたならコメントしてみてください :)

submitted by /u/Karamouche
[link] [comments]