Above & Beyond

日々のアウトプット記録

Search Engineering Tech Talk #1

02/26(火) は「Search Engineering Tech Talk #1」に参加してきました。

search-tech.connpass.com

f:id:kabukawa:20190224112018p:plain:w500

会場は 株式会社メルカリ さん。

f:id:kabukawa:20190226185928j:plain:w600

いつ来ても広いし綺麗ですね! 椅子に机がついているのもありがたいです。


目次


何故参加したか

検索というのは身近なものでありながら、それについて知ろうと思うと具体的な製品のことになってしまう、みたいなことを感じていました。 製品の使いこなし方ではなく、もう少し基礎的な技術であったり考え方について知る機会があるといいなと思っていたので、参加しました。


タイムテーブル

時間 内容 スピーカー
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〜 終了

内容

当日のツイート内容はトゥギャられていますね。素早い!

togetter.com

ノベルティも色々いただきました!

f:id:kabukawa:20190226185948j:plain:w600

オープニング

大谷純さん

f:id:kabukawa:20190228120503j:plain:w300

主催の大谷さんからこの勉強会についての説明。

f:id:kabukawa:20190228104930p:plain:w500

スライドから引用します。

目的

  • 「検索」/「検索システム」にまつわる技術や手法に関して共有できる場を提供すること
  • 検索エンジンには関係なく、「検索」というシステム、サービスを作る上で共通の解決すべき課題がある
  • これらの課題をみんながどのように解決しているのか?といった知識を共有できる場にすること

扱うトピック(随時更新予定)

扱わないトピック(随時更新予定)

  • SEO技術
    • 検索サイトの上位にどのように表示させるか

個別の製品についてとか、そういうことではなくもっと大きな括りで勉強できる場を提供する、という取り組みと理解しました。 基礎的な知識は少ないものの、昔から検索をもっと勉強してみたいという意識はあったのでこういうことを勉強できる場があるのはありがたいな、と思いました。 たぶん同じように考えていた人は多かったようで、参加者もメチャクチャ多かったですが、それでも参加できなかった人もいるということで増枠も検討していただけるかも。

ということで、今回参加できなかった場合でも次回は是非!


「いい検索」を考える

内田臣了 さん

f:id:kabukawa:20190228120439j:plain:w300

資料

www.slideshare.net


個人メモ:

スライドがメチャクチャ分かりやすく書かれているので、スライドの各項目の纏め部分を引用します。

検索システムの構成要素

f:id:kabukawa:20190227012500p:plain:w300 f:id:kabukawa:20190227012511p:plain:w300

検索システムは、フィルタリング・ランキング ✕ ユーザインタフェースで構成されている。

フィルタリング

  • ユーザーが探している情報とシステム䛾検索結果が完全に一致すると最強
  • フィルタリングの評価指標
    • 適合率:検索結果に含まれる正解䛾割合
    • 再現率:正解䛾うち検索結果がカバーした割合
  • フィルタリング䛾質を高めるために
    • 適合率改善:クエリ意図推定、パーソナライズ
    • 再現率改善:同義語展開、ストップワード除去
  • 適合率と再現率䛿トレードオフ
    • F値: 適合率と再現率䛾重み付き調和平均

ランキング

  • 基本的にはユーザーが探しているものが上位に来るといいランキング
  • ランキングの評価指標
    • Precision@k:上位k件の適合率
    • MAP (Mean Average Precision):平均適合率の平均
    • NDCGG (Normalized Discounted Cumulative Gain):段階的な関連度(点数)を考慮
    • 他にも色々ある
  • 多様性のあるランキングが適する場合もある
    • MMR (Maximum Marginal Relevance) :文書間の関連性(周辺関連性)を考慮

ユーザインタフェース

  • 正確に効率よく満足して使えればいいユーザインタフェース
  • ユーザーに合わせて入出力のインタフェースを設計する
    • 探している条件を直感的に入れられる入力
    • 検索結果に探しているものがあるか判断しやすい出力
  • インタラクションを支援する機能を用意する
    • 検索は1回では終わらない

サービスにおける「いい検索」

  • サービスごとに「いい検索」䛿異なる
    • 従来の検索の評価指標は被検索者に意思がある場合を考慮していない
  • サービスの役割と紐づくように指標を設定しそれに貢献するよう検索機能を設計する
  • フィルタリング・ランキングとユーザインタフェースの両面から改善する

まとめ

  • 検索システム =フィルタリング・ランキング ✕ユーザインタフェース
  • 探しているものを早く見つけられればいいフィルタリング・ランキング
  • 正確に効率よく満足して使えればいいユーザインタフェース
  • サービスの役割を意識して指標を決め検索をデザインしよう

感想:

  • こうやって体系的に検索の構成要素について学ぶことがなかったので、勉強になりました。
  • というか知らないことが多すぎですね。もう少し基礎的なことから勉強しないと。。。
  • 一口に検索と言っても様々な要素があって、改善すべき項目も内容も異なるというのは目からウロコでした。

f:id:kabukawa:20190228120412j:plain:w300


UI/UXが無意識に検索行動に与える影響

@tairoさん

f:id:kabukawa:20190228120522j:plain:w300

資料

www.slideshare.net

個人メモ:


  1. メルカリの検索チームが面白くなってきている
  2. 売れた商品を検索結果に表示するのは理由がある
  3. 情報検索(Google等)とメルカリ検索は検索改善の考え方がちょっと違う

メルカリの検索チームが面白くなってきている

  • いろいろな会社からメンバーがJoin

f:id:kabukawa:20190228111509p:plain:w500

  • Apache Solr入門」の共著者 6名のうち半数がチームに参画

