Twitter上のツイートを利用した日本語学習(第二弾)

標準

前回1000万ツイート程を収集した上での日本語学習を実施しましたが、今回は更に倍にして2000万ツイートにしてみましたので、それを詳しくまとめていきます。

準備段階

今回は自作のPHPプログラムを使いまして、2062万4138ツイートを収集しました。前回は1161万2661ツイートでしたので、約2倍です。
これで日本語学習の精度は上がるのだろうか、精度は別問題にしてもどれくらい学習が変わるのか、これを今回は調べていきます。
準備段階は前回までの記事に全て纏まっていますので、そちらを参考にしていただくとして先に進んでいきます。また、このページの最後に実際に使った学習ファイルをダウンロード出来るようにしましたので、ご活用ください。(結構重いです)

ベクトル演算の結果

今回も例のごとく単語のベクトル演算をしてもらいました。参考とするために、前回と同じ演算です。早速見ていきましょう。

yoshipc@ubuntu:~/twitter/word2vec$ ./word-analogy tweets-train.bin
Enter three words (EXIT to break): 現在 地球 未来

Word: 現在  Position in vocabulary: 674

Word: 地球  Position in vocabulary: 3337

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            世界		0.603715
                                            人類		0.578384
                                            宇宙		0.550593
                                            現実		0.538544
                                            運命		0.516235
                                   明るい未来		0.514421
                                               空		0.510775
                                         この世		0.501839
                                            僕ら		0.501282
                                      希望の光		0.499918
                                         この街		0.493066
                                               夢		0.492678
                                            人間		0.489397
                                               道		0.489035
                                            太陽		0.487439
                                         きっと		0.486102
                                            永劫		0.480969
                                         セカイ		0.477885
                                         未来へ		0.475911
                                            生命		0.470979
                                            大地		0.469094
                                         生き方		0.466944
                                            叡智		0.463096
                                            きみ		0.462352
                                         侵略者		0.461892
                                            人生		0.459877
                                      君の笑顔		0.453077
                                            虚像		0.451170
                                               心		0.450787
                                            こと		0.447146
                                   大切なもの		0.447091
                                            道標		0.446497
                                         この国		0.446489
                                            遠く		0.445713
                                         大海原		0.445700
                                         地平線		0.445120
                                   ひとりでに		0.444735
                                            キミ		0.444560
                                         未来を		0.444312
                                      彼方から		0.444180


Enter three words (EXIT to break): 恐竜 噴火 人類

Word: 恐竜  Position in vocabulary: 14523

Word: 噴火  Position in vocabulary: 25009

Word: 人類  Position in vocabulary: 4424

                                              Word              Distance
------------------------------------------------------------------------
                                      日本国民		0.504782
                                      国際社会		0.498614
                                   放射能漏れ		0.486438
                                            瓦解		0.485425
                                            収束		0.477185
                                            国民		0.472936
                                      電源喪失		0.471543
                                            人民		0.465190
                                      政権交代		0.464547
                                         未曾有		0.464171
                                      日本民族		0.462117
                                            国家		0.450937
                                            滅亡		0.450119
                                            事象		0.449914
                                メルトダウン		0.447464
                                      われわれ		0.444761
                                            地球		0.444433
                                               瀕		0.441625
                                      日本政府		0.440596
                                            過ち		0.440204
                                   大東亜戦争		0.439783
                                            履行		0.437771
                                      原発事故		0.435660
                                            停戦		0.432246
                                            是認		0.431025
                                      敵国条項		0.430867
                                            直面		0.428798
                                            行使		0.427611
                                         中国軍		0.426728
                                            失政		0.426705
                                      武力行使		0.426567
                                         我が国		0.424916
                                      安倍政権		0.424625
                                      巨大地震		0.423229
                                            暴落		0.422987
                                            存在		0.422820
                                      金融危機		0.421636
                                            戦後		0.420972
                                            事態		0.419899
                                            戦没		0.419073

Enter three words (EXIT to break): 過去 戦争 未来

Word: 過去  Position in vocabulary: 1033

Word: 戦争  Position in vocabulary: 2559

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            平和		0.522789
                                            侵略		0.517995
                                            国家		0.517953
                                      民主主義		0.513909
                                            争い		0.508577
                                            独裁		0.508006
                                            恐慌		0.491936
                                            戦い		0.487261
                                            破滅		0.485378
                                      侵略戦争		0.484970
                                            革命		0.484187
                                            秩序		0.481204
                                            滅ぶ		0.479859
                                      日本侵略		0.476639
                                            圧政		0.475845
                                      世界平和		0.475404
                                      資本主義		0.475313
                             第三次世界大戦		0.475173
                                      社会主義		0.474103
                                            支配		0.473573
                                            中露		0.472770
                                            僕ら		0.472601
                                            我々		0.472268
                                   日本の農業		0.472103
                                         私たち		0.470849
                                      共産主義		0.468439
                                   新自由主義		0.466063
                                   ニヒリズム		0.465786
                                               国		0.465224
                                         核戦争		0.465120
                                            滅亡		0.464730
                                            闘い		0.464701
                                   明るい未来		0.464211
                                      保護主義		0.462045
                                            紛争		0.459765
                                            滅び		0.458792
                                            鎖国		0.456679
                                         為政者		0.455943
                                      全体主義		0.455139
                                            反乱		0.454954


Enter three words (EXIT to break): 現在 核戦争 未来 

Word: 現在  Position in vocabulary: 674

Word: 核戦争  Position in vocabulary: 69314

Word: 未来  Position in vocabulary: 1570

                                              Word              Distance
------------------------------------------------------------------------
                                            戦争		0.569488
                                            現実		0.550737
                                      人類滅亡		0.528336
                                            破滅		0.518106
                                      保護主義		0.512427
                                            滅ぶ		0.503720
                                      全体主義		0.494948
                                            運命		0.493296
                                            滅び		0.492078
                                      世界平和		0.489570
                             第三次世界大戦		0.489473
                                      民主主義		0.488292
                                            平和		0.487700
                                      共産主義		0.483427
                             ナショナリズム		0.482726
                                   明るい未来		0.482302
                                      社会主義		0.481790
                                            独裁		0.479569
                                            人類		0.475583
                                      世界恐慌		0.469627
                                            恐慌		0.469290
                                   ファシズム		0.469131
                                ポピュリズム		0.467034
                                            中露		0.466852
                                            侵略		0.466768
                                         未来を		0.466476
                                      独裁国家		0.466271
                                            災い		0.465553
                                            専制		0.464848
                                            滅亡		0.464760
                                            永劫		0.462897
                                            こと		0.462651
                                            無力		0.461402
                                         権力者		0.459051
                                            災厄		0.459035
                                            虚像		0.457459
                                トランプ政権		0.457113
                                      侵略戦争		0.454696
                                            政権		0.454047
                                            それ		0.453413


