Yahoo検索品質エンジニア面接体験記:転置インデックス・ランキングモデル・関連性最適化の完全評価
検索アルゴリズム経験2年でYahoo検索品質エンジニアに面接。1次:情報検索基礎+転置インデックス、2次:ランキングモデル+関連性最適化、3次:プロジェクト深掘り+ABテスト。実際の問題と準備のアドバイス付き。
背景紹介
まず私の状況から:検索アルゴリズム2年の経験、以前は中規模インターネット企業で検索、主にランキングモデルと関連性最適化を担当していました。正直なところ、Yahoo Japanの検索面接を受ける前は少し不安でした——Yahoo Japanの検索はコミュニティ検索で、従来のEC検索とは全く異なり、ユーザーが検索するのは商品ではなくコンテンツやノートであり、検索アルゴリズムに求められる要件も全く異なります。しかし面接を通じて、検索のコア技術は共通しており、重要なのは異なるシナリオでの重点の違いを理解することだと気づきました。
応募したのはYahoo Japanの検索品質エンジニアポジションで、勤務地は東京。紹介経由で応募し、書類選考から1次面接まで約5日かかりました。全体のプロセスは1次+2次+3次面接+HR面接で、前後約3週間でした。以下、詳しく振り返ります。
面接プロセスの振り返り
1次面接:情報検索基礎+転置インデックス
1次面接の面接官は学術的な雰囲気の男性で、自己紹介の後、すぐに技術的な質問に入りました。「1次面接は主に情報検索の基礎を確認します、特に転置インデックスと検索モデルです」。
最初の質問は核心に直行:「転置インデックスの構造は何ですか?どう構築しますか?」これは準備していました。転置インデックスは辞書と転置リストで構成される——辞書はすべての語項を記録し、転置リストはその語項を含む文書ID、語頻度、位置情報を記録する。構築プロセスは:トークン化→語項から文書へのマッピング構築→ソート→圧縮保存。面接官は「転置リストはどう圧縮しますか?」と掘り下げました。一般的な圧縮方法にはVB符号化、Gamma符号化、Simple9符号化があると答えました。VB符号化は可変バイトで文書ID間隔を表現し、Gamma符号化は単項符号化と二項符号化の組み合わせを使用する。彼はさらに「転置インデックスにおけるスキップリストの役割は?」と聞き、スキップリストは転置リストのマージ操作を加速する——転置リストに多段インデックスを構築することで、マージ時間をO(n)からO(logn)に削減できると答えました。
次に検索モデルの質問。「BM25の原理について理解していますか?TF-IDFとの違いは何ですか?」BM25はTF-IDFを改良したもので、主な違いは:1)BM25は語頻度に飽和処理を適用する——語頻度が一定レベルに達すると、BM25スコアはもはや著しく増加しない;2)BM25は文書長正規化を考慮する——長い文書は自然に語頻度が高くなる傾向があり、BM25は文書長因子で修正する。面接官は「BM25のパラメータはどう調整しますか?」と掘り下げました。k1は語頻度飽和度を制御し、bは文書長正規化の強さを制御する。k1は通常1.2-2.0に、bは通常0.75に設定すると答えました。彼はさらに「BM25の欠点は何ですか?」と聞き、BM25は語頻度と文書長のみを考慮し、語項の意味情報を考慮しないため、同義語や上下位語の問題を処理できないと答えました。
コミュニティ検索に関連する質問:「Yahoo Japanの検索とEC検索の違いは何ですか?」最大の違いは検索対象が異なること——EC検索は商品を検索し、結果には明確な品質基準(売上、レビュー)がある;コミュニティ検索はコンテンツを検索し、結果の品質はより主観的でユーザーの好みに依存する。したがってコミュニティ検索はパーソナライゼーションをより重視し、EC検索は関連性をより重視すると答えました。面接官は「コミュニティ検索の難しさは何ですか?」と掘り下げました。難しさは:1)コンテンツ理解が難しい——ノートはテキストと画像が混在しており、両方を理解する必要がある;2)意図認識が難しい——ユーザーの検索語は短く、意図が曖昧;3)評価基準が難しい——コンテンツ品質に客観的な基準がなく、ユーザー行動シグナルに依存すると答えました。
1次面接では情報検索基礎の質問もありました:「クエリ拡張について理解していますか?どうやりますか?」クエリ拡張は語彙不一致問題を解決するためのもの——ユーザーが使う語と文書内の語が一致しない問題。方法には、同義語拡張、関連語拡張、ユーザー行動ベースの拡張がある。面接官は「同義語拡張の語彙表はどこから来ますか?」と掘り下げました。ナレッジグラフから取得できるし、検索ログからマイニングもできる——2つの語が同じセッションに頻繁に出現するなら、同義語の可能性がある。彼はさらに「クエリ拡張はノイズを導入しませんか?」と聞き、導入するので、拡張語の重み減衰を行う必要がある——元のクエリ語の重みを高くし、拡張語の重みを低くすると答えました。
1次面接の最後にコーディング問題:構築とクエリをサポートするシンプルな転置インデックスを実装してください。約20分で基本バージョンを書きました。面接官は見て「基本機能は問題ありませんが、フレーズクエリをサポートするにはどうしますか?」と聞きました。語項の位置情報を保存し、クエリ時に位置が連続しているかチェックする必要があると答え、「アプローチは良いですね」と言われました。
1次面接は約1時間で、面接官は「基礎はしっかりしています、2次面接の通知をお待ちください」と言いました。
2次面接:ランキングモデル+関連性最適化
2次面接の面接官はシニアのアルゴリズムエキスパートで、いきなりプロジェクトの質問から始まりました。「レジュメにランキングモデルと関連性最適化とありますが、詳しく話してください」。
まずランキングモデルについて説明しました。「あなたのランキングモデルは何ですか?どうやっていますか?」ツインタワーモデルでリコールを行い、精ランキングモデルでランキングを行っていると答えました。精ランキングモデルはDIN(Deep Interest Network)の変種で、入力にはユーザー特徴、文書特徴、クロス特徴が含まれる。面接官は「ツインタワーモデルとクロスモデルのそれぞれの長所と短所は?」と掘り下げました。ツインタワーモデルの利点はオフラインでベクトルを事前計算でき、オンラインではベクトル検索だけで済むため高速なこと;欠点はユーザーと文書のクロスがなく、表現力が弱いこと。クロスモデルは表現力が強いが、オンラインの計算量が大きい。彼はさらに「リコール率と精度はどうバランスしますか?」と聞き、マルチパスリコールを使用している——ベクトルリコール、転置リコール、人気リコールでそれぞれ異なる候補セットをリコールし、マージして重複排除すると答えました。
関連性最適化が2次面接のコアでした。「検索の関連性はどう最適化しますか?」3つのレベルから最適化していると答えました:1)リコールレベル——クエリ理解とクエリ拡張を最適化し、リコールの関連性を向上;2)ランキングレベル——ランキングモデルの特徴と目標を最適化し、ランキングの精度を向上;3)後処理レベル——多様性と重複排除を行い、結果の同質化を回避。面接官は「ランキングモデルの特徴には何がありますか?」と掘り下げました。特徴は3つのカテゴリに分かれる——ユーザー特徴(履歴行動、嗜好タグ)、文書特徴(品質スコア、適時性、エンゲージメントデータ)、クロス特徴(ユーザー-文書マッチ度、クエリ-文書関連性)。彼はさらに「ランキングモデルの目的関数は何ですか?」と聞き、多目的最適化を使用している——クリック率、いいね率、滞在時間を同時に最適化し、加重和を最終目標とすると答えました。
印象に残った質問:「検索結果の関連性と多様性はどうバランスしますか?」これは古典的なトレードオフ問題だと答えました。関連性だけを最適化すると、結果は非常に同質化する——「旅行」で検索すると旅行ガイドばかりになる;多様性を過度に追求すると、関連性が低下する。私たちのアプローチは、ランキング後にMMR(Maximal Marginal Relevance)リランキングを行う——関連性を保証した上で、既に選択された結果と最も異なる文書を選択する。面接官は「MMRの具体的な公式について理解していますか?」と掘り下げました。理解している——MMR = λ * rel(d) - (1-λ) * max_sim(d, S)、ここでrel(d)は文書dの関連性、max_sim(d, S)はdと既に選択されたセットSの最大類似度、λは関連性と多様性のトレードオフを制御すると答えました。
2次面接ではABテスト関連の質問もありました:「検索アルゴリズムのABテストはどうやっていますか?指標には何がありますか?」ユーザーIDでバケットテストを行い、実験群と対照群にそれぞれ50%のトラフィックを割り当てていると答えました。指標は3つのカテゴリに分かれる:1)関連性指標——NDCG、MRR、クリック率;2)ユーザー体験指標——検索満足度、ゼロ結果率、ページめくり率;3)ビジネス指標——DAU、リテンション、エンゲージメント率。面接官は「NDCGはどう計算しますか?」と掘り下げました。NDCG = DCG / IDCG、DCG = Σ(rel_i / log2(i+1))、IDCGは理想ランキングのDCGだと答えました。彼はさらに「ABテストの有意性はどう判断しますか?」と聞き、t検定やカイ二乗検定を使用し、p値が0.05未満なら有意とみなす。ただし新奇効果に注意が必要——新しいアルゴリズムの初期段階では、ユーザーが新鮮さのために異なる行動をとる可能性があり、より長い観察期間が必要だと答えました。
2次面接は約1.5時間で、面接官は「検索アルゴリズムの経験は良いですが、コミュニティ検索の理解はさらに深める必要があります」と言いました。
3次面接:プロジェクト深掘り+ABテスト
3次面接は部門責任者でした。雰囲気はよりフォーマルでした。まずYahoo Japanの検索に対する理解を聞かれ、「Yahoo Japanの検索のコアはユーザーの真の意図を理解し、大量のUGCコンテンツから最もマッチする結果を見つけることであり、これにはコンテンツ理解、意図認識、パーソナライズドランキングを同時にうまく行う必要がある」と答えました。彼は頷き、プロジェクトの深掘りを始めました。
「最も技術的に挑戦的だった検索プロジェクトは何ですか?」以前のロングテールクエリ最適化プロジェクトについて説明しました——ロングテールクエリ(検索頻度が非常に低いクエリ)は総クエリ量の60%を占めるが、訓練データが少ないためランキング効果が悪い。私たちのソリューションは:1)クエリクラスタリング——意味的に類似したクエリを1つのクラスタにまとめ、訓練データを共有;2)転移学習——高頻度クエリのモデルで事前学習し、ロングテールクエリでファインチューニング;3)ゼロショット学習——訓練データが全くないクエリに対しては、意味的類似度で直接ランキング。面接官は「クエリクラスタリングはどうやりましたか?」と掘り下げました。BERTでクエリのembeddingを作成し、K-Meansでクラスタリングしたと答えました。彼はさらに「クラスタ数はどう決定しますか?」と聞き、シルエット係数とエルボー法で最適なクラスタ数を決定し、最終的に500クラスタを選択したと答えました。
オープンエンドの質問:「ゼロからYahoo Japanの検索システムを構築するとしたら、どうしますか?」3つのステップで進めると答えました:1)基本検索——まず転置インデックス+BM25ランキングを構築し、基本的な可用性を確保;2)パーソナライズド検索——ユーザープロファイルと行動特徴を追加し、学習ランキングモデルでランキングを最適化;3)インテリジェント検索——意図認識、クエリ書き換え、マルチモーダル検索を追加し、検索体験を向上。面接官は「マルチモーダル検索はどうやりますか?」と聞き、CLIPモデルでテキストと画像を同じベクトル空間にマッピングし、テキストから画像、画像から画像の検索を実現すると答えました。彼はさらに「CLIPのベクトル次元はどう選びますか?」と聞き、128、256、512を試し、最終的に256を選択した——128は小さすぎて情報損失が多く、512は大きすぎて検索速度が遅くなると答えました。
最後にYahoo Japanの検索に対する考えとキャリアプランについて聞かれました。Yahoo Japanの検索はコミュニティ検索のベンチマークであり、技術的課題とビジネス価値がともに高く、ここで検索アルゴリズムを深めたいと答えました。面接官は「ようこそ」と言いました。
HR面接は通常の給与と入社日の相談で、特別なことはありませんでした。
実際の面接問題
1次面接の問題
1. 転置インデックスの構造は?どう構築するか?
2. 転置リストの圧縮方法は?
3. 転置インデックスにおけるスキップリストの役割は?
4. BM25の原理は?TF-IDFとの違いは?
5. BM25のパラメータはどう調整するか?欠点は何か?
6. コミュニティ検索とEC検索の違いは?
7. クエリ拡張はどうやるか?
8. シンプルな転置インデックスを実装
9. トークン化アルゴリズムは何を知っているか?
10. 検索エンジンのアーキテクチャについて理解しているか?
2次面接の問題
1. ランキングモデルは何か?どうやっているか?
2. ツインタワーモデルとクロスモデルの長所と短所は?
3. 検索の関連性はどう最適化するか?
4. ランキングモデルの特徴は何か?目的関数は?
5. 関連性と多様性はどうバランスするか?MMRは?
6. ABテストはどうやるか?指標は何か?
7. NDCGはどう計算するか?
8. 多目的最適化はどうやるか?
9. ベクトル検索はどう実装するか?
10. 検索のリコール戦略には何があるか?
3次面接の問題
1. 最も技術的に挑戦的だった検索プロジェクト
2. ロングテールクエリ最適化ソリューション
3. クエリクラスタリングはどうやるか?
4. ゼロから検索システムを構築する
5. マルチモーダル検索はどうやるか?
6. CLIPモデルのベクトル次元はどう選ぶか?
7. Yahoo Japanの検索に対する理解
8. 検索アルゴリズムの発展トレンド
9. 検索スパムはどう処理するか?
10. キャリアプラン
心得とアドバイス
第一に、情報検索の基礎は確実に身につけてください。転置インデックス、BM25、クエリ拡張は検索アルゴリズムの基本であり、面接で必ず聞かれます。「情報検索入門」を読んで、コア概念を理解することをお勧めします。
第二に、ランキングモデルには実戦経験が必要です。APIを呼び出すだけでは不十分で、モデルの入出力、特徴エンジニアリング、目的関数を理解する必要があります。自分で検索ランキングプロジェクトを作り、データからモデル、評価まで全プロセスを経験することをお勧めします。
第三に、関連性最適化はフルチェーンを理解してください。BM25のパラメータ調整を知っているだけでなく、リコール→ランキング→後処理の完全なチェーンを理解し、各段階で関連性をどう最適化するかを理解してください。エンドツーエンドの検索最適化プロジェクトを作ることをお勧めします。
第四に、ABテストは検索アルゴリズム面接の必須トピックです。実験の設計方法、指標の選び方、有意性の判断方法を明確に説明できる必要があります。自分のプロジェクトでABテストを実践し、経験を積むことをお勧めします。
第五に、コミュニティ検索の特殊性を理解してください。Yahoo Japanの検索はEC検索とは異なり、コンテンツ理解、意図認識、パーソナライゼーションをより重視します。面接前にYahoo Japanの検索を多く体験し、ユーザーシナリオを理解することをお勧めします。
FAQ
Q1:Yahoo Japanの検索面接はアルゴリズムの要求が高いですか?
はい、非常に高いです。sklearnが使えるレベルではなく、ランキングモデルの原理、特徴エンジニアリングの方法、ABテストの設計を理解する必要があります。「Learning to Rank」と関連論文を読むことをお勧めします。
Q2:検索アルゴリズムの経験がない場合は?
自分で検索プロジェクトを作って練習できます。Elasticsearchで検索エンジンを構築し、ランキング最適化を行う——BM25から始め、段階的に学習ランキングモデルを追加する。重要なのは検索システムの全プロセスを理解することであり、ツールの使い方だけではありません。
Q3:ランキングモデルは何を学ぶべきですか?
古典的なモデルから始めることをお勧めします——LR→GBDT→DNN→DIN。DINのアテンションメカニズムと多目的最適化を重点的に理解してください。その後、ベクトル検索を学ぶ——ツインタワーモデル→ANN検索。面接で最もよく聞かれるのはツインタワーモデルと精ランキングモデルです。
Q4:ABテストはどう学ぶべきですか?
基礎的な仮説検定から始め、t検定とカイ二乗検定の原理を理解することをお勧めします。その後、ABテストの設計を学ぶ——バケット分割、トラフィック分割、指標選択、有意性判断。「Trustworthy Online Controlled Experiments」を読むことをお勧めします。
Q5:Yahoo Japanの検索の仕事の強度はどうですか?
検索チームの技術的な雰囲気は良く、ペースは適度です。検索アルゴリズムのイテレーションサイクルは比較的長く、ビジネス開発のような厳しいスケジュールはありません。しかしモデルの本番稼働後は効果を継続的に監視する必要があり、ABテストは結果を辛抱強く待つ必要があります。検索アルゴリズムエンジニアの成長に非常に役立ちます。