Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
人材領域での企業と求職者のマッチング最大化
Search
Recruit
PRO
March 03, 2025
Technology
680
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
人材領域での企業と求職者のマッチング最大化
2025/2/20に開催したRecruit Tech Conference 2025の中間と若月の資料です
Recruit
PRO
March 03, 2025
More Decks by Recruit
See All by Recruit
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
6
2.6k
ブラウザ研修 2026
recruitengineers
PRO
8
1.8k
事業価値と Engineering 2026年度版
recruitengineers
PRO
59
29k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.4k
JavaScript 研修 (2026)
recruitengineers
PRO
2
910
TypeScript入門 2026
recruitengineers
PRO
3
1.5k
モダンフロントエンド 開発研修
recruitengineers
PRO
4
1.3k
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
1.1k
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
9
4k
Other Decks in Technology
See All in Technology
SREは、MCPとAutopilotをこう使え!
kazumax55
3
970
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
0
560
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
530
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
240
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
490
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
160
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
7
3.7k
LLMに渡さなかった仕事
nanaism
0
11k
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
350
2026-09-08 そのJavaモダナイゼーション、AIに丸投げで大丈夫?IBM Bobで変わる品質と効率
yutanonaka
1
190
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
150
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
220
Featured
See All Featured
Everyday Curiosity
cassininazir
0
330
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
BBQ
matthewcrist
89
10k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Designing for Timeless Needs
cassininazir
1
510
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
Google's AI Overviews - The New Search
badams
0
1.6k
It's Worth the Effort
3n
188
29k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Crafting Experiences
bethany
1
350
Transcript
人材領域での企業と求職者のマッチング最大化 RECRUIT TECH CONFERENCE 2025 Two-Towerモデルと近似最近傍探索による候補生成ロジック導入 中間 康文 株式会社リクルート データ推進室 若月 良平
株式会社リクルート データ推進室
目次 • 自己紹介 • 取り組みの背景・課題 • 課題解決 - Two-Towerモデルと近似最近傍探索による候補生成ロジック導入 •
Two-Towerモデル • 近似最近傍探索 • 構成 • 成果 • 展開状況
自己紹介
中間 康文 アニメ・漫画・ゲーム・野球・釣り 経歴 / Career 2021年にリクルートに新卒入社。 DSとして、HR領域の各プロダクトにおける レコメンドシステムの改善に取り組む。 Two-Towerモデルと近似最近傍探索による候補生成
ロジック導入の案件が、リクルートのナレッジ共有 イベント(FORUM)に選出される。 Kaggle Grandmaster。 趣味 / Hobbies プロダクト開発統括室 データ推進室 HR領域データソリューションユニット HRデータソリューション部 中途データサイエンスグループ
若月 良平 ゲーム・散歩 経歴 / Career 2018年にリクルートに新卒入社。 内製ワークフローエンジンの開発 / HR領域の各
プロダクトにおけるレコメンドシステムの改善など に取り組んできた。 Two-Towerモデルと近似最近傍探索による候補生成 ロジック導入の案件が、リクルートのナレッジ共有 イベント(FORUM)に選出される。 Kaggle Grandmaster。 趣味 / Hobbies プロダクト開発統括室 データ推進室 データテクノロジーユニット アジリティテクノロジー部 アジリティエンジニアリング1グループ
取り組みの背景・課題
HR領域のプロダクトにおけるレコメンド • 求職者のレジュメや行動履歴に基づくレコメンド • メールでのレコメンド、アプリでのリアルタイムなレコ メンドなど、面は様々 • レコメンド対象となる求職者と求人票のペアは、兆単位 • 2-stageレコメンドを採用
2nd-stage 1st-stage Reranker 求職者 求人票 候補生成 高精度の並び替え 計算量の削減
課題:1st-stageの候補生成 • レコメンド対象の増加が見込まれている中で、計算効率の改善が必須 • 既存の候補生成は主にルールベース(ある属性が一致する等)が担っていた ◦ 計算効率を改善しながら候補生成の精度を維持・改善することは難しい 1st-stage 求職者 求人票
候補生成 計算量の削減
ルールベースによる候補生成 C 求職者が直近N日間に 閲覧した求人票 求職者が過去に閲覧した求人票の属性との完全一致 A or B A B
A A
ルールベースによる候補生成:計算効率が悪い 求職者 100万 ⇩ 1000万 100万 求人票 • 全ペアが計算対象なので計算効率が悪い •
レコメンド対象の増加に対してスケールさせにくい 単純に計算量10倍にもなりえる
ルールベースによる候補生成:精度の維持・改善が困難 A A' A'' A A', A''も残したい • 計算量を削減しながら精度を維持する =>
困難 • 計算量を一定に保ちながら精度を改善する => 困難 • 例えば、完全一致条件だと属性の意味的な近さが考慮されない
ルールベースによる候補生成:精度の維持・改善が困難 推薦候補 A 求職者が閲覧した求人票 A A A B A B
B B B • 完全一致条件だと微妙な行動を反映するのが難しい 完全一致条件の問題 Aに興味があるはず Bはたまたまクリックしただけかも
課題解決案:ルールベースの精緻化? • ルールベースを精緻化することも可能だが…… ◦ 定量的には、Recall, Precisionを改善 • 微妙な類似度を捉えるには限界がある • 効果的な計算量調節も困難
課題解決案:協調フィルタリング? 協調フィルタリングは類似度を捉えられ、計算量を制御しやすい手法だが、コー ルドスタートの問題がある 求職者\求人票 A B C D E X
◯ ◯ - ◯ - Y - - ◯ - ◯ Z ◯ ◯ ? ? ? 新規求職者W ? ? ? ? ? ◯ : 閲覧あり ? : 推測対象 XとZの類似性 → ?は◯と推測 新規求職者W → 何もわからない
課題解決 Two-Towerモデルと近似最近傍探索による候補生成ロジック導入
Two-Towerモデルの導入 • ルールベースフィルターをTwo-Towerモデルに置き換える • 計算効率の改善と候補生成の精度の改善どちらも狙う 1st-stage 求職者 求人票 候補生成 ルールベースフィルター
→ Two-Towerモデル
Two-Towerモデル Embedding Encoder Feature • ニューラルネットワークで求職者と求人票をベクトル化 • それぞれ同じ空間に埋め込むことで、類似度を計算できる 求職者 求人票
Embedding Encoder Feature
近似最近傍探索 求人票 求職者 IT系 IT系に興味 近似最近傍探索 • 近似最近傍探索により各求職者に近い求人票を指定件数だけ高速に取得可能 Encoder Feature
Embedding Embedding Encoder Feature
Two-Towerモデルの利点:機械学習モデルで改善しやすい 過去実績 データ & A AND B OR…… • ルールベースを精緻化するには作り込みが必要
• → 全て機械学習モデルに押し込める
Two-Towerモデルの利点:質的な改善 A' A'' A A A A A B A
B 丁度良い点に求職者を配置 求職者が閲覧した求人票 • 完全一致の必要はない • 求職者属性と求人票属性に応じた柔軟なフィルターを獲得 • 細かいロジックをアドホックに実装する必要はない
Two-Towerモデルの利点:コールドスタートに対処 属性A 属性B 属性C 求人票ID:123 (0.2, 0.1,...) (0.2, 0.1,...) •
協調フィルタリングではコールドスタートの問題がある • → 属性特徴量を使うことでコールドスタートに対処できる
近似最近傍探索の利点:計算効率の改善 • ルールベースの全ペアの計算から、近似最近傍探索に変更 ◦ 埋め込みベクトルを使ったインデックスの構築も必要だが、十分に高速 • → 求職者数、求人票数に対してスケーラブルに 求職者 100万
⇩ 1000万 100万 求人票 求職者あたりに紐づける求人票数 が固定であれば、計算量も固定
Two-Towerモデルと近似最近傍探索による候補生成 • 整理すると、課題については以下のように解決できる • 計算効率の改善 ◦ 求職者と求人票をTwo-Towerモデルでembeddingに変換 ◦ 近似最近傍探索により、各求職者に近い求人票を指定件数だけ取得 ◦
計算量をコントロールできる • 精度の改善 ◦ 計算効率を維持しながら、候補生成の精度を改善することができる ▪ 特徴量を追加しても全体の計算効率はほとんど変わらない ▪ 機械学習モデルで改善しやすく、質的な改善が見込める ▪ コールドスタート問題にも対処
Two-Towerモデル
ネットワーク構造:概観 Numerical FC Layer FC Layer FC Layer FC Layer
Embedding Categorical Embedding Layer Numerical FC Layer FC Layer FC Layer FC Layer Embedding Categorical Embedding Layer 同カテゴリ は共有 求職者 求人票
ネットワーク構造:コード例 同カテゴリは共有 各エンコーダー 各Embedding 類似度
特徴量の例 • 求職者の数値特徴量例 ◦ 求職者の数値属性 ◦ 行動した求人票の数値属性の 集約 ◦ 別の手法で作られた埋め込み
ベクトル • 求職者のカテゴリ特徴量例 ◦ 求職者のカテゴリ属性 ◦ 行動した求人票のカテゴリ属 性のTopN • 求人票の数値特徴量例 ◦ 求人票の数値属性 ◦ 別の手法で作られた埋め込み ベクトル • 求人票のカテゴリ特徴量例 ◦ 求人票のカテゴリ属性
特徴量の前処理 • 数値特徴量 ◦ np.log1pによる対数変換 ▪ StandardScalerやRobustScalerよりも精度がよかったため ▪ 総当たりで試してみて、一番精度が良いパターンを適用 •
カテゴリ特徴量 ◦ カテゴリ値のエンコーディング ◦ embeddingのサイズはカテゴリ値のユニーク数に応じて決定
求職者のTopNカテゴリ特徴量の扱い 行動属性 • 1,2,...,N番目に多く行動した求人票のカテゴリ属性の埋め込みベクトル ◦ 各ベクトルの加重平均を取ったものをモデルに使用 Top1 Top2 Top3 w1
w2 w3 w1 0.5 w2 0.3 w3 0.2 重みも学習
モデル学習 https://storage.googleapis.com/pub-tools-public-publication-data/pdf/b9f4e78a8830fe5afcf2f0452862fb3c0d6584ea.pdf • 対照学習(Contrastive Learning) ◦ 行動が発生した求職者×求人票ペアのバッチを取得、バッチ内で負例作成
モデル学習:細かい話 • バッチサイズ ◦ 2048などで学習 ◦ 総当たりで試してみて、一番精度が良いパターンを適用 • 学習環境 ◦
GPUの方が高速だがモデルが軽ければCPUで十分 • 対照学習のペア ◦ クリックや応募のペアを使用 ◦ 総当たりで試してみて、一番精度が良いパターンを適用
オフライン検証 1st-stageの候補生成の精度はRecallで評価 1. 学習データと評価データを用意 a. 行動が発生した求職者×求人票ペアのリスト b. 学習/評価は時系列の前後で分割 2. 学習データを使ってTwo-Towerモデルを学習
3. 評価データの全求職者と全求人票に対して埋め込みベクトルを計算 4. 近似最近傍探索で取得した求人票に対するRecallを計算 オフライン検証において、+5%以上の改善を確認
高速なモデル改善 config.yml • 特徴量の追加 • 特徴量の処理方法指定 • モデルのパラメータ指定 • 学習のパラメータ指定
根本的な変更以外は なるべくconfig.yml管理 • レコメンド対象の増加に向け短期でオンラインで結果を出したい ◦ 高速な実験サイクルを回しやすいスクリプト群 ◦ オフライン実験50回以上
近似最近傍探索
近似最近傍探索 • 大まかな手順 ◦ 全求人票の埋め込みベクトルを使ってインデックスを構築 ◦ 各求職者の埋め込みベクトルに近い求人票を取得 • 重要な指標 ◦
ビルド時間:インデックスを構築する時間 ◦ クエリ時間:1回の探索にかかる時間 ◦ リコール:最近傍探索の精度
近似最近傍探索アルゴリズムの例:HNSW • 実際にはどんな感じで近似最近傍探索をやっているか? ◦ 色々なアルゴリズムがある • HNSW ◦ グラフベースの近似最近傍探索アルゴリズムの一つ ◦
Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs ◦ https://arxiv.org/abs/1603.09320 Y. A. Malkov & D. A. Yashunin 2016
近似最近傍探索アルゴリズムの例:HNSW • 階層的なグラフ • 最下層は全ての点を含むとする • 目的の点に近い点を探索したい 第2階層 第1階層 第0階層
1. 最上層の点から出発 2. 目的の点にできるだけ近くなるよ うに階層内で移動 3. 下の階層に移動する 4. 2と3を繰り返せば良い
近似最近傍探索アルゴリズムの例:HNSW • グラフの構築(詳細は省く) ◦ 一点ずつ追加する ◦ 各点の高さはランダムに決定 ◦ 最上層のある点から出発し、 追加点に近くなるように移動
しつつ辺を張る • 計算量 ◦ ビルド:O(N log N) ◦ クエリ:O(log N) 第2階層 第1階層 第0階層
近似最近傍探索ライブラリ • 既存のライブラリを使用 ◦ 色々なライブラリのベンチマークが公開されている ◦ https://github.com/erikbern/ann-benchmarks • ビルド時間とクエリ時間が推論パイプラインに組み込む上で条件に合ったもの で、リコールが高いもの
◦ ScaNN ◦ hnswlib • 実データでは ◦ ビルド時間:~1分 ◦ クエリ時間:~1ミリ秒
近似最近傍探索:コード例 ライブラリで推奨され ているパラメーター 全求人票の埋め込みベクトル ある求職者の埋め込みベクトル
構成
前提 • メール配信用のレコメンド • 前日にバッチで全対象求職者に対する推薦リストを生成
構成(前) 学習バッチ LightGBM 求職者&求人票データ ルールベースフィルター+ LightGBM 送付 対象 LightGBM(2nd-stage)用 学習データ
構成(後) 学習バッチ LightGBM(2nd-stage)用 学習データ Two-Towerモデル用 学習データ LightGBM Two-Towerモデル 求職者&求人票データ+ 埋め込みベクトル
近似最近傍探索+ LightGBM 送付 対象 求職者&求人票データ
成果
成果 • 推論 ◦ レコメンド対象の増加に対応 ◦ 1st-stageのフィルター部分が約25倍高速化 ◦ 推論全体で約2倍高速化 •
KPI ◦ 閲覧数 +8.4% ◦ 応募数 +5.7%
展開状況
展開状況 • まずは、日次のバッチレコメンド(メールでのレコメンド)で導入 ◦ むしろ、速度が要求されるリアルタイムな基盤でこそ真価を発揮する • 現在ではリアルタイムなレコメンドにも導入済み • HR領域の各プロダクトに展開