godai-kaihatsu / gondwana

https://gondwana.godai.co.jp/
2 stars 0 forks source link

G4AI: 自然言語入力に応答するG4の疑似オペレーターAI(もどき)システムを実装する #94

Closed usagi closed 6 years ago

usagi commented 6 years ago

68 のチャットHUDのユーザー入力または将来的に音声入力から起こされる自然言語入力に対応して G4 を制御する疑似オペレーターAI(もどき)を実装する。

image

基本的なアイデアは一般的で単純なチャットボットシステムと同様。形態素解析から単語と名詞、動詞、形容詞などの品詞を検出し、キーワードの組み合わせ状況からスコア評価して妥当と推論される会話・命令のストーリーを決定し、応答する。

見込まれる日本語での簡単な動作事例を書いておく:

act は複数の候補を挙げ、スコアの高いものを優先して選択するが、失敗した場合には一定値のスコア以上の次の act へ動作を移す。「地名…ではないですね。」とか言わせると楽しいかも知れない。

地物や地図、設定など、おおよその操作を自然言語制御できる事を目的とする。但し本チケットの段階では最低限、形態素解析からのジオロケーション検索移動程度が実用できれば十分とする。

usagi commented 6 years ago

形態素解析用に mecab を UE4 でクロスプラットフォームに汎用的に扱うため少々改変して実装試験中。

usagi commented 6 years ago

mecab をソースレベルで UE4 プロジェクトへ結合するのはめんどくさい(プラットフォーム固有のAPIやifdefが想定外の分岐によりdefineが狂うなど生じた)事がわかった。バイナリーライブラリーの実行時リンクで放り込む手もあるが、手段として好かんので別の対応方法も検討しようかと思う。

usagi commented 6 years ago

とりあえずこれ使う手もありかなー。便利ではある。オンライン必要ではあるが。 https://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

example 試したところ:

image

usagi commented 6 years ago

アプリIDごとに 50kreq/24h 。アプリIDごとか。微妙。

image

usagi commented 6 years ago

結局 mecab 組み込みかなーと思いつつ、業務とは別にわたし個人的に UE4 に mecab を bind する方法とか整理しておいた。

UE4: バイナリー配布や実行時リンク向けのライブラリーを UE4 プロジェクトへ組み入れる方法を mecab で解説 http://usagi.hatenablog.jp/entry/2018/03/14/082509

usagi commented 6 years ago

mecab の UE4 バインディングを Blueprint レベルで node 操作できる程度に実装しておいた。これで G4AI の自然言語入力に基づく行動評価の実装へ進める。

usagi commented 6 years ago

従来のように直接コマンドを打ちたい場合もあるので、 G4AI レベルで自然言語処理をスキップするダイレクトコマンドモードにも対応しておこう。

usagi commented 6 years ago

進捗:

  1. コマンドパース機構を実装
  2. チャットシステムとの通信テスト

残タスク:

  1. 自然言語処理機構
  2. コマンド実行機構
usagi commented 6 years ago
usagi commented 6 years ago

コマンド実行機構についてテストをもう少し行い、おおよそ問題なさそうであれば自然言語処理機構の実装へ進む。

usagi commented 6 years ago

以上のコマンドを実装中。ついで、コマンドの競合する場合のインクリメンタルなコマンド推論にミスが無いか検証中。

ぼちぼち問題無さそうなので自然言語処理の最初の段階、本チケットの仕上げの実装へ進む。

usagi commented 6 years ago

自然言語処理実装のおまけ、 mecab コマンドを付けておこう。これはユーザーが自然言語処理に疑問を抱いた際に原因を簡単に推量するヒントとしても有用だろう。もちろん開発都合でもG4AIがコマンドレベルで対応すると楽、という理由もある。

usagi commented 6 years ago

これのコマンドモードの検証をもう少々した後、 G4 初期に実装した仮仕様のコマンドシステムは完全に消すことにしよう。混乱を避ける意味でも。

usagi commented 6 years ago

入力 /ex に対して ex1 ex2 のように候補が複数ある場合の親切な対応

image

usagi commented 6 years ago

list-command を実装。

image

前方一致または含まれる文字で絞り込み表示できる:

image

image

usagi commented 6 years ago

コマンドが想定する引数に空の引数が渡されると不正終了を起こすバグを見つけた。修正した。

usagi commented 6 years ago

man を実装した。 list-command と合わせてユーザーはコマンドを実行中に確認しやすくなった。

/man quit:

image

/man man:

image

usagi commented 6 years ago

mecab を実装した。

image

usagi commented 6 years ago

クォート処理も動作しておるようじゃ。 /mecab "人生 楽あり"

image

usagi commented 6 years ago

それでは本チケットの本題、自然言語処理により対話的に操作を行う G4AI の試験実装へ進むとする。

usagi commented 6 years ago

本チケットの目標は地名検索ていど、とは設定しているものの、一応挨拶くらいは返…

image

usagi commented 6 years ago

まあ、こういう程度の事は後でユーザー辞書データでも追加して対処するとして、明日にはこのチャット機能を入れた release を出せるかもしれない。

usagi commented 6 years ago

G4AIのIOがChatだけというのも、そのためにユーザーにG4AIがChat機能と思われても嫌なのでG4AIからASK系のGUIを展開できるようにしようかと思う。

今回は自然言語処理から Greeting はさておき、事実上の最初の推論処理として FindLocation を実装している段階、ということで、リングUIでユーザーにGUI選択によるG4AIとのIOも可能にしようかと思う。

G4AI用のASKダイアログとしよう。

G4におけるダイアログは、G4メニュー(実行をポーズし全画面で展開)、G4HUD(実行中に操作を邪魔しないオーバーレイで展開)に次ぐ第3のGUIとする。動作はHUDより上位に表示し、ポーズはしないのでチャットや操作もできるままだが、操作の邪魔になるほどのGUIをオーバーレイ展開するもの、とする。

usagi commented 6 years ago

↑別チケットに出しつつ本チケットは目標を達成済みなので完了とする。