とある三流プログラマーの覚書

機械学習、自然言語処理を中心にIT系の話題を書いていく予定です

ライトノベルの感想をDoc2Vecで解析 可視化編

はじめに

ライトノベルの感想をDoc2Vecで解析では、ラノベの感想をgensimのDoc2Vecを使って、200次元のベクトルデータとして表現しました。

ベクトルデータなので、類似度の計算ができましたが、200次元といわれても、われわれにはイメージできません。

そこで、今回は、200次元のベクトルを主成分分析を使って2次元に変換して、関係性を可視化しました。

方法

今回は、『このライトノベルがすごい!2016』に載っていた、2015年度BEST60のタイトルを使います。

ライトノベルの感想をDoc2Vecで解析」で求めた、200次元ベクトルのデータを、主成分分析で2次元ベクトルデータに変換します。

主成分分析には、機械学習ライブラリscikit-learnのPCAクラスを使いました。

60タイトルの2次元ベクトルデータをmatplotlibを使って2次元のマップとして描画しました。

結果

f:id:pgsaku:20160515004909p:plain

左の真ん中あたりは、日常系ラブコメ?が集まっているっぽいですね。

下よりの中央は、ファンタジー+バトル要素でしょうか。

なんとなく、感想が近いもので、マップ化されているような気はします。

まとめ

感想をもとに、ラノベをマップ上に表現することには成功したっぽいです。

でも、教師なし学習なので、どんな基準でマップ化されたのかはよくわからないです。

シリアス⇔コメディとか、リアル⇔ファンタジーみたいな人間にわかりやすい軸でマップ化できたら面白いんですけどね。

ライトノベル感想類似度検索を実装してみた

はじめに

前回の記事にたくさんブクマをいただいたので、とりあえずWEBアプリとして実装してみました。

デザインが全然できないので、Bootstrapのデフォルトで作ってあります。

紹介

リンクはこちら

  1. 検索ボックスでラノベのタイトルを検索します。

  2. タイトルの一覧が出てくるので、選びます。

  3. 選んだタイトルに感想が近いラノベが表示されます。

おわりに

最終的には「人工知能がお勧めのライトノベルを選んでくれる」くらいのところまで行けたら面白いですね。

ライトノベルの感想をDoc2Vecで解析してみた

はじめに

前回ラノベの内容紹介をDoc2Vecで解析して遊んでみましたが、あまり面白い結果になりませんでした。

今回はアマゾンレビューなどから収集してきた、ラノベの感想を使ってみます。

感想が近い小説は読み味も近いだろうという予測がたつので、今度こそ好みの小説を探せるようになってほしいです。

方法

トピックモデルのときラノベのisbnコード一覧を使って、アマゾンレビュー、読書メーターブクログあたりから、感想を収集しました。

集めた感想を1つの文書として、gensimのDoc2Vecにかけて、類似度を調べてみました。

全部の感想を収集したわけではないですが、1990年〜2016年3月に発売されたタイトルの感想、約100万件を使っています。

結果

今回もまずは「ソードアート・オンライン」と感想の類似度が高い小説を抽出してみました。

  1. アクセル・ワールド 1 ―黒雪姫の帰還― : 0.5406250953674316
  2. クリス・クロス 混沌の魔王 : 0.5184285640716553
  3. コンプリート・ノービス レベル1の最強剣士 : 0.5114585161209106
  4. スカイ・ワールド : 0.43701106309890747
  5. ワールド エンド ライツ : 0.4228372275829315

1位のアクセル・ワールドは作者が同じ川原礫さんなので、読み味は当然似ていて、狙い通りの結果に見えます。

2位から5位までも、VRMMOとかオンラインRPGとかゲームに閉じ込められるといった感じの小説で、内容は近いように見えます。

ただ、読んだことはないので、読み味が近いかはわからないです。


