リカレントニューラルネットワーク(以下RNN)を利用した文字レベルの自動文章生成について、以前こちらの投稿「10万件の飲食店クチコミからRNNで文章を生成」[1]でご紹介しました。今回は、RNNで自動生成された文章について、形態素解析を用いて品詞の観点から分析してみたいと思います。
#RNNによる文章自動生成の例
まず、RNNによって自動生成された文章をいくつかお見せします。なお、ネットワークはRNNの一種であるGRU(Gated Recurrent Unit)を利用し、30万件の飲食店クチコミ文章を教師データとして用いています。定性的な評価基準として、以下、
・文法的に合っているもの、間違っているもの
・意味があっているもの、おかしいもの
と、かなりばらつきがある出力結果が得られています。それぞれお見せすると、
###文法も意味も良さそうなもの
味は普通です。
しっかりと食べられる。
こういうのが良いですね。
その後は私の人気店になるのが懐かしい感じです。
###文法はよいが意味不明なもの
そんなにラインナップしたので、マグロがない。
最後にひとりと一杯目。
この店は、キールチキンはサラダもスライスです。
この日は何がたっぷりな酒でした。
###意味はよいが文法が間違っているもの
こちらもサラダしている。
お好み焼きで、それにしてもらいにはおいしい。
ご飯でもそれなりにスープがあればいただいたものがしいただけると嬉しい。
の10時00くらい、お店には、入店しました。
###文法も意味もだめなもの
の2016年1月オーダーするとおばずがありましたよね。
「いろいろ」「置いてある」のついしました。
しゅっぱい、確かにパンと注文で注文した。
それにして、カレーののまである。
#定量的評価
定性的な特徴としては、上記のように良し悪しを何となく判断できますが、ここでは少し観点を変え、文章生成に使用された品詞による定量的評価を行います。分析対象は、教師データの文書と生成文章とそれぞれ約3700文で比較を行いました。形態素解析による分かち書きの結果、それぞれ約5万6千語に分解し、品詞をカウントしました。なお、形態素解析の際の辞書は、定期メンテナンスが行われているmecab-ipadic-NEologd[2]です。
図1 教師データと生成データにおける品詞の使用頻度の比較
上記グラフでは、出現頻度の順番でヒストグラムを表示しています。教師データと生成データとを比較し、頻度が大きく、かつ集計数の差が大きかったもののに以下があります。
・固有名詞
・地名
・記号
・数
・サ変接続名詞
・接尾名詞
・並立助詞
#考察
図1のグラフにより、固有名詞や地名をRNNが自動生成するのはやや難があるいうことが言えます。固有名詞は教師データに比べ40%、地名は22%ほどしか生成できていません(以下、この比率を便宜的に再現頻度と呼びます)。固有名詞は本質的に多様であるため、学習が難しかったんだろうと推察できます。ちなみに、新宿や池袋などの大都市に限っては教師データでの出現頻度が高いため、文章生成時にも出現しています。また、数や記号の使用が乏しかったのも同じ理由かと考えられます。その他に顕著だった品詞としては、3つ、サ変接続名詞、接尾名詞、並立助詞が挙げられ、個人的には興味深いです。以下、RNNであまり学習できなかったものの一部を列挙します。
###名詞-サ変接続
再現頻度: 50%
使用、利用、検査、到着、追加、投入、びっくり、満足、訪問、料理
###名詞-接尾-一般
再現頻度: 29%
感、程度、店、系、盛り、揚げ、焼き、達、風
###助詞-並立助詞
再現頻度: 21%
と、たり、や、とか、やら
文字レベルの文章生成に限っては、語彙の多様性をうまく再現することができません。つまり、多様な語彙のある文章の生成には、何らかの方法で語彙体系などの利用は必須であると言えます。ただ一方、てにをはなどのよく使われる文法については、隠れた文法の特徴を学習することが可能で、RNNの得意とするところかと思います。この点は、文法的に崩れていたとしても、よく使われる表現であれば学習することができます。
#課題とまとめ
形態素解析や係り受け解析など、計算言語学的な解析方法と、深層ニューラルネットワークとを、どう親和的に実装してゆくかが課題として考えられます。また、自動生成された文章に何らかのスコアを与えることができれば、敵対的な学習を実現することができるかもしれません。
#参考情報
[1]
10万件の飲食店クチコミからRNNで文章を生成
https://qiita.com/sudamasahiko/items/cf7e4b0f372aa41d5402
[2]
mecab-ipadic-NEologd
https://github.com/neologd/mecab-ipadic-neologd