6.7K Views
July 13, 23
スライド概要
ChatGPT などの生成系 AI の進化により、現在提供している「価値」が変わってしまうサービスは多いのではないでしょうか?それらのサービスの中には、ChatGPT を悪用したチートにより、提供する価値が脅かされるものがあります。こういった ChatGPT の悪用に対して対策は取れないのか?
コーディングテストサービス HireRoo は、このようなチートの影響を受ける可能性があるサービスの1つです。何も対策しなければ、おそらく進化し続ける ChatGPT などのツールを利用することで、本来のスキルを詐称することが出来てしまったと思われます。
本登壇では、コーディングテストサービス HireRoo で想定しているチート手法と、それらのチート手法に対して HireRoo が行った様々な対策をご紹介します。
アルゴリズムテストの チート検知手法と その他チートへの対策 @Arthur Lechte 1
イントロダクション 自己紹介 Arthur Lechte オーストラリア出身。2017年に株式会社メルカリのグローバルオペレーショ ンズチームに Joinし、2020年に社内でコーディングテストを受けバックエン ドエンジニアに転職。2023年にHireRooにJoinし、主にチート検知の開発を担 当中。 前職 ● 株式会社Synspective、株式会社メルカリ 会社に部活制度ができたのでクラフトビール部を作りました 🍺 © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 2
Agenda 1 アルゴリズムテストにおけるチートとは? チートとは? 2 ハイヤールーが行っているチート検知 主に想定しているユースケース 3 ペーストトラッキング機能 ペーストトラッキングの紹介 設計と実装 4 まとめ
01 アルゴリズムテストにおけるチートとは?
アルゴリズムテストにおけるチートとは? チートとは? アルゴリズムテストで主に見ている候補者のスキル 1.問題を理解し、解決する能力 2.使っているプログラミング言語の理解度 3.データ構造、計算量などのコンピューターサイエンス理論の知識 © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 5
アルゴリズムテストにおけるチートとは? チートとは? アルゴリズムテストで主に見ている候補者のスキル 1.問題を理解し、解決する能力 2.使っているプログラミング言語の理解度 3.データ構造、計算量などのコンピューターサイエンス理論の知識 アルゴリズムテストにおいて、候補者自身が問題を解いていないものを提出することを チートと定義しています © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 6
02 ハイヤールーが行っているチート検知
ハイヤールーが行っているチート検知 想定しているケース ケース1 候補者「めんどくさいなー、これChatGPT使ったら楽勝でしょ。」 候補者「よし、答えコピペしたろ!」 © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 8
ハイヤールーが行っているチート検知 想定しているケース © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 9
ハイヤールーが行っているチート検知 想定しているケース ケース2 候補者「試験代行サービス使って楽したろ!よろしくお願いします」 代行サービス「はい、やっておきますね。」 © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 10
ハイヤールーが行っているチート検知 想定しているケース © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 11
ハイヤールーが行っているチート検知 バレます © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 12
ハイヤールーが行っているチート検知 想定しているケース HireRoo が対策しているチート手法は以下のようなものがあります ● ● ● ● コピペ手法 テスト代行手法 タブ移動手法 質問・答えリーク手法 今回はこのうちコピペ手法の対策について説明します! © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 13
03 ペーストトラッキング機能
03 ペーストトラッキング機能 特許申請済みなので、良い子は絶対真似しないでね
ペーストトラッキング機能 ペーストトラッキングの紹介 機能 ● ● ● ● ペースト回数を記録する プレイバック機能にペーストされたテキ ストをハイライトする 各フレームにハイライトの変形を行う ペーストが行われたタイミングをプレイ バックのスライダー上で可視化する © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 16
ペーストトラッキング機能 設計と実装 全体設計 ● ● クライアント: React ○ コードエディター: monaco-editor ■ イベントの検知 ■ コードエディター上での入 力は全てFirebase Realtime Databaseに送信 ○ 既存のプレイバックにペースト情 報を表示 サーバー: Firebase Realtime Database ○ コードエディターで検知された入 力情報、ペーストイベントなど、 様々なイベントが履歴として Firebaseに保存される © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 17
ペーストトラッキング機能 設計と実装 ペーストイベントの検知 monaco-editor の onDidPaste ● ペーストされたテキストの位置情報を取得 ● プレイバック機能で表示されるテキストは text operation が使用されていて、その中に はカーソルの位置情報が含まれている ○ Text operation では \n などを含むフ ラットな形状で位置情報が保存されて いる ○ lineNumber や column ではなく、対象 の文字列の先頭と最後だけをを見てい る ● ペーストされたテキストの位置情報は後々 text operation に含まれるカーソルの位置情 報を紐づけるため、range から offset を計算 し変換する © HireRoo, Inc. range: { startLineNumber: 4, startColumn: 5, endLineNumber: 4, endColumn: 16, } offset: { start: 70, end: 81, } アルゴリズムテストのチート検知手法とその他チートへの対策 18
ペーストトラッキング機能
設計と実装
ペーストイベントをFirebaseに保存する
●
●
●
ユーザーがペースト操作を行うと紐付けられた
イベントハンドラが実行される
UIで表示することを想定したデータ構造に落とし
込む
Firebaseに情報が保存される
○ イベントタイプ(ペースト)
○ ペーストされたテキストの位置情報
○ ペーストされたテキストの文字列
■ マルチカーソルのペーストも考慮
する
Firebase に送るペイロード
{type: "paste", values: [{text: "pasted text", offsets: {start: 70, end: 81}}]};
© HireRoo, Inc.
アルゴリズムテストのチート検知手法とその他チートへの対策
19
ペーストトラッキング機能 設計と実装 ペーストトラッキングのアルゴリズムの概要 1. 2. 3. 4. Text operation (以下オペレーション)の履歴を Firebase から取ってくる オペレーションごとにPlaybackに表示されるテキストをオブジェクトに保存する ペーストイベントとオペレーションを紐付け、ペーストされたテキストの位置情報(offset)を各オペレー ションに保存する 必要に応じてオペレーションに従い、ペーストされたテキストの位置情報( offset)も更新する ケース1)ペーストされた offset 内に削除のオペレーションがあった場合 {start: {start: {start: ... {start: {start: © HireRoo, Inc. 21, end: 34} 21, end: 33} 21, end: 32} 21, end: 22} -1, end: -1} アルゴリズムテストのチート検知手法とその他チートへの対策 20
ペーストトラッキング機能 設計と実装 Text operation に従い、ペーストされたテキストの位置情報( offset)も更新する ケース2)ペーストされた offset の後に入力があった場合 P1: {start: 47, end: 60} ... ケース3)ペーストされた offset の前に入力があった場合 ケース4)ペーストされた offset の中に入力があった場合 © HireRoo, Inc. P2: {start: 108, end: 121} P2: {start: 109, end: 122} P2: {start: 110, end: 123} ... P3: ↓ P3: P4: ↓ P3: P4: ↓ P3: P4: ... {start: 171, end: 184} {start: 171, end: 178} {start: 179, end: 185} {start: 171, end: 178} {start: 180, end: 186} {start: 171, end: 178} {start: 181, end: 187} アルゴリズムテストのチート検知手法とその他チートへの対策 21
ペーストトラッキング機能 設計と実装 このように様々なエッジケースを想定し、一つ一つの解決法を アルゴリズムに組み込むことで、ペーストトラッキングの実装 をしました © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 22
ペーストトラッキング機能 設計と実装 プレイバック内にペーストされた部分をハイライト 1. ペーストトラッキングのアルゴリズムに従って、プレイバックの各フレームの中にある文字列にテキス トデコレーションを適用する a. Monacoのdeltadecorationsによってrangeを指定すればテキストの部分的にクラスネームを割り当 てることができる const start = model.getstartAt(target.start); const end = model.getstartAt(target.end); const range = new monaco.Range(start.lineNumber, start.column, end.lineNumber, end.column); // apply decoration const d = model.deltaDecorations( oldDecorations, [{ range: range, options: { className: CLASS_NAME, stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges, }, }], ); © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 23
04 まとめ
Take Away 全体のまとめ ● 原理を理解してものを作ることによって、あらゆる機能の拡張性が上がる ● UIで表示することを想定したデータ構造を設計することや既存のデータ構造に沿った拡張を することによってメンテナンス、運用がしやすくなる ● アルゴリズム大事 特許申請済みの機能なので、自社プロダクトには使わないようお願いします © HireRoo, Inc. アルゴリズムテストのチート検知手法とその他チートへの対策 25
ご清聴ありがとうございました 26