Enter three words (EXIT to break): 女性 かわいい 男性

Word: 女性  Position in vocabulary: 492

Word: かわいい  Position in vocabulary: 275

Word: 男性  Position in vocabulary: 841

                                              Word              Distance
------------------------------------------------------------------------
                                         可愛い		0.888274
                                      カワイイ		0.761770
                                   かっこいい		0.757136
                                      かわゆい		0.748681
                                   かわいいよ		0.730760
                                      かわいー		0.703242
                                      可愛い〜		0.691793
                                   カッコイイ		0.671846
                                   かわいかっ		0.653079
                                      可愛かっ		0.652575
                                            すき		0.645260
                                   かわいい〜		0.639327
                                      可愛いい		0.631806
                                      可愛いー		0.631314
                                         萌える		0.616470
                                         似合う		0.616324
                                      格好いい		0.607348
                                      かわいく		0.593961
                                   可愛らしい		0.580756
                                   かわいい~		0.576812
                                         可愛く		0.575392
                                      あざとい		0.572130
                                      めんこい		0.571543
                                   かわいいー		0.571391
                                かわいらしい		0.566938
                                         ずるい		0.565993
                                   かわいいっ		0.565969
                                      かわいっ		0.565026
                                   愛くるしい		0.558229
                                      かわいぃ		0.557168
                                   ちっちゃい		0.549026
                                      可愛いっ		0.547052
                                         かわい		0.545649
                                      色っぽい		0.545449
                                   おもしろい		0.543379
                                            可愛		0.543249
                                      かわゆし		0.543152
                                      かわい〜		0.538648
                                      可愛いぃ		0.537529
                                      可愛い~		0.536874

ちょっと良くわからないので、前回の結果と比較してみます。

着色は両方の演算結果に登場した単語です。一見すると1000万ツイート分の結果を濃縮したのが2000万ツイート分の結果という感じな気がします。これを何か数字で傾向を算出出来れば良いのですが、このような分野には疎いものでよくわかりません。何か良い手段が有りましたら、コメントなどでお知らせください。

また、「恐竜 噴火 人類」の演算結果ではなぜか原発系の用語が殆どなくなりました。他にも色々な変化が見られました。やっぱり日本語モデルを2倍にするだけでも変化はあるんですね。次は関連語出力です。

関連語出力

早速見ていきます。

yoshipc@ubuntu:~/twitter/word2vec$ ./distance tweets-train.bin
Enter word or sentence (EXIT to break): トランプ

Word: トランプ  Position in vocabulary: 661

                                              Word       Cosine distance
------------------------------------------------------------------------
                                   トランプ氏		0.843974
                                      ヒラリー		0.814557
                                   クリントン		0.773175
                       ドナルド・トランプ		0.709894
                             トランプ大統領		0.706651
                    ヒラリー・クリントン		0.685431
                       トランプ次期大統領		0.674865
                                         民主党		0.671567
                                   次期大統領		0.660402
                    バーニー・サンダース		0.657438
                                      対立候補		0.646014
                                      アメリカ		0.640917
                          ドゥテルテ大統領		0.636720
                          リベラルメディア		0.635047
                                      極右政党		0.634951
                                      ネオコン		0.632521
                                   アメリカ人		0.632108
                                         共和党		0.631699
                                      副大統領		0.631480
                                            選挙		0.628310
                 エスタブリッシュメント		0.627984
                                      リベラル		0.626295
                          ドナルドトランプ		0.625530
                                         選挙後		0.624006
                                   ウォール街		0.622957
                                クリントン氏		0.621994
                                      選挙結果		0.615811
                                   オハイオ州		0.615090
                                            米国		0.614540
                                         大統領		0.613802
                                         アサド		0.610111
                                   大統領選挙		0.608435
                                         オバマ		0.607592
                                         安倍氏		0.604816
                          反グローバリズム		0.604310
                                   ネタニヤフ		0.602129
                                ポピュリスト		0.601324
                                         選挙戦		0.601310
                                   ドゥテルテ		0.600674
                                         ルペン		0.599487

Enter word or sentence (EXIT to break): ハルヒ

Word: ハルヒ  Position in vocabulary: 23003

                                              Word       Cosine distance
------------------------------------------------------------------------
                                      ストパン		0.645798
                                      けいおん		0.638650
                                      とらドラ		0.636988
                                花咲くいろは		0.632872
                                   らき☆すた		0.628135
                                      シュタゲ		0.627787
                                      ギルクラ		0.617519
                                          TARITARI		0.612508
                                グレンラガン		0.612221
                                      まどマギ		0.610592
                                シンフォギア		0.608070
                                      らきすた		0.606560
                             のんのんびより		0.602893
                                      バカテス		0.602474
                                         SHIROBAKO		0.601572
                                         ギアス		0.596853
                                         化物語		0.596690
                                   けいおん!		0.589731
                             ハヤテのごとく		0.586546
                             リリカルなのは		0.584632
              ウィッチクラフトワークス		0.584533
                                         結界師		0.584402
                                      かんなぎ		0.579284
                                   キルラキル		0.578478
                                      リトバス		0.577740
                          ブラックラグーン		0.577532
                                      ひぐらし		0.572559
                                      バクマン		0.568581
                          エルフェンリート		0.567559
                                      クラナド		0.566878
                          涼宮ハルヒの憂鬱		0.566182
                          アクセルワールド		0.565847
                                      きんモザ		0.565820
                                カブトボーグ		0.563231
                          アルスラーン戦記		0.561105
                                      プリリズ		0.559184
                 ストライクウィッチーズ		0.558513
                     対魔導学園35試験小隊		0.558363
                                      これゾン		0.558080
                                生徒会の一存		0.557798

