読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

コミュニティブラウザ

algorithm mixi search

はじめまして。mixi開発部のskimuraです。 1月28日にリリースした「コミュニティブラウザ」について書きたいと思います。

■ コミュニティブラウザとは

存在するコミュニティが増加するほど、目的のコミュニティを捜し出すのは困難になると考えられます。mixiに存在するコミュニティは日々増加しており、今現在では180万以上ものコミュニティが存在します。そこで、興味があるコミュニティを探す手助けをするためのツールを作成したいと考え、本サービスを作成しました。コミュニティブラウザは各コミュニティ対して、関連性が高いコミュニティをおすすめするサービスです。それぞれのコミュニティに参加している各ユーザが参加しているコミュニティの傾向をもとに計算しています。

■ コミュニティブラウザの使い方

  1. コミュニティブラウザにアクセスすると自分の所属しているコミュニティの一覧が表示されます
  2. オススメコミュニティが見たいコミュニティをクリックします
  3. クリックしたコミュニティに対して、関連性の高いオススメコミュニティが表示されます
  4. ★の数はオススメの度合いを示しています(10段階)

オススメコミュニティは最大20個まで表示されます。

■ キーワード検索との違い

キーワード検索のメリットとデメリット

コミュニティの場合、キーワードベースの検索では見つけるのが困難なものがあります。例えば、システムエンジニアであるユーザがシステムエンジニアにとって有用なコミュニティを探したい、と考えたとします。そこでmixiの「コミュニティ検索」で``システムエンジニア''を検索キーワードとして検索すると、``システムエンジニア''というキーワードを含むコミュニティが検索結果として大量に得られます。キーワード検索の特徴は、検索キーワードを含む検索結果を大量に得られるのと引き換えに、次の問題が存在します。

関係の無い結果も得られる

高速に膨大な検索結果を得られるのは、検索エンジンの良いところです。しかし、キーワード検索の場合、膨大な結果を得られますが、その中にはたまたまそのキーワードが使用されているだけで、そのキーワードとほとんど関係が無いものも一緒に得られます。したがって検索者はその膨大な検索結果から求めているコミュニティを探さなければならない、というコストが発生します。

キーワードの表記の揺れなどがあると検索結果として得られない

``システムエンジニア''に関するコミュニティの場合、``システムエンジニア''を``SE''や単に``エンジニア''と省略して表記している可能性があります。これは記述者としては``システムエンジニア''と同じ意味でこの言葉を使用していたとしても、検索エンジンにとっては両者の単語は別のものであると判断します。他には言い換えの問題があります。例えば``Mr.children''を``ミスチル''と表現しても両者は、同じバンドグループを意味しています。しかし、Mr.childrenに関する有用なコミュニティが存在しても、そのコミュニティで``Mr.children''を``ミスチル''とだけ表記してしまっていたら、``Mr.children''を検索キーワードとして検索したユーザには表示されません。

レコメンド型の検索

キーワード検索と方法はまったく別物なのですが、コミュニティブラウザではこれらの問題を軽減した形でコミュニティを探すことができます。コミュニティブラウザでは、個々のコミュニティに対して関連性が高いコミュニティが表示されるため、その関係性をたどっていき、目的としていたコミュニティにたどり着くことができます。たとえば``システムエンジニア''の例で、既にシステムエンジニアのコミュニティには所属しているが、さらにプログラム関係やデーターベースに関する特化されたコミュニティを探したいと考えたとき、その分野に詳しい人であれば、``システムエンジニア''に関するキーワードをすぐに思い浮かぶかもしれませんが、一般的には簡単には思い浮かびません。

そこで、「システムエンジニアの部屋」というコミュニティを対象にコミュニティブラウザを利用してみると以下のような結果が得られます。

se.png

「システムエンジニアの部屋」コミュニティには、「Java、C言語、PHP、Perl, Visual Basic」といったシステムエンジニアにとって必要なスキルに関するコミュニティや「ネットワークエンジニア、迷えるSEの卵たち」など直接的に関係するコミュニティなどが結果として得られます。そもそも「システムエンジニアの部屋」というコミュニティを探すのには、キーワード検索をしなくてはなりません。しかし、よりニッチでコアなコミュニティを求める場合には、これまでの説明をしたようにレコメンド型の形式の方が見付かりやすい場合が多くあります。

このようにコミュニティブラウザは検索のあり方の実験も兼ねて開発したサービスでもあります。

■ コミュニティブラウザの仕組み