[改訂第3版]Apache Solr入門――オープンソース全文検索エンジン (Software Design plus)

[改訂第3版]Apache Solr入門――オープンソース全文検索エンジン (Software Design plus)

  • SIGIR 2019にも参加する ACM: Association for Computing Machinery SIGIR: Special Interest Group in Information Retrieval

sigir.org

売れた商品が検索結果に出ている理由

  • 消すとどうなるか

    • すべてのKPIが下がる
      • 出品転換率
      • 購買転換率
      • 取引総数
  • なんでか?

    • 検索しているのは買いたい人だけじゃない
      • 買いたい人
      • 売りたい人
    • 出品しようとした時に検索するから、出品転換率が上がる。
    • 売り切れた商品の値段を知りたい。
  • 買いたいと思っている人の目線と売りたいと思っている人の目線

f:id:kabukawa:20190228112559p:plain:w500

  • まずは売ってもらう
  • そうしないと買おうとしている人が買えない
  • 部分最適に走るのはいい結果を産まない

  • 販売中のみ表示 チェックボックスをつけることで、SOLD商品を邪魔だと思っている人の声を回避

情報検索とメルカリ検索は検索改善の考え方がちょっと違う

  • 荒れた検索結果を改善
    • CTR改善(4.5倍)できた
  • 別に荒れてない検索結果を改善
    • CTRが 1/10 に激減
  • なぜか?
    • 関連性を犠牲にして新着順にしたほうがCTRが上がる
    • メルカリは出品頻度が高いので新着性が重要
  • 情報検索と商品検索(メルカリ)の検索UIの違い

f:id:kabukawa:20190228113018p:plain:w500

  • だとすると

    • NDCGでメルカリ検索結果の良し悪しを決めると順位でスコアをDiscountし過ぎてしまう
    • 一定の関連性を保ちつつ新着性を確保する必要がある
  • メルカリの検索結果を構成する要素と優先順位

f:id:kabukawa:20190228114316p:plain:w500

  • 一般的な情報検索との違い

f:id:kabukawa:20190228114336p:plain:w500


感想:

  • 使う業務よって何を優先して最適化すべきかが異なるのを、こうやって実例を挙げて見せてもらうのは面白かった。
  • 検索というとエンジンのことに目が向きがちだけど、UI/UXもすごく大事なんだっていうのがスッと腹落ちした良い内容だった。
  • メルカリ、すごい人がいっぱい集まっていて楽しそう。

f:id:kabukawa:20190228120555j:plain:w300


Efficient top-k query processing in Lucene 8

@moco_betaさん

f:id:kabukawa:20190228120541j:plain:w300

資料

speakerdeck.com

個人メモ:


f:id:kabukawa:20190228121256p:plain

要約

  • Top-k クエリ処理/スコアリングははるかに高速になる
  • 特に disjunction(OR)クエリで効果的
    • PhraseQuery、WildcardQuery、及びそれらの組み合わせなどの複雑なクエリにも有効
  • 正確な合計ヒット数は返されない(デフォルト)

取り敢えず、スライドが英語なのと、基礎知識がない自分には分かりづらかったので、以下の記事をすべて読み直しました。 (リンク先の記事を短く纏めて発表したものが今回のセッションということでしたので)

medium.com

medium.com

medium.com

medium.com

medium.com

参考にされているリンクはこちら。どういう内容かを上記ページから引用して貼っておきます。

www.elastic.co

実装をリードした Adrian さんのブログ。歴史(というのもこの話はだいぶ古くて,最初の issue が上がったのが 2012 年なのでゆうに 6 年かかっている)から関連 issue へのリンク,実装のポイントまでまとまっているので,まずはここを読むのがよいと思う。

fosdem.org

同じく実装に関わった Alan さんのトーク@FOSDEM。

fosdem.org

Lucene/Solr 8 全般のアップデートについてのトーク@FOSDEM。クエリ最適化の話は前半に少し出てくる。

vimeo.com

そもそものきっかけとなったパッチ (LUCENE-4100) を作った方のトーク@Berlin Buzzwords ここにスライドも上がっている。

www.slideshare.net

Top-k クエリプロセッシング,とくに MaxScore について詳しくサーベイ&論文紹介されているスライド。スライドだけでもとてもわかりやすくて神。


感想:

  • ある程度 Lucene の実装とかアルゴリズムについて知っていないと、難しい内容だなと思いました。
  • ただ、説明が図を使って解説されていたので、聞いていても分からないなりに「どういうことをしているのか」という触りがなんとなく理解できただけでも、ありがたい内容だったなと思いました。
  • 打田さんの話を聞くのは実はこれで2回め(前回はJanomeの話)だったのですが、噛み砕いて分かりやすく説明をしていただけるのでありがたかったです。

懇親会

食べ物、飲み物はこんな感じでした。スポンサーの皆様、ありがとうございます!

f:id:kabukawa:20190226211454j:plain

1つだけ、大きめのピザがあったけど、生地がクリスピーで美味しかったです!


まとめ

以下のツイートでもつぶやいてますが、検索に興味があるということで参加したけど、なんか色々足りてないことが分かって帰ってきた、というのが正直なところ。

だいぶ基礎的な知識がないことが分かったので、記事を読み直しながらもっと勉強しないといけないなというやる気スイッチが押された気がします。 そういう意味で、自分にとっては参加できて良かった勉強会でした。 次回もできれば参加したいです。(そしてそのときにはもう少し基礎的なところも分かっている自分でありたい。。。)

講演者、スタッフ、参加者の皆様、ありがとうございました!