Enter word or sentence (EXIT to break): Twitter

Word: Twitter  Position in vocabulary: 583

                                              Word       Cosine distance
------------------------------------------------------------------------
                                   ツイッター		0.869226
                                           twitter		0.845602
                                タイムライン		0.690816
                                   ついったー		0.646548
                                          Facebook		0.642719
                                      インスタ		0.632823
                                               SNS		0.613419
                             フェイスブック		0.602303
                             Twitter		0.578967
                             インスタグラム		0.563292
                                          facebook		0.560759
                                              LINE		0.552092
                                   ツィッター		0.539288
                                         Instagram		0.533319
                                      ツイート		0.524300
                                         SNS		0.520925
                                                TL		0.514066
                                         ニコ動		0.505256
                                      ツイッタ		0.496323
                                カカオトーク		0.491717
                                         ネット		0.490409
                                      ネット上		0.486285
                                             Slack		0.485163
                                               sns		0.479989
                                   アカウント		0.478253
                                         カイブ		0.477760
                                プッシュ通知		0.473205
                                         スパム		0.464073
                                            TL		0.459924
                                            GitHub		0.458841
                                            reddit		0.458549
                                            通知		0.456949
                                ツイッター上		0.456893
                                            携帯		0.456676
                                         プロフ		0.454460
                                      スカイプ		0.454132
                                      ブラウザ		0.454094
                                   コメント欄		0.453342
                                            safari		0.452758
                                            Flickr		0.450859

こちらも、結果を見ただけではよく分かりませんので、別にまとめてみます。

サンプル数が2つしか無いのではっきりとしたことは言えませんが、終わった話題(=安定した話題)は1000万と2000万では入れ替わりがそう激しくありませんが、常に変動し続ける話題(=不安定な話題)は変化が大きいです。この不安定な話題の代表が「アニメ」であって、比較を見てからも分かるように安定した話題と比較すれば大きく結果が異なっているのが分かります。

考察

Twitterという常に変動する言葉の辞書を活用することで今回一番良くわかったのは「何の話題がHOTなのか」です。例えば、関連語出力でも顕著に出ましたが、大統領選挙は現在さほど話題にはなっていませんが、アニメは1年中放送しているものなので常に話題が変動していきます。このような変化を大きく影響を受けることがよく分かりました。これからは更に日本語を収集する手段を考えながら精度の高い日本語のモデルを作っていけたらと思います。続編をお楽しみに!(ちなみに1000万ツイート収集するのに低スペックのパソコンでは16日かかりました。2000万で1ヶ月ちょいです。)

日本語モデル(?)の頒布

“tweets-train.zip” をダウンロード tweets-train.zip – 184 回のダウンロード – 462 MB


こちらが2000万ツイート分の日本語モデルです。著作権等は放棄しますが、自作発言、二次配布、商用利用はお控えください。また、予期せぬタイミングで削除に至る可能性も有りますので、その点もご承知おきください。ご利用時になにかコメントいただけると励みになります。よろしくお願いします。

追記(2017/08/11):今日の出来事に触発されたので、もう一回、ツイート長期収集を再開します。

Twitter上のツイートを利用した日本語学習

標準

現状

前回作成したプログラムで1000万(正確には1161万2661)ツイートを収集し、人工知能の元になる日本語学習のモデルを作成しました。それを、前々回の手順に基づき、色々と加工して語彙の塊を作ったところまで話は進みます。過去の記事にそこら辺の工程は記してあるので、今回はその結果について考察していきます。

ベクトル演算の結果

前々回の手順と同じ演算をしてみました。結構結果が違うところからかなりの語彙の差が見られます。

yoshipc@ubuntu:~/twitter/word2vec$ ./word-analogy tweets-train.bin											
											
Enter three words (EXIT to break): 現在 地球 未来											
											
Word: 現在 Position in vocabulary: 646											
											
Word: 地球 Position in vocabulary: 3132											
											
Word: 未来 Position in vocabulary: 1494											
											
	Word			Distance							
------------------------------------------------------------------------											
	世界			0.602624							
	人類			0.543273							
	現実			0.514047							
	宇宙			0.512201							
	道標			0.508042							
	この世			0.50619							
	この街			0.491833							
	セカイ			0.489193							
	人生			0.477655							
	人間			0.476668							
	希望の光		0.473739							
	道			0.473478							
	真理			0.469095							
	明るい未来		0.468303							
	素晴らしい世界		0.466917							
	空			0.466508							
	僕ら			0.461174							
	世界平和		0.459152							
	新しい世界		0.455947							
	夢			0.454776							
	彼方			0.453812							
	海へ			0.451184							
	生き物			0.451023							
	この国			0.450765							
	運命			0.449973							
	きっと			0.448351							
	生き方			0.446492							
	叡智			0.445666							
	キミ			0.444632							
	恒星			0.443009							
	海の底			0.442617							
	命			0.441733							
	輪廻転生		0.44141							
	侵略者			0.441408							
	死地			0.44047							
	旅路			0.440278							
	きみ			0.439143							
	公転			0.437911							
	夜空			0.437558							
	君の笑顔		0.434687							
											
Enter three words (EXIT to break): 恐竜 噴火 人類											
											
Word: 恐竜 Position in vocabulary: 15061											
											
Word: 噴火 Position in vocabulary: 22118											
											
Word: 人類 Position in vocabulary: 4781											
											
	Word			Distance							
------------------------------------------------------------------------											
	原発事故		0.532098							
	電源喪失		0.513952							
	福島原発事故		0.464274							
	太平洋戦争		0.46328							
	ラニーニャ現象		0.462596							
	人民			0.4581							
	日本国民		0.45673							
	巨大地震		0.456336							
	金融危機		0.456008							
	国民			0.448911							
	それら			0.446807							
	政権交代		0.445388							
	立証			0.443767							
	滅亡			0.442781							
	放射能漏れ		0.442724							
	災害			0.44182							
	政府			0.440498							
	我が国			0.43956							
	収束			0.438271							
	先の大戦		0.435819							
	大地震			0.435565							
	原子力発電所		0.433285							
	核戦争			0.433225							
	日本国			0.432804							
	暴風			0.430495							
	われわれ		0.429471							
	事象			0.427713							
	内部被曝		0.427674							
	日本軍			0.427604							
	金融経済		0.427537							
	暴落			0.427348							
	領海			0.426493							
	経済成長		0.426488							
	死			0.426103							
	自然災害		0.425942							
	中性子			0.424873							
	植民地支配		0.424667							
	トリチウム		0.421269							
	空爆			0.419897							
	福島第一原発事故	0.419747							
											
