広告代理店で、過去に媒体の広告審査で否認された表現と理由の記録から入稿前の原稿に近い事例を探し、直し方の案を根拠付きで返す
入稿前の広告の原稿を文に分け、過去に媒体の審査で否認された表現の記録から近い事例を探します。否認の理由と、その後に承認された修正文を事例番号付きで並べ、運用の担当が入稿の前に直せるようにします。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- EC/小売/広告
- 対象部門
- マーケティング
- 対象業務
- 内容確認・チェック/情報検索
- 主な課題
- 属人化している/情報が見つからない/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 属人化解消/検索時間短縮/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- クライアントから原稿(見出し・説明文・画像の中の文言・遷移先のページ)を受け取る
- 原稿を読み、否認されそうな表現に見当を付ける
- 自分のスプレッドシートと、他の担当への問い合わせで、過去の否認を探す
- 否認されそうな表現について、直し方の案を作る
- クライアントの担当と直し方を相談し、合意した原稿を入稿する
- 否認されたら、理由を書き留め、直して再入稿する
- 人運用の担当が、原稿と、入稿する媒体・広告主・商材の区分を確認の画面に入れる
- 自動プログラムが、原稿を見出し・説明文・画像の中の文言ごとに文の単位に分ける
- 自動Amazon OpenSearch Service が、文ごとに、媒体と商材の区分で絞って近い否認事例を検索する(同じ意味の言い換えの一覧と、意味の近さの検索を、順位で合わせる)
- 自動上位の事例について、否認の理由・承認された修正文・否認の日付を取り出す
- 自動Claude API が、文ごとに、近い事例の要点と、承認された修正文を手がかりにした直し方の案を事例番号付きで並べる
- 自動プログラムが、示された事例番号が検索結果に含まれているかを照らす
- 人運用の担当が、事例を開いて確かめ、直し方を決める
- 人クライアントの担当と相談し、合意した原稿を入稿する
- 人審査の結果(承認・否認と理由)を記録する
各工程の詳しい説明を読む
- クライアントから原稿(見出し・説明文・画像の中の文言・遷移先のページ)を受け取る
- 原稿を読み、否認されそうな表現に見当を付ける
- 自分のスプレッドシートと、他の担当への問い合わせで、過去の否認を探す
- 否認されそうな表現について、直し方の案を作る
- クライアントの担当と直し方を相談し、合意した原稿を入稿する
- 否認されたら、理由を書き留め、直して再入稿する
(a)経験が担当者の頭の中にある。 どの表現が否認されたかを知っているのは、その通知を受けた担当です。ベテランの担当がいる広告主は否認が少なく、新しい担当の広告主は否認が多い。 原稿の質ではなく、担当の経験の差です。
(b)言い換えで見落とす。 スプレッドシートを「最安」で探しても、「どこよりも安い」「地域で一番お得」は出てきません。同じ意味の表現が、別の言葉で否認されています。
(c)媒体の区別があいまいになる。 ある媒体で否認された表現が、別の媒体では通っていることがあります。区別せずに記録を読むと、通るはずの表現まで直すことになります。 直しすぎは、訴求の弱い原稿になります。
(d)直し方が残っていない。 否認された表現は書き留めても、最終的に承認された文が残っていないことが多い。 次の担当は、直し方を一から考えます。
- 【人】 運用の担当が、原稿と、入稿する媒体・広告主・商材の区分を確認の画面に入れる
- 【自動】 プログラムが、原稿を見出し・説明文・画像の中の文言ごとに文の単位に分ける
- 【自動】 Amazon OpenSearch Service が、文ごとに、媒体と商材の区分で絞って近い否認事例を検索する(同じ意味の言い換えの一覧と、意味の近さの検索を、順位で合わせる)
- 【自動】 上位の事例について、否認の理由・承認された修正文・否認の日付を取り出す
- 【自動】 Claude API が、文ごとに、近い事例の要点と、承認された修正文を手がかりにした直し方の案を事例番号付きで並べる
- 【自動】 プログラムが、示された事例番号が検索結果に含まれているかを照らす
- 【人】 運用の担当が、事例を開いて確かめ、直し方を決める
- 【人】 クライアントの担当と相談し、合意した原稿を入稿する
- 【人】 審査の結果(承認・否認と理由)を記録する
3番目が、この設計の分かれ目です。 媒体と商材の区分は検索の条件で絞ります。AIに「この媒体では関係あるか」を判断させると、別の媒体の事例を混ぜて直し方を作ります。
9番目が、この仕組みを育てます。 承認された原稿の文も記録に残すことで、次に近い表現が来たとき、通った直し方を示せるようになります。 否認だけでなく承認も残すのが要点です。
02今回想定するシステム構成
入稿前の原稿(見出し・説明文・画像の中の文言)+媒体・広告主・商材の区分 ▼【トリガー】確認の画面での「否認事例を探す」 AWS Lambda ── 文の単位への分割 ▼ Amazon Bedrock(Titan Text Embeddings V2)── 文ごとの埋め込み ▼ Amazon OpenSearch Service(kuromoji + 言い換えの一覧で日本語を解析) └── ハイブリッド検索(媒体・商材・期間で絞る。RRF で順位を合わせる) ▼ 上位の否認事例(否認の理由・承認された修正文・日付) ▼ Claude API ── 文ごとの近い事例の要点と、直し方の案(事例番号付き) ▼ Python ── 事例番号の照合 ▼ 確認の画面 ──【人】運用の担当 ──【人】クライアントの担当と相談 ▼ 審査の結果の記録 ── 否認事例の索引へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(ハイブリッドクエリ、score-ranker-processor の RRF、synonym_graph) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock) | Cohere Embed、OpenAI の埋め込みモデル |
| 生成AI | Claude API(近い事例の要点と、直し方の案) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(原稿の分割、確認の画面とのつなぎ、結果の取り込み) | AWS Step Functions |
| 保管 | Amazon S3(原稿と否認の通知の写し) | 運用部のファイルサーバー |
媒体の管理画面には、この構成から入稿しません。 入稿は今まで通り運用の担当が行い、この構成は入稿の前の確認の材料を出すだけです。
順位の合わせ方は、RRF(reciprocal rank fusion)にします。 単語の一致の点数と、意味の近さの点数は尺度が違います。RRF は点数ではなく、それぞれの検索の順位から合わせた点数を出すので、尺度をそろえる調整を先にしなくても始められます。公式の説明では、点数で合わせる方式より関連度がわずかに下がることがあるとされていて、自社の事例で両方を比べられるように、検索パイプラインを差し替えられる形にしておきます。
日本語の解析には、Amazon OpenSearch Service のすべてのドメインに入っている Japanese(kuromoji)Analysis を使います。 そこに、言い換えの一覧を synonym_graph として足します。synonym_graph は、複数の語からなる言い換えを扱えます。
03どうやって実装するのか
処理の起点を決める
運用の担当が、確認の画面に原稿と区分を入れて「否認事例を探す」を押したときに動かします。 クライアントから原稿を受け取った直後、相談の前に使う想定です。入稿の直前では、直す時間がありません。
もう1つの起点は、審査の結果の記録です。 担当が媒体の管理画面で承認・否認を確かめ、確認の画面で結果を記録したときに、否認事例の索引に1件を足すか、既存の事例に「承認された修正文」を足します。
否認の記録は、否認の通知を受けたその日に残します。 1週間たつと、どの表現が否認されたのかを、担当自身も思い出せなくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 原稿 | 見出し、説明文、画像の中の文言、遷移先の訴求の要点 | 確認の画面 |
| 区分 | 媒体、広告の形式、広告主、商材の区分 | 確認の画面(広告主の台帳から既定値を出す) |
| 否認事例 | 事例番号、媒体、広告の形式、商材の区分、否認された表現、原稿の前後の文、否認の通知の理由の原文、自社での理由の区分、承認された修正文、日付 | 否認事例の索引 |
| 言い換えの一覧 | 否認されやすい表現の言い換えの組(最安/どこよりも安い、など) | 運用部で作る一覧 |
質を決めるのは、3行目の「承認された修正文」です。 否認された表現だけが並んでも、直し方は担当が考えることになります。修正文があって初めて、直し方の案を事例に沿って出せます。
「否認の通知の理由の原文」と「自社での理由の区分」を分けて持ちます。 媒体の通知の文言は媒体ごとに違い、そのままでは集計も検索もしにくいからです。区分は、効果の表現・比較・価格・体験談・ビフォーアフター・個人の属性への言及のように、運用部で決めます。 原文は、担当が読むために残します。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 近い否認事例 | 否認事例の索引 | ハイブリッドクエリ(否認された表現の match + 埋め込みの knn)、媒体・商材の区分・期間で filter、RRF で順位を合わせる |
| 同じ広告主の否認 | 否認事例の索引 | 広告主のコードで term、新しい順に5件 |
| 該当の語句 | 否認事例の索引 | 上位の事例の識別子で絞った通常の match に highlight |
検索パイプラインと検索の形は、次のようになります。
PUT /_search/pipeline/rejection-rrf
{
"phase_results_processors": [
{ "score-ranker-processor": { "combination": { "technique": "rrf" } } }
]
}
POST /ad-rejections/_search?search_pipeline=rejection-rrf
{
"size": 5,
"_source": ["case_id", "media", "ad_format", "category", "rejected_text",
"reason_class", "reason_original", "approved_text", "decided_on"],
"query": {
"hybrid": {
"queries": [
{ "match": { "rejected_text": "どこよりも安い 定期便" } },
{ "knn": { "rejected_vector": { "vector": [0.0], "k": 20 } } }
],
"filter": {
"bool": {
"filter": [
{ "term": { "media": "search_ads_a" } },
{ "term": { "category": "health_food" } },
{ "range": { "decided_on": { "gte": "now-24M/d" } } }
]
}
}
}
}
}
RRF の順位の定数は既定で60です。 大きくすると上位の重みが均され、小さくすると上位の差が大きくなります。最初は既定のままで始め、担当が「役に立った」と付けた事例の順位で見直します。 検索ごとの重みも指定できますが、まず重みなしで比べます。
期間で絞るのは、媒体の基準が変わるからです。 2年より前の否認事例は、いまの基準で同じ扱いになるとは限りません。古い事例は既定では出さず、担当が範囲を広げたときだけ、日付を目立たせて出します。
AIへ渡す前に整形する
- 文の単位への分割 … 見出し・説明文は句点と改行で、画像の中の文言は文言ごとに分けます。1つの文に複数の訴求があるときも、まずは文のまま扱います
- 否認事例の作り直し … 担当者ごとのスプレッドシートを集め、1件ごとに媒体・商材の区分・否認された表現・理由の区分・承認された修正文をそろえます
- 否認された表現の切り出し … 否認の通知が原稿全体を指していても、どの文が理由に当たるかを担当が特定して入れます。 特定できないものは原稿全体を1件にし、印を付けます
- 言い換えの一覧 … 「最安, 業界最安, どこよりも安い, 一番安い」のような組を、運用部で決めて
synonym_graphに入れます - 区分のそろえ … 媒体と商材の区分を、決まった値の一覧から選ぶ形にします
- 広告主の情報の扱い … 広告主の名前は広告主のコードにし、見られる範囲を分けます(第13章)
3番目が、検索の質を決めます。 原稿全体を1件にすると、「この原稿のどこかが否認された」という事例になり、どの言い回しが問題だったかが分かりません。 担当の手間がかかりますが、否認の記録を残すときに「どの文か」を選ぶ欄を設けるだけで、以後は自然にそろいます。
否認事例の索引の設定は、次のようにします。言い換えは検索のときの解析にだけ入れ、索引のときの解析には入れません。 索引に入れた語そのものは言い換えに左右されない形にしておき、一覧を直したときの反映の手順は、使う版の公式の手順で確かめます。
PUT /ad-rejections
{
"settings": {
"index.knn": true,
"analysis": {
"tokenizer": { "ja": { "type": "kuromoji_tokenizer", "mode": "search" } },
"filter": {
"ad_synonyms": {
"type": "synonym_graph",
"synonyms": [
"最安, 業界最安, どこよりも安い, 一番安い",
"No.1, ナンバーワン, 第1位, 一番人気",
"必ず痩せる, 確実に痩せる, 絶対痩せる"
]
}
},
"analyzer": {
"ja_index": { "type": "custom", "tokenizer": "ja" },
"ja_search": { "type": "custom", "tokenizer": "ja", "filter": ["ad_synonyms"] }
}
}
},
"mappings": {
"properties": {
"case_id": { "type": "keyword" },
"media": { "type": "keyword" },
"ad_format": { "type": "keyword" },
"category": { "type": "keyword" },
"advertiser_code": { "type": "keyword" },
"rejected_text": { "type": "text", "analyzer": "ja_index", "search_analyzer": "ja_search" },
"context_text": { "type": "text", "analyzer": "ja_index" },
"reason_class": { "type": "keyword" },
"reason_original": { "type": "text", "analyzer": "ja_index" },
"approved_text": { "type": "text", "analyzer": "ja_index" },
"decided_on": { "type": "date" },
"rejected_vector": { "type": "knn_vector", "dimension": 1024 }
}
}
}
該当の語句は、ハイブリッドクエリとは別の通常の検索で取ります。 上位の事例の case_id で絞った match に highlight を付けると、否認された表現のうち、原稿の語と一致した箇所に印が付いて返ります。highlight は、検索に言い換えを使っていても元の語を強調するので、担当は事例のどの言い回しが当たったかを一目で確かめられます。
言い換えの一覧は、広げすぎないでください。 「安い」と「お得」まで同じにすると、否認とは関係の薄い事例が上位に来ます。否認の理由になった言い回しの組から始めます。
AIに処理させる
させるのは、文ごとに近い事例の要点をまとめ、承認された修正文を手がかりに直し方の案を並べることです。
| させること | 中身 |
|---|---|
| 近い事例の要点 | 文ごとに、近い否認事例の表現・理由の区分・媒体を短く書く |
| 直し方の案 | 承認された修正文があれば、それに沿った案を1〜2つ |
| 根拠の付与 | 案ごとに、手がかりにした事例番号を書く |
| 近い事例の無い文の明示 | 近い事例が無ければ「近い否認事例なし」とする |
| させないこと | 理由 |
|---|---|
| 審査に通るかの予想 | 審査は媒体が行う。基準も変わる |
| 法令に適合するかの判断 | 運用部の判断ではない。必要なら法務や専門家に回す |
| 事例に無い直し方の創作 | 承認された修正文が無ければ、案を出さず事例だけ示す |
| 別の媒体・商材の事例の流用 | 検索の条件で絞った事例だけを使う |
| 訴求の強さの評価 | クライアントの担当と運用の担当が決める |
3行目は迷うところです。 承認された修正文が無い事例について、AIに直し方を考えさせることはできます。しかし、それは「過去に通った直し方」ではなく、根拠の無い言い換えです。 この構成では出さず、事例だけを示して担当に考えてもらいます。
指示内容を固定する
あなたは広告代理店の運用部で、入稿前の原稿を確かめる担当のために、
過去の媒体の審査の否認事例を整理する立場です。
審査に通るかどうかを予想しないでください。
【やること】
1. 原稿の文ごとに、渡された否認事例のうち近いものを選んでください。
2. 近い事例があれば、否認された表現、理由の区分、媒体、日付を短く書いてください。
3. その事例に承認された修正文があれば、それに沿った直し方の案を1〜2つ書いてください。
4. 案ごとに、手がかりにした事例番号(case_id)を必ず書いてください。
【厳守事項】
- 渡された否認事例に無い事例番号を書かないでください。
- 承認された修正文が無い事例について、直し方を考えて書かないでください。
「承認された修正文の記録なし」と書いてください。
- 「通ります」「否認されません」のような審査の結果の予想を書かないでください。
- 法令に適合するかどうかを書かないでください。
- 近い事例が無い文は「近い否認事例なし」とし、無理に事例を当てないでください。
- 事例の日付が1年より前の場合は、そのことを書いてください。
【媒体・広告の形式・商材の区分】{context}
【原稿(文ごと)】{sentences}
【検索結果(文ごとの否認事例)】{cases}
「近い事例が無い文は無理に当てない」を書かないと、すべての文に何かの事例を当てます。 検索は何かしらの結果を返すので、渡された事例を使いたくなります。近さの判断を緩めると、問題の無い文まで直すことになり、訴求が弱くなります。
「審査の結果を予想しない」も同じくらい大事です。 「この修正で通ります」と書かれると、担当はその言葉を信じてクライアントに伝えます。言えるのは、過去にこの直し方で通ったという事実までです。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"sentences": [
{
"index": 1,
"text": "",
"matched_cases": [
{ "case_id": "RJ-2026-0412", "media": "", "reason_class": "", "decided_on": "", "note": "" }
],
"suggestions": [
{ "text": "", "based_on": ["RJ-2026-0412"] }
],
"status": "matched | no_match | matched_without_fix"
}
]
}
1つ目の理由は、based_on と matched_cases の事例番号を照らせることです。 検索結果に含まれない番号があれば、その案は表示しません。
2つ目は、status で文ごとの扱いが分かれることです。 matched は直し方の案があるもの、matched_without_fix は事例はあるが承認された修正文が無いもの、no_match は近い事例が無いものです。担当は matched と matched_without_fix だけを見ればよく、確認の時間が絞れます。
3つ目は、matched_without_fix の件数が、記録の改善点になることです。 修正文の無い事例が多い区分は、承認の結果を残す運用が回っていない区分です。
応答が refusal や max_tokens で終わったときは、スキーマに合わないことがあるので、受け付けずにやり直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 確認の画面 | 社内のWeb画面 | 原稿と区分の入力、結果の表示、審査の結果の記録 |
| Amazon Bedrock | Titan Text Embeddings V2 の呼び出し | 文と否認された表現の埋め込み |
| Amazon OpenSearch Service | 検索パイプラインを指定した _search | 近い否認事例の検索 |
| Claude API | Messages API の構造化出力 | 事例の要点と直し方の案 |
| 広告主の台帳 | 読み取り | 広告主のコードと商材の区分の既定値 |
人が確認する
matchedの文の事例を開く … 事例の原稿の前後の文と、否認の通知の理由の原文を読みます- 媒体の基準の更新を確かめる … 事例が古い場合や、媒体が基準を改定したと知らされている場合は、媒体の公開している基準を担当が読みます
- 直し方を決める … 案をそのまま使うか、訴求に合わせて直すかを決めます
- クライアントの担当と相談する … 直す理由を、事例を根拠に説明します
- 審査の結果を記録する … 承認・否認と、承認された文を残します
2番目を省かないでください。 否認事例は過去の事実で、媒体の基準が変わると、通った直し方も通らなくなることがあります。 事例の日付は必ず見てください。
目標は、600件をならして1件5分です。 近い事例の無い原稿は数十秒で終わり、matched の文が多い原稿は10分前後かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 近い事例が無い | no_match として表示する。否認されないという意味ではないと画面に書く |
| 事例番号が検索結果に無い | その案を表示しない。ログに残す |
| 商材の区分が広告主の台帳に無い | 担当が区分を選ぶまで検索しない |
| 画像の中の文言が入っていない | 画像の文言の入力を求める。画像の中の表現の否認を見落とすため |
| 新しい媒体で事例が少ない | 他の媒体の事例を「参考」として別の欄に出す。直し方の案は出さない |
構造化出力が refusal や max_tokens で終わる | 受け付けず再実行 |
1行目の表示の文言は大事です。 「近い否認事例なし」を「問題なし」と読むと、記録の無い否認をそのまま入稿します。 事例が無いのは、記録が無いだけかもしれません。
記録を残す
- 原稿と区分、確認した日時と担当
- 文ごとの検索の条件と、上位の事例番号と順位
- Claude API の出力と、指示の版
- 担当が「役に立った」と付けた事例
- 審査の結果(承認・否認、否認の通知の理由の原文、承認された文)
4つ目は、検索の調整の材料になります。 役に立った事例が何位に出ていたかを見れば、RRF の定数や言い換えの一覧を直す根拠になります。
04実装レベルの3段階
半自動化で、1件12分が8分程度になります。 探す時間は減りますが、事例を読んで直し方を考える作業が残ります。本格構成で5分になり、この段階が本記事の想定です。 差が出るのは、承認された修正文が案として並ぶからです。 段階を飛ばさないでください。 半自動化の段階で、承認された修正文を記録する運用を先に根付かせます。修正文の無い索引に直し方の案を足しても、案はほとんど出ません。
05工数削減シミュレーション
導入後 600件 × 5分 ÷ 60 = 50 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 健康食品・化粧品・金融・美容医療・人材などの広告主を多く抱え、検索広告とSNS広告の運用で月に数百本の原稿を入稿している広告代理店や、自社で広告を運用している通販の事業者。媒体の審査で否認された経験がスプレッドシートや担当者のメールに散らばり、同じ否認を別の担当が繰り返している場合。否認による配信の開始の遅れが、キャンペーンの成果に響いている場合。AWS を社内で使っている場合。
- 扱う広告主が少なく、商材も否認されにくい区分に限られる場合。月の入稿が数十本で、ベテランの担当が全部を見られる場合。過去の否認の記録がほとんど残っていない場合(先に否認の記録を残す運用から始めます)。なお、表示が法令に適合するかの判断、媒体の審査の結果の予測、クライアントへの修正の提案を最終的にどうするかは、この構成では代替できません。過去の否認事例を探して示すまでです。
07最小構成で試す方法
- 過去1年の否認の記録から、担当者のスプレッドシートを集め、商材の区分ごとに30件ずつ選ぶ(承認された修正文が残っているものを優先する)
- 1件ずつ、媒体・否認された表現・理由・承認された修正文を1行にまとめた表を作る
- 先月入稿した原稿のうち、否認された原稿を10件、承認された原稿を10件選ぶ
- 手元のAIサービスに表と原稿を渡し、「原稿の文ごとに、表の中から同じ媒体・同じ商材の区分の近い否認事例を選び、事例番号を書いてください。近いものが無ければ無いと書いてください。審査の結果は予想しないでください」と指示する
- 否認された10件で当時の否認の箇所が挙がったか、承認された10件で何も挙がらなかったかを見る
| 出てきた内容 | 判断 |
|---|---|
| 否認された箇所に近い事例が挙がり、承認された原稿では挙がらない | 索引と検索の仕組みづくりに進む |
| 承認された原稿にも事例を当てた | 指示と近さの基準で直る。構成は有効 |
| 言い換えの表現で事例が挙がらない | 言い換えの一覧を先に作る |
承認された10件を混ぜるのが、この試し方の要点です。 否認された原稿だけで試すと、事例を当てすぎる傾向に気づけません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 別の媒体の事例で直してしまう | 媒体と商材の区分を検索の条件で絞る |
| 言い換えの表現で事例が出ない | 言い換えの一覧と、意味の近さの検索を並べる |
| 言い換えを広げすぎて関係の薄い事例が出る | 否認の理由になった言い回しの組から始める |
| すべての文に事例を当てる | 指示で「無理に当てない」とし、no_match を許す |
| 根拠の無い直し方が出る | 承認された修正文が無ければ案を出さない |
| 「近い事例なし」を「問題なし」と読む | 画面に、記録が無いだけかもしれないと書く |
| 古い事例の直し方が通らない | 期間で絞り、日付を表示する |
| 修正文の記録が残らない | 審査の結果の記録を確認の画面に組み込む |
| 原稿全体を1件にした事例が多い | 否認の記録に「どの文か」の欄を設ける |
上の2行が、この構成の失敗のほとんどです。 区分で絞らないと的外れの事例が出て、言い換えに弱いと肝心の事例が出ません。この2つは、検索の設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主ごとの原稿と否認の記録、商品の訴求の内容です。公開前の原稿は広告主の機密で、他の広告主の担当に見えてはいけません。
- 広告主ごとに見られる範囲を分ける … OpenSearch のきめ細かなアクセス制御には文書の単位の権限があり、役割に検索の条件を持たせて、見られる文書を絞れます。事例の否認された表現と理由は運用部の共有の知識にし、原稿の前後の文と広告主のコードは担当の広告主だけに見せる、という分け方もできます
- 外部の生成AIに渡す範囲を絞る … 渡すのは、原稿の文と検索で見つかった事例の数件だけです。広告主の名前は渡しません
- 審査の結果を予想させない … 予想を広告主に伝えると、外れたときに信頼を失います
- 法令の判断をこの構成で行わない … 表示が法令に適合するかは、必要に応じて広告主の法務や専門家が判断します
- 媒体の基準の原文を読む … 事例は自社の経験で、媒体の基準そのものではありません
誤りが起きた場合のリスクは、否認を見落として配信が遅れることと、必要のない直しで訴求を弱めることの2つです。 前者は言い換えに強い検索で、後者は区分の絞り込みと no_match を許す指示で防ぎます。
10まず何から始めるか
1週目:否認の記録の欄を決める
媒体、広告の形式、商材の区分、否認された文、理由の区分、否認の通知の原文、承認された文、日付。この欄を、運用部の全員が使う1つの記録にします。 今月の否認から、ここに残し始めます。
2週目:過去の記録を集めて試す
担当者ごとのスプレッドシートを集め、商材の区分ごとに30件を表にします。先月の原稿20件(否認10件・承認10件)で、手元のAIサービスに事例を当てさせます。承認された原稿に事例を当てすぎないかを見ます。
3週目:言い換えの一覧を作る
否認の理由になった言い回しを集め、組にします。ベテランの担当に「この言い方も同じ扱い」という組を出してもらいます。
4週目:索引と検索をつなぐ
OpenSearch に否認事例の索引を作り、媒体と商材で絞ったハイブリッド検索と RRF の検索パイプラインまで作ります。この時点では直し方の案を出さず、近い事例だけを見ます。
2か月目: 確認の画面、直し方の案、事例番号の照合を足します。3か月目以降: 審査の結果の記録からの取り込みを足し、1件12分が何分になったかを実測します。新しい担当の広告主でも、ベテランと同じ事例を見て入稿できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Japanese(kuromoji)Analysis がすべてのドメインに含まれること。Neural Search と k-NN が使えること | AWS: Plugins by engine version | 2026-10-14 |
ハイブリッドクエリの検索が最大5つで、全体の filter は1つの検索の形で書き複数の条件は bool にまとめること | OpenSearch: Hybrid query | 2026-10-14 |
| RRF が 2.19 から使え、各検索の順位から点数を出すため尺度の違う点数をそろえずに合わせられること。点数で合わせる方式より関連度がわずかに下がる結果があったこと | OpenSearch: Reciprocal rank fusion | 2026-10-14 |
score-ranker-processor の技法が rrf、rank_constant の既定が60で大きいほど順位の差が均されること、検索ごとの weights を任意で指定できること | OpenSearch: Score ranker processor | 2026-10-14 |
synonym_graph が複数の語からなる言い換えを扱え、synonyms で規則を直接書けること | OpenSearch: Synonym graph token filter | 2026-10-14 |
highlight が検索に同義語を使っていても元の語を強調すること | OpenSearch: Highlight query matches | 2026-10-14 |
| きめ細かなアクセス制御で、文書の単位の権限(役割に検索の条件を持たせる)・項目の単位の権限・項目のマスキングが使えること | AWS: Fine-grained access control | 2026-10-14 |
| Titan Text Embeddings V2 の入力が8,192トークン・50,000字まで、出力が1,024(既定)・512・256次元であること。英語に最適化され、日本語を含む多言語の対応がプレビューであること | AWS: Amazon Titan Text Embeddings models | 2026-10-14 |
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。refusal・max_tokens で終わるとスキーマに合わないことがあること | Claude Docs: Structured outputs | 2026-10-14 |
表示が法令に適合するか、媒体の審査に通るかは、媒体の基準の原文と、必要に応じて専門家の確認で判断してください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1436)についてのご相談はこちらから。
