喋ラボCLOUDリリースしました

2021年8月、法人を立ち上げてから2年と4ヶ月、前身となるプロジェクトの準備から数えると3年の月日を経て、音声認識AIのクラウドサービスである喋ラボCLOUDをやっとの事でリリースすることができました。

ソツープロジェクト

実は喋ラボには前身となるプロジェクトがありました。AI、特にAI技術の開発に必要なデータが大企業に独占されつつあるという事に対する危機意識から生まれたプロジェクトで、参加者みんなで巨大なデータセット、商用利用に耐えうる音声認識エンジンを作れるデータセットを作ろうというプロジェクトでした。

ソツープロジェクトはみんなデータセットを作るというアイデアに加えてブロックチェーンのトークンをインセンティブとして使い、最終的にはトークンをキーとしたトークンエコノミーを作ることで持続的なプロジェクトとなるという目標を持っていました。

賛同してくれた友人とトークンエコノミーの設計に関してあーでもないこーでもないと議論を重ね、まずはデータを集めてみようということでiOSとAndroid向けにアプリを作り、音声を吹き込んでくれたり、吹き込まれた音声とテキストが合致しているかどうかチェックしてくれたらブロックチェーンのトークンを配るというやり方でスタートさせました。

しかしながら、みんなで作るデータセットというアイデア、及びインセンティブにブロックチェーンのトークンを使うというアイデアは斬新かつ可能性のあるものであったものの、ブロックチェーンを使った仕組みが技術的に重たかったこと、及びブロックチェーンバブルの崩壊とともにトークンのイメージが悪くなってしまったことなどが悪材料となり、ソツープロジェクトは2020年4月に停止されました。

一言でいうとトラクションが得られず、結果として十分なデータが集められなかったのが直接的な原因です。

それでも約1万件、10時間相当の音声データとテキストデータのセットが生み出されました。

音声認識エンジン用のデータセットをターゲットとしたのは、比較的アノテーションが容易であること、及び音声データは画像やテキストに比べて活用が進んでいないデータで、可能性が高いと思ったことが理由です。

他にも細かな理由は状況はたくさんあるので、ここら辺は将来別のブログに纏めても良いかもしれませんね。

喋ラボの再スタート

ソツープロジェクトは終了しましたが、音声が比較的活用されていないデータであることはかわらず、僕は可能性を感じていたため、音声認識AIのプラットフォームを作るという新たなビジョンの元、喋ラボは再スタートを切ることになりました。

元々ビジネスとしてなりたつレベルの音声認識AIがあって、それを活用にしつつデータエコノミーを作るという話なら上手くいったのではという淡い思いがあったのも理由の一つです。

とはいえ、まずはデータです。以前Mozillaのエンジニアの方にDeepSpeechのフォーラムか何かで使える音声認識エンジンを作るためにどのくらいの音声が必要かと聞いたことがあって、その時は最低500時間分くらいかなと返事をもらっていたので、当面の目標は500時間にしました。

ソツープロジェクトのデータは喋ラボで買い取らせて頂きましたが、それでも10時間分しかありません。10時間と比較すると500時はなかなかのボリュームです。もちろん自分や家族、友人にお願いして集められる量ではありません。

そこで、以前つながりのあったポイントサイト、ちょびリッチにクライアントして出稿してみることにしました。

ポイントサイトは何かするとポイントがもらえ、ある程度ためると現金として振り込んでくれるというサービスで、Webサイトは作り直したものの構造としてはソツーアプリのものがそのまま使えました。報酬がトークンから円に変わっているだけです。

コストは多少かかりますが、とりあえず100時間分ほどデータを作成し、第一弾のモデルを学習させてみることにしました。

アーキテクチャは実験の結果学習がうまく進んだSeanNarenのDeepSpeech2をベースにしました。英語のアルファベットにあたる部分は日本語のひらがなを採用したため、かなを漢字に変換する必要があり、そのかな漢字変換モデルは、やや、なんちゃってですが、Transformersベースのモデルを定義し、学習を行って準備を行いました。