Enter three words (EXIT to break): 過去 戦争 未来											
											
Word: 過去 Position in vocabulary: 993											
											
Word: 戦争 Position in vocabulary: 2402											
											
Word: 未来 Position in vocabulary: 1494											
											
	Word			Distance							
------------------------------------------------------------------------											
	国家			0.549469							
	世界平和		0.526436							
	侵略			0.501115							
	アメリカ		0.501084							
	滅亡			0.500169							
	平和			0.493855							
	国			0.493639							
	私たち			0.492099							
	社会主義		0.4897							
	徴兵制			0.487121							
	平和憲法		0.486578							
	繁栄			0.484626							
	徴兵			0.473956							
	自主防衛		0.473593							
	多国籍企業		0.472732							
	軍事力			0.470309							
	この国			0.469006							
	秩序			0.468887							
	変革			0.468756							
	独裁			0.468424							
	軍隊			0.467761							
	民主主義		0.467356							
	滅び			0.466891							
	戦い			0.466708							
	祖国			0.463552							
	抑止力			0.463028							
	将来			0.460826							
	主権			0.457991							
	争い			0.457877							
	滅びる			0.457405							
	現実			0.455699							
	侵略戦争		0.453849							
	超大国			0.453782							
	建国			0.451772							
	紛争			0.450906							
	核戦争			0.450699							
	世界の終わり		0.450622							
	存亡			0.449972							
	社会			0.449561							
	滅ぶ			0.448486							
											
Enter three words (EXIT to break): 現在 核戦争 未来											
											
Word: 現在 Position in vocabulary: 646											
											
Word: 核戦争 Position in vocabulary: 64386											
											
Word: 未来 Position in vocabulary: 1494											
											
	Word			Distance							
------------------------------------------------------------------------											
	現実			0.550296							
	戦争			0.54772							
	滅亡			0.523266							
	それ			0.496773							
	滅びる			0.496528							
	滅ぶ			0.494136							
	ナショナリズム		0.491946							
	第三次世界大戦		0.488057							
	人類			0.484206							
	ヒトラー		0.483821							
	世界平和		0.472263							
	トランプ政権		0.468622							
	抑止力			0.4675							
	グローバル化		0.466767							
	破滅			0.466432							
	戦後日本		0.466088							
	こと			0.465714							
	民主主義		0.45992							
	世界の終わり		0.45799							
	保護主義		0.457665							
	平和			0.454754							
	アメリカ		0.454483							
	社会主義		0.453954							
	この国			0.453771							
	大統領			0.453712							
	存亡			0.452943							
	属国			0.449028							
	変革			0.448101							
	滅び			0.447887							
	死			0.447346							
	人類滅亡		0.446758							
	民衆			0.445977							
	徴兵制			0.445856							
	道義			0.445382							
	祖国			0.444785							
	軍事力			0.444622							
	日米安保		0.443597							
	米軍撤退		0.443395							
	政権			0.443134							
	将来			0.442936							
											
Enter three words (EXIT to break): 女性 かわいい 男性											
											
Word: 女性 Position in vocabulary: 473											
											
Word: かわいい Position in vocabulary: 275											
											
Word: 男性 Position in vocabulary: 791											
											
	Word			Distance							
------------------------------------------------------------------------											
	可愛い			0.87939							
	かっこいい		0.749638							
	かわいいよ		0.717992							
	かわゆい		0.717315							
	カワイイ		0.703926							
	かわいー		0.67568							
	すき			0.639878							
	カッコイイ		0.637353							
	可愛いい		0.635035							
	可愛い〜		0.626606							
	かわいかっ		0.626206							
	可愛かっ		0.622716							
	似合う			0.614752							
	格好いい		0.614094							
	萌える			0.606998							
	可愛らしい		0.588543							
	かわいいっ		0.578027							
	めんこい		0.577494							
	かわいぃ		0.576739							
	かわいい〜		0.569993							
	色っぽい		0.566761							
	かわいく		0.564131							
	大人っぽい		0.562167							
	可愛く			0.560525							
	カワユイ		0.559427							
	可愛いっ		0.558375							
	可愛いー		0.554952							
	おもしろい		0.553673							
	かわいいー		0.55007							
	愛くるしい		0.550066							
	かわいい~		0.54409							
	かわい			0.538456							
	ずるい			0.537333							
	可愛			0.53668							
	可愛い~		0.532784							
	かっこいー		0.5314							
	だいすき		0.527381							
	推せる			0.527268							
	お似合い		0.522254							
	あざとい		0.520163

これが演算結果です。本当にTwitterの語彙を吸い取ったっていう感じの結果ですね。ただ、まだまだ的をいていないと判断できる単語がたくさん有ります。1000万ツイートでも全然足りないんですね。また、大分内容が傾いてしまっているのでこれもなんとか是正したいところです。

関連語出力

次に「○○といえば?」という問いかけに対する答えを見てみます。今回は独自調査です。

										
yoshipc@ubuntu:~/twitter/word2vec$ ./distance tweets-train.bin											
											
Enter word or sentence (EXIT to break): トランプ											
											
Word: トランプ Position in vocablary: 370											
											
	Word			distance							
------------------------------------------------------------------------											
	トランプ氏		0.835056							
	ヒラリー		0.796449							
	クリントン		0.76346							
	ドナルド・トランプ	0.692498							
	トランプ大統領		0.668313							
	民主党			0.654428							
	アメリカ		0.648574							
	選挙			0.626273							
	トランプ次期大統領	0.625419							
	ドナルドトランプ	0.620136							
	共和党			0.616822							
	安倍さん		0.612783							
	エスタブリッシュメント	0.612736							
	バーニー・サンダース	0.60968							
	ヒラリー・クリントン	0.608063							
	対立候補		0.60636							
	アメリカ人		0.60183							
	ネオコン		0.596834							
	リベラル		0.595705							
	クリントン氏		0.595669							
	野沢直子		0.592253							
	副大統領		0.589429							
	上院議員		0.58592							
	ヒトラー		0.584391							
	大統領			0.582424							
	木村太郎		0.581774							
	橋下徹			0.579314							
	選挙結果		0.579113							
	オバマ			0.576084							
	選挙戦			0.57552							
	朴槿恵			0.571346							
	次期大統領		0.570646							
	ドゥテルテ		0.567364							
	政治家			0.567204							
	安倍内閣		0.566789							
	副大統領候補		0.566509							
	米国			0.564193							
	ジュリアーニ		0.563054							
	極右			0.562501							
	ウォール街		0.562185							
											
