物語テキストから動画自動生成テスト
これの技術解説をしたいと思います。まあ、中身は単純で
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つの単語なのに、「鬼」「が」「島」と
分割されてしまっています。それにより、
桃太郎はこの話をきくと、その鬼が島へ行ってみたくって、もう居ても立ってもいられなくなりました。
という文章では、
「鬼」が「島」へ「行く(行ってみたい)」
と解析され、
いきなり鬼が遠くの「鬼ヶ島」まで全速力で走って行く羽目になりました。
まあこのあたりは、「鬼が島」を単語登録すれば、ひとまず
問題は解決できるかと思いますが、形態素解析の処理によっては
単語登録されていても、うまく単語として分割されない場合もあります。
■問題の原因・主語の省略
日本語では主語が省略されることが多々あり、この『桃太郎』の
文章も例外ではありません。
そこで、この動画生成プログラムでは、主語が分からない場合は、
直前の主語を利用することにしています。
そのせいで、
という文章が、
と解析され、
まあこのあたりは、「鬼が島」を単語登録すれば、ひとまず
問題は解決できるかと思いますが、形態素解析の処理によっては
単語登録されていても、うまく単語として分割されない場合もあります。
■問題の原因・主語の省略
日本語では主語が省略されることが多々あり、この『桃太郎』の
文章も例外ではありません。
そこで、この動画生成プログラムでは、主語が分からない場合は、
直前の主語を利用することにしています。
そのせいで、
とおじいさんは言いました。
「まあ、そんな遠方へ行くのでは、さぞおなかがおすきだろう」
という文章が、
(おじいさん)(言う)
(?)(行く)(遠方へ)
と解析され、
おじいさんが遠方=鬼ヶ島まで全速力で走って行く羽目になりました。
これに関しては、セリフ内の文章は実際の現象ではないとして
無視するか、「~だろう」という文の構造から予測や想像と
判定すれば回避できるかもしれません。
■問題の原因・常識による判断
犬猿キジの登場直後に、謎の男が現れますが、
これに関しては、セリフ内の文章は実際の現象ではないとして
無視するか、「~だろう」という文の構造から予測や想像と
判定すれば回避できるかもしれません。
■問題の原因・常識による判断
犬猿キジの登場直後に、謎の男が現れますが、
それは、
この文における「家来」です。
犬猿キジ達は「お供しましょう」と言ったり、桃太郎が
「ついて来い」と言っているのですが、それによって
犬猿キジ達が桃太郎の家来となり、「家来」という言葉は
犬猿キジ達の属性であって、別の人物を表していないことを
プログラムが理解していないため発生しています。
このあたりは人工知能の研究で最も厄介な部分で、
人間の持つ常識から判断しないといけないのですが、
その膨大な量の常識を、どのようなデータ構造で保持し
利用すればいいのかや、そもそもどうやってその
膨大なデータを入力すればいいかが最大の問題となっています。
■まとめ
このような動画自動生成によって、いわゆるAIが
何を理解していないのか、何を教える必要があるのかが
目で見て分かるため、研究には有用ではないかと考えています。
しかし、上記の諸問題を解決したとしても、登場人物の
内面の状態や変化を捉えるのは、さらにハードルが高い
問題となるでしょう。
そこを超えてようやく人工無脳ではない会話可能なAIの
開発のスタートに立てると思います。
桃太郎と、三にんの家来は、さっそく、この船に乗り込みました。
この文における「家来」です。
犬猿キジ達は「お供しましょう」と言ったり、桃太郎が
「ついて来い」と言っているのですが、それによって
犬猿キジ達が桃太郎の家来となり、「家来」という言葉は
犬猿キジ達の属性であって、別の人物を表していないことを
プログラムが理解していないため発生しています。
このあたりは人工知能の研究で最も厄介な部分で、
人間の持つ常識から判断しないといけないのですが、
その膨大な量の常識を、どのようなデータ構造で保持し
利用すればいいのかや、そもそもどうやってその
膨大なデータを入力すればいいかが最大の問題となっています。
■まとめ
このような動画自動生成によって、いわゆるAIが
何を理解していないのか、何を教える必要があるのかが
目で見て分かるため、研究には有用ではないかと考えています。
しかし、上記の諸問題を解決したとしても、登場人物の
内面の状態や変化を捉えるのは、さらにハードルが高い
問題となるでしょう。
そこを超えてようやく人工無脳ではない会話可能なAIの
開発のスタートに立てると思います。