求人サイトに届いた掲載申込の原稿を、掲載中と過去の求人に照らして、重複掲載・原稿の使い回し・会社名を変えた再掲の候補を見つけ、審査担当に回す
求人サイトに届いた掲載申込の原稿を、掲載中と過去の求人に照らし、本文が近いものと連絡先が一致するものを探します。重複掲載、原稿の使い回し、会社名を変えた再掲の候補を、一致した点と根拠の求人番号を添えて審査担当に回します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 人材/広告
- 対象部門
- カスタマーサポート
- 対象業務
- 内容確認・チェック/情報検索
- 主な課題
- 人手が足りない/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 申込の原稿を審査の管理画面で開く
- 会社名で求人の管理システムを検索し、掲載中の同じ会社の求人を開いて見比べる
- 電話番号で検索し、別の会社名で同じ番号を使う求人が無いかを見る
- 掲載を止めた企業の一覧を開き、会社名と電話番号で検索する
- 似た求人があれば、職種・勤務地・給与・本文を見比べて、重複か別の求人かを決める
- 重複や再掲の疑いがあれば、営業担当か求人企業に確かめ、結果を審査の記録に書く
- 自動申込が審査待ちに入ったことをきっかけに、照合の処理が動く
- 自動プログラムが電話番号・所在地・メールアドレスのドメイン・法人番号を正規化する
- 自動Amazon OpenSearch Service が、連絡先の一致と本文の近さで、掲載中・過去の求人と掲載を止めた企業の求人を探す
- 自動法人番号があれば、法人番号システムの Web-API で商号の変更の履歴を引く
- 自動上位の候補について、一致した項目と違う項目をプログラムが規則で並べ、照合の型を決める
- 自動Claude API が、候補ごとに一致した点と違う点を審査担当が読める文にし、求人番号を付ける
- 人審査担当が、候補が付いた申込だけを開き、元の求人と見比べて扱いを決める
- 人判断の結果を審査の記録に残し、別の求人と確かめた組み合わせを登録する
各工程の詳しい説明を読む
- 申込の原稿を審査の管理画面で開く
- 会社名で求人の管理システムを検索し、掲載中の同じ会社の求人を開いて見比べる
- 電話番号で検索し、別の会社名で同じ番号を使う求人が無いかを見る
- 掲載を止めた企業の一覧を開き、会社名と電話番号で検索する
- 似た求人があれば、職種・勤務地・給与・本文を見比べて、重複か別の求人かを決める
- 重複や再掲の疑いがあれば、営業担当か求人企業に確かめ、結果を審査の記録に書く
(a)会社名と電話番号でしか探せない。 管理画面の検索は、項目の文字列の一致です。本文が同じで会社名も電話番号も違う原稿は、見つけようがありません。
(b)書き方が違うと一致しない。 電話番号のハイフンの有無、全角と半角、所在地の「1丁目2番3号」と「1-2-3」。同じ番号でも、書き方が違うと検索に引っかかりません。
(c)見つけるのは担当者の記憶。 「この原稿、前にも見た」と気づくのは、その原稿を前に審査した担当者だけです。12名で分けて審査しているので、同じ担当者に回る保証がありません。
(d)同じひな形の別の会社を疑ってしまう。 フランチャイズの加盟店は、本部のひな形で原稿を書きます。本文がほとんど同じでも、雇う会社は別で、それぞれ正当な求人です。 見比べに慣れていない担当者ほど、ここで止めてしまいます。
(e)確かめた結果が残らない。 「この2件は別の店舗の求人で問題なし」と確かめても、審査の記録に一行書くだけです。次に同じ組み合わせが来ると、また最初から見比べます。
- 【自動】 申込が審査待ちに入ったことをきっかけに、照合の処理が動く
- 【自動】 プログラムが電話番号・所在地・メールアドレスのドメイン・法人番号を正規化する
- 【自動】 Amazon OpenSearch Service が、連絡先の一致と本文の近さで、掲載中・過去の求人と掲載を止めた企業の求人を探す
- 【自動】 法人番号があれば、法人番号システムの Web-API で商号の変更の履歴を引く
- 【自動】 上位の候補について、一致した項目と違う項目をプログラムが規則で並べ、照合の型を決める
- 【自動】 Claude API が、候補ごとに一致した点と違う点を審査担当が読める文にし、求人番号を付ける
- 【人】 審査担当が、候補が付いた申込だけを開き、元の求人と見比べて扱いを決める
- 【人】 判断の結果を審査の記録に残し、別の求人と確かめた組み合わせを登録する
7番目が、この設計の分かれ目です。人が開くのは、候補が付いた申込だけです。 候補が無い申込は、重複と再掲の確認をここで終えます。全件を人が開き直す設計にすると、200.0時間はほとんど減りません。
5番目を規則で行うのは、照合の型を後から説明できるようにするためです。 「本文が近く、法人番号が違い、連絡先も違う」ならフランチャイズの可能性、「本文が近く、連絡先が掲載を止めた企業と一致」なら別名での再掲の疑い。型は項目の一致で決まり、AIに決めさせません。
02今回想定するシステム構成
求人の管理システム(掲載中・過去の求人) 掲載を止めた企業の一覧 │ 毎晩の書き出しと、掲載のたびの差分 ▼ AWS Lambda ── 連絡先の正規化(プログラム) ▼ Amazon OpenSearch Service ── 求人の索引(本文は kuromoji、連絡先は正規化した keyword) ▲ │ 照合 審査の管理画面 ──【トリガー】申込が審査待ちに入る ▼ Lambda ── 申込の正規化 → more_like_this + 連絡先の term ├──▶ 法人番号システム Web-API(商号の変更の履歴) ▼ 照合の型の決定(規則)── 本文・法人番号・連絡先・勤務地 ▼ Claude API ── 候補ごとの説明と求人番号 ▼ 審査の管理画面 ──【人】候補が付いた申込だけを審査担当が見る
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(more_like_this、kuromoji、fingerprint) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude API(候補ごとの一致点と相違点の説明) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(正規化、照合の処理、Web-API の呼び出し、審査の管理画面とのつなぎ) | AWS Step Functions |
| 外部の参照 | 国税庁 法人番号システム Web-API(商号の変更の履歴) | 法人番号公表サイトの画面での確認 |
求人の管理システムには、この構成から書き込みません。 照合の結果は審査の管理画面に表示するだけで、掲載の可否を変えるのは審査担当の操作です。
本文の近さには、more_like_this を使います。 渡した文や文書から、その文書を特徴づける言葉を選び、その言葉を含む文書を探します。掲載申込の原稿を like に渡すと、言葉の重なる求人が並びます。 like には自由な文、索引の文書、索引に無い文書の形を混ぜて渡せます。
ここで既定の値に注意が要ります。 入力の中で2回未満しか出ない言葉は無視され(min_term_freq の既定は2)、5件未満の文書にしか出ない言葉も無視されます(min_doc_freq の既定は5)。求人の原稿は短く、職種名や店舗名は1回しか出ないので、既定のままだと特徴の言葉が選ばれません。 min_term_freq を1に下げます。選ぶ言葉の上限は既定で25、一致の下限は既定で30%です。
連絡先の一致は、正規化した keyword の項目で見ます。 電話番号は数字だけに、所在地は丁目・番地を数字の並びにそろえ、全角と半角もそろえます。この正規化は索引に入れる前にプログラムで行います。 本文の解析には、Amazon OpenSearch Service の全ドメインに入っている Japanese (kuromoji) Analysis を使います。ICU Analysis も全ドメインに入っています。
fingerprint のトークンフィルタは、短い項目の完全な重複に使います。 言葉を小文字にして並べ替え、重複を除いて1つの文字列にします。ただし、つないだ文字列が既定で255文字を超えると、何も出力しません。 本文のような長い項目には使わず、「職種名+勤務地+雇用形態」のような短い組み合わせに使います。
03どうやって実装するのか
処理の起点を決める
申込が審査待ちに入ったときに動かします。 求人企業が管理画面から送ったとき、営業担当が代わりに入力して送ったときのどちらも、審査待ちに入る時点は同じです。入口を審査待ちにそろえると、入力の経路ごとに照合が抜けることがありません。
もう1つの起点は、求人の掲載と終了です。 掲載された求人と、掲載を終えた求人を、そのたびに索引へ入れ直します。毎晩の書き出しだけにすると、その日の昼に掲載された求人と同じ原稿が、夕方に届いても見つかりません。
掲載を止めた企業の一覧も、更新のたびに索引へ入れます。 一覧に載った企業の過去の求人には、suspended の印を付けます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申込の原稿 | 会社名、法人番号、職種、雇用形態、勤務地、給与、仕事内容の本文、応募の連絡先、担当者のメールアドレス | 審査の管理画面 |
| 求人の文書 | 求人番号、掲載の状態(掲載中・終了・停止)、企業の番号、上と同じ項目、掲載の期間 | 求人の索引(OpenSearch) |
| 掲載を止めた企業 | 企業の番号、会社名、法人番号、電話番号、所在地、止めた理由の区分、止めた日 | 掲載を止めた企業の一覧 |
| 商号の変更の履歴 | 法人番号ごとの過去の商号と所在地、変更の日 | 法人番号システム Web-API |
| 別の求人と確かめた組み合わせ | 求人番号の組と、確かめた日と担当者 | 照合の記録 |
質を決めるのは、3行目の掲載を止めた企業の一覧です。 会社名と電話番号だけでなく、法人番号・所在地・担当者のメールアドレスのドメインまで持たせます。 名前が変わっても、どれかが一致することが多いからです。
5行目の「別の求人と確かめた組み合わせ」も、必ず持たせます。 フランチャイズの加盟店どうし、同じ会社の別の店舗どうしは、一度確かめれば次からは候補に出す必要がありません。この記録が無いと、毎月同じ組み合わせが審査担当に回ります。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 本文の近い求人 | 求人の索引 | 職種名と仕事内容の本文への more_like_this |
| 連絡先が一致する求人 | 求人の索引 | 正規化した電話番号・所在地・ドメイン・法人番号への term |
| 短い項目の完全な重複 | 求人の索引 | 「職種名+勤務地+雇用形態」の fingerprint の項目への term |
| 商号の変更の履歴 | 法人番号システム Web-API | 法人番号を指定し、変更の履歴を併せて取る条件で呼ぶ |
照合の問い合わせは、次のようになります。
POST /job-postings/_search
{
"size": 20,
"query": {
"bool": {
"filter": [
{ "range": { "posted_to": { "gte": "now-18M/d" } } }
],
"should": [
{ "more_like_this": {
"fields": ["job_title", "description"],
"like": [ { "doc": {
"job_title": "ホールスタッフ(未経験歓迎)",
"description": "申込の仕事内容の本文"
} } ],
"min_term_freq": 1,
"min_doc_freq": 2,
"max_query_terms": 40,
"minimum_should_match": "40%"
} },
{ "term": { "phone_norm": { "value": "0312345678", "boost": 3 } } },
{ "term": { "address_norm": { "value": "東京都新宿区西新宿1-2-3", "boost": 2 } } },
{ "term": { "mail_domain": { "value": "example.co.jp", "boost": 2 } } },
{ "term": { "corporate_no": { "value": "1234567890123", "boost": 3 } } },
{ "term": { "title_place_fp": { "value": "申込から作った fingerprint", "boost": 2 } } }
],
"minimum_should_match": 1
}
}
}
照合の範囲は、過去18か月の求人と、掲載を止めた企業の全期間の求人です。 後者は別の問い合わせで、suspended の印で絞って同じ形で探します。止めた企業の求人だけは、古くても照合から外しません。
minimum_should_match を、more_like_this の中と外で別に決めます。 中は「本文の言葉の何割が一致すれば近いとするか」、外は「6つの条件のうちいくつに当たれば候補にするか」です。混同すると、連絡先だけ一致した求人が候補から落ちます。
求人の索引の1件は、次のような形にします。
{
"posting_id": "J-2026-0812-04417",
"status": "ended",
"company_id": "C-118204",
"company_name": "株式会社サンプルダイニング",
"corporate_no": "1234567890123",
"job_title": "ホールスタッフ(未経験歓迎)",
"employment_type": "part_time",
"work_address_norm": "東京都新宿区西新宿1-2-3",
"phone_norm": "0312345678",
"mail_domain": "example.co.jp",
"description": "仕事内容の本文",
"posted_from": "2026-05-01",
"posted_to": "2026-06-30",
"suspended": false
} AIへ渡す前に整形する
- 電話番号の正規化 … ハイフン・括弧・空白を除き、全角の数字を半角にして、数字だけの並びにします
- 所在地の正規化 … 都道府県から番地までを分け、「丁目」「番」「号」を数字の並びにそろえます。建物名と部屋番号は別の項目にします
- メールアドレスのドメインの取り出し … 担当者のメールアドレスから、
@の後ろを取り出します。誰でも取れるフリーメールのドメインは、照合に使わない一覧に入れます - 法人番号の確認 … 13桁の数字であることを確かめます。個人事業主などで法人番号が無い申込は、空のまま進めます
- 本文の整え … 定型の応募方法の案内や、どの原稿にも入る会社の紹介の段落を除いてから
likeに渡します - fingerprint の項目の作成 … 職種名・勤務地の市区町村・雇用形態をつないだ短い文字列を作ります
3番目のフリーメールの除外を省くと、無関係の求人が大量に候補に出ます。 同じフリーメールのドメインを使う求人は、何千件もあるからです。
5番目は more_like_this の精度を大きく左右します。 求人サイトの入力欄に定型で入る「応募はこちらから」「当社は創業○年」の段落が残ると、その言葉が特徴の言葉として選ばれ、同じ会社の別の求人ばかりが並びます。
AIに処理させる
させるのは、規則で決めた照合の型と、項目ごとの一致・不一致を、審査担当が読める文にすることだけです。 探すのは OpenSearch、型を決めるのは規則です。
照合の型は、次の規則でプログラムが決めます。
| 型 | 条件 |
|---|---|
same_posting_live | 法人番号か企業の番号が同じで、fingerprint が一致し、掲載中 |
reused_posting | 法人番号か企業の番号が同じで、本文が近く、元の求人は掲載終了 |
suspended_link | 掲載を止めた企業の求人と、電話番号・所在地・ドメイン・法人番号のいずれかが一致 |
renamed_company | 法人番号が同じで、会社名が違う。Web-API の変更の履歴で商号の変更を確かめる |
template_like | 本文は近いが、法人番号も連絡先も違う(フランチャイズなどの可能性) |
known_pair | 別の求人と確かめた組み合わせに入っている。候補に出さない |
| させること | 中身 |
|---|---|
| 一致した点の説明 | どの項目が一致したか、本文のどの段落が近いか |
| 違う点の説明 | 職種・勤務地・給与・雇用形態の違い |
| 確かめることの列挙 | 型ごとに、審査担当が求人企業や営業に確かめる点 |
| 根拠の付与 | 説明ごとに求人番号と掲載の期間 |
| させないこと | 理由 |
|---|---|
| 掲載の可否の判断 | 審査担当が規約と原稿を見て決める |
| 虚偽の表示に当たるかの判断 | 法令と規約の解釈で、人が決める |
| 照合の型の決定・変更 | 規則で決め、記録に残す |
| 申込の企業の意図の推測 | 「隠すために名前を変えた」のような推測を書かせない |
| 検索結果に無い求人の紹介 | 結果に無い求人番号を示さない |
4行目がいちばん起きやすい失敗です。 suspended_link の候補を渡すと、AIは「掲載停止を回避する目的で別名義により申し込んだと考えられる」と書きます。名前が変わった理由は、商号の変更かもしれず、事業を譲り受けた別の会社かもしれません。 一致したという事実だけを書かせます。
指示内容を固定する
あなたは求人サイトの掲載審査で、審査担当が重複と再掲を確かめるのを手伝う立場です。
照合で見つかった候補を、審査担当が読める文にしてください。
掲載してよいか、規約や法令に反するかを決めないでください。決めるのは審査担当です。
【やること】
1. 候補ごとに、渡された照合の型(match_type)の意味を1文で書いてください。
2. 一致した項目(matched_fields)と違う項目(diff_fields)を、値を添えて書いてください。
3. 本文の近さは、近い段落を申込と候補から1つずつ写して示してください。
4. 型ごとに、審査担当が確かめる点を箇条書きにしてください。
5. 説明ごとに、根拠の求人番号と掲載の期間を付けてください。
【厳守事項】
- 申込の企業の意図や目的を書かないでください。
「回避する目的」「隠すため」「意図的に」のような言葉を使わないでください。
- 「虚偽」「違反」「不正」と書かないでください。一致した事実だけを書いてください。
- 照合の型を変えたり、別の型を提案したりしないでください。
- 渡されていない項目の一致・不一致を推測しないでください。
- 検索結果に無い求人番号・会社名を書かないでください。
- template_like の候補では、別の会社の正当な求人である可能性があることを必ず書いてください。
【申込】{application}
【候補(照合の型・一致した項目・違う項目・近い段落)】{candidates}
【商号の変更の履歴】{name_history}
「意図を書かない」を言葉の一覧で禁じているのは、言い換えて書くからです。 「意図を推測しない」とだけ伝えると、「名義を変更して申し込んだ可能性」と書きます。審査担当はその一文に引っぱられて、求人企業への確認の言い方を変えてしまいます。
template_like に一文を必ず書かせるのも同じ理由です。 フランチャイズの加盟店どうしは本文がほとんど同じで、説明を読んだ担当者が疑ってかかると、正当な求人の掲載が遅れます。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"application_id": "",
"candidates": [
{
"posting_id": "",
"posted_period": "",
"match_type": "same_posting_live | reused_posting | suspended_link | renamed_company | template_like",
"matched_fields": [ { "field": "", "value": "" } ],
"diff_fields": [ { "field": "", "application": "", "candidate": "" } ],
"similar_passages": { "application": "", "candidate": "" },
"explanation": "",
"points_to_check": []
}
],
"no_candidate": false
}
1つ目の理由は、posting_id を照らせることです。 出てきた番号が照合の結果に含まれているかを、プログラムで確かめます。 含まれていない候補は表示しません。
2つ目は、match_type で並べる順番を決められることです。 審査の管理画面では、suspended_link を一番上に、template_like を一番下に並べます。同じ件数の候補でも、先に見るべきものが上に来ます。 match_type・matched_fields・diff_fields はプログラムが入れ、AIは explanation と points_to_check だけを書きます。
3つ目は、similar_passages で本文の近さを目で確かめられることです。 近さの点数だけでは、どこが同じかが分かりません。近い段落を並べて表示すれば、審査担当は原稿を開く前に見当が付きます。 写された段落が元の原稿に実在するかは、プログラムで文字列を照らします。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 審査の管理画面 | 審査待ちへの登録を起点に Lambda を呼ぶ | 照合の開始と、候補の表示 |
| Amazon OpenSearch Service | _search(more_like_this、term) | 本文の近い求人と連絡先の一致する求人 |
| 法人番号システム Web-API | アプリケーションIDを付けた HTTP の呼び出し | 法人番号ごとの情報と変更の履歴 |
| Claude API | Messages API の構造化出力 | 候補ごとの説明と確かめる点 |
| 求人の管理システム | 掲載・終了のたびの差分 | 求人の索引の更新 |
法人番号システム Web-API を使うには、アプリケーションIDが要ります。 発行に費用は掛かりませんが、発行までに2週間から1か月程度かかるとされています。 照合の仕組みを組み始める前に申請します。
人が確認する
- 候補が付いた申込だけを開く … 一覧の上から、
suspended_link、renamed_company、same_posting_live、reused_posting、template_likeの順に見ます - 元の求人を開いて見比べる … 説明の段落だけで決めず、元の求人の原稿を開きます
- 求人企業か営業に確かめる … 型ごとの確かめる点に沿って聞きます。疑いを伝える言い方にせず、事実を確かめる聞き方にします
- 扱いを決めて記録する … 掲載する、重複を整理してもらう、掲載を見合わせる、のどれかを記録します
- 別の求人と確かめた組み合わせを登録する … 次から同じ組み合わせが候補に出ないようにします
2番目を省かないでください。 説明は近い段落を1つ示すだけです。勤務地や給与が少しだけ違う原稿は、全文を並べないと違いに気づけません。
目標は、2,400件をならして1件2分です。 候補の無い申込は数秒で終わり、候補の付いた申込は元の求人を開いて確かめるので数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 候補が1件も出ない | no_candidate を立て、重複と再掲の確認を終える |
| 候補が多すぎる(20件を超える) | 本文の定型の段落が残っていないかを確かめる。除く段落の一覧を直す |
| 法人番号が13桁でない | Web-API を呼ばず、法人番号を照合から外して進める。審査担当に表示する |
| Web-API が応答しない | 商号の変更の履歴なしで照合を進め、「履歴を確かめていない」と表示する |
| 掲載を止めた企業の一覧に連絡先が無い | その企業は会社名だけで照らす。一覧の整備の対象にする |
| 写された段落が元の原稿に無い | その候補の説明を表示せず、項目の一致だけを表示する |
| 求人番号が照合の結果に無い | その候補を表示しない。ログに残す |
構造化出力が refusal や max_tokens で終わる | 受け付けずに再実行する |
記録を残す
- 申込の原稿と、正規化した連絡先の値
- 照合の問い合わせ(使った条件と重み)と、上位の候補と点数
- 照合の型と、そのとき使った規則の版
- 法人番号システム Web-API の応答
- Claude API の出力と、使った指示の版
- 審査担当の判断と、求人企業や営業に確かめた内容
- 別の求人と確かめた組み合わせ
最後の行が、候補の数を減らしていきます。 運用の最初の数か月は template_like が多く出ますが、確かめた組み合わせが増えるほど、同じ本部のひな形の求人が候補に出なくなります。
04実装レベルの3段階
半自動化で、1件5分が3分程度になります。 連絡先の一致は自動で出ますが、本文だけが同じ原稿は見つからず、見比べも手作業です。本格構成で2分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月使うと、正規化で拾えない所在地の書き方と、照合から外すべきフリーメールのドメインが分かります。そこを直してから本文の近さを足します。
05工数削減シミュレーション
導入後 2,400件 × 2分 ÷ 60 = 80 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- アルバイト・パート・正社員の求人を掲載する求人サイトや求人情報誌のWeb版を運営し、掲載申込が月に数千件届く会社。掲載の前に審査担当が原稿を見ているが、重複や使い回しの確認は担当者の記憶と管理画面の検索に頼っている場合。掲載を止めた企業が、別の名前で申し込んでくる例が出ている場合。申込の項目に法人番号と連絡先がある場合。
- 掲載申込が月に数十件で、審査担当が全件を覚えていられる場合。求人を自社で集めず、他社の求人を転載するだけのサービスの場合(照合の相手が手元にありません)。なお、原稿が虚偽の表示に当たるか、掲載を断るかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去3か月に、審査担当が重複や再掲を見つけた申込を20件集める
- それぞれについて、元の求人と、掲載を止めた企業の一覧の該当行を用意する
- 重複でも再掲でもなかった申込を20件加え、合わせて40件にする
- 手元のAIサービスに申込1件と過去の求人の候補数件を渡し、「一致した項目と違う項目を並べ、同じ求人の重複か、別の求人かを判断する材料を書いてください。意図を推測しないでください」と指示する
- 出てきた内容を、当時の審査担当の判断と比べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の判断の材料になる一致と相違が出た | 索引と more_like_this の仕組みづくりに進む |
| 申込の企業の意図を推測して書いた | 指示と照合の型の規則で直る。構成は有効 |
| 連絡先の書き方が違って一致を見落とした | 正規化を先に作る |
3行目が出ることは珍しくありません。 それは失敗ではなく、管理画面の検索で見つからなかった理由が分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 本文が近いのに候補に出ない | min_term_freq の既定は2。 短い原稿では1に下げる |
| 同じ会社の別の求人ばかり並ぶ | 定型の段落を除いてから like に渡す |
| fingerprint の項目が空になる | 既定で255文字を超えると出力されない。 短い項目の組み合わせにだけ使う |
| フリーメールのドメインで大量に当たる | 照合に使わないドメインの一覧を作る |
| フランチャイズの加盟店を疑ってしまう | template_like の型を分け、正当な求人の可能性を必ず書かせる |
| AIが申込の企業の意図を書く | 意図を表す言葉を一覧で禁じる |
| 商号を変えただけの会社を再掲と疑う | Web-API の変更の履歴で確かめる |
| 同じ組み合わせが毎月候補に出る | 別の求人と確かめた組み合わせを登録する |
| 昼に掲載した求人と同じ原稿が夕方に通る | 掲載のたびに索引へ入れる |
上の3行が、この構成の失敗のほとんどです。 どれも既定の値と入力の整え方の問題で、照合は動いているのに見つけるべきものが見つからない、という形で出ます。 最小構成の40件で、見つかるはずの20件が候補に出るかを必ず確かめてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 求人企業の会社名・法人番号・所在地・電話番号、担当者のメールアドレス、求人の原稿です。個人事業主の求人では、電話番号と所在地が個人の情報になります。
- 照合の結果で掲載を自動で止めない … 出すのは候補までです。掲載を見合わせるかは審査担当が決めます。 正当な求人の掲載を止めると、求人企業の採用の機会を奪います
- 法令上の扱いは人が判断する … 厚生労働省の資料では、求人メディアにも求人情報の的確な表示が義務付けられ、実際に求人を行う企業と別の企業の名前で求人を行う場合や、採用予定のない求人を出す場合が、虚偽の表示の例として挙げられています。 ただし、原稿が虚偽であることを事業者が知り得ない場合に、ただちに違反となるものではないともされています。照合の結果は、確かめるきっかけとして使います
- 正確・最新の内容に保つ措置とつなげる … 同じ資料では、正確・最新でないことを確認したら遅滞なく訂正の有無を確かめるか提供を中止すること、とされています。使い回しの原稿で掲載終了の求人が戻ってきた場合は、募集がいまも続いているかを確かめる流れにします
- 外部の生成AIに渡す範囲を絞る … 説明に渡すのは一致した項目と近い段落までにし、担当者の氏名やメールアドレスの全文は渡しません
- Web-API の情報の扱いを守る … 法人番号システム Web-API で取った情報を使うサービスを公開する場合は、情報の取得元の明示が求められています。本記事の照合は社内の審査で使うもので、取った情報を外へ出しません
誤りが起きた場合のリスクは、別名での再掲を見逃すことと、正当な求人を疑って掲載を遅らせることの2つです。 前者は連絡先の正規化と掲載を止めた企業の照合で、後者は template_like の型と人の確認で防ぎます。
10まず何から始めるか
1週目:掲載を止めた企業の一覧を整える
一覧に、法人番号・所在地・担当者のメールアドレスのドメインの列を足します。あわせて、法人番号システム Web-API のアプリケーションIDを申請します。
2週目:40件で試す
重複や再掲を見つけた20件と、そうでなかった20件で、手元のAIに一致と相違を並べさせます。当時の審査担当の判断と比べます。
3週目:正規化を作る
電話番号・所在地・ドメインの正規化をプログラムで作り、過去の求人の一部に当てて、一致すべき組み合わせが一致するかを確かめます。
4週目:索引と連絡先の照合をつなぐ
OpenSearch に求人の索引を作り、連絡先の一致で候補を出すところまで作ります。この時点では説明を出さず、候補の一覧だけを見ます。
2か月目: more_like_this と照合の型の規則、Web-API を足します。3か月目以降: 候補の説明と審査の管理画面への表示を足し、1件5分が何分になったかを実測します。審査担当の誰が見ても、同じ申込に同じ候補が出るようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
more_like_this が入力から特徴の言葉を選んで似た文書を探すこと、like に自由な文・索引の文書・索引に無い文書を混ぜて渡せること、min_term_freq の既定が2、min_doc_freq の既定が5、max_query_terms の既定が25、minimum_should_match の既定が30%、対象の項目が text か keyword であること | OpenSearch: More like this | 2026-10-14 |
fingerprint のトークンフィルタが小文字化・分割・並べ替え・重複の除去・連結を行うこと、max_output_size の既定が255で、超えると何も出力しないこと | OpenSearch: Fingerprint token filter | 2026-10-14 |
| Amazon OpenSearch Service に Japanese (kuromoji) Analysis と ICU Analysis が全ドメインに入っていること | AWS: Plugins by engine version in Amazon OpenSearch Service | 2026-10-14 |
| 法人番号システム Web-API で、法人番号を指定して情報を取り、条件の指定で変更の履歴も取れること、アプリケーションIDが要り発行に費用は掛からず2週間から1か月程度かかること、サービスを公開する場合に情報の取得元の明示が求められること | 国税庁: 法人番号システム Web-API | 2026-10-14 |
| 改正職業安定法(2022年10月1日施行)で、募集情報等提供事業者に求人情報などの的確な表示が義務付けられ、虚偽の表示・誤解を生じさせる表示の禁止と、正確・最新の内容に保つ措置(正確・最新でないと確認したら遅滞なく訂正の有無を確かめるか提供を中止する)が求められること | 厚生労働省: 募集情報等提供事業者の皆さまへ(リーフレット) | 2026-10-14 |
| 虚偽の表示の例として、実際に求人を行う企業と別の企業の名前で求人を行う場合、採用予定のない求人を出す場合が挙げられていること、虚偽であることを事業者が知り得ない場合にただちに違反となるものではないこと | 厚生労働省: 令和4年改正職業安定法Q&A | 2026-10-14 |
構造化出力を output_config.format で指定すること、数値の制約に対応しないこと、refusal・max_tokens で終わるとスキーマに合わないことがあること | Claude: Structured outputs | 2026-10-14 |
原稿が虚偽の表示に当たるか、掲載を断るかは、審査担当と法務が規約と法令に基づいて判断してください。 本記事は上の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1531)についてのご相談はこちらから。
