スマヌト怜玢人工知胜hh.ruが履歎曞の空垭を遞択する方法

応募者の半数以䞊は䜕も探しおいたせんが、履歎曞を䜜成し、面接に招埅されるのを埅぀か、少なくずも適切な空垭を送りたす。 求人怜玢サむトがどのように芋えるかを考えるず、ボタンが1぀しか必芁ないこずがわかりたした。



1幎半前にこのようなシステムの䜜成を開始したした。ナヌザヌに適切な空垭を遞択するアルゎリズムを機械孊習で構築するこずにしたした。 しかし、私たちはすぐに、履歎曞に䌌た欠員ず履歎曞の所有者が応答したい欠員は同じものずはほど遠いこずに気付きたした。

この蚘事では、スマヌト怜玢をどのように実行したかを説明したす-私たちがしなければならなかったすべおの問題、埮劙さ、および劥協点に぀いお。

掚奚システムで開始


hh.ruには、適切な空垭のあるニュヌスレタヌがありたす。 そもそもそれらを取り䞊げたした。たず、求職者に適切な求人を提䟛する掚奚システムを䜜成するこずから始めたした。

この問題を理解するために、ナヌザヌに衚瀺される空垭ず、ナヌザヌがさらに空いおいる操䜜を蚘録したした。 機械孊習を䜿甚しお、履歎曞/空垭ペアの応答確率を予枬するために、/ bテストシステムずむンフラストラクチャを開発したした。

本番環境では、むンデックス䜜成時の静的特性の蚈算ず䞀貫したアプリケヌションを空宀に远加しお、リ゜ヌス消費が増加するいく぀かのフィルタリングモデルの抂芁を远加し、最終ランキングのモデルを远加したした。



このシステムにより、1か月あたり玄120䞇件の远加の回答が埗られるようになりたした。これは、玄12䞇人が面接に招埅され、2䞇人が採甚されたした。 レコメンダヌシステムによっお遞択された空垭は、メむンのhh.ruのブロック「個人的にお勧めしたす」に瀺され、履歎曞に適した空垭のあるメヌルで送信されたす。

しかし、怜玢の比范的小さな改善でも、掚奚システムの倧きな改善よりも有益です。 したがっお、次のステップは怜玢での機械孊習の䜿甚でした。

空のリク゚ストで怜玢


たず、怜玢ク゚リを分析するこずから始めたした。 リク゚ストの35で、履歎曞を持っおいるナヌザヌは怜玢バヌを空のたたにしおいるこずが刀明したした。 匿名ク゚リを怜蚎するず、空の怜玢ク゚リの数は50に達したす。

ナヌザヌに履歎曞がある堎合は、掚奚システムを䜿甚するこずにしたした。テキスト察応のランクを掚奚システムのランクに眮き換えたす。 これには倧きな倉曎は必芁ありたせんでしたが、かなり迅速に行うこずができたした。

掚奚システムのランクを䜿甚するず、1日に数千の远加の応答が埗られたした。 しかし、その効果は予想より少なかった。 ナヌザヌは配信の最初の1.5ペヌゞだけを平均しお衚瀺するため、倧郜垂では、実際には、倉曎はプレミアム欠員のみです。 システムは、䞊郚に適切な「プレミアム」を衚瀺し、「暙準」、「暙準+」、無料の空垭など、より適切な空垭があったずしおも䞍適切でした。

そのため、空垭を2぀のグルヌプに分割するこずを確認するこずにしたした最初に「プレミアム」、「暙準+」、「暙準」、および無料であり、応答の予枬確率が特定の倀を超え、次に他のすべおが同じ順序である。

クラむアントず雇甚䞻の珟圚の欠員が悪化しないようにする必芁があるため、これらの倉曎に非垞に慎重に取り組みたした。実隓でも蚈算ず正圓化によっお5がサポヌトされたした。 その結果、私たちは実隓を行い、すべおのタむプの空垭に぀いお回答が増加したこずを確認したした。

システム性胜


モデルを適甚する前に、履歎曞ず欠員によっお特性を蚈算し、それらを組み合わせお組み合わせる必芁がありたす。 掚奚システムでは、負荷がそれほど高くなかったため、空垭の静的な兆候は、むンデックスが䜜成されお特別なむンデックスに入れられたずきにすでに考慮され、再開ずペアリングはリク゚ストの凊理時に考慮されたした。

空のク゚リの怜玢を有効にするず、怜玢゚ンゞンの負荷が玄6倍になるこずがわかったため、履歎曞のサむンをキャッシュする必芁がありたした。 最初に、履歎曞のタグを読み取っおCassandraに配眮しようずしたした。 しかし、それから目的のパフォヌマンスを達成するには倱敗したした。 したがっお、すべおがPostgreSQLのテヌブルによっお決定されたした。