この時点で、なんとなく学習データに含まれているようなフレーズは聞き取れるようになってくれました。α版の完成です。

精度の向上に向けて

ところが、実際のビジネスでどの程度通用するか、ちょこっとテストをさせて頂いたところ、結果は散々でした。

理由は色々ありますが、当時の喋ラボのデータはウィキペディアの中に出てくるフレーズを人に読み上げてもらったデータで、自然な会話とは話し方も違えば文章も違いました。ビジネスの会話となると用語も異なるため、一言でいうと喋ラボの学習データとビジネスの現場で使うデータは似ても似つかぬものだったというのが、ダメだった第一の理由でした。

第二の理由としてはそもそもデータ量が足りないという事でした。これも致命的です。第三の理由は技術的な問題ですが、これはデータが少ないうちはあまり問題になりません。将来の課題です。

データの水増し

なんとか特定ドメインの会話だけは取れるようにならないかと思い、散々考えて捻り出したアイデアがデータの水増しです。詳細はそのうち、事業が起動に乗ったら論文とペーパー、そしてコードの形でいずれ解説をしたいと思っていますが、10時間のデータを50〜100時間分に引き延ばせるという優れものです。といっても全く新しいデータを無から作り出せるわけではないので、新種のdata augmentationといったレベルです。それでも特定ドメインの認識率は飛躍的に上がりました。もちろんこれは当社比でという意味でしたが。

データのブレンド

水増しは画期的な手法ではありましたが、一方で過学習してしまうところがあり、音声認識エンジンの難しいところは、特定のビジネス用途に最適化させつつも一般用語もそれなりに取れないとダメというところです。画像であれば、例えば不良品を正しく見分けられさえすれば、そのモデルが犬と猫の見分け方を忘れてしまっても良いわけですが、音声認識の場合はメディカル用語に最適化させたとしても同時に犬と猫くらいは聞き取ってくれる必要があります。医師と患者の会話にペットの話が出てくる事は、確率は低いかもしれないし、重要度も低いかもしれませんが、やっぱり有り得るわけですから。そこで、自分たちの持っている数百時間分のデータにクライアントさまのデータ、例えば30時間分をブレンドし、30時間分の方にフィットさせつつも大元のデータを比較的覚えていられるようにうまくデータをサンプリングする仕組みを開発しました。今流行りのAI Opsの自前版といった感じです。

これにより、用途を選ぶものの、30時間程度の音声を使ってファインチューニングをかければなんとか見られるものにはなる、ところまでは到達しました。

サービス化に向けて

しかしながら、特定ドメインのために数十時間分の音声を頂いてファインチューニングを掛けるというのはいつも出来るわけではありません。まずデータのアノテーションにコストがかかりますし、導入までに時間がかかります。本当にビジネスにしようと思うなら、ファインチューニングをかけなくても使えるレベルだけどファインニューニングをかければナンバーワンの精度ですという状態に持っていく必要がありました。

そこで、本格的な汎用エンジンの開発に向けてベースとなるデータセットのボリュームを増やす事にしました。

ちょびリッチとの提携

データアノテーションでお世話になっていたちょびリッチに喋ラボのデータアノテーションアプリをコンテンツとして組み込んで頂き、継続的にデータを取得し続ける仕組みを実現しました。

これにより、ベースとなるデータセットは、またまた当社比ですが、飛躍的に伸び、800時間分程度に成長しました。また、ウィキペディアの読み上げはあまりにも不自然な音声が集まってしまうので、Youtubeの音声を主に使うように変更をしました。

2021年8月現在、水増し分も入れると2500時間分くらいになっています。

一方で、僕の趣味で野球関連のYoutubeチャンネルのデータを多めに入れたので、妙に野球に寄ったデータセットになっているかもしれません(笑)

野球専用モデル???

クレイジーなデータセンター

