SoGap - SNS 間での話題性の「ギャップ」を利用したカテゴライズ&ランキング

SoGap - ソーシャルサービス内で尖った話題を探す

先日、SoGap - ソーシャルサービス内で尖った話題を探す と言う Web サイトを公開しました(SoGap と言う名前は、Social Gap に由来します)。SoGap は、はてなブックマーク数、Twitter のツイート数、Facebook の「いいね!」数の「ギャップ」を利用して、記事をカテゴライズ&ランキングする Web サイトです。この Web サイトのコンセプト自体は随分前から考えていて、これまで Topics and Knowledge と言う名前で試験的な Web サイトとして公開していたのですが、計算アルゴリズムを若干変更した事と体裁と整えた事もあって「リニューアル」と言う形を取りました。

SoGap の RSS フィードは、ページ毎に全 6 種類を配信しています。

全ての RSS フィードは 1 日 1 回のペースで、ヘッドラインに関しては 1 回で 1 記事、それ以外の RSS フィードに関しては(最大で)1 日 20 記事配信されます。

背景と動機

はてなブックマークTwitter 等、何らかの Web サービスが人気になると必ず叫ばれる問題の一つに「衆愚化」があります。この「衆愚化」が発生する理由の一つとして、「人気になると様々なユーザが使うようになって、その結果、(人気になった)どの Web サービスも同じような話題で溢れてしまう」と言うものが考えられるのですが(SBMの衆愚化と大衆化 参照)、これを逆に考えると、「どの Web サービスでも人気になっている話題を取り除くと、それぞれの Web サービス内でのみ人気になっている(ニッチな)話題を拾うことができる」とも言えます。

SoGap

はてなブックマークTwitterFacebook、それぞれの Web サービスでのみ人気になる話題には、それぞれにそれなりの傾向があって、独断と偏見で大雑把に言うと以下のようになります(Facebook に関しては、まだ観察不足な面が多いので当たってないかもしれません)。

…。もう少し真面目な補足をすると、Twitter においてはネタ記事等の「おもしろ系」が人気になる傾向があります。また、他に比べて「画像が強い(Twitpic 等でアップロードされた面白い画像が非常に拡散されやすい)」と言う傾向も見られます。

はてなブックマークは、よく言われるように、「○○な人が××するための 10 の方法」のような所謂「ライフハック」と呼ばれる記事が人気になる傾向があります。これは、「ブックマーク」と言う Web サービス自体の性質にも依る他、ブックマークスパム等の影響も見られるようです*1。これに関連して、「○○まとめ」と言う記事も人気になりやすく、最近は「Naver まとめ」系が猛威を振るっていると言う印象です。

Facebook は、最初期に始めたユーザは別として、現状ではビジネス色の強い人達が数多く流入している事もあってか 日経ビジネス のようなサイトの記事が人気を集めやすいようです。ただ、先にも述べたように、Facebook に関してはまだまだ観測不足なため、あまりはっきりとした傾向はつかめていません。

以上のような背景から、「各 Web サービスが提供しているソーシャルボタンのカウント値(クリック数)の「ギャップ」を使うと、そこそこ有用なカテゴライズができそうだなぁ」と言うのが SoGap と言う Web サイトを作ろうと思った動機です。

GapRating(カテゴライズ&ランキングに使用する値)の算出方法

これ以降は細かい話になるので、興味のある方のみどうぞ。

SoGap でのカテゴライズ&ランキングの際に使用する値は(これ以降、GR: GapRating と呼びます)、例えば、Twitter のツイート数をベースにすると、以下の式で算出されます(はてなブックマーク数ベースFacebook の「いいね!」数ベース の場合は、それぞれ Tw, Hb, Fb の位置を入れ替えます)。

GR = Tw / max(Hb, Fb, 1) + sqrt(max(Tw - max(Hb, Fb), 0)) ... (1)

※GR: GapRating (カテゴライズ&ランキングに使用する値) 
 Tw: Twitter のツイート数
 Hb: 公開はてなブックマーク数
 Fb: Facebook の「いいね!」数

GapRating を計算してランキングすると言うコンセプト自体は、Topics and Knowledge と言う Web サイトの頃から変わっていないのですが、初期バージョン(Topics & Knowledge の頃)においては、GapRating を以下の式を用いて算出していました*2

