一問一答きりたんAIエージェント(ミニ)を作った
一問一答できるきりたんAI(ミニ)を作りました。(応答パターンは3つのみです)
できたものはこれです。応答速度が遅いしょっぱい感じですが、応答速度の改善は今後の課題とします。
(Watson Speech To Textを使った音声認識に時間がかかっています)
このVRMモデルを使っています。
きりたんAI応答2(応答選択はBERTの意味ベクトルで最近傍探索、音声認識はWatson Speech To Text API) pic.twitter.com/jcEQWGyuwN
— Xiong Jie (@_xiongjie_) March 30, 2020
これを題材として、本記事では、Unity初心者(普段はPythonとC++を扱っています)がこれを作るまでの道のりをメモとして残します。(よくわからなかったらコメントいただければ)環境はMac Mojaveです。
会話返答はUbuntu上で実行しています。(Macでも実行できるはず)
3D表示部分
Unityのインストール
Unityは3Dエンジンで、3Dゲームの開発に必要なツールが色々とGUIで提供されています。
それ以外にも普及しているOSやデバイスの上で動くバイナリをビルドできます。
今回のアプリはMac上で実装しました。
Ubuntu 18.04でも一応開発できますが、Ubuntuに対応していないプラグインがかなり多いです。(今回使ったものだとLipsync)そして、プラグインはオープンソースでなく、ダイナミックライブラリが入っているだけのものも多いため、結果的にUbuntu上で動かすというより、Ubuntuに繋いだ実機での動作確認ができるのみになります。
Macに関しては特にてきとーにインストールすればOKです。
Ubuntuのインストール手順はこの記事を参考にしてください。
どちらもUnityインストール時にPCビルドサポートを追加しておいてください。
UniVRMのインストールと導入
UniVRMはVRM形式のモデルをUnity上で扱うためのものです。VRmをUnity上でロードしたり、
GUIで表情とかポーズを設定したり、Unity上のC#スクリプトで変更したりできます。
UniVRMは公式サイト通りに適当にインストール。
VRMをUnityのAssetsフォルダ以下にロードすると使えます。
Lipsyncプラグインの導入と設定
LipsyncはOVR LipsyncプラグインとVRMLipsyncContextMorphTargetを使えば簡単にできます。
この2つのプラグインをUnityにインストールした後に、OVRLipsyncコンポーネントを
VRMモデルと同じ階層のGameObjectにロードして、
VRMモデルに対して、VRMLipscynContextMorphTargetコンポーネントと、
OVRLipsyncContextを追加して、VRMLipscynContextMorphTargetにOVRLipscynContextを設定し、
OVRLipscynContextにAudioを設定して、AudioLoopbackにオンを入れればいいです。
VRMLipscynContextMorphTargetのSmoothnessとSensitivityはキャラの口と音声に応じて、調整してください。
Watson APIの組み込み
Watson APIはこのページを参考にすれば動かせます。ここで使っているExampleStreaming.csを改造して、今回の対話アプリを実装しました。
ソースコードはこれです。
いつものごとく、VRMにExampleStreamingをロードしてください。
Audio SourceにはLipsyncの入力に設定したAudioSourceを指定してください。
応答選択の構成
応答選択はあらかじめ発言とその応答のペアを作っておき、ユーザの発言の意味ベクトルに近い発言を探して、発言に紐づいた応答を返すという処理にしてます。意味ベクトルはcamphrの学習済みBERTで抽出、AnnoyでN次元の最近傍探索をするという構成にした。flaskをhttpサーバーとした。
実装手順
インストール
-
camphrのインストール
- mecabのインストールとcamphrモジュールのインストールのみ
- annoyのインストール
- flaskのインストール
コード
ソースコードはこちらです。
いい感じの返答を検索するためのデータベース構築は次のコマンドでできます。
python preprocess_conversation_database.py
Webサーバーは次のように起動できます。(開発用)
FLASK_APP=app.py flask run --port 20020 --host 0.0.0.0 --reload --debugger
http://localhost:20020/kiritan/talk_to?message=疲れた
にといった感じで発言を与えると、JSONで返答を返してくれます。audio_url
は音声へのURL(予め生成しておく必要あり), replyはメッセージです。
今後の課題
今後の発展の方向としては、純粋に対話システムとしてみると、
* 今回は、campherで使われているtransformersに同封されているBERTモデルで意味ベクトルを抽出した。
このtransformersのBERTは日本語版Wikipediaを学習データとして学習されているため、SNS会話データなどでFinetuneする必要がある。
* 会話データベースがほとんどないため、きりたんっぽい会話データセットを構築
* 文脈と感情情報の文章からの読み取りと会話ランク付けへの利用
* クラウドベースの会話サービスを検討 (柔軟性にかける可能性はあるが、学習データが豊富なはずなので、語彙とか表現とか多様なものに対応できる)
などが挙げられますが、一緒に暮らすためのAIを作っているので、
まずはモーションとの連携。その後、対話データベースの構築という流れになると思います。
その後、モーションや発話を反応として設定できるエディタを作っていき、
オープンにAIを作っていけるシステムを作ります。
「美少女AIの民主化」を目指してがんばります。
Author And Source
この問題について(一問一答きりたんAIエージェント(ミニ)を作った), 我々は、より多くの情報をここで見つけました https://qiita.com/xiong_jie/items/aa499b28f14265bec3e6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .