02/26(火) は「Search Engineering Tech Talk #1」に参加してきました。
会場は 株式会社メルカリ さん。
いつ来ても広いし綺麗ですね! 椅子に机がついているのもありがたいです。
目次
何故参加したか
検索というのは身近なものでありながら、それについて知ろうと思うと具体的な製品のことになってしまう、みたいなことを感じていました。 製品の使いこなし方ではなく、もう少し基礎的な技術であったり考え方について知る機会があるといいなと思っていたので、参加しました。
タイムテーブル
時間 | 内容 | スピーカー |
---|---|---|
19:00 | 開場 | |
19:30 | オープニング | @johtaniさん |
19:40〜20:10 | 「いい検索」を考える | 内田臣了 さん |
20:10〜20:40 | UI/UXが無意識に検索行動に与える影響 | @tairoさん |
20:40〜21:10 | Efficient top-k query processing in Lucene 8 | @moco_betaさん |
21:10〜 | 懇談会 | |
22:10〜 | 終了 |
内容
当日のツイート内容はトゥギャられていますね。素早い!
ノベルティも色々いただきました!
オープニング
大谷純さん
主催の大谷さんからこの勉強会についての説明。
スライドから引用します。
目的
- 「検索」/「検索システム」にまつわる技術や手法に関して共有できる場を提供すること
- 検索エンジンには関係なく、「検索」というシステム、サービスを作る上で共通の解決すべき課題がある
- これらの課題をみんながどのように解決しているのか?といった知識を共有できる場にすること
扱うトピック(随時更新予定)
扱わないトピック(随時更新予定)
- SEO技術
- 検索サイトの上位にどのように表示させるか
個別の製品についてとか、そういうことではなくもっと大きな括りで勉強できる場を提供する、という取り組みと理解しました。 基礎的な知識は少ないものの、昔から検索をもっと勉強してみたいという意識はあったのでこういうことを勉強できる場があるのはありがたいな、と思いました。 たぶん同じように考えていた人は多かったようで、参加者もメチャクチャ多かったですが、それでも参加できなかった人もいるということで増枠も検討していただけるかも。
キャパシティを上限まで上げて対応する感じかなぁ。キャンセル待ちが直前に解消されても来れないだろうし。。。
— Jun Ohtani (@johtani) February 27, 2019
ということで、今回参加できなかった場合でも次回は是非!
「いい検索」を考える
内田臣了 さん
資料
個人メモ:
スライドがメチャクチャ分かりやすく書かれているので、スライドの各項目の纏め部分を引用します。
検索システムの構成要素
検索システムは、フィルタリング・ランキング ✕ ユーザインタフェースで構成されている。
フィルタリング
- ユーザーが探している情報とシステム䛾検索結果が完全に一致すると最強
- フィルタリングの評価指標
- 適合率:検索結果に含まれる正解䛾割合
- 再現率:正解䛾うち検索結果がカバーした割合
- フィルタリング䛾質を高めるために
- 適合率改善:クエリ意図推定、パーソナライズ
- 再現率改善:同義語展開、ストップワード除去
- 適合率と再現率䛿トレードオフ
- F値: 適合率と再現率䛾重み付き調和平均
ランキング
- 基本的にはユーザーが探しているものが上位に来るといいランキング
- ランキングの評価指標
- Precision@k:上位k件の適合率
- MAP (Mean Average Precision):平均適合率の平均
- NDCGG (Normalized Discounted Cumulative Gain):段階的な関連度(点数)を考慮
- 他にも色々ある
- 多様性のあるランキングが適する場合もある
- MMR (Maximum Marginal Relevance) :文書間の関連性(周辺関連性)を考慮
- 正確に効率よく満足して使えればいいユーザインタフェース
- ユーザーに合わせて入出力のインタフェースを設計する
- 探している条件を直感的に入れられる入力
- 検索結果に探しているものがあるか判断しやすい出力
- インタラクションを支援する機能を用意する
- 検索は1回では終わらない
サービスにおける「いい検索」
- サービスごとに「いい検索」䛿異なる
- 従来の検索の評価指標は被検索者に意思がある場合を考慮していない
- サービスの役割と紐づくように指標を設定しそれに貢献するよう検索機能を設計する
- フィルタリング・ランキングとユーザインタフェースの両面から改善する
まとめ
- 検索システム =フィルタリング・ランキング ✕ユーザインタフェース
- 探しているものを早く見つけられればいいフィルタリング・ランキング
- 正確に効率よく満足して使えればいいユーザインタフェース
- サービスの役割を意識して指標を決め検索をデザインしよう
感想:
- こうやって体系的に検索の構成要素について学ぶことがなかったので、勉強になりました。
- というか知らないことが多すぎですね。もう少し基礎的なことから勉強しないと。。。
- 一口に検索と言っても様々な要素があって、改善すべき項目も内容も異なるというのは目からウロコでした。
サービスによって良い検索の結果は変わる。
— kabukawa (@kabukawa) February 26, 2019
たしかにそうなんですよね。。。。
#searchtechjp
UI/UXが無意識に検索行動に与える影響
@tairoさん
資料
個人メモ:
- メルカリの検索チームが面白くなってきている
- 売れた商品を検索結果に表示するのは理由がある
- 情報検索(Google等)とメルカリ検索は検索改善の考え方がちょっと違う
メルカリの検索チームが面白くなってきている
- いろいろな会社からメンバーがJoin
- 「Apache Solr入門」の共著者 6名のうち半数がチームに参画
- SIGIR 2019にも参加する ACM: Association for Computing Machinery SIGIR: Special Interest Group in Information Retrieval
売れた商品が検索結果に出ている理由
消すとどうなるか
- すべてのKPIが下がる
- 出品転換率
- 購買転換率
- 取引総数
- すべてのKPIが下がる
なんでか?
- 検索しているのは買いたい人だけじゃない
- 買いたい人
- 売りたい人
- 出品しようとした時に検索するから、出品転換率が上がる。
- 売り切れた商品の値段を知りたい。
- 検索しているのは買いたい人だけじゃない
買いたいと思っている人の目線と売りたいと思っている人の目線
情報検索とメルカリ検索は検索改善の考え方がちょっと違う
- 荒れた検索結果を改善
- CTR改善(4.5倍)できた
- 別に荒れてない検索結果を改善
- CTRが 1/10 に激減
- なぜか?
- 関連性を犠牲にして新着順にしたほうがCTRが上がる
- メルカリは出品頻度が高いので新着性が重要
- 情報検索と商品検索(メルカリ)の検索UIの違い
そうか、メルカリ検索の結果は特定のキーワードで絞り込んだショーケースなんだ。最初から色々見る気でいるからいいのか。
— kabukawa (@kabukawa) February 26, 2019
#searchtechjp
だとすると
- NDCGでメルカリ検索結果の良し悪しを決めると順位でスコアをDiscountし過ぎてしまう
- 一定の関連性を保ちつつ新着性を確保する必要がある
メルカリの検索結果を構成する要素と優先順位
- 一般的な情報検索との違い
感想:
- 使う業務よって何を優先して最適化すべきかが異なるのを、こうやって実例を挙げて見せてもらうのは面白かった。
- 検索というとエンジンのことに目が向きがちだけど、UI/UXもすごく大事なんだっていうのがスッと腹落ちした良い内容だった。
- メルカリ、すごい人がいっぱい集まっていて楽しそう。
同じ「検索」なのに、結果に期待するものがぜんぜん違うの、面白いなぁ。
— kabukawa (@kabukawa) February 26, 2019
#searchtechjp
Efficient top-k query processing in Lucene 8
@moco_betaさん
資料
個人メモ:
要約
- Top-k クエリ処理/スコアリングははるかに高速になる
- 特に disjunction(OR)クエリで効果的
- PhraseQuery、WildcardQuery、及びそれらの組み合わせなどの複雑なクエリにも有効
- 正確な合計ヒット数は返されない(デフォルト)
取り敢えず、スライドが英語なのと、基礎知識がない自分には分かりづらかったので、以下の記事をすべて読み直しました。 (リンク先の記事を短く纏めて発表したものが今回のセッションということでしたので)
参考にされているリンクはこちら。どういう内容かを上記ページから引用して貼っておきます。
実装をリードした Adrian さんのブログ。歴史(というのもこの話はだいぶ古くて,最初の issue が上がったのが 2012 年なのでゆうに 6 年かかっている)から関連 issue へのリンク,実装のポイントまでまとまっているので,まずはここを読むのがよいと思う。
そもそものきっかけとなったパッチ (LUCENE-4100) を作った方のトーク@Berlin Buzzwords ここにスライドも上がっている。
www.slideshare.net
Top-k クエリプロセッシング,とくに MaxScore について詳しくサーベイ&論文紹介されているスライド。スライドだけでもとてもわかりやすくて神。
感想:
- ある程度 Lucene の実装とかアルゴリズムについて知っていないと、難しい内容だなと思いました。
- ただ、説明が図を使って解説されていたので、聞いていても分からないなりに「どういうことをしているのか」という触りがなんとなく理解できただけでも、ありがたい内容だったなと思いました。
- 打田さんの話を聞くのは実はこれで2回め(前回はJanomeの話)だったのですが、噛み砕いて分かりやすく説明をしていただけるのでありがたかったです。
懇親会
食べ物、飲み物はこんな感じでした。スポンサーの皆様、ありがとうございます!
1つだけ、大きめのピザがあったけど、生地がクリスピーで美味しかったです!
まとめ
以下のツイートでもつぶやいてますが、検索に興味があるということで参加したけど、なんか色々足りてないことが分かって帰ってきた、というのが正直なところ。
とりあえず帰りの電車の中ですが、普段あまり学ぶことのない世界だったので、すごく刺激的な時間でした。話の半分も理解できてない気がしますが、理解できるようになりたいなぁ、と思いました。参加できてとても良かったです。ありがとうございました!
— kabukawa (@kabukawa) February 26, 2019
#searchtechjp
だいぶ基礎的な知識がないことが分かったので、記事を読み直しながらもっと勉強しないといけないなというやる気スイッチが押された気がします。 そういう意味で、自分にとっては参加できて良かった勉強会でした。 次回もできれば参加したいです。(そしてそのときにはもう少し基礎的なところも分かっている自分でありたい。。。)
講演者、スタッフ、参加者の皆様、ありがとうございました!