コミュニティブラウザは次の仮説を前提に実装したものです。

あるコミュニティAに所属しているユーザ達が重複して参加しているコミュニティはコミュニティAに関連性が高い

mixi_blog_picture.png

図で示したように、Community Aに参加しているそれぞれのユーザが参加しているコミュニティをカウントすると、Community Cに最も多く参加していることがわかります。

基本的には、コミュニティブラウザはこの着想をもとに実装されています。だいたいのコミュニティに対してはこの実装のみでそれなりに関連性があるコミュニティを獲得できます。しかし、これだけの実装では次の問題が発生します。

オススメコミュニティのほとんどが参加数が多いコミュニティになってしまう

実際に図のようにコミュニティをカウントしていくと、たいていはあまり関係のないコミュニティが上位になってしまいます。そうするとどのコミュニティにも、単に参加数が多いコミュニティがオススメされてしまいます。そこで、なるべく関連性が高いコミュニティを得られるようにいくつかのパラメータを設定しています。つまり、コミュニティブラウザで示されている星印のポイントは、そのコミュニティに参加しているユーザが重複して入っている確率といくつかのパラメータから作成されています。

■ コミュニティブラウザの楽しみ方

最後にコミュニティブラウザの楽しみ方の例を示したいと思います。基本的には楽しみ方は自由で、興味にしたがってどんどん興味があるコミュニティをたどっていけば良いのですが、その中でもいくつかおもしろいオススメコミュニティが得られたものを紹介したいと思います。

地域コミュニティについて

地域といっても、地名や駅名など様々なものが存在するのですが、基本的にその地域特有のオススメコミュニティが得られます。例えば、株式会社ミクシィが所在している「原宿」コミュニティに対するオススメコミュニティは以下のようになっています。 harazyuku.png

上位は「表参道、神宮前、代官山、青山」と傾向が似た街のコミュニティが示されます。おそらく原宿に良く行く、もしくは好きな人は、これらの街にもよく行かれるのかもしれません。個人的にはおしゃれな街関連なのではないかなどと、予想をしたりしているのですが根拠になる分析はまだしていません。

似ている街以外にも原宿らしい「古着屋、カフェ」に関するコミュニティも得られています。その街の属性を表すコミュニティが得られました。これは、「六本木」や「恵比寿」と比べるとまた、全然違う傾向が表れておもしろいですね。

文学コミュニティについて

私は最近、ミステリー系作家である森博嗣さんの小説を好んで読んでいるのですが、そろそろ森さんの作品をすべて読み終えようとしています。そこで、森さんの小説に傾向が似ている作家を探すため、コミュニティブラウザを用いて、森さんのコミュニティのオススメコミュニティを見てみることにしました。オススメ結果を見ると、「京極夏彦さん、西尾維新さん、綾辻行人さん、宮部みゆきさん」といったミステリー系の作家のコミュニティを得ることができました。このように似ている作家を得るとき以外にも、似ている音楽、料理屋などを探すときにも、コミュニティブラウザの機能を応用することが可能であることが示唆されています。 mori.png

Bookmarklet of Community browser

コミュニティブラウザに簡単にアクセスするためのbookmarkletを作成しました。 以下のbookmarkletをブラウザのお気に入り追加して利用してください。

利用方法
  1. コミュニティブラウザのbookmarkletをブラウザのお気に入りに追加する
  2. mixiのコミュニティページ(http://mixi.jp/view_community.pl?id=xxxx)を表示している状態で設置したbookmarkletをクリックする
  3. 表示しているコミュニティに対してのコミュニティブラウザのページに遷移する

■ まとめ

コミュニティブラウザの使い方、簡単な仕組みについて説明しました。コミュニティブラウザを使うと、それぞれのコミュニティに対する関連コミュニティを取得できます。しかし、これまでの説明にもあったように、基本的にはコミュニティブラウザは各コミュニティに参加しているユーザの傾向を計算しているため、参加人数が少ないコミュニティや、逆にとても多いコミュニティでは関連するコミュニティを抽出するのが困難となります。パラメータ調整により、参加数が多いコミュニティに関しては、関連があるものが抽出できるようになりましたが、参加メンバーが少ないコミュニティに関してはまだまだいい結果が得られないため今後の課題にしたいと思っています。

今後もコミュニティブラウザのオススメコミュニティの抽出アルゴリズムに関しては検討していきたいと思います。
また、本機能を応用したサービスも展開していけたら、と思います。