ツイッターを活用した自然言語処理(前編)〜自分と相性の良さそうな(きっと可愛い)アイドルを真面目に探してみる〜

自然言語処理

どうもMakです。突然ですが、皆さんはツイッター使ってますか?

ご存知ツイッターは140文字という制限文字数内で自由にインターネット上に発信できるSNSです。同じSNSFacebookと比較しますと

  • Facebook・・・実名・顔写真あり・友人関係は相互フォローが基本
  • Twitter・・・匿名・複数アカウントOK(なので容易に仕事とプライベートでアカウントを分けたりできる)、また友人関係も一方向のフォローだけでOK

というような違いがあります。この結果何が生まれたかというと、Facebookは関係性の近さから息苦しさを覚える人が増え、ユーザーの離脱に繋がりました(例えばFacebookで職場の人とつながっていれば、不用意な発言はできないし、でもいいねやコメントは返さないといけないし・・・など気疲れする要素が多かったのです)

一方でツイッターは、一時期はFacebookSNSの主役の座を完全に奪われていたかのように見えましたが、近年はその「関係性の緩さ」ゆえの居心地の良さが幅広い世代の共感を集め、再度勢いに乗っているように感じられます。

さて、実はこうしたSNSへの投稿は、その人が本来持っている、性格や考え方、思想と言ったものが現れやすいことが心理学的にも分かっています。

・・・と、いうことはですよ。

例えば、もしあなたが少し気になっている異性がいたとして、「その人のことを知りたい!」と思ったとしたら、直接ご飯に誘うのは、ちょっと考えものなのです。
だって、イタリアンのレストランなんかに行って見たところで、「あの、その、ご趣味は・・・」となるのが関の山な訳です。自分も相手も、5匹か10匹くらい猫を被っていること間違いなしです(断定)

で、そこで、なんですよ。

もしTwitter自然言語処理で、相手の興味のあるトピックを瞬時に見抜いて、同時にあなたとの相性を測れてしまうとしたら。結構面白いと思いませんか??

ただ、この方法には一つ決定的な穴が・・・
「お相手のTwitterアカウントがわからなければ、何もできません(笑)」
なので、ここはお相手のご友人にご飯おごったりゴマをすったり土下座したりとにかくなんとかして、お相手のアカウントは確保してください(笑)

すみません。少し妄想が行きすぎました。
話を戻しますが、実際にTwitterのデータというものは特に感情を内包する言語資源としては非常に貴重で、自然言語処理では研究対象として近年注目を集めている分野です。

と言うことで、今日はTwitter自然言語処理で少し面白いことできないかな〜という、「試してみた」系の日記になります。

食材を集める(データの収集)

ã½ã¼ã¹ç»åã表示

新しいTwitter API規約の確認とデベロッパー登録をする

さあ始めましょう。まずはデータです。このブログでも常々口が酸っぱくなるようにデータの重要性を謳っていますが、データ集めが本当にキモだったりします。
で、データを集めていると、(ほぼ必ずと言っていいのですが)何かしらの壁にぶつかります。これは例えば、取れると思っていたデータが、APIが厳しくなって取れなくなっているよ!というように、「データ量に関する問題」だったり、取ってみたらガラクタばかりじゃねぇか!というように「データの質に関する問題」だったり、まぁいろいろな問題が立ちはだかるはずです(汗)

ですが問題ばかりではありません。実際にデータを眺めてみることで、当初は思いつきもしなかったアイデアを思いついて妄想(?)が広がったり、意外な発見があったり、宝探し的な要素も含むのがこの辺りの醍醐味です。

では具体的にTwitterのデータを取ってみることにしましょう。
と思ってTwitter APIの規約を調べてみると、案の定!去年秋よりTwitter APIの規約が厳しくなり、時間あたりで取得できるデータ量にかなりの制限が加わっていたようでした。

ツイートとリツイート(合算値):3時間で300件
いいね:24時間で1000件
フォロー:24時間で1000件
ダイレクトメッセージ:24時間で1万5000件

