Slide 1

Slide 1 text

© Stanby, Inc. 検索エンジンをVespaへ移行しています 株式会社スタンバイ 鷹取敏志 1 2023.12.20 Search Engineering Tech Talk 2023 Winter

Slide 2

Slide 2 text

© Stanby, Inc. 目次 2 1. 背景 2. 検索エンジンの選定 3. Vespaへの移行 4. 結果 5. まとめ

Slide 3

Slide 3 text

© Stanby, Inc. 背景 3

Slide 4

Slide 4 text

© Stanby, Inc. 4 会社概要 社名 株式会社スタンバイ 事業内容 求人検索エンジン「スタンバイ」の運営 住所 東京都渋谷区 設立 2019年11月12日 資本金 1億円 株式保有割合 LINEヤフー60%、ビジョナル40% Yahoo! JAPANやLINE などを運営する LINEヤフー Visional 即戦力人材と企業をつなぐ 転職サイト「ビズリーチ」をはじめさまざ まな事業を提供 Yahoo! JAPANの圧倒的リーチ力と ビズリーチのHR Tech事業ノウハウを活かし 求人検索エンジン事業を運営 株式会社スタンバイは、 LINEヤフー株式会社とビジョナル株式会社の合弁事業会社 です。

Slide 5

Slide 5 text

© Stanby, Inc. 対象組織の概要 - 提供サービス(プロダクト) 5 求人検索エンジン「スタンバイ」

Slide 6

Slide 6 text

© Stanby, Inc. 対象組織の概要 - 提供サービス(プロダクト) 6 求人検索エンジン「スタンバイ」は、Web上に点在するあらゆる求人情報を一括で検索できるサービスです。 ネット上の求人を 一括で検索 ユーザー(求職者) 求人メディア 企業ページ 直接スタンバイに 登録された求人 採用管理システム 求人情報取得 クローリング等 ・雇用形態 ・給与形態 ・掲載開始日 ・こだわり条件 ・自宅や最寄り駅からの距離 求人票 検 索 応 募 ユーザー(求職者)

Slide 7

Slide 7 text

© Stanby, Inc. スタンバイの検索の仕組み スタンバイではオーガニック(無料)と広告(有料)の2種類の検索を提供しています。 それぞれで異なる検索エンジンを使用しています。 ● ABYSS ○ オーガニック検索で利用 ○ LINEヤフー株式会社のバーティカル検索プラットフォームであるABYSSを使用させていただいている ● Elasticsearch ○ 広告検索で利用 7 フロントエンド バックエンド オーガニック 検索API 広告配信API ABYSS (Apache Solr ベース) Elasticsearch

Slide 8

Slide 8 text

© Stanby, Inc. 検索エンジンの課題(オーガニック) ● 検索エンジンが利用できなくなるリスク ○ ABYSSの提供が終了した場合にスタンバイのサービス自体が停止してしまう ● 開発上の制約 ○ 検索プラットフォームの利用者の立場であるため、エンジン自体に手を入れることができない ○ 検索エンジンの開発および検索精度改善が自社で完結できず他社に依存 ● スケーリング ○ 契約の都合上クラウドサービスのように即座にサーバ台数の増減ができない ○ 常に最大のトラフィックに耐えれるサーバ台数を確保しておく必要がある ● 経験・知識 ○ 社内にナレッジや運用経験が蓄積されず、高度な検索エンジンの開発や運用ができるようにならない 8

Slide 9

Slide 9 text

© Stanby, Inc. 検索エンジンの課題(広告) ● 独自プラグインの開発・メンテナンスの負担 ○ Elasticsearchの独自プラグインを開発し、ランキング機能を実現 ■ 導入当時は既存のOSSプラグインでは、仕様や性能を満たせなかったため ○ ランキング変更のたびにプラグインに手を入れなければならず、改善のボトルネックとなっている ○ Elasticsearchのバージョンを上げるたびに対応が必要 ● インフラコスト ○ 上記のプラグインの影響により、性能を満たすために必要なサーバ台数が多くインフラコストが高くなっている 9

Slide 10

Slide 10 text

© Stanby, Inc. 検索エンジンの課題(共通) ● 全体の改善効率の低下 ○ 異なるエンジンを利用していることから、精度改善のための実装をそれぞれのエンジン間で共有できない ■ 同じ施策でもオーガニックと広告で別々に実装しなければならない ■ 実施できる全体の精度改善施策の数が減少 ● 学習・運用コストの増大 ○ それぞれの検索エンジンで学習や運用にかかる作業が発生 ○ 本来の検索改善を行うための時間が減少 10

Slide 11

Slide 11 text

