うまい飯食いたい

うまい飯食えるようにガンバリマス

pixivのイラスト検索の結果を使う(その3)

つづきのつづき 

 

概要としては,

pixivのイラストにつけられてるタグが共起してたら関係ありそうだし,ネットワークを描いてみよ

といった流れ

 

pixivの野良apiから「艦これ」検索結果のイラストをとってきて,タグ共起を計算

一定以上のjaccard係数の組でエッジを形成し,ネットワークにしました

 

前回からの変更点

ビスマルク取れてなかったのを解決

単純に艦娘名の辞書に,「Bismarck」で登録していてマッチングしなかったのが問題

 

艦娘名》(艦隊これくしょん) をマッチングするように修正

タグとの照会時に,(艦隊これくしょん)を正規表現で削除するだけのお仕事

 

・タグ共起からネットワークのエッジ形成の判断に,jaccard係数の他に,simpson係数を導入

エッジ形成の閾値条件を,

jaccard > =0.1 or (jaccard >= 0.05 and simpson >= 0.1)

とした

 

以前のように,jaccard係数のみで判定を行うと,

投稿数の多いキャラ同士のペアが密になる傾向にあった

例えば,赤城と加賀のような組は,共通集合(イラスト)が多く,エッジが形成される

しかし,赤城と吹雪の組を考えた場合,検出されない

吹雪タグがついたイラストは赤城と比較して相対的に低いため,

2つの和集合(=分母)が大きくなるが,共通集合(=分子)が小さくなることが原因

simpson係数を導入すると,分母が2つの集合のうち小さい方になるので,この問題が解決される

 

各係数の詳細に関しては,

集合とかベクトルの類似度の計算のメモ - 唯物是真 @Scaled_Wurm

などを参照頂けると良いかと

 

・コミュニティ検出を導入

形成したネットワークに対して,コミュニティ検出アルゴリズムをかけて色分けした

コミュニティ検出は,python-louvain

アルゴリズムの中身はちゃんと理解してない そのうち覚えないと・・・

 

色々やった結果が次の通り

二航戦コンビとか,独立してたペアは除外してます

f:id:calderarie:20150327124552p:plain

エッジがごちゃごちゃしてて見ずらいっすね・・・

ある程度まとめるレイアウトにしたのだけど,

エッジがどこを通ってるのかわかりにくいので反省

 

色々思ったこと

・吹雪周りが完全にアニメ関係のエッジ

・アニメの主要3人(吹雪,睦月,夕立)間にエッジはあるが,別コミュニティ

金剛型と第六駆はやっぱり密

駆逐艦同型艦等のコミュニティがよく見られる 十七駆と十六駆とかいいっすね

・潜水艦コミュニティ内に,天城と香取

 

ラストのは,おそらくイラストの母数が少ない影響で,

同時期に実装された名残があるのだと思う

一定期間ごとでネットワークを形成し,その期間ごとの動的変化を見ると面白そう

後,コミュニティ検出の際にエッジ重みを考慮してないので,そこを直すともうちょい結果が変わるかも

 

 

色々やった所感としては,閾値の設定がトライアンドエラーで,非常に面倒くさい

その辺をうまく自動化できないものか

pixivのイラスト検索の結果を使う(その2)

前回のつづき
pixivのイラスト検索の結果を使う - うまい飯食いたい

pixivのタグを使ってネットワークを描きました
(データは,今から1ヶ月分くらい)
タグを認識する際には,以下の辞書をお借りして,
不足部分を埋めつつ,艦娘名の一覧を作ってマッチング
艦これ艦船辞書(IME/ATOK) | 今日のいの


最初,単純にタグの共起でネットワークを描いたが,
どうしても艦娘ごとのイラスト数に依存してしまった
赤城と加賀とか,北上と大井などの相対的に人気な組の関係性はとれるけど,
実装が遅めだった第17駆逐隊とかは出てこない

そこで,各タグを含むイラスト集合のjaccard係数を採用
色々試行錯誤して,0.1を閾値にして,
この値以上の場合,ネットワークを描いたら,いい見栄えになった

(本当は,Modularityとかでうまく決めたほうがいいのかな)

ビスマルクは多分辞書では,「Bismarck」になっているの影響で取れてないと思う
後,揺らぎ的な問題で,
同じ艦娘を指す場合でも,《艦娘名》(艦隊これくしょん)って,タグが結構あるので,
これを考慮したほうがもっといいものになりそう
(これ正規表現で書けば,すぐできそうな気がするけど)

