こんにちは。DB技術統括部のA.Kです。
これまでマンネリ化していたDB技術統括部の忘年会ですが、
2025年は一味違う試みとして、Oracle AI Database 26ai の最新機能であるベクトル検索を活用したプレゼント企画を実施しました。
Oracle AI Database 26aiでの注目機能やベクトル検索(AI Vector Search)に興味がある方は、ぜひご一読ください。
【企画】ベクトル検索で「感性」を数値化する
今回は、主催者が用意した景品を参加者が予想するという方式で、プレゼント当選者の選出にベクトル検索を用いました。
- 景品の用意:主催者が事前に景品を用意(アマゾンギフトカードとハンドクリーム)
- 参加者の予想:参加者は主催者が何を用意したのかを予想
- ベクトル化:参加者の予想と実際に用意した景品を「ベクトル値」に変換
- 検索:景品の「ベクトル値」に最も近い参加者の予想を検索し、プレゼントの当選者を決定

【技術】プレゼント当選者選出までの作業フロー
1. 実行環境とシステム構成
-
Database: Oracle AI Database 26ai Free Release 23.26.0.0.0
-
機能:AI Vector Search(VECTORデータ型 & VECTOR_EMBEDDING関数)
-
埋め込みモデル: ALL_MINILM_L12_V2(テキストをベクトルに変換するためのAIモデル)
2. データの準備:16名の予想をベクトル化
まずは、参加者16名の予想を格納するテーブルを作成し、各メンバーの「予想(テキスト)」をAIモデル経由でベクトルデータとして保存します。
SQL --- 予想管理テーブルの作成 ---
CREATE TABLE present_predictions (
member_name VARCHAR2(50),
prediction VARCHAR2(200),
vec VECTOR
);SQL --- 予想レコードの挿入 ---
INSERT INTO present_predictions(member_name, prediction, vec)
VALUES (
'Aさん',
'Rice',
VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'Rice' AS DATA)
);
参加者のエントリー内容(抜粋)
AIが予想内容に記載された言葉の意味を数値(ベクトル値)に変換します。
例えば、「Tumbler」と「Thermos vacuum-insulated tumbler」および「gift card」と「Amazon gift card」で違うベクトル値に変換されます。
このような微細な違いが、最終的な「正解との距離」に影響を与えます。
| メンバー | 予想内容 (Prediction) | ベクトル値の先頭要素 |
| Aさん | Rice | 3.63377552E-003 |
| Bさん | Gift Catalog | -3.97364795E-002 |
| Dさん | Tumbler | -8.56947154E-002 |
| Nさん | Thermos vacuum-insulated tumbler | -4.77809878E-003 |
| Mさん | gift card | -9.86917969E-003 |
| Pさん | Amazon gift card | -5.8171358E-002 |
3. ベクトル検索によるプレゼント当選者の選定
主催者が用意した景品について、誰の予想が「最も近かったか」を VECTOR_DISTANCE関数にて検索します。
算出される距離(DIST列)は、完全一致の場合に「0」となり、意味が離れるほど数値が大きくなります。
今回は、この距離が最も小さい(正解ベクトルに最も近い)回答者を当選者として選出するロジックを採用しました。
ケース1:ズバリ正解!、完全一致の人がいる場合
景品が 「Amazon gift card」 :
SQL ---「Amazon gift card」のベクトル値の近似値を算出 ---
select member_name, prediction, VECTOR_DISTANCE(vec, VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'amazon gift card' AS DATA)) as dist
from present_predictions order by dist
FETCH FIRST 3 ROWS ONLY;SQL --- 当選者選定 ---
MEMBER_NAME PREDICTION DIST-------------------- --------------------------- ----------Oさん Amazon gift card 0Kさん gift card 1.359E-001Mさん gift card 1.359E-001
⇒ Oさん(予想:Amazon gift card)が当選! 距離「0」で最も近似しているデータ
ケース2:該当者なし?、完全一致の人がいない場合
景品が 「hand & body cream」:
※通常の検索では「該当者なし」で終わりますが、ベクトル検索は意味の近さを計算します。
SQL ---「hand and body cream」のベクトル値の近似値を算出 ---
select member_name, prediction, VECTOR_DISTANCE(vec, VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'hand and body cream' AS DATA)) as dist
from present_predictions order by dist
FETCH FIRST 3 ROWS ONLY;SQL --- 当選者選定 ---
MEMBER_NAME PREDICTION DIST-------------------- --------------------------- ----------Pさん cash 7.815E-001Aさん Rice 8.218E-001Kさん gift card 8.328E-001
⇒ Pさん(予想:cash)が当選! 距離「7.815E-001」で最も近似しているデータ
まとめ:ベクトル検索がもたらす新しい体験
今回の企画を通じて、Oracle Database 26ai のベクトル検索について触れることで、以下のような特徴が見えてきました。
-
テキストの意味を理解:
「gift card」と「Amazon gift card」のように、詳細な説明が含まれていても意味的な差異を正しくベクトル値に反映 -
「惜しい」の数値化:
正解との距離を絶対値で算出できるため、正解者が不在でも「一番惜しい人」を客観的に選出可能
ECサイトのレコメンドやコールセンターのFAQ検索など、ベクトル検索の活用の幅は無限大です。
Oracle Database 26ai のベクトル検索はビジネスの現場だけでなく、こうしたコミュニケーションの場においても技術を身近に楽しむという新しい価値を提供してくれました。
皆さんも次回のイベントで、AIを活用した「ガチ予想」企画を試してみてはいかがでしょうか?
最後に、当日の賑やかな様子をお届けします。
技術はビジネスを効率化するだけでなく、こうして人と人をワクワクで繋ぐ力も持っているのだと再認識した一夜でした。




