mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

「インディーズ機能」始めました

仕事を複数抱えた場合のコンテキストスイッチに高いオーバーヘッドを伴っているmikioです。今回は、近頃はじめたインディーズ機能についての思いを僭越ながら述べてみます。

インディーズ機能とは

インディーズ機能とは、実験的なサービスを早い段階で公開してユーザの皆さんからのフィードバックを反映させてくことにより、より斬新で親しみやすいサービスをより迅速にお届けするための枠組です。一般的には「ベータ機能」とか呼ばれている枠組に相当しますが、サイト自体が「ベータ」を標榜しているので「アルファ」になり、しかしそれもわかりにくいということで、紆余曲折あった末に「インディーズ」という名前に落ち着きました。

mixi開発チームでは日々新しい機能やサービスを模索し、また既存のサービスや機能の改善を図っているわけですが、当然ながら、現在開発中もしくは企画中のものを投入した暁にそれがヒットするかどうかは、実際に投入してみなければわかりません。ネット上の他のサイトの動向を見て似たようなサービスを提供するいわば追従型の案件の場合はまだ影響を読みやすいのですが、mixiならではの新しいサービスを提供しようとするとそれは一気に難しくなります。そのため、正式なサービスに仕上げる一歩二歩手前の段階であるインディーズ機能を公開して、それを作りこむ価値があるかをユーザの皆さんに評価いただこうと考えました。

正式なサービスにしようとすると、スケーラビリティ/アベイラビリティ/インテグリティなどを確保するために多くの工数が必要になり、デザインやユーザビリティを向上し、コストやリスクを軽減するために様々な検討と施策をしなければなりません。したがって、リソースの問題から全てのアイデアを実装することは現実的には不可能です。そして、提案したもののペンディング(つまり雑誌の休刊と同じで復活の見込みはほとんどない)に処される企画は山ほどありますし、開発途中でペンディングにされるプロジェクトすら出てきます。これはちょっぴり悲しいことですが、有限のリソースの中でヒットするサービスを提供していくには、ある程度の淘汰はしかたのないことでしょう。

しかし、淘汰されたプロジェクトの中にももしかしてヒットするものがあったかもしれません。また、ユーザの皆様から不評だったならまだしも、社内プロセスで挫折したことで日の目を見ることなく淘汰されたプロジェクトでは、担当者の無念は筆舌に尽くしがたいものがあります(もちろん、ひとつのアイデアに固執せずにアノ手コノ手を駆使するのがハッカーなわけですが)。そこでインディーズ機能の登場です。社内的にいえば、インディーズ機能の位置づけは、エンジニア主導でプロジェクトを推進するための枠組です。比較的少ない工数と、公開した際のその機能への誘導が貧弱であることと引き換えに、実験的な機能を世に評価してもらう機会を得るのです。そしてもちろん、コンセプトが評価されれば正式サービスに格上げすべく作り込むことになるでしょう。逆に不評であれば、累積コストの低いうちに撤収され、担当者の黒歴史をささやかに彩ることになるでしょう。

インディーズのキモチ

巷で言うところの「indies」とは「independent labels」の略だそうで、つまりメジャーレーベル群の傘下からは独立した存在である中小のレーベル群を指す言葉です。そして我々mixi開発チームも、既存の体制や価値観から独立した新しいサービスや機能を提供していく気概で、この名前を選びました。 通常、新しい企画を発案し推進していく際には、その企画の目標が立てられることになります。ページビューがどれだけとれるかとか、滞在時間がどれだけ増えるかとか、広告枠でいくら売り上げるかとかが主な指標になります。一方で、インディーズ機能はそういったメジャーな価値観から一歩距離を置いて、こんなコンテンツが喜ばれるかもしれない、こんな機能が欲しかった、この操作感の方が使い易いんじゃないか、この技術を適用したら不可能が可能になるんじゃないかといった視点でものを考えます。ともすればエンジニアの暴走などと揶揄されるかもしれませんが、そもそもmixiはそうやって始まったサービスなのです。今現在はメジャーではないかもしれないが、しかし、マイナーではなくインディーズでありたい。そういう気概で新しいサービスや機能を提供していきたいと思います。

キーワード関連情報

毎度のことですが前置きが長くて恐縮です。ここからが本題で、インディーズ機能の第1弾として、「キーワード関連情報」という機能をリリースしました。これは、日記キーワードランキングでランクインした言葉に関連する日記やコミュニティなどの付加情報を提示する機能です。

screen.png

