2018年01月04日

物語テキストから動画自動生成テストの技術的解説

物語テキストから動画自動生成テスト


これの技術解説をしたいと思います。まあ、中身は単純で
1日ちょっとで作れた簡単なものなんですけどね。


■テキストの準備

まず、元となるテキストを用意します。今回は、

青空文庫『桃太郎』楠山正雄作
http://www.aozora.gr.jp/cards/000329/files/18376_12100.html

を、使用しました。


■テキストの分割

次に、テキストを1文単位に分割します。この辺りは、

物語自動生成プログラム『ジェネジェネちゃん』の作り方 基礎編
http://blog.vrai.jp/article/455677889.html

こちらと同じですね。


■述語項構造解析

そして、その1文を、

日本語構文・格・照応解析システム KNP - 京都大学 黒橋・河原研究室
http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP

を使って、述語項構造を解析します。たとえば、

とおばあさんは言いました。


という文章を解析すると、

# S-ID:1 KNP:4.11-CF1.1 DATE:2018/01/04 SCORE:-29.37316
* 2D <係:ト格>
+ 2D <係:ト格><EID:0>
と と と 助詞 9 格助詞 1 * 0 * 0 NIL <係:ト格>
* 2D <体言><係:未格>
+ 2D <体言><係:未格><EID:1><述語項構造:婆さん/ばあさん:名1>
お お お 接頭辞 13 名詞接頭辞 1 * 0 * 0 "代表表記:御/お"
ばあさん ばあさん ばあさん 名詞 6 普通名詞 1 * 0 * 0 "代表表記:婆さん/ばあさん カテゴリ:人 ドメイン:家庭・暮らし" <係:未格>
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
* -1D <用言:動><係:文末>
+ -1D <用言:動><係:文末><EID:2><述語項構造:言う/いう:動8:ト/C/と/0;ガ/N/おばあさん/1>
言い いい 言う 動詞 2 * 0 子音動詞ワ行 12 基本連用形 8 "代表表記:言う/いう 補文ト"
ました ました ます 接尾辞 14 動詞性接尾辞 7 動詞性接尾辞ます型 31 タ形 7 "代表表記:ます/ます"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS


と、出力されます。

このうち利用したいのは、

<述語項構造:言う/いう:動8:ト/C/と/0;ガ/N/おばあさん/1>


という部分です。ここから、

主語(ガ格)=名詞「おばあさん」
述語=動詞「言う」


が、この文章に含まれることが判明します。

また、ヲ格やニ格という対象語(目的語)が含まれる場合も
あります。


■実行時処理

あとは、「おばあさん」「桃太郎」といった人物名に対応する
3Dキャラクターモデルを用意し、「桃」「船」「門」などの
対象語となるオブジェクトモデルも用意します。

また、動詞に対応するモーションデータも用意します。それらは
すべて今回はUnityアセットストアで無料のものを利用しました。

そして、テキストの最初から1文ずつ、新しいキャラが登場したら
表示をおこない、モーションを再生し、カメラをそちらに向ける等の
処理を実行していくだけです。

なお、「家」「川」「鬼が島」などの場所に関しては、
フィールドマップ作成時に位置を指定しています。


■問題の原因・形態素解析

動画を見てもらうと分かりますが、どうにもおかしな点が多数
見受けられます。いくつかの原因があるのですが、まず
最初の形態素解析の段階で失敗している場合があります。

たとえば、「鬼が島」が1つの単語なのに、「鬼」「が」「島」と
分割されてしまっています。それにより、

桃太郎はこの話をきくと、その鬼が島へ行ってみたくって、もう居ても立ってもいられなくなりました。


という文章では、

「鬼」が「島」へ「行く(行ってみたい)」


と解析され、

BlogCG1.png

いきなり鬼が遠くの「鬼ヶ島」まで全速力で走って行く羽目になりました。

まあこのあたりは、「鬼が島」を単語登録すれば、ひとまず
問題は解決できるかと思いますが、形態素解析の処理によっては
単語登録されていても、うまく単語として分割されない場合もあります。


■問題の原因・主語の省略

日本語では主語が省略されることが多々あり、この『桃太郎』の
文章も例外ではありません。

そこで、この動画生成プログラムでは、主語が分からない場合は、
直前の主語を利用することにしています。

そのせいで、

 とおじいさんは言いました。
「まあ、そんな遠方へ行くのでは、さぞおなかがおすきだろう」


という文章が、

(おじいさん)(言う)
(?)(行く)(遠方へ)


と解析され、

BlogCG2.png

おじいさんが遠方=鬼ヶ島まで全速力で走って行く羽目になりました。

これに関しては、セリフ内の文章は実際の現象ではないとして
無視するか、「~だろう」という文の構造から予測や想像と
判定すれば回避できるかもしれません。


■問題の原因・常識による判断

犬猿キジの登場直後に、謎の男が現れますが、

BlogCG3.png

それは、

桃太郎と、三にんの家来は、さっそく、この船に乗り込みました。


この文における「家来」です。

犬猿キジ達は「お供しましょう」と言ったり、桃太郎が
「ついて来い」と言っているのですが、それによって
犬猿キジ達が桃太郎の家来となり、「家来」という言葉は
犬猿キジ達の属性であって、別の人物を表していないことを
プログラムが理解していないため発生しています。

このあたりは人工知能の研究で最も厄介な部分で、
人間の持つ常識から判断しないといけないのですが、
その膨大な量の常識を、どのようなデータ構造で保持し
利用すればいいのかや、そもそもどうやってその
膨大なデータを入力すればいいかが最大の問題となっています。


■まとめ

このような動画自動生成によって、いわゆるAIが
何を理解していないのか、何を教える必要があるのかが
目で見て分かるため、研究には有用ではないかと考えています。

しかし、上記の諸問題を解決したとしても、登場人物の
内面の状態や変化を捉えるのは、さらにハードルが高い
問題となるでしょう。

そこを超えてようやく人工無脳ではない会話可能なAIの
開発のスタートに立てると思います。
posted by 妹尾雄大 at 22:25| Comment(0) | 物語動画自動生成 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください