音楽出版社が広告・映像の制作会社から届く楽曲の使用の依頼に、曲調・テンポ・歌詞の言葉・権利の状態で管理楽曲のカタログを検索し、提案できる曲の候補を許諾の条件付きで並べる
広告会社から「春のCMに、明るく前向きで、テンポは120前後、歌詞に『空』か『走る』が入る曲」という依頼が届いたときに、管理楽曲のカタログから候補を探し、同業種の排他や作家の承認の要否と突き合わせて、提案できる曲を並べます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- その他/広告
- 対象部門
- 営業
- 対象業務
- 情報検索/比較検討
- 主な課題
- 営業フォローが追いつかない/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/検索時間短縮/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当者が依頼を読み、思い当たる曲を挙げる。足りなければ、ほかの担当者に聞く
- 曲の説明の表と権利の台帳で、曲名や作家名から曲を探す
- 試聴用の音源で、テンポと雰囲気を確かめる
- 候補の曲ごとに、権利の台帳で持分・作家の承認の要否・排他の期間・使用の履歴を確かめる
- 使えない曲を外し、5〜10曲の候補の一覧を作って依頼者に送る
- 人営業の担当が、依頼の文と、使う媒体・期間・地域・広告主の業種を受付の画面に入れる
- 自動Claude API が、依頼の文を曲調の言葉・テンポの幅・歌詞の言葉・ボーカルの種類・曲の長さに分けて返す
- 自動中継の Lambda が、権利の台帳の項目で絞り込みの条件を作る(管理の地域、作家の承認、業種の除外、排他の期間)
- 自動Amazon OpenSearch Service で、言葉の一致と意味の近さを組み合わせた検索を、権利の絞り込みをかけたうえで行う
- 自動候補を「そのまま提案できる」「作家・共同出版者の承認が要る」に分け、合った項目を添えて並べる
- 人担当が候補の試聴用の音源を聞き、5〜10曲を選ぶ
- 人承認が要る曲は、著作権の管理の担当に確かめてから依頼者に送る
各工程の詳しい説明を読む
- 担当者が依頼を読み、思い当たる曲を挙げる。足りなければ、ほかの担当者に聞く
- 曲の説明の表と権利の台帳で、曲名や作家名から曲を探す
- 試聴用の音源で、テンポと雰囲気を確かめる
- 候補の曲ごとに、権利の台帳で持分・作家の承認の要否・排他の期間・使用の履歴を確かめる
- 使えない曲を外し、5〜10曲の候補の一覧を作って依頼者に送る
(a)候補が担当者の記憶で決まる。 1番目で挙がる曲は、その担当者がよく扱う曲に偏ります。カタログの奥にある曲は、依頼に合っていても挙がりません。
(b)権利の確認が最後になる。 4番目で排他の期間や作家の承認に気づくと、候補を選び直し、3番目からやり直します。 期限の短い依頼では、選び直す時間がありません。
(c)テンポを数字で探せない。 依頼の「120前後」は、曲の説明の表に数字で書かれていないことが多く、音源を聞いて確かめるしかありません。 途中でテンポが変わる曲は、聞くところによって違います。
(d)返答が遅れると機会を失う。 依頼者は複数の出版社に同時に頼んでいることが多く、候補を出すのが遅れた出版社の曲は、試聴の前に外れます。
- 【人】 営業の担当が、依頼の文と、使う媒体・期間・地域・広告主の業種を受付の画面に入れる
- 【自動】 Claude API が、依頼の文を曲調の言葉・テンポの幅・歌詞の言葉・ボーカルの種類・曲の長さに分けて返す
- 【自動】 中継の Lambda が、権利の台帳の項目で絞り込みの条件を作る(管理の地域、作家の承認、業種の除外、排他の期間)
- 【自動】 Amazon OpenSearch Service で、言葉の一致と意味の近さを組み合わせた検索を、権利の絞り込みをかけたうえで行う
- 【自動】 候補を「そのまま提案できる」「作家・共同出版者の承認が要る」に分け、合った項目を添えて並べる
- 【人】 担当が候補の試聴用の音源を聞き、5〜10曲を選ぶ
- 【人】 承認が要る曲は、著作権の管理の担当に確かめてから依頼者に送る
3番目の絞り込みを、検索の前にかけるのが、この設計の要です。 検索の後で使えない曲を外すと、上位の候補が消えて一覧が空になることがあります。前にかければ、使える曲の中で雰囲気の近い順に並びます。
6番目の試聴を省かないのは、曲調の判断が人の耳でしかできないからです。 検索は曲の説明の言葉を見ているだけで、説明が実際の曲に合っているかは、聞かなければ分かりません。
02今回想定するシステム構成
受付の画面(依頼の文、媒体・期間・地域・広告主の業種) ▼ Claude API ── 依頼の文を曲調・テンポ・歌詞の言葉・ボーカルに分ける(構造化出力) ▼ AWS Lambda ── 権利の台帳の項目で絞り込みを作る ▼ Amazon OpenSearch Service(search pipeline: normalization-processor) │ hybrid │ ├ match … mood_text(曲の説明・タグ)、lyrics(歌詞) │ └ knn … mood_vector(曲の説明の埋め込み) │ filter … territory/approval/excluded_industries/exclusivity/bpm_range ▼ 候補の一覧(そのまま提案できる/承認が要る)+合った項目 ▼ 【担当が試聴して選ぶ】── 承認が要る曲は著作権の管理の担当へ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(hybrid、normalization-processor、integer_range・date_range の絞り込み) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock。曲の説明の文) | Cohere Embed |
| 生成AI | Claude API(依頼の文を検索の条件に分ける。構造化出力) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(Python。権利の台帳の写しの取り込み、絞り込みの作成、候補の並べ方) | AWS Step Functions |
| 保管 | Amazon S3(権利の台帳の写し、依頼と候補の記録) | ─ |
権利の台帳は、正本のままです。 毎晩、台帳から曲ごとの権利の項目を書き出して索引に入れるだけで、許諾の記録や排他の登録は、これまでどおり著作権の管理の担当が台帳で行います。
言葉と意味の組み合わせには、hybrid の検索を使います。 公式のページでは、hybrid の検索は複数の検索の得点を検索パイプラインで1つにまとめるもので、queries に入れられる検索は最大5つです。トップレベルの filter は 3.0 で入った機能で、すべての下位の検索に同じ絞り込みをかけ、絞り込みに合う文書だけに得点を付けます。
意味の近さには、Amazon Titan Text Embeddings V2 を使います。 公式のページでは、入力は最大8,192トークン・50,000文字、出力は1,024(既定)・512・256次元です。対応言語には日本語が含まれますが、英語に最適化されていて、言語をまたぐ検索は最適な結果にならないとされています。埋め込むのは日本語の曲の説明だけにし、海外の曲の英語の説明は別の項目にします。
03どうやって実装するのか
処理の起点を決める
処理の起点は2つあります。 1つは、営業の担当が受付の画面から依頼を送ったとき。もう1つは、毎晩、権利の台帳と曲の説明の表から、前日に変わった曲を索引に入れ直すときです。
排他の期間の登録は、その日のうちに索引に反映させます。 CMの使用が決まって排他を登録した直後に、同じ業種の別の依頼が来ることがあるからです。著作権の管理の担当が台帳で排他を登録したら、その曲だけを索引に入れ直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 依頼 | 依頼の文、使う媒体(テレビ・Web・店頭など)、期間、地域、広告主の業種、曲の長さ | 受付の画面 |
| 曲の説明・タグ | 担当者が書いた曲調の説明(「明るい」「疾走感」「切ない」など)、ボーカルの種類、季節・場面のタグ | 曲の説明の表 |
| テンポ | 曲のテンポの幅(途中で変わる曲は最小と最大) | 曲の説明の表 |
| 歌詞 | 歌詞の文(インストの曲は無し) | 権利の台帳の付属の資料 |
| 権利の項目 | 自社の持分、共同出版者、管理の地域、作家の承認の要否、使わない業種、排他の期間と業種、原盤の権利者 | 権利の台帳 |
| 使用の履歴 | 過去にCM・番組に使われた記録 | 権利の台帳 |
質を決めるのは、曲の説明とテンポです。 説明の無い曲は意味の近さで見つからず、テンポの無い曲は数字の幅で絞れません。説明の書き方をそろえる決まり(第14章)が、この構成の最初の作業です。
データの取得方法を決める
索引の項目は、次のように持たせます。
| 項目 | 索引の型 | 中身 |
|---|---|---|
mood_text | text(kuromoji) | 曲の説明とタグをつないだ文 |
mood_vector | knn_vector(1,024次元) | mood_text を Titan Text Embeddings V2 で埋め込んだもの |
lyrics | text(kuromoji) | 歌詞 |
bpm_range | integer_range | テンポの最小と最大 |
territory | keyword | 管理の地域(国内のみ、全世界など) |
approval | keyword | 不要/作家の承認/共同出版者の同意 |
excluded_industries | keyword | 作家が使わないと決めている業種 |
exclusivity | nested(業種+date_range) | 排他の業種と期間 |
master_owner | keyword | 原盤の権利者(自社/レコード会社など) |
テンポは integer_range で持ちます。 公式のページでは、範囲の型に integer_range と date_range があり、範囲の検索の relation の既定は INTERSECTS です。途中でテンポが変わる曲を「92〜128」で持てば、依頼の「110〜130」と重なるので候補に入ります。 1つの数字で持つと、どちらかの区間で外れます。
排他は、業種と期間の組で持ちます。 1曲に複数の排他が付くことがあるので、業種と期間を組にした nested の項目にします。依頼の業種と期間に重なる排他がある曲を、絞り込みで外します。
AIへ渡す前に整形する
- 曲の説明をそろえる … 担当者ごとの書き方を、決まったタグの語(「明るい」「疾走感」「切ない」「壮大」など)と自由な説明に分けます
- 説明の無い曲に印を付ける … 説明もタグも無い曲は
mood_textを空にし、説明を書く対象の一覧に回します - テンポを数字にする … 説明の表の「速め」「ミディアム」は数字にせず、数字が分からない曲は
bpm_rangeを空にします - 歌詞を分ける … 歌詞は kuromoji で分けます。歌詞は意味の近さの検索に使わず、言葉の一致だけに使います
- 権利の項目を写す … 台帳から毎晩写します。排他の登録は即時に写します
- 埋め込みを作る …
mood_textが変わった曲だけ、埋め込みを作り直します
3番目で「速め」を数字にしないのは、言葉の幅が人によって違うからです。 「速め」を130と決めて入れると、110の曲を「速め」と書いた担当者の説明と食い違います。 数字が分からない曲は、テンポの絞り込みから外れないよう、絞り込みの側で「テンポが空の曲も含める」を選べるようにします。
4番目で歌詞を意味の検索に使わないのは、歌詞の雰囲気と曲調が一致しないことがあるからです。 明るい曲調で別れを歌う曲は珍しくありません。歌詞は「空」「走る」のような言葉を探すときだけに使い、曲調は説明で探します。
AIに処理させる
させるのは、依頼の文を検索の条件に分けることだけです。 曲を選ぶこと、許諾できるかを決めることはさせません。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 曲調の言葉 | 依頼の言葉と、決まったタグの語のうち近いものを挙げる | 近いタグが無ければ依頼の言葉のまま |
| テンポ | 依頼に数字があれば幅にする | 数字が無ければ空にする。「速め」を数字にしない |
| 歌詞の言葉 | 依頼に書かれた言葉を写す | 書かれていなければ空 |
| ボーカル・長さ | 書かれていれば写す | 書かれていなければ空 |
| 依頼の主旨 | 曲調の説明に使う短い文にまとめる | ─ |
検索は hybrid で、言葉と意味の3つの検索を組み合わせます。
{
"query": {"hybrid": {
"filter": {"bool": {
"filter": [
{"terms": {"territory": ["国内", "全世界"]}},
{"range": {"bpm_range": {"gte": 110, "lte": 130, "relation": "INTERSECTS"}}}
],
"must_not": [
{"term": {"excluded_industries": "飲料"}},
{"nested": {"path": "exclusivity", "query": {"bool": {"filter": [
{"term": {"exclusivity.industry": "飲料"}},
{"range": {"exclusivity.period": {"gte": "2027-01-01", "lte": "2027-03-31",
"relation": "INTERSECTS"}}}]}}}}
]}},
"queries": [
{"match": {"mood_text": "明るい 前向き 爽やか"}},
{"match": {"lyrics": "空 走る"}},
{"knn": {"mood_vector": {"vector": [], "k": 50}}}
]}}
}
得点のまとめ方は、normalization-processor で決めます。 公式のページでは、正規化の既定は min_max、組み合わせの既定は arithmetic_mean で、weights で検索ごとの重みを決められます(合計は1.0)。arithmetic_mean では、1つの検索にしか当たらなかった文書は、当たらなかった検索の分が0として数えられ、得点が半分になるとされています。
この性質は、歌詞の言葉の検索で効いてきます。 歌詞に「空」が無くても雰囲気の合う曲は多く、歌詞の検索の重みを大きくすると、そうした曲が下に沈みます。 重みは、曲調の説明(言葉)0.35、曲調の説明(意味)0.45、歌詞 0.2 から始め、担当が選んだ曲の順位を見て直します。依頼に歌詞の言葉が無いときは、歌詞の検索を外して2つで組みます。
指示内容を固定する
あなたは音楽出版社の営業の担当として、広告会社・制作会社から届いた
楽曲の使用の依頼を、カタログの検索の条件に分ける立場です。
依頼の文に書かれていることだけを使ってください。
【分ける項目】
- mood_terms: 曲調を表す言葉。次のタグの語のうち近いものと、
依頼の言葉そのものを並べる
タグの語: {mood_tags}
- mood_summary: 曲調の説明に使う1〜2文
- bpm_min / bpm_max: テンポの数字の幅
- lyric_terms: 歌詞に入っていてほしいと書かれた言葉
- vocal: female / male / mixed / instrumental / unspecified
- length_sec: 曲の長さの希望(秒)
- notes: 上のどれにも入らない希望
【厳守事項】
- テンポの数字が書かれていないときは、bpm_min と bpm_max を null に
してください。「速め」「ゆったり」を数字に直さないでください。
- 「120前後」のように書かれていたら、前後10の幅にしてください。
- 歌詞の言葉は、依頼に書かれたものだけを写してください。
言い換えや似た言葉を足さないでください。
- 曲名・作家名・アーティスト名を挙げないでください。
曲を選ぶのはこの後の検索と担当です。
- 許諾できるか、使用料がいくらかを書かないでください。
【依頼の文】{request_text}
「曲名を挙げない」と書くのは、モデルが有名な曲を思いつくからです。 依頼の雰囲気から、他社の管理する有名な曲の名前を挙げることがあり、それが自社のカタログにあるかのように受け取られると、提案の誤りになります。
「歌詞の言葉を言い換えない」も同じ考えです。 依頼者が「空」と書いたのは、CMのコピーと合わせるためであることが多く、「青」「雲」を足すと、意図と違う曲が上がります。
出力形式を固定する
Claude API の構造化出力で、次の形で受け取ります。 output_config.format に type: json_schema でスキーマを渡し、vocal は enum で縛ります。数値の minimum/maximum は構造化出力で使えないので、テンポの幅が40〜250に入っているかは Lambda で確かめます。
{
"mood_terms": ["明るい", "前向き", "爽やか"],
"mood_summary": "春の始まりに合う、明るく前向きで爽やかな曲",
"bpm_min": 110, "bpm_max": 130,
"lyric_terms": ["空", "走る"],
"vocal": "female",
"length_sec": 30,
"notes": "サビが冒頭15秒以内にあるとよい"
}
1つ目の理由は、mood_summary をそのまま埋め込みの検索に使えることです。 依頼の文をそのまま埋め込むと、「30秒」「春のCM」のような条件の言葉が混ざり、曲調以外の言葉で意味の近さが決まります。
2つ目は、bpm_min が null のときに、テンポの絞り込みを外せることです。 null を0や既定の数字で埋めると、絞り込みで曲が落ちます。
候補の一覧は、次の形です。
{
"request_id": "SY-20261015-0044",
"ready": [{"song_id": "", "title": "", "matched": ["mood_text", "bpm_range"],
"lyric_hits": ["空"], "master_owner": "レコード会社",
"use_history": "2023年 テレビCM(飲料以外)"}],
"needs_approval": [{"song_id": "", "approval": "作家の承認"}],
"excluded_count": {"exclusivity": 0, "excluded_industries": 0, "territory": 0}
}
excluded_count は、絞り込みで外れた曲の数です。 候補が少ないときに、雰囲気の合う曲が無いのか、権利の条件で外れたのかを担当が分けられます。 外れた曲の名前は出しません。
master_owner を出すのは、原盤の権利が別だからです。 著作権法は、レコード製作者がそのレコードを複製する権利を専有するとしています(第96条)。既存の録音をそのまま使う依頼では、音楽出版社の許諾だけでは足りず、原盤の権利者の許諾も別に要ります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付の画面 | Lambda のAPI | 依頼を受け、候補の一覧を返す |
| Claude API | API呼び出し | 依頼の文を条件に分ける |
| Amazon Bedrock | API呼び出し | mood_summary と曲の説明の埋め込み |
| Amazon OpenSearch Service | 索引と検索 | 権利の絞り込みをかけた hybrid の検索 |
| 権利の台帳 | 毎晩の書き出し、排他の登録の即時の書き出し(読み取りのみ) | 権利の項目を索引に入れる |
権利の台帳には書き込みません。 候補に挙がったことも、提案したことも、台帳の記録にはしません。使用が決まったときの許諾と排他の登録は、著作権の管理の担当が台帳で行います。
人が確認する
担当は、依頼者に送る前に、候補の曲を必ず試聴します。
excluded_countを見る … 候補が少なく、外れた曲が多ければ、期間や業種の条件を依頼者と相談する材料にしますreadyを試聴する … 曲の説明が実際の曲に合っているかを耳で確かめます。合っていなければ、その曲の説明を直す一覧に回しますneeds_approvalを著作権の管理の担当に回す … 作家の承認や共同出版者の同意の見込みを確かめてから送りますmaster_ownerを見る … 既存の録音を使う依頼なら、原盤の権利者への確認を依頼者に伝えます
2番目で説明を直す一覧に回すのが、検索を良くしていく道です。 説明が曲に合っていないと、その曲は雰囲気の検索で何度も外れるか、合わない依頼で何度も上がります。直した説明は翌晩の取り込みで埋め込みが作り直され、次の依頼から効きます。
目標は1件7分です。 候補の上位を数曲ずつ試聴し、承認の要る曲の見込みを確かめるところまでで、著作権の管理の担当が作家に確かめる時間は含みません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 候補が0件 | excluded_count を示す。テンポの絞り込みを外した検索を1回だけ試す |
| 説明の無い曲しか合わない | 雰囲気では探せないので、歌詞の言葉と作家名で探す道を担当に示す |
| 排他の登録が索引に反映されていない | 排他の登録を即時に写す処理の記録を確かめる。送る前に台帳で排他を見直す |
| 依頼の期間が決まっていない | 期間の絞り込みを外し、排他のある曲に印を付けて返す |
| 依頼の業種が書かれていない | 業種の絞り込みができないので、担当に業種を確かめるよう返す |
| テンポの幅が40〜250を外れる | 読み違いとして null にし、担当に示す |
| 共同出版者の同意が要る曲ばかりになる | needs_approval の曲を共同出版者ごとにまとめ、まとめて同意の見込みを聞けるようにする |
| 海外の出版社の楽曲で地域が合わない | territory で外れたことを excluded_count に数え、海外の出版社への確認の道を担当に示す |
| Claude API が応答しない | 依頼の文をそのまま mood_text の言葉の検索にかけ、権利の絞り込みだけをかけて返す |
5行目で業種が分からないまま検索しないのは、排他の判定ができないからです。 業種の分からない依頼で候補を出すと、排他の期間中の曲を提案することになります。
記録を残す
- 依頼の文、使う媒体・期間・地域・業種、Claude API が分けた条件
- 実際の検索の条件(絞り込み、重み)と、
excluded_count - 候補の一覧と、担当が試聴した曲、依頼者に送った曲
- 依頼者が試聴の後に選んだ曲(分かった場合)
- 担当が「説明が合っていない」とした曲と、直した説明
4つ目は、重みを直す材料になります。 依頼者が選んだ曲が候補の何番目にあったかを毎月見て、下のほうから選ばれることが多ければ、重みか曲の説明を見直します。
04実装レベルの3段階
半自動化で、1件20分が12分程度になります。 曲を探す手間と権利の確認の選び直しは減りますが、依頼の文から条件を作る作業が担当に残ります。 本格構成で7分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の記録で、説明が合っていない曲と、説明の無い曲の多い年代が分かります。そこを直してから本格構成に進むほうが、候補の質が上がります。
05工数削減シミュレーション
導入後 360件 × 7分 ÷ 60 = 42 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 数万曲の管理楽曲を持ち、広告会社・映像の制作会社・放送局から毎月数百件の「こういう曲はありませんか」という依頼が届く音楽出版社。曲の雰囲気やテンポを覚えている担当者の記憶で候補を選んでいて、担当者によって提案できる曲の幅が違う場合。権利の台帳に、自社の持分・共同出版者・作家の承認の要否・同業種の排他の期間が項目として入っている場合。
- 管理楽曲が数百曲で、担当者が全曲を覚えていられる場合。曲ごとの説明やタグが無く、曲名と作家名しか分からない場合(探す手がかりが無いので、曲の説明を書くのが先です)。音源そのものを解析して曲調を判定したい場合(この構成は担当者が書いた曲の説明と歌詞を検索するもので、音を聞きません)。許諾してよいかの判断や使用料の決定をAIに任せたい場合。
07最小構成で試す方法
- 管理楽曲のうち、曲の説明とテンポがそろっている曲を2,000曲選ぶ
- 過去3か月の依頼から、実際に決まった曲がある依頼を30件選ぶ
- 2,000曲の説明・テンポ・歌詞・権利の項目を、OpenSearch のテスト用のドメインに入れる(埋め込みを含む)
- 30件の依頼を、担当が手で条件に直して検索する
- 実際に決まった曲が候補の何番目に出るか、権利の条件で使えない曲が混ざらないかを見る
この段階では Claude API を使いません。 確かめるのは、曲の説明で雰囲気が探せるかと、権利の絞り込みが正しく効くかです。
| 出てきた内容 | 判断 |
|---|---|
| 決まった曲が上位10曲に入る | 依頼の文の分け方と候補の並べ方に進む |
| 決まった曲が下に沈む | 重みを直すか、その曲の説明を見直す。構成は有効 |
| 使えない曲が混ざる | 権利の項目の写し方の誤り。 絞り込みを直すまで先に進まない |
| 説明の書き方がばらばらで当たらない | 説明のタグの語をそろえるのが先 |
3行目が出たら、先に進まないでください。 雰囲気の合う候補は担当が試聴で選べますが、権利の誤りは送った後でしか分かりません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 権利の条件で使えない曲が候補に出る | 絞り込みを hybrid の filter で検索の前にかける。最小構成で必ず確かめる |
| 排他の登録の直後に、同業種の依頼で候補に出る | 排他の登録を即時に索引に写す。送る前に台帳でも見る |
| テンポの変わる曲が外れる | integer_range で最小と最大を持ち、INTERSECTS で重ねる |
| 「速め」を数字にして絞る | 数字の無い依頼ではテンポの絞り込みを外す |
| 歌詞の検索で雰囲気の合う曲が沈む | arithmetic_mean では1つにしか当たらない文書の得点が半分になる。歌詞の重みを小さくする |
| 依頼の文の条件の言葉で意味の検索がずれる | mood_summary だけを埋め込む |
| 英語の説明の曲が日本語の依頼で出ない | Titan Text Embeddings V2 は言語をまたぐ検索が最適でない。英語の説明は別の項目にする |
| AIが他社の有名な曲を挙げる | 指示で曲名を挙げないよう明記し、曲は検索だけから出す |
| 原盤の権利を見落とす | master_owner を候補に出す |
上の2行が、この構成の失敗のほとんどです。 どちらも、雰囲気の検索がうまくいくほど目立たなくなる誤りで、提案した後、依頼者の社内の確認で初めて分かります。 権利の絞り込みは、検索の質とは別に必ず確かめます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 管理楽曲の情報と歌詞、権利の台帳の項目(持分、共同出版者、作家の意向)、依頼の内容(未発表の広告の企画、広告主の業種と期間)です。
- 未発表の広告の企画を外へ出しすぎない … 依頼の文には、発表前の商品やキャンペーンの内容が含まれます。Claude API に渡すのは依頼の文だけにし、広告主の名前は受付の画面の項目に分けて渡しません
- 歌詞の全文を外部のAIに渡さない … 歌詞は索引の中で言葉の一致に使うだけにし、Claude API にも埋め込みにも渡しません。 埋め込むのは担当者が書いた曲の説明だけです
- 作家の意向を守る … 使わない業種や承認の要否は、作家との取り決めです。絞り込みで外すだけでなく、候補に出た理由を担当が説明できるよう記録します
- 曲の改変に注意する … 著作権法は、著作者が著作物の同一性を保持する権利を持ち、意に反する変更・切除その他の改変を受けないとしています(第20条)。CMのために曲を短く編集する、歌詞を替える依頼は、
readyの曲でも作家の確認が要るかを著作権の管理の担当が判断します - 許諾の判断を代わりにさせない … 許諾できるか、使用料、排他を付けるかは、著作権の管理の担当と作家・共同出版者が決めます。 この構成が出すのは、台帳の項目で外れなかった候補だけです
誤りが起きた場合のリスクは、使えない曲を提案することと、使える曲を見つけられないことの2つです。 前者は作家・共同出版者・広告主の信頼を一度に損ないます。だから権利の絞り込みを検索の前に置き、雰囲気の検索の広さとは関係なく必ずかけます。
10まず何から始めるか
1週目:曲の説明のタグの語を決める
営業の担当全員で、曲調のタグの語(「明るい」「疾走感」「切ない」「壮大」など20〜30語)と、説明の書き方を決めます。テンポは、分かる曲だけ数字で書き、言葉では書かない決まりにします。
2週目:権利の項目をそろえる
著作権の管理の担当と、権利の台帳から写す項目(管理の地域、承認の要否、使わない業種、排他の業種と期間、原盤の権利者)を決めます。排他の登録を即時に写す方法も、ここで決めます。
3週目:2,000曲で試す
説明とテンポのそろった2,000曲を索引に入れ、実際に曲が決まった過去の依頼30件で試します。使えない曲が混ざらないかを最優先で見ます。
4週目:重みを決める
決まった曲が候補の何番目に出たかを見て、曲調の説明(言葉)・(意味)・歌詞の重みを決めます。この時点では依頼の文の分け方はせず、担当が手で条件を作ります。
2か月目: 全曲を入れ、Claude API で依頼の文を条件に分ける段と、承認の要否での分け方を足します。3か月目以降: 試聴で「説明が合っていない」とした曲の説明を直し、1件20分が何分になったかを実測します。依頼者が選んだ曲が毎月上位から選ばれるようになり、説明の無い曲が依頼の多い年代で埋まった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
hybrid の検索が複数の検索の得点を検索パイプラインで1つにまとめ、queries が最大5つであること。filter で全ての下位の検索に同じ絞り込みをかけられること | OpenSearch: Hybrid query | 2026-10-15 |
hybrid のトップレベルの filter が 3.0 で入り、絞り込みに合う文書だけに得点を付けること。filter が1つの検索の形であること | OpenSearch: Hybrid search with pre-filtering | 2026-10-15 |
正規化の既定が min_max、組み合わせの既定が arithmetic_mean、weights の合計が1.0であること。arithmetic_mean で1つの検索にしか当たらない文書の得点が半分になること | OpenSearch: Normalization processor | 2026-10-15 |
| 範囲の型に integer_range と date_range があること | OpenSearch: Range field types | 2026-10-15 |
| Titan Text Embeddings V2 のモデルID、入力の上限(8,192トークン・50,000文字)、出力の次元(1,024・512・256)。英語に最適化され、日本語を含む言語に対応し、言語をまたぐ検索は最適な結果にならないこと | AWS: Amazon Titan Text Embeddings models | 2026-10-15 |
構造化出力を output_config.format(type: json_schema)で指定し、enum に対応し、数値の minimum/maximum に対応しないこと | Claude: Structured outputs | 2026-10-15 |
| 著作者の同一性保持権(第20条)と、レコード製作者の複製権(第96条) | e-Gov 法令API: 著作権法 | 2026-10-15 |
楽曲の使用を許諾してよいか、使用料と排他の条件は、著作権の管理の担当が作家・共同出版者・原盤の権利者と確かめて決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1637)についてのご相談はこちらから。