システムから目的のパフォヌマンスを埗るために远加する必芁があったもの

  1. 特性が倉曎されたずきのキャッシュの再蚈算。 履歎曞を曎新しおおらず、サむトに2幎以䞊アクセスしおいないナヌザヌの堎合、キャッシュは考慮されず、掚奚される空垭の分垃はテキストで送信されたす。 適圓な求人があなたのずころに来るなら、そうかもしれたせんあなたはただ履歎曞を曎新する必芁がありたす。
  2. 基本怜玢の各サヌバヌが、それが持぀むンデックス空垭、履歎曞、䌁業のすべおのオブゞェクトに個別にむンデックスを付け続ける堎合、十分な順序のサヌバヌがないこずに気付きたした。 したがっお、むンデックス䜜成のシステムを再構築し、「各マスタヌは自分のマスタヌ」から「メむンマスタヌはスペアマスタヌ-むンデックスのセグメントを奪う基本怜玢」に再開し、マスタヌのみがむンデックス䜜成に埓事し、毎晩デヌタベヌス党䜓の最適化ず順次ポンピングを行いたすモスクワ時間むンデックスの量を枛らす。
  3. フェむルファヌストでした-芁求の凊理䞭に゚ラヌが発生した堎合、基本怜玢でのHTTP 500の高速応答。 機械孊習を䜿甚するず、堎合によっおは応答時間が倧幅に長くなり、そのような芁求をキュヌに入れるのではなく、基本的な怜玢で平均的なメタ怜玢にhttp 500ずいう迅速な応答が返されたす。 その埌、投機的な再詊行を行いたした。タむムアりトの2/3を超えるベヌス怜玢からの応答がない堎合、平均メタサヌチは事前に別のベヌス怜玢を調べたす。

簡略化するず、コンポヌネントずコンポヌネント間のデヌタフロヌの芳点から、レコメンダヌ怜玢システムは次のように配眮されたす。



システム内のデヌタストリヌム


その過皋で、クラスタヌに玄10台のサヌバヌを远加する必芁がありたした。これは、これたで存圚しおいたサヌバヌよりも匷力です。 圌らの力を合理的に䜿うこずが必芁でした。 サヌバヌの1぀が䜿甚できなくなる可胜性が高くなりたした。 そのため、単玔で無条件のラりンドロビンからメタのバランスを再調敎しお、応答時間ず非応答の数を考慮し、それらの数が少ないサヌバヌに倚くの芁求を送信するようにしたした。

新しいサヌバヌを䜿甚するこずに加えお、ナヌザヌに圱響を䞎えるこずなく、20クラスタヌの突然の障害にも耐えるこずができたした。

単玔化するず、アヌキテクチャのレむダヌずその䞭のコンポヌネントのむンスタンスの芳点から、システムは次のように線成されたす。



䞊蚘のバランスは、平均的なメタ怜玢メタず基本怜玢ベヌス怜玢の間で機胜したす。

同時に、私たちは、絶えず、掚奚システムを改良したした。 テキストの盞互䜜甚の属性、段階的な目的関数、テキストの生のsvdベクトルの属性、tf / idfベクトル䞊の線圢回垰のメタ属性が含たれおいたした。 もう1぀の改善がありたした。ログずデヌタベヌスからの機械孊習の初期デヌタのアンロヌド、クリヌニング、結合を繰り返し、1぀のコマンドで起動できるようにしたした。

空でないク゚リによる怜玢機械孊習


ほが同時に、空でないク゚リで怜玢を開始したした。

最初に、Luceneが提䟛する怜玢ク゚リの単語を䜿甚しお空垭に適甚し、レコメンダヌシステムからフィルタヌずランキングを適甚しようずしたした。 これは統蚈的に有意な改善をもたらさなかった。 そのため、特別なアンロヌド「リク゚スト-再開-空宀-アクション」を䜜成し、2぀のモデルを教えたした。

  1. 線圢適切な欠員を䞍適切なものから分離し、䞍適切なものを倧たかにランク付けするために、リ゜ヌスの匷床が䜎く、迅速に䜿甚されたす。
  2. XGBoost適切なものをより正確にランク付けするために䜿甚されたす。




掚奚システムからのサむンを再利甚したした静的ク゚リが実行される前に蚈算されたす、テキスト、数倀、カテゎリ、動的、リク゚ストの凊理時に考慮されたす。 テキストの盞互䜜甚に関しおテキストを比范する通垞の暙識に远加されたした。

抂略的に、機械孊習の䜜業は次のように衚すこずができたす。



掚奚欠員を蚈算し、怜玢ク゚リを凊理する堎合、モデル蚀語、ベクトル化、蚘号、目的関数、モデルの倉曎、より関連性の高いデヌタを䜿甚したモデルの再トレヌニングを倉曎するず、緑ず青の䞡方が実行されたす。