最後は価格です。音声認識エンジンを湯水のように使えるようにしようとうビジョンの元、価格競争力のあるものにするために、データセンターの準備をしました。まだまだこれから進化させていくつもりですが、友人の会社の技術陣とともになんじゃそりゃーというようなアイデアを盛り込んで安価に運営が出来るサーバー置き場を作っていくつもりです。第一弾のセンターもまともなエンジニアの方が聞いたら???と思ってしまうようなアイデアが入っていますよ。

その他必要な機能群を整えて

あとは、APIを管理する仕組み、性能を評価できる仕組み、漢数字をアラビア数字に変換する機能などディープラーニングではない部分のシステムを作り込みリリースに向けて準備をしました。技術的に何をどうして良いかわからない点はなかったものの、これはこれで開発ボリュームとしてまぁまぁ大きく、それなりに大変でした。また、どうでも良い話ですが、ディープラーニングの推論をメイン機能とするAPIをAsyncで動かすところで躓いてしまい、数日取られてしまったりもしました。

カスタム辞書機能の搭載から公開へ

これで公開に必要なピースは一通り揃えたつもりでしたが、まだ一つ致命的な問題が残っていました。

汎用モデルの精度です。

水増しを除いて800時間分のデータを集め、学習を行ったものですが、弊社の技術力のせいか、800時間でも商用エンジンの開発には足りないせいか、性能面では問題が残っていました。

特定ドメイン向けのファインチューニングをすればなんとか使えるがファインチューニング無しの汎用モデルの性能はグダグダという状況は改善されていませんでした。いえ、当社比ではもちろん改善されていましたが、市場競争力のあるものにはなっていませんでした。

せいぜい価格が安いのなら試してみようかレベルでした。

喋ラボCLOUDはAPIを販売するビジネスモデルです。もちろんファインチューニングをして専用モデルを作成するビジネスも行いますが、喋ラボCLOUDの主なユーザーは汎用モデルのユーザーです。

カスタム辞書機能

そこで、何か見落としていないか考えに考えて、辞書機能のことを思い出しました。実はカスタム辞書機能は競合各社のエンジンには既に搭載されている機能で、僕自身試したこともあります。試した結果性能向上があまりみられなかったので無視していた機能でもありました。

そもそもニューラルネットベースの音声認識エンジンはカスタム辞書機能をくっつけるのがやりにくいっていうのもあって未だに商用エンジンの多くはニューラルネットベースになっていない、みたいな記事を読んだこともありました。

ですが、実験を繰り返してみると、辞書機能が最終的な性能に大きな影響を与えていることがわかり、本気で取り組んでみることにしました。

慣れないC++のコードを弄る必要があり、中々に苦戦はしましたが、面白い辞書機能が作れたと思います。これで適切な辞書を搭載すればまずまず戦える状況には出来るようになりました。と同時にまだまだ今後改善できる余地と可能性も感じています。

カスタム辞書簡単作成エディタ

辞書機能がいかにクールでも使ってもらえなければ意味がありません。実をいうと各社エンジンのカスタム辞書機能はシステムインテグレータに丸投げの状態でそれほど積極的に活用されているように思えません。

そこで、簡単に必要な単語だけを適切に登録できるカスタムカスタム辞書簡単作成ツールを作成、喋ラボCLOUDに搭載しました。

手前味噌ですが、クールな機能だと思っています。

そんなこんなで2021年8月、喋ラボCLOUDのリリースにこぎつけることができました。もちろんまだまだ性能面では問題がありますし、これまでに力を貸して頂いた方々には何の恩返しも出来ていません。

正直やっとスタート地点に立てたレベルです。

ですが、これは喋ラボにとっても僕にとっても大きな一歩です。ここから千里の道を歩んで行けるよう精進して参ります。

喋ラボCLOUD
https://alpha.shabelab.com/

追伸

将来的に各項目を掘り下げて技術解説とかやりたいですね。&いつかデータを公開してオープンデータプロジェクトも再起動したいですね。2年4ヶ月の歳月を掛けてと書いちゃいましたけど、途中別のことをやっていたりもするので、本当はもっと早くできたかもしれませんね…

I'm a serial entrepreneur. I enjoy AI, UI, and blockchain. I like history and reading too.