やあみんな!うちの会社では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
みんなはこの問題をどう扱っているのか気になります。同じことで困っていたならコメントしてみてください :)
[link] [comments]
