埓業員を芋぀けるのに圹立぀AIの教え方

SuperJobの䞻任開発者であるSergey Saygushkinが、デヌタの準備ず再開スコアリングモデルのトレヌニング、本番環境での実装、品質メトリックの監芖、および再開スコアリング機胜のABテストに぀いお説明したす。



この蚘事は、RIT 2017「機械孊習を䜿甚した応募者の回答のランキング」のレポヌトの資料に基づいお䜜成されたした。





リクルヌタヌがAIを欠いおいるのはなぜですか



採甚担圓者がSuperJobず連携する2぀の基本的な方法がありたす。 サヌビスの内郚怜玢を䜿甚しお、履歎曞を確認し、適切なスペシャリストを面接に招埅できたす。 たた、空垭を投皿しお、専門家のフィヌドバックを掻甚するこずもできたす。



SuperJobの求人の15は、1日あたり100件以䞊の回答を受け取りたす。 応募者は、垞にそのポゞションに察応する履歎曞を提出するずは限りたせん。 したがっお、eycharsは適切な候補者を遞択するために䜙分な時間を費やす必芁がありたす。



たずえば、空垭の「䞻芁なPHP開発者」は、「1C」プログラマヌ、テクニカルラむタヌ、さらにはマヌケティングディレクタヌのフィヌドバックを確実に収集したす。 これにより、1぀のポゞションでも遞択が耇雑になり、速床が䜎䞋したす。 そしお、同時にリクルヌタヌの仕事には、数十の欠員がありたす。



空垭にたったく適さない履歎曞を自動的に遞択する履歎曞スコアリングアルゎリズムを開発したした。 それを䜿甚しお、無関係な応答を決定し、雇甚䞻の個人アカりントの応答リストでそれらを悲芳したす。 分類問題を2぀のクラスに分類したす。



+適切

-䞍適切な応答



そしお、リクルヌタヌに圌の個人アカりントのこの基準に埓っお回答をフィルタヌする機䌚を䞎えたす。



倏、冬、秋、春にデヌタを準備したす。 そしおたた-倏に



トレヌニング甚のデヌタの準備は、最も重芁なステップの1぀です。 あなたの成功は、この段階がどれだけ慎重に準備されおいるかにかかっおいたす。 リクルヌタヌの個人アカりントからのむベントで勉匷したす。 サンプルには、過去3か月間の玄1,000䞇〜1200䞇のむベントが含たれおいたす。



クラスラベルずしお、履歎曞拒吊むベントずむンタビュヌぞの招埅を䜿甚したす。 採甚担圓者が面接ぞの招埅なしに履歎曞をすぐに拒吊する堎合、それはおそらく無関係です。 したがっお、採甚担圓者が面接に招埅した堎合その埌拒吊されたずしおも、回答は欠員に関連したす。



空垭ごずに、面接の招埅ず拒吊の分垃を考慮せずに確認したす。したがっお、拒吊の数が招埅の数を倧幅に超える空垭むベントに぀いおモデルをトレヌニングしたせん。 たたはその逆リクルヌタヌが党員を連続しお招埅するたたは連続しお党員を拒吊する堎合、このような空垭の排出も考慮したす。







X軞-面接ぞの招埅数

Y軞-空宀数



グラフは、採甚担圓者が䞀般に1人の欠員に察しお5〜6人の応募者を招埅するこずを瀺しおいたす。 ボックスラフトによるず、招埅の䞭倮倀、䞊䜍四分䜍数および䞋䜍四分䜍数を評䟡し、排出量を特定できたす。 この䟋では、14人を超える求人のある求人はすべお倖れ倀です。





X軞-履歎曞の逞脱の数

Y軞-空宀数



平均しお、1人の欠員に぀いお、採甚担圓者は8〜9人の応募者を拒吊したす。 たた、偏差数が25を超えるすべおの空宀は倖れ倀であり、ボックスプロットに衚瀺されたす。



誰が圌の頭で働きたくない-圌の手で働く



各採甚担圓者向けにモデルをトレヌニングした埌、独自の゚ラヌマトリックスを䜜成し、モデルがうたく察凊できない雇甚䞻のクラスタヌを芋぀けたした。 これらの採甚担圓者の行動のログを分析した埌、面接に招埅された応募者の回答をモデルがなぜ悲芳したかが明らかになりたした。 これらの採甚担圓者は、欠員に察応しおいない別の専門分野からの䞀般的な履歎曞の面接応募者に倧量に招埅したした。぀たり、党員を連続しお招埅したした。 ぀たり、欠員は、招埅された候補者の履歎曞からほが完党に分かれたした。 奇劙なこずに、これらは䞻に無制限の関皎を持぀顧客でした。 デヌタベヌスぞのフルアクセスを取埗し、品質ではなく量を取埗したす。 これらのリクルヌタヌをブラックリストに含めたしたが、圌らの行動に぀いおは蚓緎されおいたせんでした。 行動パタヌンはタスクずは異なりたす。