さらに、Twitterデータを利用するにはデベロッパー登録というものが必要なのですが、これも申請が少し面倒になっていました(例えば利用用途について300字以上の英作文が必要など)

上記のAPI制限及びデベロッパー登録については以下のブログを参考に進めました。

www.torikun.com

ツイッターアカウントの収集

無事デベロッパー登録が完了したら、早速ツイートデータを収集してみましょう。
今回は、テスト的に、「過去のツイートを元に、筆者と最も相性の良い芸能人(きっと可愛い)を見つける」をゴールとします。

人類75億の中で筆者1人しか得をしないという、まさに誰得な企画ですね。誰が当たるかな。ガッキーかな。深キョンかな。にやつきが止まらない。今世界一きもいと思います。笑

で、対象とする芸能人をどうするかですが、これは対象がTwitterをやっていることが前提です。おそらく、人気の女優さんはフォロワー数もきっと多いですからね。これは自分で探すまでもなく、すでにまとめてくれているサイトがありそうだな、と思ったらこちらにありました。

【グラビア・アイドル・モデル】の人気Twitter(ツイッター)ユーザー一覧(タイトルと画像)

ふむふむ、アイドル部門でのフォロワー数1位はローラですか。2位は広瀬すず、3位は小島陽菜 と。4位の篠田麻里子さんは最近、玄米食べて育った美容師さんと結婚してしまいましたからね。もうランク外でも良いでしょう(←こら

などとしょうもないことを考えているとデータ集めが永遠に終わらないので、少し効率化します。以下のような簡単なコードを書けば、ポチポチとツイッターアカウントをコピペする手間が省けます。BeautifulSoupは強い味方。

今回はあくまでテストなので、「アイドル」「(芸人含む)有名人」「アーティスト」の3ジャンルに絞り、各ジャンルで100人分、合計300人のツイッターアカウントリストを作りました。

収集したアカウントの、過去のツイートを収集

さて、次は収集したアカウント名を使って、過去のツイートを収集します!
これには、先ほど登録したTwitter APIを使ってみることにします。

ここは一からプログラムかかなあかんかなぁ、と思ったのですが
やはり偉大な先達により、この部分のコードをお借りすることができました。

qiita.com

1点だけ変更したのは、上記サイトで使われているAPIのURL部分で、
user_idをscreen_nameに変更します。取得したのはアカウント名なので、screen_nameにしないと上手く取得できません。

API制限が気になりましたが、特に問題なく一人当たり100件のツイートを300人分、取得することができました。後工程を考えるとデータ量が圧倒的に不足しそうですが、まぁ今回はテストですからね。

包丁を選ぶ(モデルの選択)

さあ、食材の用意が整ったので調理を始めていきましょう。
再度、ゴールと現在地を確認します。

  • ゴール:「筆者と最も相性の良い芸能人を見つける」
  • 用意したもの:有名人300人分の過去ツイート100件+筆者の過去ツイート100件

ここでどの包丁を使うかを決めていくのですが、今回は「LDA」なるものを使っていきます。LDAとはLatent Dirichlet allocation(潜在的ディリクレ配分法)なるもので、自然言語界隈ではニューラルネットワークが全盛になるちょっと前くらいに一世を風靡した技術になります。詳細はまたエネルギーがある時に書きたいのですが、一文でまとめるとしたらこうです。

ニューラルネットワークは性能でるけど、肝心要めの隠れ層の重みの解釈が人間には不可能でブラックボックス」というデカい欠点があるのに対して、LDAなどのトピックモデルは「重みの次元が何らかのトピック(話題)を表していて、結果が人間に解釈可能」という大きな強みがあるわけです。

今回は精度を出すよりも次元の説明ができた方が圧倒的に面白そうなので、LDAを選択しました。ただ、データ量が足りるかどうか、ちょっと自信がありません。が、まぁやってみましょう。

少し長くなりそうなので、今日はこれくらいで。後編はまた明日分として、記事を分けて公開したいと思います。筆者の運命やいかに!!

コメント

タイトルとURLをコピーしました