© Stanby, Inc. 検索エンジンの統一へ これらの課題を解消するため、 検索エンジンを統一し、自社で運用する方針が決定 ● 検索エンジンを統一することで、エンジニアリング リソー スを集約し、検索エンジン運用と検索サービス開発の効 率を上げる ● 自社で検索エンジンを運用することで、情報検索技術 や検索エンジンに関する深い 知識を社内に蓄積 する ● システム提供、ソフトウェアライセンスに関して自社でコ ントロールできない制約事項を可能な限り排除し、 自由 度高く検索サービスの開発 を行えるようにする 11 Photo by Unsplash on Patrick Federi

Slide 12

Slide 12 text

© Stanby, Inc. 検索エンジンの選定 12

Slide 13

Slide 13 text

© Stanby, Inc. 13 検索 更新 機械学習 ● 高トラフィック ○ 国内有数の求人検索エンジン ○ サービスの成長に伴い今後も さらに増加見込み ● 低レイテンシー ○ レイテンシーの悪化はユー ザーの離脱と売上の低下に直 接大きな影響を与える ● 検索対象のドキュメント量が多い ○ インデックス対象の求人データは 1000万件以上 ○ 全求人を常に検索可能とする ● ドキュメントの更新量が多く高頻度 ○ 求人データは登録、更新、削除 の頻度が高い ○ 機械学習の特徴量データを毎 日全求人に付与 ○ リアルタイムでそれらを反映す る必要がある ● 機械学習を活用 ○ Learning to Rank ○ multi phase ranking ○ GBDTモデル ● 機械学習チームと検索基盤チームが別 ○ モデル周りは機械学習チーム ○ 検索エンジンは検索チーム スタンバイの検索の特徴 Photo by Unsplash on Jubéo Hernandez Photo by Unsplash on Sam 🐷 Photo by Unsplash on Growtika

Slide 14

Slide 14 text

© Stanby, Inc. Vespaとは Vespaは、オープンソースのbig data serving engineです。 オンラインでビッグデータにAIを適用することができます。 ● 検索に限らず様々な用途で使用可能 ○ 検索 ○ レコメンド ○ 会話AI ○ etc… ● オープンソース ○ Apache License 2.0 ○ 2017年にオープンソースソフトウェアとして公開 ○ 2023年10月に米Yahooからスピンアウトし独立した企業となる ● 実績 ○ Yahooの検索での長い実績から大規模なトラフィックに対応できる能力が証明されている ■ 1日に25Bのリアルタイムクエリと75Bのライティング(更新)を処理可能 ○ Spotifyでも採用されている 14

Slide 15

Slide 15 text

© Stanby, Inc. Vespaの特徴 ● 高速な検索 ○ Vespaはリアルタイムで低レイテンシかつ高スループットが求められるユースケースに最適化されている ○ 数十ミリ秒以下のレイテンシでレスポンスを返すことが可能 ○ 並列にクエリを実行することで、どのようなデータ量でも一定の応答時間を維持できるように設計されている ○ クエリごとに複数のサーチャースレッドを活用し、スループットに対してレイテンシを柔軟にスケールできる ● 高いスケーラビリティ ○ ノードをクラスタに追加するだけで簡単にスケールできる ○ シャードがなく、手動でデータをパーティションする必要がない ■ バケットと呼ばれる単位でドキュメントを管理 ■ バケットのサイズと数はVespaによって管理される 15

Slide 16

Slide 16 text

© Stanby, Inc. Vespaの特徴 ● 効率的なインデックス作成 ○ Vespaのインデックス作成は低レイテンシでの更新が可能で、常にデータが変化する場合に適している ■ 可変のメモリインデックスを持つ ■ 更新リクエストが完了した時点で即座に検索可能になる 16 Jo Kristian Bergum – Search and Sushi; Freshness Counts

Slide 17

Slide 17 text

© Stanby, Inc. Vespaの特徴 ● 豊富な機械学習関連の機能 ○ 複数の機械学習モデルサポート ■ ONNX ■ XGBoost ■ LightGBM ○ 様々なデータ型のサポート ■ weightedset ■ tensor ○ multi phase rankingのサポート ○ 本体に組み込みで機械学習の機能を持っている ■ プラグイン等を別途追加・運用する必要がない ● rank-profileによるランキングの設定 ○ ランキングアルゴリズムをクエリとは別に管理可能 17

Slide 18

Slide 18 text

© Stanby, Inc. 特徴まとめ スタンバイの検索の特徴とVespaの特徴がマッチしていたため、Vespaを採用することにしました。 18 スタンバイ検索の特徴 Vespaの特徴 検索 ● 低レイテンシ ● 高トラフィック ● 高速な検索処理が可能 ● 高いスケーラビリティ 更新 ● 検索対象のドキュメント量が多い ● ドキュメントの更新量が多く高頻度 ● 効率的なインデックスの作成 機械学習 ● 機械学習を活用 ● 機械学習チームと検索基盤チームが別 ● 豊富な機械学習関連の機能 ● rank-profileによるランキングの指定