次に、現在アニメ放送中の『Re:ゼロから始める異世界生活』

  1. 強くないままニューゲーム Stage1 ―怪獣物語― : 0.48192352056503296
  2. 空ろの箱と零のマリア : 0.4573199152946472
  3. ネクストライフ 1 : 0.43387797474861145
  4. 竜殺しの過ごす日々 1 : 0.42893874645233154
  5. マ・オー ―魔王、日本が舞台のオンラインゲームを始める― : 0.42275434732437134

1位の『強くないままニューゲーム』は『Re:ゼロから始める異世界生活』と同じ死んだら巻き戻るループもので、主人公に特殊能力なし、死ぬ描写が生々しくてエグいなど共通点が多いです。

読み味も1巻時点では結構似ているのではないかと思います。

2位から5位までは読んだことはないんですが、2がループもの、3と4が「小説家になろう」の書籍化で、そのあたりが類似度にあらわれていそうです。


最後にライトノベルに入れるかどうかは微妙ですが『ビブリア古書堂の事件手帖

  1. 香彩七色 ~香りの秘密に耳を澄まして~ : 0.49928420782089233
  2. “文学少女”と死にたがりの道化 : 0.4518512785434723
  3. お待ちしてます 下町和菓子 栗丸堂 : 0.4437958896160126
  4. 掟上今日子の備忘録 : 0.4390919506549835
  5. 鎌倉香房メモリーズ : 0.43772873282432556

上品なミステリ風小説とお店ものが抽出されてきたようです。

読んだことあるのは、4位の『掟上今日子の備忘録』だけですが、ライトノベルっぽくないミステリ短篇集ということで共通点は多い気がします。

まとめ

おおむね近い小説が抽出できるようになっている気がします。

でも、読んでない小説が大半なので、なかなか評価が難しいです。

お願い

詳しい方がいたら、合っているか間違っているか感想もらえると、とても嬉しいです。

コメントかメンションでラノベのタイトル投げてもらえれば、似てるタイトルを抽出して返しますので、感想いただけると助かります。

ツイッターアカウントはこちら

Doc2Vecでライトノベルの内容紹介を解析

はじめに

前回ラノベの内容紹介をトピックモデルで解析しました。

同じデータを今度はDoc2Vecにかけて遊んでみます。

Doc2Vecとは、文書(Document)のベクトル表現で、文書同士の類似度を算出したり、文書間で足し算や引き算ができるらしいです。

これで好みの小説を探せたりできたら面白いですね。

方法

gensimにDoc2Vecモジュールがあるので、これを使います。

コードはWord2Vecの進化形Doc2Vecで文章と文章の類似度を算出するを参考にさせてもらいました。

結果

とりあえず、メジャーどころの「ソードアート・オンライン」と類似度が高い小説を抽出しました。

ソードアート・オンライン〈1〉アインクラッド

  1. ニーベルングの指輪 2 神々の黄昏、そして―― : 0.34169912338256836

  2. アイドライジング! (4) : 0.31899577379226685

  3. レオ・アッティール伝 II 首なし公の肖像 : 0.3177222013473511

  4. 会長の切り札 忍者ガールで罠をはれ! : 0.31571415066719055

  5. 金星特急 (7) : 0.31085237860679626

あまり似ていない…

まとめ

期待していた結果にはなりませんでした。

チューニングの問題というよりは、内容紹介くらいの短い文書だと、わかりやすい類似度は出てこないような印象です。

もう少し長い文書で次回は試してみたいですね。

ライトノベルの内容紹介をトピックモデルで解析

ライトノベルの内容紹介をトピックモデルで解析

はじめに

最近、機械学習とか自然言語処理に興味があります。

まずは、理論は置いといてライブラリで遊んでみようということで、 小説家になろうのランキングをトピックモデルで解析(gensim) を参考にgensimのトピックモデルでラノベの内容紹介を解析してみました。