GR = Tw / max(Hb, Fb, 1) ... (2)

しかし、(2) 式で算出される値をベースにしたランキング結果をしばらく観察していて気になった問題点として、「(はてなブックマークTwitterFacebook の)どれか一つのソーシャルボタンのカウント値が 20 程度まで増加し、かつ、それ以外のカウント値はほぼゼロ、と言うケースがかなり有利である」と言うものがありました。「ギャップの大きい記事ほど上位へ」と言うのが基本的なコンセプトではあるのですが、一方で、各種ソーシャルボタンの絶対値も無視できない指標の一つではあります。

この問題の対策として、「商」と「差」、両方を用いて GapRating を算出すると言う方法を検討したのですが、単純に(商と差の)両方の和を取ってしまうと、今度は逆に各種ソーシャルボタンのカウントの絶対値に引っ張られすぎてしまい、個別のカウント値のみを用いてランキングした結果と大差がない、と言う問題が発生しました。そこで、これらの問題の対策として、しばらくは (3) 式で表されるような典型的な重み付けを用いた式で GapRating を算出しようと試行錯誤していたのですが、この類の数式の問題点として「αのパラメータ設定が環境依存で非常に難しい」と言うものがあります。

GR = α・{Tw / max(Hb, Fb, 1)} + (1 - α)・max(Tw - max(Hb, Fb), 0) ... (3)

※0 < α < 1 

そんな感じでどうしようかなぁとか悩んでいたのですが、ある時、「商の方は 2 乗した値を使えば、それなりに目的通り(絶対値の影響度が低くなる)の値が算出できるのでは?」と言う気がして、実際、それが(他の方法に比べて)いい感じだったので、その方法を採用する事にしました。ただ、2 乗の値を使うと GapRating の値が無駄に大きくなるので、最終的には全体の平方根を取って、(1) 式に落ち着く事となりました。

各種カテゴライズ方法

http://sogap.cielquis.net/ では、「Twitter」、「はてなブックマーク」、「Facebook」、「マスメディア」、「2ch まとめサイト」、と言う 5 種類のカテゴリに分類しているのですが、これらの内、「マスメディア」と「2ch まとめサイト」に関してはあらかじめ用意されたリストにしたがって分類しています。分類に使用している各リストは、それぞれ以下から閲覧できます。

この内、「2ch まとめサイト」分類用リスト に関しては、村はてブ において公開されている URL Black List も参考にさせてもらいながら、随時、更新しています。

今後の課題

カテゴライズ&ランキングの対象となる記事の取得先は今のところ 新着エントリー - はてなブックマーク のみなので、はてなブックマーク上では話題になっていない記事が取得できないと言う問題があります。特に Facebook に関しては、Twitterはてなブックマークとはユーザ層がだいぶ異なると言う印象があるので、「Facebook 方面でのみ人気の記事」を集めきれていない可能性が高いです。この辺りの対象とする記事をどうやって増やしていくかが当面の課題になりそうです。

GapRating の計算に使用する各種ソーシャルボタンのカウント値は、原則、API 経由で取得できる値をそのまま使用していますが(はてなブックマークのみ、公開ユーザのみによるブックマーク数を使用している)、この辺りのアルゴリズムも改善できる余地があります。例えば、各種スパム対策としてコメント率やデフォルトアイコン率などを利用すると言ったような手法が一定の効果を得られそうなので、そう言った情報をどのような形で取得するかも含めて、ぼちぼち検討していこうかなと思います。

昨今は、いろいろな Web サービスがソーシャルボタン等を通じて何らかのカウント値を公開しています。日本では普及が今一つ進んでいないので現状では見送っていますが、Google+1 などのカウント値も有効な指標の一つとなり得ます。それらの値を使う事によって従来のカテゴライズ(社会、政治、スポーツ、音楽、IT、…)とは違ったアプローチで各種話題の記事をカテゴライズできるのではないかなと期待しています。

*1:スパムによる影響をどうやって薄めるかは、難しい課題の一つです。

*2:実際には、これに加えて、はてなブックマークのコメント率による調整を入れていました。