Slide 19

Slide 19 text

© Stanby, Inc. Vespaへの移行 19

Slide 20

Slide 20 text

© Stanby, Inc. Vespaへの移行タスク 20 調査・機能検証 クラスタ構築 機能開発 テスト

Slide 21

Slide 21 text

© Stanby, Inc. 調査・機能検証 最初に、現在提供している検索仕様をすべてみたせるかの確認を行いました。 学習に使用できるリソースが充実しており、調査がスムーズに進みました。 ● 公式ドキュメントが充実 ○ ただしドキュメント量は多いので少しずつ読み進めている ● Slackで直接開発者に質問できる ○ 他の人が質問した内容を読むだけでも参考になる ● ローカル環境で簡単に動作確認できる ○ Dockerで簡単に動かせる 21 調査・機能検 証 クラスタ構 築 機能開発 テスト https://vespa.ai/support

Slide 22

Slide 22 text

© Stanby, Inc. Vespaの紹介 - アーキテクチャ Vespaは複数のコンポーネントから構成されています。 ● Admin/Config ○ 設定の管理、クラスタの制御など ● Container ○ 入力データやクエリ・レスポンスを加工するステートレスなコンポーネント ○ クエリとデータ操作をコンテンツクラスタの適切なノードに渡す ○ Javaで実装されており、プラグインで容易に拡張できる ● Content ○ インデックスの管理 ○ 検索・ランキングの実行 ○ C++で実装されている 22

Slide 23

Slide 23 text

© Stanby, Inc. Vespaの紹介 - クラスタ設定 Vespaのクラスタ設定は2種類のファイルで行います。 ● hosts.xml ○ クラスタに参加するサーバを指定する ○ ホスト名にエイリアスを紐づける ● services.xml ○ クラスタ設定を行う ○ 各サーバに役割を与える ○ プラグインやスレッド数・メモリ等のリソース設定など ○ 構成を変えたい場合は、設定を変更して反映するだけ ■ (ただし、configサーバは除く) 23

Slide 24

Slide 24 text

© Stanby, Inc. Vespaの紹介 -ドキュメント管理 ● スキーマ定義 ○ スキーマ定義ファイルを作成し、デプロイすることで反映 ○ フィールドごとにインデクシングの方法や検索方法を設定可能 ○ 動的なフィールドは作成できない ● フィード方法 ○ httpもしくは Java製のclientでcontainerにリクエストを送信 ○ 検索用のAPIとは別のドキュメントAPIを使用する ■ ドキュメントの取得・登録・更新・削除が可能 24

Slide 25

Slide 25 text

© Stanby, Inc. Vespaの紹介 - 検索方法 ● 検索クエリ ○ 検索クエリはYQLというSQLに似たDSLで記述 ○ Solr/Elasticsearchで提供されている基本的な検索機能は揃っている ● ランキングの指定 ○ 検索時にRank Profileを指定可能 ○ クエリごとにランキングを変更できる ● query-profile ○ 検索パラメータを名前をつけて管理 ○ 毎回多数のパラメータを付けずにすむ 25

Slide 26

Slide 26 text

© Stanby, Inc. Vespaの紹介 - ランキング設定 ● rank-profileファイルで設定 ○ 様々な関数、モデルを使用可能 ○ two-phase ranking ○ 継承 26

Slide 27

Slide 27 text

© Stanby, Inc. スタンバイにおけるVespaクラスタのアーキテクチャ スタンバイではAWSを使用しています。 そのため、EC2でVespaクラスタを構築しています。 27 調査・機能検 証 クラスタ構 築 機能開発 テスト

Slide 28

Slide 28 text

© Stanby, Inc. スタンバイにおけるVespaクラスタの構築 検証中何度もVespaのクラスタを構築し直す必要があったため、インフラをコード化しています。 28 調査・機能検 証 クラスタ構 築 機能開発 テスト

Slide 29

Slide 29 text

© Stanby, Inc. 移行のための機能開発 検索を実現するために必要だった開発 ● クエリ処理を一箇所に集約 ○ オーガニックAPI・広告API・バックエンドAPIで、クエリを変換するロジックが別々に実装されていた ○ エンジンを統合する前にクエリ処理を行うAPIを作成し統一 ● 検索APIの実装 ○ ユーザから受け取ったクエリをYQLに変換 ○ rustでAPIを実装 ● Feederの実装 ○ ドキュメント1件毎にVespaへの更新リクエストを発行 ○ JavaでStream処理を実装 ● Linguisticモジュールの実装 ○ 形態素解析などの言語処理機能を実装 ● 機械学習モデルの実装 ○ 既存のモデルで使用している特徴量を、Vespaで使用できる特徴量にマッピング 29 調査・機能検 証 クラスタ構 築 機能開発 テスト

Slide 30

