WordCloud/word2vecを用いた「小説家になろう」人気作品のテキストマイニング
目をさますと、ニーナは既に起きていた。ノートPCに向かって何かを書いているようだ。
「おはよう」
声をかけると、ニーナは少し驚いたような顔をして、ノートPCを閉じた。何か見られたら困るようなものでも読んでいたのだろうか?
気にせず僕は作業を続けることにした。
1時間ほど作業すると、ニーナがPCを覗き込み、声をかけてきた。
「うまくいったの?」
僕はニヤリと笑った
「うまくいったよ」
そういい、僕はターミナルで「ls -l」とコマンドを叩くと、画面にファイルを示す情報が表示された
「255M 3 24 22:09 narou_text.txt」
「これがサイトの人気約50作品をスクレイピングしたテキストデータだ。225Mだから255メガバイトだね」
「225メガバイト?」
「昨日、2バイトが日本語1文字って話をしただろう。1メガバイトが大体100万バイトだから、50万文字。全部が日本語ってわけじゃないから、ざっと1億文字ってところかな」
「1億文字!?」
ニーナは目を丸くした
「そんなに集めてどうするの?」
「重要なのはここからさ、データを集めたら次は分析だ。データがどのような傾向にあるかを調べるんだ。そうすれば、自ずとどのような小説を書けば人気が出るのかわかるはずだ」
「どうやって分析するの?」
「WordCloudというPythonのライブラリを使うんだ。どんな単語がよく使われているのかを一目で可視化してくれるんだ。こんな感じにね」
そういい、僕はFig.5の画像を表示した
Fig.5 WordCloud
「あ、なんか出てきた」
「ふふ、凄いだろ。ちょっとノイズが多いけど、勇者だったり、冒険だったり、人間だったり、貴族だったり、エミリアだったり、馬車だったり、料理だったり、魔物だったりという特徴的なワードが出てきている」
「…つまり?」
「つまり…なんだ、魔物とか料理とか貴族とか、人間とかエミリアとか出して冒険する話を書けば人気でるってことだ!」
「…」
ニーナは険しい顔をした
「でも具体的にどんな話を書くの?ていうかエミリアって誰?」
「…」
「ま、まあこれは小手調べみたいなもんだ!ここからが本番だ!」
僕は、メガネをクイっと上に上げて話を続けた
「次に、Word2Vecを使う」
「ワードツーベク?」
「Wordは単語 2はto Vecはベクトル、単語をベクトルにするってことだね」
「ベクトル??」
「ベクトルっていうのは、なんというか、方向と強さを表す矢印みたいなものだ。こんなやつね」
そういい、僕は Fig.6みたいな矢印を書く
Fig.6 ベクトルのイメージ
「言葉を一定の法則にしたがって、こういった方向と強さを持った矢印に変換しちゃうのさ。矢印に変換することで、言葉同士の相関関係を知ることができる」
「相関関係」
「そう。つまり例えば2つの単語の矢印が、こんな感じに似た方向を示していたとする」
そういい、僕はFig.7のような2つの矢印を書いた
Fig.7 近い関係のベクトル
「この場合、2つの単語は非常に近い関係にある」
「でもこんな感じに、全然違う方向を向いていたら」
そういい、今度はFig.8のような矢印を書く
Fig.8 遠い関係のベクトル
「全然関係ないってことになる」
「この、似ている似ていないを判断する指標をcos類似度という」
「コサインるいじど?」
「そう、三角関数のサイン、コサイン、タンジェントのコサインだ。高校でならっただろう?2つのベクトルから生成される三角形のコサインを考えるのさ、数式的には以下だね」
そういい、僕はFig.9 を書いた
Fig.9 コサイン
つまり、コサインは0度のときに一番大きい値、すなわち1を示して、90度(直角)になると一番小さい値、すなわち0になるってわけ」
「…」
ニーナは考え込んでいるようだった
「まあとにかく、こうやって言葉の関係を調べることができるってわけさ。ちなみに、本来単語は非常に高い次元、今回だと300次元のベクトルになるから、こんなに簡単には図示できないんだけど、主成分分析を使って次元を削減することで、2次元平面にこの言葉の関係を投影することができる」
「しゅせいぶんぶんせき?じげんさくげん?次元大介?」
「えっと、主成分分析の話は複雑になるから今度にしようか、つまりはこういうことさ」
僕は、画像ファイルFig.10を表示した。
Fig.10 Word2Vec 1
「そう、エミリアはエミリア・シルバリオンのことだったんだ!」
「エミリア・シルバリオン…」
「ほ、他にも色々わかったぞ例えばこれを見てくれ」
そういい、僕は Fig.11 、 Fig. 12をニーナに見せた
Fig.11 Word2Vec 2
Fig.12 Word2Vec 3
「えっと、とりあえず言葉の関係は分かったんだけど…これでどうやって小説を書くの?」
「そ、それは…」
「今から考える!」
そういい、僕はPCを前に考え込んだ。ニーナは呆れた顔をしていたが、しばらくすると隣の部屋へ移動して寝てしまったようだ。
Edited by 269