最も蚘憶に残る䟋は、モスクワ地䞋鉄譊察の欠員でした。 採甚担圓者は、売り手、営業担圓者、俳優などの面接に招埅し、囜家譊備隊ず譊察の埓業員を拒吊したした。 おそらく、圌は自分の個人アカりントのむンタヌフェヌスの「拒吊」ボタンず「招埅」ボタンを混同しおいたのでしょう。







キャラクタヌ生成



このモデルは170以䞊の機胜を䜿甚しおいたす。 すべおの属性は、ゞョブのプロパティ、履歎曞、およびそれらの組み合わせに基づいおいたす。 䟋には、空垭の絊䞎プラグ、履歎曞の垌望絊䞎、履歎曞ず空宀の特性の組み合わせずしお履歎曞の絊䞎を空宀の絊䞎プラグに入れるこずが含たれたす。



カテゎリ属性にバむナリコヌディングワンホット゚ンコヌディングを適甚したす。 特定の皮類の教育、運転免蚱蚌のカテゎリ、たたは倖囜語の1぀に関する知識の有無に関する欠員の芁件は、モデルのいく぀かのバむナリ機胜で明らかになりたす。



テキスト属性を操䜜したす。



ストップワヌド、句読点、および芋出し語のテキストをクリアしたす。 テストサむンから、テヌマグルヌプを圢成したす。





グルヌプごずに、TF-IDF Vectorizerをトレヌニングしたす。 職業の党リスト、すべおの職務芁件、履歎曞スキルなどに぀いおベクトラむザヌをトレヌニングしたす。 たずえば、求人の職業ず応募者の経隓からの職業ずの類䌌性などの特城がありたす。 各フレヌズに察しお、tf-idfベクトルを取埗し、ベクトルのスカラヌ乗算により別のフレヌズのベクトルずのコサむン類䌌床ベクトル間の角床のコサむンを蚈算したす。 したがっお、2぀のフレヌズの類䌌性の尺床を取埗したす。



フィヌチャを生成するプロセスで、SuperJob Research Centerず盞談したした。 候補者を招埅するか拒吊するかを決定する最も重芁な兆候を特定するために、採甚担圓者向けの調査が開始されたした。



結果は予想されたす。採甚担圓者は、すべおの䌁業での仕事の経隓、最埌の堎所での仕事の期間、平均の仕事の期間を調べたす。 履歎曞からの望たしい䜍眮が候補者にずっお新しいものかどうか、぀たり 圌が以前にこの職業で働いおいたかどうか。 モデルの特性をコンパむルするずきに、調査デヌタを考慮したした。



暙識の䟋





疑わしい堎合は、xgboostを䜿甚したす



分類問題を解決するために、xgboost募配ブヌスト実装を䜿甚したす。



モデルのトレヌニング埌、重芁な理由で統蚈を収集するこずができたした。 予想される重芁な兆候の䞭には、仕事の経隓、絊䞎の特城、履歎曞から垌望の絊䞎を空垭の絊䞎プラグに入れるこず、仕事の職業ず求職者の仕事の経隓の類䌌性の尺床、仕事の芁件ず重芁な履歎曞のスキルの類䌌性がありたした。



印の䞀番䞊には、申請者の幎霢もありたした。 応募者を差別したくないため、実隓を行うこずにし、この機胜を削陀したした。 その結果、幎霢ず明らかに盞関する「卒業からの幎数」ずいう特城がトップになりたした。 この症状を取り陀き、モデルを再トレヌニングしたした。 幎霢に䌎うすべおの操䜜の埌、モデルの品質指暙が少し萜ち蟌んだこずがわかりたした。 その結果、幎霢を戻すこずにしたした。 マスセレクションでは、圌はリクルヌタヌにずっお本圓に重芁です、圌らは圌に泚意を払いたす。 ただし、回答が関連するものに少しでも届かない堎合は、高霢者のスコアポむントを補償したす。 圌の履歎曞を悲芳したのは、申請者の幎霢であったず信じおいたす。



モデルのトレヌニング、機胜の準備を数回繰り返した埌、優れた品質メトリックを備えたモデルが埗られたした。



ROC曲線は、真陜性の分類のシェアが停陜性の分類のシェアに䟝存しおいるこずを瀺しおいたす。 たた、roc曲線の䞋の領域は次のように解釈できたす。auc-rocは、ランダムに取埗されたクラス1オブゞェクトがランダムに取埗されたクラス0オブゞェクトよりも高い評䟡を埗る確率に等しくなりたす。



このモデルにずどたらず、新しい実隓を行いたす。 珟圚、doc2vecを䜿甚しお専門職の同矩語のリストに蚘入し、履歎曞の専門職が空垭の専門職に察応するずいう事実をより正確に刀断し、リヌドPHP開発者ずシニアPHP開発者がモデルの異なる専門職ではないように取り組んでいたす。 たた、重芁な仕事のトピックず履歎曞を取埗するために、BigARTMラむブラリを䜿甚したテヌマ別モデリングの䜜業が進行䞭です。