日記キーワードランキングで自分が多少なりとも知っている言葉がランクインしている場合はいいのですが、全く見たこともないような言葉があると何だか悔しい気分になりますよね? 例えば今ではすっかりおなじみの「おっぱっぴー」ですが、ランクインしているのを最初に見た時は何じゃそれと思ったものです。そういう場合にはその言葉を使っている日記を見て内容を把握するわけですが、全く知らない言葉の場合はなかなか手間がかかります。「最近の流行が一目で把握できる」というキーワードランキングのコンセプトにおいては、必死こいて内容を調べなくてはならないのはイマイチです。そこで、「その言葉はどういう意味なのか」「その言葉がなぜランクインしているのか」という簡潔な情報を提供したいと思いました。流行のキーワードの意味と理由まで把握できれば昼休みは無敵です。

以前、キーワードランキングの秘密という記事でキーワードランキングのアルゴリズムについて述べましたが、キーワード関連情報はその考え方を発展させたものです。頻度を集計する際の副産物である共起頻度をもとに算出した関連語を提示するのがその核になります。例えば、「おっぱっぴー」が何だかわからないとしても、その関連語が提示されれば推測がしやすくなります。この例では、「お笑い芸人」「小島よしお」「ぐるナイ」などが関連語として提示されれば、おそらくバラエティ番組に出演した小島よしおという芸人のギャグで、それが非常に面白かったからランクインしているのだろうなと推測できるということです。

アルゴリズム

では、関連語をどうやって算出しているのでしょうか。その答えは簡単で、元となる言葉と同じ日記または同じ文章でよく使われる言葉は関連語だと判断するのです。「おっぱっぴー」がランクインした日の日記には、「昨日ぐるナイ見てたら出てきた小島よしおがやばかった。おっぱっぴーww。まじやばい」などという表現がよく見られます。この例文から「昨日」「ぐるナイ」「小島よしお」「おっぱっぴー」という4つのキーワードが抽出されたとしたら、「昨日:ぐるナイ」「昨日:小島よしお」...「小島よしお:おっぱっぴー」という、12パターンの組合せ(正確に言えば順列)が得られます。この処理を対象となる全ての日記に対して行うとパターン数が半端じゃないことになるわけですが、そこをうまくフィルターしつつデータベースにいれていくと、共起頻度データベースができあがります。あとは、集計時に「おっぱっぴー:*」というクエリで共起頻度データベースを検索すれば、「おっぱっぴー」の共起語を頻度順に取得することができるわけです。

ただし、上記の方法だけだと言い替え表現がうまくとれないという弱点があります。「エヴァ」の関連語として「エヴァンゲリオン」を取りたいとしても、文中で「エヴァ」を使うことを選択した人は同時に「エヴァンゲリオン」を使うことは少ないので、うまくいかないのです。この問題に対しては、共起語の傾向の類似性を見ることで対処しています。例えば「エヴァ」の共起語が「映画」「アスカ」「シンジ」「初号機」であり、「エヴァンゲリオン」の共起語が「映画」「アスカ」「ミサト」「初号機」である場合、両者の傾向が類似しているので、「エヴァ」と「エヴァンゲリオン」が言い替えなのではないかと推測できます。実際には共起率をベクトルとして両者のコサインをとって類似度とみなします。このような共起類似度と共起率をもとに関連語を選択するとかなりうまい具合にいくようです。

その他の関連情報の作り方もかなり簡単です。関連日記は、関連語を多く含む日記です。単にキーワードを含んだ日記を検索したものよりも、対象の話題について深く論じていることが多いので、関連日記を1個か2個読むだけでその話題がどういうものかを高い確率で把握できるでしょう。例文は、そのキーワードおよび関連語からなる文章を抽出したものです。関連コミュニティは、関連日記を書いている人が共通して入っているコミュニティです。それらは対象の言葉についてより深く知りたい場合にポインタとして役立つはずです。関連URLは、関連日記の中で頻出するURLを集計したものです。ニュースリソースとして関連URLを見ていただけると役立つでしょう。

まとめ

キーワード関連情報をインディーズ機能としてリリースしました。キーワードランキングの楽しさを倍加させ、mixi日記のコンテンツとしての価値を再発見できる機能であると自負しています。ただ、夜なべも休出も厭わず自分のOSS製品のメンテもろくにせずに開発に没頭した私としては可愛くってしょうがないこの機能ですが、ユーザの皆さんにどれだけうけるかどうかは正直見当がつきません。社内で提案しても淘汰されていたものですが、このたびインディーズ機能として皆様に御披露目できて感無量です。

インディーズ機能は今後も第2弾、第3弾と続けていく予定ですので、どうぞご期待ください。こちらの紹介ページからインディーズ機能についての日記を書くことができますので、ご意見ご要望などいただけると幸甚です。