Enter word or sentence (EXIT to break): ハルヒ											
											
Word: ハルヒ Position in vocablary: 29688											
											
	Word			distance							
------------------------------------------------------------------------											
	らき☆すた		0.654328							
	CLANNAD			0.651727							
	キルラキル		0.649461							
	生徒会の一存		0.643134							
	化物語			0.626379							
	男子高校生の日常	0.624848							
	とらドラ		0.621756							
	シャーマンキング	0.620102							
	ストパン		0.613385							
	シュタゲ		0.610245							
	ギルクラ		0.607969							
	バカテス		0.607291							
	けいおん!		0.604257							
	はがない		0.598865							
	禁書			0.597113							
	ノゲノラ		0.597092							
	生徒会役員共		0.59606							
	リリカルなのは		0.595046							
	あの花			0.59435							
	俺の妹がこんなに可愛いわけがない	0.593053							
	のんのんびより		0.592703							
	ヒカルの碁		0.590836							
	クラナド		0.589519							
	けいおん		0.586876							
	青エク			0.586024							
	らきすた		0.584302							
	ガンダム00		0.583822							
	スケダン		0.581918							
	絶園のテンペスト	0.578972							
	うまるちゃん		0.576911							
	俺妹			0.57667							
	物語シリーズ		0.575383							
	とらドラ!		0.569344							
	寄生獣			0.568773							
	スラダン		0.56851							
	るろ剣			0.568442							
	ゼロの使い魔		0.566373							
	バクマン		0.565495							
	監獄学園		0.564057							
	俺ガイル		0.563473							

ハルヒの結果に一切キャラクターの出力がなく、延々と他のアニメのタイトルを出力しています。うーん、といった感じです。また、アメリカ大統領選挙の時期にツイートを収集したので結構そこら辺の語彙に豊富に見えます。まだまだ語彙に偏りがあることがこちらでも分かりますね。

今後の展望

現在1000万ツイートでもこの語彙力の偏り様なので、現在更に1000万ツイートを収集し、合計で2000万ツイートにしようと再び収集をはじめました。近い内にまた続編を更新するのでお楽しみに。

Twitter上のツイートをランダムに抽出する

標準

前回のword2vec特集で最後にちらっと紹介したTwitter上からランダムにツイートを抽出し、それをテキストに貯めていく方法について書いていきます。

利用するAPI

今回利用するAPIはTwitter社が公開するStreamingAPIの内、2番目くらいに需要がありそうな「statuses/sample」です。これと合わせて公開されているStreamingAPIは以下の3つあり、それぞれのAPIで全然使用用途が変わってきます。

API 説明 制限
POST statuses/filter フィルターを掛けて投稿を取得。地理的、アカウント別など様々な種類がある。ここでは扱わない。 特に制限なし
GET statuses/sample Twitterで投稿されているツイートをランダムに取得。少しくらいならフィルター掛けられる。 特に制限なし
GET statuses/firehose Twitterで投稿されている全てのツイートを取得。膨大なものになる。 Twitter社への特別な申請が必要。企業向け。

以上です。この内のstatuses/sampleを使って、ツイート収集プログラムを作っていきます。

利用するライブラリ

今回はGitHubから以下のライブラリを引っ張ってきました。
fennb/phirehose
このライブラリを使用することで、StreamingAPIへの認証・接続を行うことが出来ます。

プログラム

上記のGitHubプロジェクトからsampleのサンプルソースを引っこ抜いて来て、それを改造するだけで簡単に出来ます。ただ、今回は人工知能への学習用のモデルになるので、極力無駄な記号などが入らないように色々と頑張ります。

<?php
$api_key = '***************************' ;
$api_secret = '***************************************************' ;
$access_token='*************************************************';
$access_token_secret='********************************************';
require_once(dirname(__FILE__) . '/lib/Phirehose.php');
require_once(dirname(__FILE__) . '/lib/OauthPhirehose.php');
class SampleConsumer extends OauthPhirehose
{
  public function enqueueStatus($status)
  {
    $data=json_decode($status,true);
    $replaced=preg_replace('/(\n|\r)/','',$data['text']);
    $replaced=preg_replace('/@(?:\d|[a-z]|_)*\w+/','',$replaced);
    $replaced=preg_replace('/RT : /','',$replaced);
    $replaced=preg_replace('#https://[^¥s]*#','',$replaced);
    $replaced=preg_replace('/#[^\s]*/','',$replaced);
    $replaced.=PHP_EOL;
    if(mb_strlen($replaced,'UTF-8')>10) {
      print $replaced;
      error_log($replaced,3,dirname(__FILE__) . '/tweets.txt');
    } else {
      print "/////===============UNCOUNTED===============/////" . PHP_EOL;
    }
  }
}
define("TWITTER_CONSUMER_KEY", $api_key);
define("TWITTER_CONSUMER_SECRET", $api_secret);
define("OAUTH_TOKEN", $access_token);
define("OAUTH_SECRET", $access_token_secret);
$sc = new SampleConsumer(OAUTH_TOKEN, OAUTH_SECRET, Phirehose::METHOD_SAMPLE);
$sc->setLang('ja');
$sc->consume();

追記(2017/08/11):正規表現をちょっと変えました。

取得したツイートを以下の順番で正規表現による置換で無駄な記号などを置き換えていきます。

  1. ツイート内の改行を全て削除
  2. @に続くアルファベット・数字・記号(=@リプライ)を削除
  3. リツイートの接頭辞を削除
  4. リンクを削除
  5. ハッシュタグ・リツイート時の記号・空白文字(スペース・タブなど)を削除