Slide 30 text

© Stanby, Inc. Linguisticモジュール VespaはLinguisticモジュールを使用して、インデックス作成および検索時にクエリやドキュメントのテキストを処理します。 tokenizing, normalizing(アクセント記号の除去), stemmingが行われたtermがインデックスに追加されます。 ● カスタマイズ ○ com.yahoo.language.LinguisticsインタフェースをJavaで実装 ○ 複数の実装が提供されているので参考にできる ■ SimpleLinguistics ■ OpenNLP ■ LuceneLinguistics ■ KuromojiLinguistics ● 注意点 ○ 言語の特定が間違うとマッチしなくなってしまう ■ 処理時にモジュール内で言語の特定を行う ■ 短い単語は特定が困難なため、パラメータで明示する ○ queryとdocument両方に同じLingusitcsの実装をする 30 調査・機能検 証 クラスタ構 築 機能開発 テスト

Slide 31

Slide 31 text

© Stanby, Inc. テスト 一般的な検索改善におけるテストと同じです。 ● QA ○ 既存の検索機能が実現できているかの確認 ● 負荷試験 ○ 負荷に耐えられるかの確認 ○ 選定時にある程度の性能評価は行っていたが、モデル等を本番で使用するものを用意し改めて確認 ● オフラインテスト ○ 定量・定性の両方で評価 ■ SQ(サーチクオリティ)グループという検索精度を評価するチームが存在 ● オンラインテスト ○ 検索精度を定量的に評価 ○ ABテストを実施 31 調査・機能検 証 クラスタ構 築 機能開発 テスト

Slide 32

Slide 32 text

© Stanby, Inc. 移行結果 32

Slide 33

Slide 33 text

© Stanby, Inc. オーガニック検索エンジンのVespa移行が無事に完了しました。 広告に関しては現在移行作業中ですが、移行の目的はある程度達成できそうです。 ● リソース集約: 広告の移行にオーガニックの知見が活かせている ● 知識の蓄積: Vespa関連の知識が中心だが、蓄積でき始めている ● 自由な開発: Linguisticsモジュールなど、自社で開発ができている フロントエンド バックエンド オーガニック 検索API 広告配信API Elasticsearch 結果 33 Vespa

Slide 34

Slide 34 text

© Stanby, Inc. 苦労したポイント ● 覚えなければならないことが多い ○ Solr/Elasticsearchとは全く異なるエンジンなので、新しい概念を学ぶ必要がある ○ HA構成でクラスタを構築・運用をしようとすると覚えなければならないことが多い ■ Admin/Container/Content ノード上で複数のサービスが動作 ● cluster controller/proton/config proxy/distributor/slobrokなど、それぞれの役割を覚える必要が ある ● 日本語の場合の情報があまりない ○ 日本のユーザが少ないため、Web上の情報が多くない ■ トラブル発生時の調査が難しい ○ 言語処理周りは、コードを読んで実装を理解する必要 34

Slide 35

Slide 35 text

© Stanby, Inc. 今後について Vespaへの移行は一部完了しましたが、移行しただけで活用できているとはいえません。 ● 検索精度改善 ○ 形態素解析の改善 ○ ランキングモデルのさらなる改善 ○ ベクトル検索(ANN)の導入 ■ Vespaは通常の検索とベクトル検索を組み合わせたハイブリッド検索が可能 ● オートスケーリングの実装 ○ 時間帯によって検索ボリュームが大きく変わるため、コストを減らすためにインスタンス台数を最適化したい ○ VespaCloudでは提供されているが、self-hostingの場合は機能が提供されていない 35

Slide 36

Slide 36 text

© Stanby, Inc. まとめ 36

Slide 37

Slide 37 text

© Stanby, Inc. まとめ スタンバイでは検索エンジンをVespaに移行しています。 ● 複数の検索エンジンを使用していましたが、検索エンジンを統 一し、自社で運用する方針を決定しました。 ● スタンバイの検索の特徴と合致したVespaを採用しました。 ● ベクトル検索の導入など、さらなる活用を今後進めていく予定で す。 37 Photo by Miguel Bruna on Unsplash

Slide 38

Slide 38 text

© Stanby, Inc. 38 スタンバイでは一緒に働く仲間を探しています! 検索エンジニアなど複数ポジションを募集中です 詳細は、採用サイトまたはポジション一覧からご確認ください。 👉採用サイト:https://recruit.stanby.co.jp/ 👉ポジション一覧:https://x.gd/eF9J5 👉TechBlog:https://techblog.stanby.co.jp/ 👉AdventCalender:https://qiita.com/advent-calendar/2023/stanby カジュアル面談も気軽にご相談ください 👉https://hrmos.co/pages/stanby-inc/jobs/100100463

Slide 39

Slide 39 text

© Stanby, Inc. 39 ありがとうございました。 Thank you !