トピックモデルというのは、対象の文書が何について書かれたものなのかを推定してくれるモデルらしいです。 内容紹介から、ラノベのジャンルや代表的な要素を抽出できたらいいなと思ってます。

方法

[ラノベの杜](http://ranobe-mori.net/) さんにラノベのisbnコード一覧があったので、このisbnコードをキーにAmazonの内容紹介を取得します。

1975年からあったけど、古いのはAmazonに内容紹介がなかったので、とりあえず1991年〜2015年分を解析します。

ソースコードは上記ブログのものを、ほとんどそのまま利用しました。

結果

内容紹介25年分全件からgensimのLDAでトピックを抽出しました。

トピック数はとりあえず50個にしました。

10個、20個、30個と試してみたけど、少ないと人間の直感とは合わない気がします。

結果の全件がこちら

0.057*生徒 + 0.024*会長 + 0.018*イベント + 0.013*水着 + 0.012*為
0.037*ポニーキャニオン + 0.028*花嫁 + 0.018*ライト + 0.015*勝負 + 0.014*ジーク
0.028*豪華 + 0.026*イラスト + 0.022*出版 + 0.021*太郎 + 0.018*社
0.029*GET + 0.028*太 + 0.023*隊 + 0.015*戦 + 0.014*隊長
0.034*蒼 + 0.027*歌 + 0.025*馬 + 0.015*引き + 0.015*条件
0.027*応募 + 0.026*キャンペーン + 0.024*付属 + 0.021*開催 + 0.018*あやかし
0.024*婚約 + 0.022*召喚 + 0.017*国王 + 0.016*結婚 + 0.015*騎士
0.037*コード + 0.036*獣 + 0.031*伯爵 + 0.026*ファンタジア + 0.022*シリアル
0.032*電撃 + 0.023*収録 + 0.020*編 + 0.018*キス + 0.017*シナリオ
0.123*勇者 + 0.031*魔王 + 0.026*妹 + 0.018*里 + 0.017*属性
0.024*樹 + 0.022*銀 + 0.015*紅 + 0.013*革命 + 0.013*リオン
0.047*君 + 0.032*道中 + 0.028*vs + 0.019*!》 + 0.016*右手
0.019*皇国 + 0.019*土地 + 0.018*武器 + 0.017*加速 + 0.016*――!?
0.028*エルフ + 0.025*吸血鬼 + 0.023*女神 + 0.019*転生 + 0.017*令嬢
0.036*探偵 + 0.030*殺人 + 0.022*連続 + 0.018*神社 + 0.017*寮
0.023*契約 + 0.013*対峙 + 0.013*人形 + 0.012*狩り + 0.011*ミッション
0.023*女の子 + 0.019*コメ + 0.016*生 + 0.014*子 + 0.012*ハーレム
0.028*版 + 0.027*周年 + 0.023*アニメ + 0.018*今年 + 0.014*本
0.065*魔王 + 0.035*帝国 + 0.018*同盟 + 0.018*理 + 0.017*軍
0.017*緋 + 0.013*お嬢様 + 0.013*執事 + 0.011*将 + 0.011*天然
0.031*祭 + 0.020*文化 + 0.019*リア + 0.013*郎 + 0.010*規模
0.058*王子 + 0.026*魔法 + 0.023*王女 + 0.019*様 + 0.017*イラスト
0.027*桜 + 0.016*残念 + 0.013*高校生 + 0.012*事故 + 0.012*修学旅行
0.036*学院 + 0.019*モテ + 0.018*黒幕 + 0.016*ゲーマー + 0.016*なみ
0.116*竜 + 0.023*霊 + 0.020*幻想 + 0.019*曲 + 0.019*華
0.030*悪魔 + 0.028*香 + 0.020*緒 + 0.020*満喫 + 0.019*薔薇
0.021*ミステリ + 0.021*千葉 + 0.020*京極 + 0.019*注目 + 0.019*埼玉
0.032*男子 + 0.021*結 + 0.020*零 + 0.017*ライフ + 0.016*銀賞
0.045*アリス + 0.031*カード + 0.021*百 + 0.019*魔界 + 0.016*枚
0.027*ダンジョン + 0.021*ぼく + 0.019*政治 + 0.015*紗 + 0.013*毬
0.025*組 + 0.025*先生 + 0.019*公式 + 0.019*by + 0.016*サイト
0.023*攻略 + 0.020*皇 + 0.016*宇宙 + 0.016*機 + 0.013*殺し
0.058*騎士 + 0.020*未来 + 0.019*聖 + 0.016*最強 + 0.016*人類
0.020*プレイヤー + 0.018*幽霊 + 0.015*ミステリー + 0.012*監視 + 0.011*日本
0.050*魔術 + 0.039*魔女 + 0.022*魔法 + 0.019*武 + 0.013*ドラゴン
0.072*魔法 + 0.038*村 + 0.027*感謝 + 0.017*珠 + 0.015*士
0.034*漫画 + 0.026*原作 + 0.024*愛 + 0.022*イケメン + 0.021*料理
0.036*葉 + 0.032*海賊 + 0.029*咲 + 0.020*祭り + 0.018*海
0.039*ライト + 0.030*悠 + 0.023*新人 + 0.017*導 + 0.014*花
0.020*夏 + 0.016*あなた + 0.016*春 + 0.015*菜 + 0.014*夫婦
0.031*雪 + 0.019*白 + 0.017*綾 + 0.015*魔神 + 0.013*空
0.038*達 + 0.032*島 + 0.027*精霊 + 0.022*天 + 0.016*使い
0.040*GA + 0.035*プレゼント + 0.020*奨励 + 0.014*司 + 0.014*気持ち
0.045*種類 + 0.028*迷宮 + 0.019*妖怪 + 0.016*怪異 + 0.014*憑
0.034*鬼 + 0.027*アプリ + 0.018*ログ + 0.017*紫 + 0.017*衣
0.034*神様 + 0.024*妹 + 0.021*族 + 0.019*法 + 0.014*日常
0.060*猫 + 0.030*堂 + 0.025*コン + 0.018*累計 + 0.017*宝石
0.032*貴族 + 0.028*城 + 0.026*豪華 + 0.022*章 + 0.017*執筆
0.055*応募 + 0.032*斗 + 0.031*説明 + 0.027*商品 + 0.026*表示
0.048*夫 + 0.031*アイドル + 0.027*天使 + 0.021*犬 + 0.017*マンガ

わかりやすいトピックとしては、このあたりでしょうか。

殺人事件と探偵のミステリ

0.036*探偵 + 0.030*殺人 + 0.022*連続 + 0.018*神社 + 0.017*寮

魔法とドラゴンが出てくるファンタジー

0.050*魔術 + 0.039*魔女 + 0.022*魔法 + 0.019*武 + 0.013*ドラゴン

中世風異世界の恋愛物

0.024*婚約 + 0.022*召喚 + 0.017*国王 + 0.016*結婚 + 0.015*騎士

プレゼントとかキャンペーンに応募みたいなのが、トピックとして抽出されてます。 このあたりは、前処理で取り除いておくべきものですね。

0.037*コード + 0.036*獣 + 0.031*伯爵 + 0.026*ファンタジア + 0.022*シリアル
0.028*豪華 + 0.026*イラスト + 0.022*出版 + 0.021*太郎 + 0.018*社
0.027*応募 + 0.026*キャンペーン + 0.024*付属 + 0.021*開催 + 0.018*あやかし
0.040*GA + 0.035*プレゼント + 0.020*奨励 + 0.014*司 + 0.014*気持ち

まとめ

gensimのLDAでそれっぽいトピックが抽出できた。

でも、人間にはよくわからないトピックも多数ある。

自然言語処理をやるならやはり前処理は大事。