以下気付いた点
・基本的に姉妹艦が顕著に出る 特に金剛型が密 潜水艦グループ
・史実的な関係性も現れる (初風と妙高姉さん,西村艦隊など)
・アニメの影響 (吹雪と睦月と夕立,睦月と如月)
・瑞加賀尊い
・千歳と千代田のエッジがない
・そして,千歳と秋月ちゃん!
阿賀野と那珂ちゃんのエッジ (軽巡棲鬼のせい?)
・ラブリーマイエンジェル夕張ちゃんは,五月雨と由良ちゃん

提督的に面白い結果になりました
やはりこういう試みをするとき,自分で解釈できる結果が見えると面白い

pixivのイラスト検索の結果を使う

いろいろあって,pixivのデータを集めようと思った
しかし,公式ではapiがない・・・

そんなこんなで,ここを見つけた
[プログラミング?] - 鍵屋的日記(鍵屋のブログ)
有志のapiらしきもの

詳しくは上を見るなり,ぐぐるなりしてほしいが,
イラストのタグ検索の場合は,1ページで50件ずつ表示される
仕様の問題だと思うが,10000件までしか見れないので,
20ページまでクロールすれば,取れる情報は全て手に入る

csv形式なのが辛いけど,頑張って処理


・url叩く
・一行ごと取得
・カンマで区切って処理

を繰り返す
ひとまずはこれでおk

ただ,投稿者名やタイトルなどにカンマが使われていると,単純な処理では不具合が出るので,適当に例外処理とかも必要
こういうのが,csv形式の面倒なところよね
やっぱjsonって神だわ


とりあえず「艦これ」検索の結果を溜めたのはいいものの,使い道を考えていない
タグの共起でネットワークでも描こうかな

twitterのコーパスを作る

研究の合間にひっそりと溜め込んでいたツイートを整形した
その備忘録的な何か

ツイートの溜め込み方ツイート自体は、public streamで取ってきた
pythonの場合は、python-twitterってラッパーがあるので、お手軽
日本語ツイートだけ欲しかったので、langを見て取捨選択

見た感じ結構めんどくさいjsonデータだったので、思考停止でMongoDBにつっこむ
RDBSだと設計が面倒だし、その段階で何の情報を使うことになるか分からんしね

どのくらい容量食うか分からなかったけど、
適当に500tweets/minで2~3日くらい集計した結果、5GBくらいだったハズ


ツイートの整形、コーパスまずは適当に見てみる
すると、botが非常に多いことがわかる

そこでまず、ツイートのsourceを見る
ここはhtml形式でviaの情報が記載されているので、
適当なパーサーでテキストをとってくる
10000万ツイート取得して見た感じ、
Twitter Web Client」「Twitter for iPhone」「Twitter for Android」が非常に多い
これらだけで6~7割くらい占めている印象
勿論、もっと色々なクライアントを使ってもいいんだが、
クライアントが多様すぎてそこに手間をかける気力がなかった

次に、ツイート中のurlやtwitter idを消す
色々正規表現書いて消したんだけど、
entitiesを見れば、urlとかハッシュタグとかの情報がわかる
最初はとれそうな情報を全部とろうと結構苦労しながら書いたけど、
強いこだわりがなかったし楽ちんなので、entitiesに値がないツイートを残す
(ブログ記事などのツイートとか省けるので、これでよかったかも?)

これで出力すればOK


word2vec用に形態素解析僕自身の目標はここだったので、更に進める
MeCab形態素解析 -> 名詞・形容詞・動詞をとってくる
顔文字とか結構残っているのが問題かなぁ
後、全体的に細かく切れすぎていたので、形態素解析は検討したほうがいいかも


最終的に残ったツイート数を見てなかったなぁ
しかし、できたコーパスでword2vecしたら、結構イイカンジでした

学習も10秒かからないくらいだったし、もっとデータ量増やしたほうがいいのかな
ただ、一文辺りの語数が短いから、パラメータの調整したり、
そもそも共起とかのほうがいいのかも
ちゃんと中身を勉強しないとなぁ


ここまで、何もデータに関する見せものがないんだけど、
研究室のPCに置いてきちゃったため
覚えてたら今度なんか追記しよう