モデルをトレヌニングするずきやリク゚ストを凊理するずきに倚くの蚘号ず蚈算コヌドが異なる堎所に远加される必芁があるため、これには長い時間がかかり、゚ラヌに぀ながりたした。 そのため、フレヌムワヌク、機胜グルヌプを䜜成するこずにしたした。 このフレヌムワヌクを初めお䟿利に䜜成するこずは䟿利ではありたせんでした。プロゞェクトの条件が少しでも増えたした。

モデルの品質を枬定し、ロヌカルメトリックndcgずマップを遞択し、すべおのボリュヌム@ 10、@ 20に぀いお、ナヌザヌず時間ベヌスの怜蚌にkfoldを䜿甚したした。 実際、時間ベヌスの怜蚌なしで、モデルの耇雑さたずえば、ツリヌの数の増加がロヌカルメトリックの改善を瀺した堎合、過剰適合が発生したこずが圌に明らかになりたした。これにより、合理的なハむパヌパラメヌタヌを遞択できたした。

最初に、個々の組み合わせ「芁求-再開-空宀」の応答確率を予枬するための線圢モデルを孊習しようずしたしたが、線圢モデルが2぀の空宀の確率を比范する堎合、a / bテストの結果が優れおいるこずがわかりたした。 この構成では、いく぀かの実隓ですでに統蚈的に有意な肯定的な結果が埗られおいたす。 しかし、ただ予想よりも少ない。

xgboostモデルのランキングを蚈算するために、適切な通垞の空垭、適切なClickMe広告の空垭、およびプロダクションで考慮する必芁があるアンサンブルからの朚の数に぀いお、個別のしきい倀を远加したした。 すべおのオプションをチェックするのに十分な時間がないこずを理解したため、最も頻床の高いリク゚ストずその再線成を行い、それぞれの職業の兞型的な履歎曞を持぀応募者に぀いお、異なる蚭定で結果の品質をチェックし、空垭をマヌクしたした。

どの空宀が圌らに適しおいるか、平均的な空宀か、あたり空いおいないかを明らかにするために、私は職業の詳现をかなり深く研究しなければなりたせんでした。 残り時間はほずんどなかったため、倧倚数のナヌザヌは、マヌクアップ時に最適な蚭定を展開し、さらに5のオプションを远加しお、機械孊習なしでコントロヌルのみを分割したした。

圌らが正圓な理由でマヌクアりトしおいるこずが刀明したした。ほずんどのナヌザヌに含たれるオプションが本圓に最高であるこずが蚌明されたした

新しいむンタヌフェヌスず広告


通垞、ナヌザヌはランキングの倉曎にあたり気づきたせん。目立぀ようにするには、むンタヌフェヌスを倉曎する必芁がありたす。 これらの倉曎では、ノベルティのマむナスの圱響が匷く珟れたす。それを打ち消すには、改善が非垞に匷くなければなりたせん。 たずえば、最初の画面をもっず䟿利にする必芁がありたす。 新しいグラフィックデザむンを䜜成したした。広告は、氎平方向および垂盎方向の右偎を占めたせん。

広告は別の方法で凊理できたすが、HeadHunterにかなりの利益をもたらしたす。 この利益を他の広告ネットワヌクず分かち合うために、HeadHunterは独自のネットワヌクClickMeを䜜成したした。 含たれおいる広告は、空垭ず空垭の広告に分けるこずができたす。 新しいデザむンでは、怜玢および玹介システムで䜿甚されるものず同じテクノロゞヌずモデルを䜿甚しお、広告の最䞊䜍ブロックではなく、いく぀かの適切な広告空垭を衚瀺し始めたした。



実隓を実行し、やっおいるこずが悪圱響を䞎えるかどうかを時間内に理解するために、非垞に小さな郚分で蚭蚈を倉曎したした。

結論ずしお


スマヌト怜玢を開始した効果をただ枬定しおいたすが、開始埌最初の1週間で、応募者の怜玢セッションの成功が歎史的な最倧倀に達したこずは明らかです。 このクラスのシステムを立ち䞊げるのは、少なくずも私の経隓では、最も速くお静かなプロゞェクトの1぀でした。 䞻に最高のチヌムに感謝したす。

残念ながら、怜玢゚ンゞンを䞀床だけ䜜成するこずはできないため、絶えず倉化しおいるものを完党に怜玢し、それ自䜓は完党に倉曎されたせん。 そのため、HeadHunterでの怜玢の改善を続け、ナヌザヌの利䟿性を高めおいたす。 たた、HeadHunterには、ML、怜玢技術、メトリックスおよびa / bテストを適甚するのに圹立぀倚くの領域がありたす。

テクノロゞヌ、機械孊習を怜玢し、手で䜜業する方法を知っおいるなら、参加しおください。 募集したす。

Source: https://habr.com/ru/post/J347276/


All Articles