置換されたツイート内容は10文字以下であると、文脈判定の条件上、ただの意味狂わせになりかねないので削除します。それで10文字より多いツイートはerror_logを乱用してテキストに記録していくといったものです。
ちなみにプログラム中に登場する「PHP_EOL」はPHP専用の改行コードです。

性能

色々なプログラムを試してみたところ、これが最速だったのですが、パソコンのスペックにもよると思いますが大体1時間に1万以上は収集できるようです。また、

cat tweets.txt | wc -l

とパイプで繋いだコマンドを打つことで、テキストの行数を数えて収集したツイートの数を数えることが出来ます。便利です。あと、収集したツイートでテキスト検索したい時は、

cat tweets.txt | grep "hoge"

とこれまたパイプで繋いだコマンドを打つことで色々と見れます。パイプって便利。

10万ツイート程収集しただけでも結構な語彙力になっていて、日本語モデルとして期待できそうです。

word2vecでWikipediaのダンプを遊ぶ

標準

前回、Wikipediaのダンプファイルを用いて学習ファイルを生成しました。今回はこのデータを使って、ちゃんと学習は出来たのか?そして、word2vecならではの遊び方を紹介していきます。今回はUbuntuのコマンドラインを使っていきます。まずは、word2vecの入っているディレクトリーにカレントディレクトリーを合わせましょう。

まずは、distanceというプログラムを起動します。引数として学習ファイルを指定します。長くて30秒ほどすると「Enter word or sentence (EXIT to break):」という指示が表示されます。このアプリケーションでは入力した単語と近いベクトルを有した単語を上位40件まで列挙してくれるというものです。
試しに幾つか単語を入力してみた結果を紹介します。

yoshipc@ubuntu:~/word2vec$ ./distance jawiki-train.bin
Enter word or sentence (EXIT to break): 東京

Word: 東京  Position in vocabulary: 369

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            大阪			0.819656
                                            名古屋		0.728486
                                            横浜			0.721580
                                            京都			0.690569
                                            関西			0.666182
                                            新宿			0.657751
                                            札幌			0.644623
                                         神奈川			0.644338
                                            新潟			0.633014
                                            仙台			0.624947
                                            神戸			0.622716
                                            福岡			0.622510
                                            銀座			0.620424
                                            静岡			0.609896
                                            関東			0.605483
                                            浅草			0.602041
                                            函館			0.591723
                                            池袋			0.584673
                                            渋谷			0.578642
                                         日本橋			0.578430
                                         八王子			0.571659
                                            金沢			0.567943
                                         東京都			0.566478
                                            埼玉			0.562925
                                            上海			0.562798
                                            調布			0.562326
                                            東都			0.560888
                                            広島			0.559834
                                            品川			0.558159
                                         世田谷			0.556256
                                         六本木			0.554119
                                            青森			0.549229
                                            東北			0.546918
                                            小樽			0.546204
                                            九州			0.544958
                                         武蔵野			0.542167
                                         お台場			0.540832
                                            熊本			0.538358
                                            帝都			0.536352
                                         日比谷			0.531976

Enter word or sentence (EXIT to break): 地球

Word: 地球  Position in vocabulary: 1233

                                              Word       Cosine distance
------------------------------------------------------------------------
                                            宇宙			0.821528
                                            火星			0.812108
                                            惑星			0.797727
                                         太陽系			0.790921
                                            人類			0.738912
                                            木星			0.733991
                                         銀河系			0.733956
                                            銀河			0.708870
                                            月面			0.693097
                                      宇宙空間			0.655918
                                         冥王星			0.651471
                                            太陽			0.633461
                                            水星			0.627036
                                   	地球の危機		0.626256
                                            土星			0.623206
                          	   ブラックホール			0.617673
                                   天の川銀河			0.614921
                                      人工惑星			0.614166
                                            北極			0.612878
                                      暗黒大陸			0.611285
                                   地球の大気			0.609744
                                            南極			0.606897
                                               星		0.604035
                                         海王星			0.603326
                                         地球人			0.599359
                                         天王星			0.597761
                          デジタルワールド			0.596115
                                         宇宙船			0.593324
                                      ガニメデ			0.593323
                                            世界			0.592610
                                            恒星			0.591629
                                         人間界			0.590720
                             アトランティス			0.588247
                                   ラーメタル			0.586938
                                ファルガイア			0.584400
                                            地上			0.583851
                                         ゴラス			0.583015
                                         侵略者			0.581611
                                ハルケギニア			0.581090
                                            星団			0.579153

Enter word or sentence (EXIT to break): 未来

Word: 未来  Position in vocabulary: 2337

                                              Word       Cosine distance
------------------------------------------------------------------------
                                         未来を			0.665130
                                   明るい未来			0.644872
                                         未来へ			0.637368
                                               夢		0.619448
                                   新しい世界			0.606247
                                   地球の危機			0.591318
                                         未来人			0.590926
                                            宇宙			0.571891
                                   本当の自分			0.571252
                          デジタルワールド			0.564416
                                   理想の世界			0.564250
                                            真実			0.561864
                                            現実			0.559642
                                            運命			0.558397
                                         近未来			0.554683
                                         カタチ			0.552179
                                            破滅			0.541106
                          タイムトラベラー			0.540935
                                         別世界			0.538001
                                         こころ			0.537282
                                            人類			0.536730
                                            地球			0.533530
                                            世界			0.532455
                                            叡智			0.524632
                                         理想郷			0.523804
                                            理想			0.521488
                                            幸福			0.518942
                                         みらい			0.518518
                                            明日			0.516735
                                         私たち			0.515698
                                世界の終わり			0.513908
                                      大切な人			0.513858
                                         行く末			0.511889
                                   最後の人間			0.511708
                                      未来社会			0.509263
                                         この国			0.509024
                          セレンディピティ			0.508971
                                      時間旅行			0.508526
                                            僕ら			0.508296
                                   最後の願い			0.506727

確かにそれと近い単語が出力されていますが、全く関係ない単語も幾つか見受けられます。まだ日本語モデルが足りなかったんですね。

次にword-analogyというプログラムを動かしていきます。こちらはベクトル演算が出来るという優れもので、例えば「恐竜 噴火 人類」と3つの単語を渡すと、自動的に「噴火 – 恐竜 + 人類」の演算を行い、感覚的には「恐竜 : 噴火 = 人類 : X」のXを返してくれます。日本語で言うところの「恐竜の噴火は人類にとってXに相当する」と言った感じでしょうか。実際は200次元のベクトルで演算していますが、平面ベクトルで表現するとこんな感じです。

