ロボット漫才の台本作成用のプログラミング言語(1)

M-1の日程が、9月23日(2018年)、約3週間後になりそうなので、少し余裕ができて、現状の記録を書いておくことにする。

お客さんからお題をもらってサリーに謎かけをやらせるというネタを始めてから一年半以上たった。ロボットお笑いのレベルをもう一つあげたいと思っていたが、どうするかをずっと考えあぐねていた。夏休みに入って、ロボット漫才についての研究があることを知って関係論文を結構読んだが、その中で行われている試みが使えそうだということがわかった。

主に参考にした論文をリストアップしておく。全てネットからダウンロードできる。
真下遼、2016、「Webニュースを用いた真名井台本自動生成にも続くコミュニケーションロボット」。
青木晢、梅谷智弘、北村達也、灘本明代、2017、「Word2vecを用いた対立後に基づく漫才台本の自動生成」、DEIM Forum 2017-F7-3。
真下遼、青木晢、秋山和寛、考橋一稀、「Webニュースを基にした漫才台本自動生成によるコミュニケーションロボットの開発」(特別賞)。
竹越哲也、萩原将文、2015「ロボット漫才自動生成システム--動作が漫才に与える影響の考察」、日本感性工学会論文誌。
吉田祐介、萩原将文、2012、「漫才形式の対話文自動生成システム」、日本感性工学会論文誌 Vol.11,No.2、pp265-272。

これらを参考にすると、基本的にボケとツッコミのフォーマットを先に用意しておいて、あとでキーワードなどをそれに当てはめるという方法が適切だということがわかった。これを応用すれば、お客様からお題をいただいて、その場で即興で漫才をロボットにやらせることができる。

そのフォーマットをまず用意してみると、この言葉に対して説明文を入れるとか、キーワードと無関係で、音が良く似た言葉を入れるなどの指示をさせる必要がある。これらは、一つのコンピュータ言語として作っておくととても便利に思えた。すなわち、ロボット漫才台本自動生成用のプログラミング言語である。

プログラミング言語の文法の作成はそれほど難しくないというか、初歩的なものはすぐに作れる。ただ、その言語の指示に基ずいて、言葉や文章を用意するインタープリターないしはコンパイラが必要になる。それのためには、実際に言語データや文章のデータベースを用意し、それをコントロールすることが必要になる。

それで、この間、まず、データを用意する作業をしてきた。用意できたものは次の4つだ。
(1)word2vecで解析可能なデータを、日本語wikipediaから作成する。これは、mecabのNeolog辞書を用いたものを作成した。これで、wikipedia上で、関連している言葉をリストアップできるようになった。データは1.02Gバイトある。これは、javaで類語をリストアップすることができるのでemilyに組み込みやすい。
(2)wikipediaのタイトル、読み、ローマ字、その概念の定義、さらに基本的説明をデータベース化してmariadbに乗せた。データの個数が500万以上(正確には5114451個)になった。mariadbはraspberrypiのjavaで制御可能である。
(3)シソーラス辞書データを、mariadbに乗せた。どのように載せるかが色々考えたが、結局ある語とその類語を一対にして読みやローマ字とともにデータ化するのが一番使いやすいと思ってそうした。一つの後にたくさんの類語があるときは、それぞれ一対にしてデータベースに載せるのである。mariadbから、それらをリストアップすることを細かく制御できる。38万個の対をデータベース化した。
(4)日本語辞書をmariadbに乗せた。タイトル、読み、ローマ字、基本説明、対語(あれば)をデータベース化した。約72万タイトルになった。

次に、これらを用いて、漫才スクリプトの処理プログラムを作成することが次の作業になる。

Neologの辞書を使ってword2vecのデータを作成し直す

前の記事でword2vecのデータを作ったとかいたが、mecabの辞書をNeologのものにした方が良いので、再度作り直した。mecabに持って行くときにダウンロードして作成したNeolog辞書を使うように指定するだけで良い。

私の場合のコマンドラインは、次のようになる。

mecab -Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ jawiki.txt -o data.txt

作成したデータは何倍にも大きくなった。