たた、関係のない適切な履歎曞をできるだけ少なくする必芁がありたした。 第2皮の゚ラヌたたは停陰性の応答の数を最小限に抑える必芁がありたす。 これを行うために、関連するクラスに属するしきい倀確率をわずかに枛らしたした。 したがっお、FN゚ラヌの数が削枛されたした。 しかし、これには逆の効果がありたした。FP゚ラヌの数が増加したした。



Flaskフレヌムワヌクでは、RESTスコアリングAPIを䜿甚しお小さなマむクロサヌビスを実装し、Dockerコンテナヌにパックしお、このタスク専甚のサヌバヌにデプロむしたした。 uWSGI Webサヌバヌは、マスタヌプロセスず24のワヌカヌプロセスコアごずに1぀を持぀コンテナヌで起動されたした。



ナヌザヌがサむトの空きに応答するず、この事実に関するメッセヌゞがrabbitmqキュヌに入りたす。 キュヌハンドラヌはメッセヌゞを受信し、デヌタ、ゞョブオブゞェクト、再開オブゞェクトを準備し、スコアリング゚ンドポむントAPIを呌び出したす。 さらに、スコアリング倀はデヌタベヌスに保存され、個人アカりントのリクルヌタヌによる応答の埌続のフィルタリングに䜿甚されたす。



最初は、個人アカりントに連絡するずきにオンラむンスコアリングを盎接実装したいず考えおいたしたが、䞀郚の空垭ぞの応答数ず、モデルが1組の履歎曞欠員に取り組んだ合蚈時間を芋積もっお、非同期モヌドでスコアリングを実装したした。



スコアリングプロセス自䜓には、玄0.04〜0.05秒かかりたす。 したがっお、珟圚のハヌドりェア䞊のすべおのアクティブな応答のスコアリング倀を再蚈算するには、玄18〜20時間かかりたす。 䞀方で、これは倧きな数字ですが、䞀方で、新しいモデルが生産に導入された堎合にのみ、スコアリングを非垞にたれに数えたす。 そしお、珟時点でこの問題があれば、なんずか生きるこずができたす。



スコアリングサヌビスの最倧の負担は、空垭に察応する応募者ではなく、「再開登録」メヌルサヌビスです。 このサヌビスは1日に1回アクティブ化され、求人者に求人者を募集しおいたす。 圓然、リクルヌタヌに関連する回答のみをアドバむスするために、サヌビスの結果もスピヌドアップする必芁がありたす。



その結果、䜜業のピヌク時には、1秒あたり1000〜1200のリク゚ストを凊理したす。 スコアリングする必芁がある応答の数が増加した堎合、別のサヌバヌを近くに配眮し、スコアリングサヌビスを氎平方向にスケヌリングしたす。



モニタリング



個人アカりントの実際のデヌタでモデルの品質指暙を継続的に評䟡するために、jenkinsで監芖タスクを蚭定したす。 このスクリプトは、招埅ず拒吊に応じお1日数回verticaからデヌタを収集し、これらのむベントに察するモデルの動䜜を監芖し、メトリックを蚈算しお監芖システムに送信したす。



たた、個人アカりントの同じデヌタで異なるスコアリングモデルのメトリックを比范するこずもできたす。 すぐに新しいモデルを導入するのではなく、最初に実隓モデルですべおの応答を高速化し、スコアリング倀をデヌタベヌスに保存しおから、グラフで実隓モデルがより良いか悪いかを確認したす。



グラフは私たちの生掻を萜ち着かせ、埗点の質は倉わらず、すべおのステヌゞが通垞どおり機胜するこずを確信しおいたす。



アカりントでの実装



特定の欠員に察する応答のリストに、適切な応答ず䞍適切な応答の2぀のタブが衚瀺されたした。 䟋ずしお、同じ欠員はSuperJobの䞻芁なphpプログラマヌです。 PHPプログラマの履歎曞は、たずえリヌダヌやシニアでなくおも、PHPの知識を持぀フルスタック開発者の履歎曞には正しい反応がありたした。











ABテスト



スコアリング機胜を実装した埌、採甚担圓者に察しおabテストを実斜したした。

テストでは、次のメトリックを遞択したした。





5の有意氎準でこのテストを実行したした。぀たり、第1皮の間違いたたは誀怜知が5発生する可胜性がありたす。



アブテストの埌、スコアリング機胜を備えたオプションに陥った採甚担圓者からフィヌドバックを収集したした。 フィヌドバックも奜意的でした。 圌らは機胜を䜿甚し、倧量遞択に費やす時間を短瞮したす。



結論



最も重芁なこずは、トレヌニングサンプルです。

モデルの品質指暙を監芖したす。

random_stateを修正したす。



All Articles