word2vecベクトル演算

こんな感じに簡単に私達の知らない情報を引き抜けるんですね。信じるか信じないかはアナタ次第ですが。では以下ではいくつか気になった演算をしてみた結果を。

yoshipc@ubuntu:~/word2vec$ ./word-analogy jawiki-train.bin
Enter three words (EXIT to break): 現在 地球 未来

Word: 現在  Position in vocabulary: 114

Word: 地球  Position in vocabulary: 1233

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                                            宇宙			0.688643
                                   地球の危機			0.619962
                                            人類			0.589227
                                   新しい世界			0.562798
                                            銀河			0.560886
                                            火星			0.550297
                                         太陽系			0.548981
                                            惑星			0.545989
                          タイムトラベラー			0.539157
                                            時空			0.532585
                                            世界			0.529007
                                         宇宙人			0.524593
                          デジタルワールド			0.522972
                                         侵略者			0.519479
                                         未来人			0.516680
                                         銀河系			0.505112
                                         宇宙へ			0.501737
                                         別世界			0.498040
                                   明るい未来			0.493679
                                   理想の世界			0.492330
                                      地球環境			0.488340
                                         金星人			0.486031
                                            星空			0.485491
                                            太陽			0.484105
                                         地球人			0.482406
                                            運命			0.480751
                                            大地			0.480510
                                         火星人			0.480290
                                      エウレカ			0.480114
                                            月面			0.478332
                                               星		0.476642
                                      タナトス			0.474876
                                            人間			0.474285
                                         月世界			0.473038
                                         異次元			0.472115
                                         未来へ			0.469909
                             ブラックホール			0.469258
                                      恐竜時代			0.467985
                                   最後の人間			0.467846
                                            真実			0.466832

Enter three words (EXIT to break): 恐竜 噴火 人類

Word: 恐竜  Position in vocabulary: 6929

Word: 噴火  Position in vocabulary: 7768

Word: 人類  Position in vocabulary: 3591

                                              Word              Distance
------------------------------------------------------------------------
                                      火山活動			0.588478
                                         大洪水			0.570087
                                            洪水			0.568536
                                            地震			0.525334
                                            飢饉			0.523110
                                      群発地震			0.519757
                                         大地震			0.516680
                                         干ばつ			0.514588
                                            水害			0.513399
                                      地殻変動			0.507397
                                         火砕流			0.502001
                                         山火事			0.501575
                                   爆発的噴火			0.501405
                                      山体崩壊			0.497568
                                            津波			0.493958
                                   水蒸気爆発			0.491090
                                            大火			0.488430
                                            旱魃			0.486605
                                            日食			0.472565
                                            内戦			0.468493
                                         大旱魃			0.468090
                                         寒冷化			0.463165
                                      武力衝突			0.460845
                                         暴風雨			0.460724
                                            崩壊			0.460065
                                         磁気嵐			0.459379
                                            争乱			0.458475
                                      天変地異			0.457827
                                            高潮			0.457417
                                            恐慌			0.455366
                                            観測			0.453862
                                         溶岩流			0.451336
                                            火災			0.450723
                                         核戦争			0.450222
                                      海面上昇			0.449969
                                            氾濫			0.448539
                                            戦乱			0.447700
                                            災厄			0.446214
                                      気候変動			0.446063
                                            紛争			0.442918

nter three words (EXIT to break): 過去 戦争 未来

Word: 過去  Position in vocabulary: 598

Word: 戦争  Position in vocabulary: 1053

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                                            革命			0.579042
                                            平和			0.551328
                                      最終戦争			0.551048
                                            大戦			0.511333
                             第三次世界大戦			0.505464
                                            戦い			0.499229
                                            聖戦			0.494336
                                      全面戦争			0.492297
                                   新しい戦争			0.487422
                                            文明			0.484664
                                      世界大戦			0.479522
                                            動乱			0.479157
                                            侵略			0.479121
                                         核戦争			0.477395
                                            破滅			0.462690
                                            内乱			0.460555
                                            戦乱			0.459921
                                            戦役			0.459181
                                            人類			0.458564
                                            闘い			0.454692
                                         総力戦			0.454031
                                            紛争			0.452444
                                      解放戦争			0.450627
                                      日米戦争			0.450438
                                               ―		0.449418
                                            内戦			0.448559
                                      独立戦争			0.448321
                                            事変			0.448053
                                            変革			0.447313
                                         大破壊			0.446041
                                            胎動			0.445219
                                            物語			0.443327
                                            作戦			0.443116
                                            ――			0.441500
                                            飽食			0.439174
                                            社会			0.438808
                                            闘争			0.437719
                                            争乱			0.436250
                                            正義			0.436185
                                      産業革命			0.435023

Enter three words (EXIT to break): 現在 核戦争 未来

Word: 現在  Position in vocabulary: 114

Word: 核戦争  Position in vocabulary: 44105

Word: 未来  Position in vocabulary: 2337

                                              Word              Distance
------------------------------------------------------------------------
                             第三次世界大戦			0.592685
                                   地球の危機			0.583607
                                         大破壊			0.581500
                                      最終戦争			0.581242
                                   新しい戦争			0.545251
                                            地球			0.533560
                                            宇宙			0.531146
                                   新しい世界			0.526614
                                            人類			0.521582
                                            真実			0.519430
                                         未来を			0.517114
                          タイムトラベラー			0.512824
                                      歴史改変			0.503098
           オルタレイション・バースト				0.501443
                             タイムトラベル			0.499473
                                            破滅			0.498174
                                ハルマゲドン			0.494760
                                         明晰夢			0.493937
                                世界の終わり			0.488566
                                            聖戦			0.486603
                                カタストロフ			0.485274
                                      日米戦争			0.483828
                                         近未来			0.479838
                                         未来へ			0.479609
                                   ビッグバン			0.479543
                                メルトダウン			0.477830
                                      無縁社会			0.476650
                                      運命の日			0.476261
                                      人類滅亡			0.476180
                                   理想の世界			0.474734
                                         新人類			0.473068
                                      文明崩壊			0.471420
                                   ヴィジョン			0.470636
                                         侵略者			0.469450
                             ビッグクランチ			0.467575
                                            虚構			0.467098
                                タイムリープ			0.465249
                                      千年王国			0.465109
                                            運命			0.464471
                                            現実			0.463786

