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

レシピ検索を改善する工夫

こんにちは。技術部検索グループの兼山(@PENGUINANA_)です。

クックパッドの中でレシピ検索はレシピをのせる人とさがす人をつなぐ大事な仕組みです。 今回はレシピ検索を運用改善していく上での工夫のうち、他の検索システムでも役立ちそうな内容を紹介させていただきます。

改善ポイントを発見しやすくする

工夫1. 検索語をモニタリングする

search monitorという社内ツールを作りました。前日の検索傾向を表示できます。

このツールは以下の作業をサポートします。

  • 検索語をUU(ニーズ)が多かった順に知る
  • キーワードごとに何人に使われたのかを知る
  • ユーザーが実際に目にする検索結果を素早く確認する
  • レシピが1品も見つけられなかったキーワードを知る

f:id:code46:20141030135326j:plain

他にも「キーワードごとにどのようなキーワードと組み合わされやすいか」、「その検索語のCTRはどの程度か」、「その検索語は何時頃あるいは何曜日によく検索されるのか」を探検できます。

こうしてユーザーのニーズを俯瞰でインプットすることで、 CTRが相対的に低いキーワードやニーズが高まっているキーワードを発見できます。

工夫2. 速度をモニタリングする

どんなシステムでも遅ければ使われないはず。速度は重要だと思います。 検索グループでは最低でも週次のミーティングでレスポンスタイムのグラフを確認します。変化があった時はチェンジログを確認して問題の修正を試みます。

f:id:code46:20141030135359j:plain

インフラ部のメンバーがレシピ検索の裏側で利用されているSolrのアーキテクチャについて紹介しています。高速化につながる部分もありますので興味のある方はご覧ください。

工夫3. ユーザーやスタッフに教えてもらう

レシピ検索を利用いただいている皆様から寄せられるご意見を全て検索グループのメールアドレスにも転送してもらうようにしてあり、レシピ検索に関わるご意見を全て確認しています。

(ご意見)

f:id:code46:20141030135431p:plain

ここから直接改善点を見つけることもあれば、ご意見ではなく(返信が必要な)問い合わせにつながったケースをユーザーサポート部から転送してもらい検索グループで改善しています。

(問い合わせ)

f:id:code46:20141030135457p:plain

これに加えてスタッフからの報告も頼りにしています。

数百人いるスタッフの全てを動員しても全てのキーワードの検索結果を確認することは出来ません。 しかし、スタッフは常に新しい流行や、多くの人の目に触れるキーワードに注目しているため、そこで見つかる改善点は影響の大きいものであることも多いです。

スタッフの目を活用すべく、改善点に気づいたらその場で教えてもらえるようにしました。

f:id:code46:20141030135510j:plain

クックパッドでは、スタッフユーザだけにGoogleフォームへのリンクが表示されるようにしています。このフォームからGoogleスプレッドシートにキーワードと違和感を感じた点を思いついたままに書いてもらい、検索グループが毎日確認し、修正できたら報告者にお知らせしています。 これまでに150以上の違和感や不具合が報告され、その多くは修正が完了しています。

工夫4. ログを分析する

レシピ検索に仮に違和感を感じたとしてもそれを教えてくれるとは限りません。普通はただ去るだけですよね。

明示的なフィードバックだけでなく、暗黙のフィードバックも読み取るべくログを活用しています。

例えば、CTRや検索結果リストのクリックパターンが期待通りかどうかなどを確認しています。NDCGや、クリックUUのうち上位に表示されたレシピをクリックしたUUの割合(検索結果の上の方が無視されているかどうか)などに注目しています。本来はランキングの良さを評価する尺度ですが、問題発見に目的をしぼって活用しています。

改善のアクションをとりやすくする

見つけた改善点をUU(インパクト)の大きいものから順に優先順位付けし、場当たり的に直していきます。

即座に解決することが困難なものはペンディングして覚えておき、類似の問題がまた発生したとき、時間をとって全てを同時に解決する方法を探ります。

即座に解決できる問題は速く解決し、より困難な問題に時間を割けるように改善スピードをあげる工夫をしています。

工夫5. 辞書管理ツールを作る

発見した問題のうち、分かち書き・同義語の間違いなどは辞書の修正で解決できます。いちいちデータベースを修正していると、これがとても億劫な作業であることに気が付きます。そこでこれを簡単にできるツールを実装しました。ツールから同義語や辞書の修正をできるようにすることで、問題をためこまずアクションできるようにしました。

また、修正履歴は全て保存されていて、それぞれの単語に関する変更を確認できます。 「どうしてこんなデータが入っているのだろう?」という時に履歴を確認できると意図が分かり便利です。過去と反対の変更をしてしまう心配もありません。

f:id:code46:20141030135530j:plain

工夫6. ログを活用する

データからユーザーのタスクを助ける情報を抽出して反映します。

例えば、レシピが見つかったクエリチェーン(同一セッション内での検索語の変遷)は、ユーザーの上手な検索の軌跡です。

このデータからあるキーワードの次に検索されるキーワードを抽出して「関連キーワード」として提案します。 こうすることで、一歩先を読んだ検索語の提案ができます。この仕組みに興味のある方はLinkedInのこちらの記事がオススメです!

こうした仕組みを随所に取り入れています。

工夫7. インデックスを高速化する

クックパッドでは全てのインデックスは毎日リビルドされます。

こうしておくことで、検索インデックスに対するほとんどの変更を遅くとも翌日に確認できるようになります。

まとめ

レシピ検索を改善していく中で、他の検索システムでも共通しそうな部分を2つのフェーズに分けてご紹介しました。

  • 問題を発見しやすくすること
  • 改善のアクションをとりやすくすること

今後は、より多くのフィードバックをユーザーやスタッフの負担にならない形で教えてもらいながら、反映する仕組みを洗練させたいと思っています。

また、UIやナビゲーションが重要というのは他の機能と変わりません。UIの改善にも取り組んでいきたいです。

検索UIに関連する記事:

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/