(gpt-5-mini などに教えを乞いながら勉強しました、修正有)セマンティック検索とは 「意味レベルでの検索を可能にする」 という 「概念」 です。
ベクトル検索とは、セマンティック検索の 1 つの具体的な手法です。 埋め込みベクトルを使用します。
AI 技術の台頭により、文章でも画像でも、単一のベクトル (埋め込みベクトル) に変換できる技術が一般化した、という事でしょう。
ここでいう「ベクトル」とは「方向」や「向き」の事です。 「大きさ」も含まれますが、ここでは無視 (長さは 1 で固定) します。
例として、 2 次元で、長さ 1 のベクトルを、1 つイメージしてみました:
我々は 3 次元の世界に生きているとされます。 「方向」といえば (X, Y, Z) の 3 軸があり、基準軸に対してどの程度回転しているのか、という形で「向き」が表現ができます。
「埋め込みベクトル」は、意味などを埋め込んだベクトル、という形容詞が付いているだけで、通常の数学の「ベクトル」と同じものです。
次元数について考えてみます。
東西南北という方角を表現するのであれば 2 次元 (X, Y) で充分に表現できるでしょう。
しかし、前や後ろなど、奥行を表現しようとすると 2 次元では不足します。
3 次元 (X, Y, Z) であれば表現できるでしょう。
さらに、時間的な進みや戻りなど、時間軸を表現しようとすると 3 次元では不足します。
4 次元 (X, Y, Z, W) であれば表現できるでしょう。
さらに、色の概念を追加しようとすると、どうでしょうか。 色は、この 4 次元の中には存在しません。
8 次元 (X, Y, Z, W, C, M, Y, K) であれば表現できるでしょう。
このように、扱う概念が多ければ多いほど、高次元のベクトルが必要になります。
実際、どのぐらいの次元数が必要になるのでしょうか。
ここで話題にしている「埋め込みベクトル」は 1,024 ~ 4,096 次元など、かなり高い次元数を持つ「方向」になります。 人間に理解できる概念ではありません。
機械学習や AI の世界では、高次元 (1,024 次元など) ベクトルの各次元に対して、どのような意味を割り振りするかは、学習時にアルゴリズムや学習データが自動的に決定します。
つまり、我々は、埋め込みベクトルの各次元にどのような意味を与えるのかについて、全く考える必要はありません。 逆にいうと、 各次元にはどのような意味があるのか、 知ることもできないという事になります。
さて。
1 つの文章から 1,024 次元の埋め込みベクトルを取得したい。
Azure AI Foundry などの商用サービスでは、既に従量課金サービス (SaaS) として、 API 形式で利用可能です。
具体的な商品名:
- text-embedding-3-large
- text-embedding-3-small
- Cohere-embed-v3-multilingual
1 つの画像から 512 次元の埋め込みベクトルを取得したい。
ResNet18 など、本来は画像認識や画像分類タスクに使用されるモデルを「改造」する事で、本来出力するべき「分類スコア」ではなく「埋め込みベクトル」を代わりに出力できます。
モデルの例:
- ResNet18
- DenseNet121
- EfficientNetB0
- InceptionV3
- MobileNetV2
- RegNetY_800MF
- Vgg16
このようにして、人類は、画像や文章から、意味のある固定長データを取得できるようになりました。
後は、この埋め込みベクトルをデータベースへ登録して、検索の際には比較するだけです。
ベクトル同士 (次元数が同じである 2 つのベクトル) の比較には「コサイン類似度」という計算方法があります。 計算結果は -1.0 ~ 1.0 の範囲で数値が 1 つ出ます。 1.0 の場合は「同じ」ベクトルを意味します。
この類似度をスコア値などと称して、検索結果に併記する方法もあるでしょうか。
簡易なものでは、こういった理論で以て、セマンティック検索や類似図面検索を実装できるのかもしれません。
但し、ベクトル検索にも苦手はあります。 正確な記述が必要な内容 (数値、電話番号、住所、名称、品名など) では検索ができません。 用途に応じて、従来型の検索手段も用意が必要になる点をしっかりと押さえておきたいです。
(この記事には画像があります。画像部分は外部ブログサイトで見れます。)