見出し画像

自動で音声の文字起こしを試す

転身だァァァァァァァァァァァァァァッ!

最近見たB級映画は「サメデター」です。(サメはあまり出なかった) @aipacommanderです。こんにちは。

弊社にはCS(カスタマーサポート)という部署があります。日々運送して頂いているドライバー様や、案件を発注頂いている荷主様の間に入り、何か運行中にトラブルが発生した場合、ドライバー様をサポートしたり、荷主様が発注方法でお困りの場合、ヒアリングしサポートしたりといったことをしています。
※それだけじゃなく本当に業務の一部でしかないですが、説明を簡単にするために割愛

私は主にCS向けの自社ツール開発をメインに日々業務を進めているのですが、業務知識を得るために、数ヶ月に何度か現場に混ざり受電したり架電したりすることがあります。

受電の場合、電話の内容から要件は何か、どうしてほしいのか、の情報を要約してテキストへ文字起こし、適切に対処したり、関連部署へエスカレーションしたりします。

オペレーションでトラブルが発生した場合は、コールログ(通話のデータ)を確認し、案内が間違っていたのか、解釈を間違えて齟齬が発生してしまったのか、改めて情報を整理する場合があります。が、単純に大変です。

電話は基本鳴り止まないので、1名対応に固定されているだけでも、前後で発生したトラブルに対処できないため、なる早で対処する必要があります。

そんな業務を対応していると、音声の文字起こしで、ある程度の工数を削減できないかな。と以前から思っているのですが、それ専用の機械学習のモデルを用意するのも大変だし、外部に委託すると費用対効果など考えないといけないため、サクッと導入や検証ができません。

と、そこへOpenAIから黒船がきました。


\デーン/

違います。
こっちです。


Whisperとは

2022年9 月ごろに公開された音声認識モデルです。(音声を入力し、テキストを出力する)
※他にもできることはありますが、今回は割愛


こんな感じ

ブラウザですぐ確認することができます。

ソースコードやいくつかモデルも公開されているため、動作環境があれば手元で確認することもできますし、応用して自社アプリに組み込むといったことも可能です。

また、この手のモデルは英語限定とか多いのですが、多言語対応しており、日本語も対応しています。すごい。

Pythonで動作するので、HTTP APIを用意し、フロント側で音声データをPOSTしてあげたら、僕だけの環境ではなくて、他の人のブラウザでも利用可能にすることもできます。

ただ、処理の内容を追っていくと、バッチ処理なんだそうです。ストリーム処理したい場合は、下記記事が参考になりました。

上の記事を参考に手元でも動かしてみました。

手元で確認してみる

環境用意や手順はこちらに用意しました。

まずは、20歳ごろ2次元にマジで恋に落ちそうになったアニメのOP曲で文字起こししてみます。

$ yt-dlp -x --audio-format mp3 https://www.youtube.com/watch?v=C4OlB6E8Cyw
$ mv 花澤香菜「恋愛サーキュレーション」Full\ size(Live\ Video)\ \[C4OlB6E8Cyw\].mp3 zasan.mp3
$ python run.py zasan.mp3

# 省略

[00:00.000 --> 00:00.960] せーのっ!
[00:00.960 --> 00:02.960] でもそんなんじゃダメ
[00:02.960 --> 00:04.960] もうそんなんじゃほら
[00:04.960 --> 00:07.160] 心は進化するよ
[00:07.160 --> 00:09.160] もっともっと
[00:25.000 --> 00:27.400] 言葉にすれば冷えちゃう関係なら
[00:27.400 --> 00:29.160] 言葉を消せばいいんだって
[00:29.160 --> 00:30.960] 思ってた?恐れてた?
[00:30.960 --> 00:32.960] だけどある?なんか違うかも
[00:32.960 --> 00:34.960] 千里の道の一歩から
[00:34.960 --> 00:36.960] 石のように固いそんな石で
[00:36.960 --> 00:38.960] 塵も積もればエマトラでしょ?
[00:38.960 --> 00:40.960] 死に抜きで?癒し抜きで?
[00:40.960 --> 00:43.960] ふわふわり ふわふわる
[00:43.960 --> 00:45.960] あなたが名前を呼ぶ

# 省略

すごい!!!!

塵も積もればエマトラでしょ?

本当は「塵も積もればヤマトナデシコ」

(エマトラ・・・?)

たまに間違っていますが、ほぼ認識できています。
ぱっとみ正解の割合が85 ~ 90%ぐらいです。(定量的じゃないので完全主観ですが)

死に抜きで?癒し抜きで?

大将!野菜マシマシ!!死に抜き、癒やし抜きで!

治安の悪いラーメンを注文するみたいな言い方で面白いなって思いました。

最近沖縄で話題の「クジラが打ち上げられた」ニュースでも試してみます。


$ python run.py godzilla.mp3
# 省略
[00:00.000 --> 00:04.000] 消防などによりますと、きのう夕方、茶壇町内にある荒葉公園のビーチに
[00:05.000 --> 00:09.000] クジラと見られる動物の死骸が流れついているのを
[00:10.000 --> 00:14.000] 公園の警備員が発見したということです。
[00:15.000 --> 00:19.000] 死骸は体調が10メートル近くで痛みが激しいということです。
[00:20.000 --> 00:24.000] きょうビーチでは様子を見に来た住民の姿が多く見られました。
# 省略

短めの認識で出力されました。1分ぐらいの動画なんですが、30秒ぐらいまでしか認識しなかったので、多分動画の長さと認識のRangeに乖離があって漏れているんだと思います。アーキテクチャを調べながら、今後修正しようと思います。

前半部分は見事認識していました!すごい。

感想

  • 結果が間違えている場合は補正しないといけないので、注意が必要

    • 今回は知っている曲の歌詞であることや、クジラのニュースと事前にわかっている情報があるので、出力が間違えてたらぱっと見で「ミスっぽい」ということがわかる

    • もっともらしい文章を書き起こされると、間違いに気づきづらい。結局、音声データを聞かないとわからないということになると、何も変わっていないのでよくない。より精度高く認識させる必要がある

  • CPUだと、数分の短い音声データでも結構時間かかるので、GPUマシンで試してみたい

今後

  • 既存業務を改善できそうか検証を進めたい(希望)

    • 改善できるなら&チャンスがあれば業務へ組み込む

  • アーキテクチャを知る(導入しても改善できなければ意味がない)

最後に僕が好きな「五星戦隊」のOPを認識させて締めたいと思います。


$ python run.py gosei.mp3
# 省略
[00:00.000 --> 00:02.000] ごきげんせんたい!
[00:02.000 --> 00:04.000] ダイレンジャー!
[00:11.000 --> 00:13.000] 天真央だ!
[00:15.000 --> 00:17.000] 気力だ!
[00:18.000 --> 00:20.000] 剣を舞え!
[00:21.000 --> 00:23.000] 拳を打たれ!
[00:23.000 --> 00:25.000] リュウレンジャー!
[00:25.000 --> 00:27.000] シシーレンジャー!
[00:27.000 --> 00:31.000] 天魔キリンオーレンジャー!
# 省略

ごきげんせんたい!(?!)
ダイレンジャー!
天真央だァァァァァァァァァァァァァッ!!(???????)

CBcloudはフロントエンジニア・バックエンドエンジニアを募集しています。


この記事が気に入ったらサポートをしてみませんか?