Enter three words (EXIT to break): 女性 かわいい 男性

Word: 女性  Position in vocabulary: 404

Word: かわいい  Position in vocabulary: 19629

Word: 男性  Position in vocabulary: 936

                                              Word              Distance
------------------------------------------------------------------------
                                         可愛い			0.811681
                                         デカイ			0.683309
                                         っぽい			0.674909
                                   かっこいい			0.672885
                                      カワイイ			0.671438
                                かわいらしい			0.660587
                                   可愛らしい			0.659621
                                   カッコイイ			0.658944
                                         ダサい			0.625092
                                            怖い			0.619516
                                      かわいく			0.616060
                                      格好いい			0.615856
                                   大人っぽい			0.614768
                                         汗臭い			0.611559
                                         でかい			0.598629
                                         可愛く			0.597155
                                         エロい			0.592667
                                            ぽい			0.592332
                                         キモい			0.585848
                                      暑苦しい			0.581979
                                      愛らしい			0.579754
                                         似合う			0.579252
                                   可愛らしく			0.573437
                                かわいらしく			0.571982
                                            俺様			0.570179
                                      男らしい			0.567764
                                   恥ずかしい			0.566776
                                         ウザイ			0.563024
                                   おっかない			0.559657
                                   ちっちゃい			0.559188
                                うっとうしい			0.555609
                                            甘い			0.554824
                                   愛くるしい			0.554654
                                         キツイ			0.554243
                                      ぶりっ子			0.553716
                                         女の子			0.551877
                                   子供っぽい			0.548488
                                         モテる			0.548079
                                         っぽく			0.547141
                                         男の子			0.545460

どうでしょうか。全くぶっ飛んだ回答をしているわけでもなく、結構やっていて面白いです。他にも「人類 神 蟻」とかちょっと人間でも答えにくいような問題も出してみると楽しいかもしれません。

現在はこれらの結果を鑑みて、日本語モデルを更に増やすためにphpでプログラムを組みまして、Twitterから延々とツイートを取得してログとして収集していくという準備をしています。その実験第一回目の結果はこちら

word2vecでWikipediaのダンプを扱う

標準

今回、ある大学の研究室見学に赴いたところ自然言語処理をしているところが有りまして、そこでword2vecという単語をベクトルとして表現するというツールが存在することを知りまして、早速自分でも試してみました。今回はUbuntuを使っていきますが、word2vecは3GB以上のメモリが無いと正常に動作しないので、特別にメイン機をエミュレートして実験しました。

Wikipediaのダンプをダウンロード

まずはwikipediaのダンプファイルをダウンロードします。これは、日本語版のWikipediaの全文が収録されていて、これを日本語のモデルとして学習させます。cURLで任意のフォルダーにダウンロードしてください。約2GBちょいあるので、扱いには気をつけてください。

curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2

次にダウンロードしたダンプファイルをテキストファイルに展開します。500個ほどファイルが生成されます。こちらもそれなりに重い作業で数時間かかります。

rbenv exec wp2txt --input-file jawiki-latest-pages-articles.xml.bz2 

上の展開で生成された500個以上のテキストファイルを1つにまとめます。catファイルでコマンドラインに出力するものをそのままテキストに流し込んでいきます。

cat jawiki-latest-pages-articles.xml*.txt > jawiki-dump.txt

jawikiをまとめる
このようにひとつのファイルに纏まっていきます。(画像は実行途中なので、ファイルの重さも軽いです。)

辞書をダウンロードする

この時点でダンプファイルがテキストファイルの状態で1つにまとまっていると思います。それをこれから品詞分解していきます。ここで、品詞分解をする辞書として「mecab-ipadic-NEologd」を使っていきます。この辞書は常に最新の日本語が収録されているので、品詞分解の精度はピカイチです。多くのサイトでは品詞分解を標準のものでやっていますが、ここではこちらを使っていきます。

まずは前提パッケージをインストールします。

sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file

パッケージをインストールし終われば、辞書をダウンロードする準備が整ったので以下のコマンドを走らせます。

//githubからクローンを取る
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

//ディレクトリー移動
cd mecab-ipadic-neologd

//インストール
./bin/install-mecab-ipadic-neologd -n

mecab-ipadic-NEologdインストール中

このように辞書がインストールされていきます。

この実行が終了すれば最新の辞書がダウンロード出来ました。ついでにインストール先を調べるために以下コマンドも走らせます。出力を控えておきましょう。

echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

ダンプファイルを品詞分解する

さて、いよいよ品詞分解していきます。ここでは、品詞分解と言っても全ての品詞を解析していくわけではなく「分かち書き」という表記にしていきます。分かち書きというのは、単語ごとにスペースを挟んだ表記法です。これでword2vecに単語を認識してもらえるようにします。

cat jawiki-dump.txt | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Owakati -b 81920 > jawiki-wakati.txt

ここでの辞書のパスは控えておいたmecab-ipadic-NEologdのパスを入力してください。また、「-b 81920」を指定しないとバッファ不足かなにかでエラーを返されます。このコマンドが実行されると、jawiki-wakati.txtという名前で分かち書きが施されたダンプファイルが生成されます。これがword2vecの食べ物です。

word2vecに読み込ませる

いよいよword2vecに読み込ませていきます。ここまで仮想環境でも相当の時間がかかりましたが、ここが正念場です。頑張っていきます。以下のコマンドを走らせます。

time ./word2vec -train jawiki-wakati.txt -output jawiki-train.bin -size 200 -window 5 -sample 1e-3 -negative 5 -binary 1

word2vec解析中

このようにして出力が始まります。Wikipediaのダンプに収録されている単語は合計11億語くらいで、そのうち実際に語彙となったのは170万程です。

私の仮想環境ではコマンドが遂げられるまで8時間近くかかりました。仮想ということもあるのでしょうが、結構重いです。このコマンドが終了するとjawiki-train.binというファイルが生成されます。これが日本語の学習データです。これを使うと色々と日本語で遊ぶことが出来ますので、その部分は次回に。