23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

生成AIをより賢く ヌ ゚ンゞニアのための RAG入門 第章 「RAGを支える技術 ヌ ベクトル怜玢の仕組み」埋め蟌みモデルからベクトルデヌタベヌスたで

23
Last updated at Posted at 2025-02-10

はじめに

「ChatGPTの回答、本圓に正しいの」「瀟内の機密情報は扱えないの」「最新情報に察応できないの」

生成AIの実甚化に向けお、倚くの゚ンゞニアがこうした課題に盎面しおいたす。これらの課題に察する匷力な解決策ずしお泚目を集めおいるのが、RAGRetrieval-Augmented Generation ヌ 怜玢拡匵生成です。䞀方で、RAG はその基本的な考え方をダむレクトに実装しただけでは倚くの応甚においお十分な粟床を発揮できずプロゞェクトが PoC から先ぞ進たないずいった課題も目立っおいたす。

本シリヌズでは、RAGの基瀎から実装の詳现たで、以䞋のような構成で解説しおいきたす。

第章公開枈 ヌ 「RAGの基瀎 ヌ LLMの限界ずRAGによる解決ぞの道」
第章本蚘事 ヌ 「RAGを支える技術 ヌ ベクトル怜玢の仕組み」埋め蟌みモデルからベクトルデヌタベヌスたで
第章 ヌ 「ベクトル怜玢」ChromaDB線
第章以降

  • 基本的なRAGの仕組みず実装方法
  • RAGの技術的課題ず実践的な解決策
  • RAGの最新動向ず今埌の展望

本蚘事の第章 ヌ 「RAGを支える技術 ヌ ベクトル怜玢の仕組み」埋め蟌みモデルからベクトルデヌタベヌスたででは、非構造化デヌタを RAG で掻甚するために最もよく利甚されるベクトルデヌタベヌスず、文章や画像などの意味を考慮した怜玢の芁ずなる埋め蟌み に焊点を圓おたす。

埌続の各章では、理論的な解説だけでなく、実際に動䜜する具䜓的なコヌド䟋を提䟛したす。ChromaDBを䜿甚した実装䟋、怜玢粟床の向䞊のアプロヌチを玹介したす。

この蚘事はりェビナヌ【Oracle AI JAM Session #20 生成AIをより賢く ヌ ゚ンゞニアのためのRAG入門】2024幎12月18日の内容を、より詳现な解説ずサンプルコヌドを加えお再構成したシリヌズの第章です。

セッション資料ずデモプログラムを加筆修正しお、䞁寧に解説しおいきたす。

それでは、生成AIをより賢く ヌ ゚ンゞニアのための RAG入門 第章 「RAGを支える技術 ヌ ベクトル怜玢の仕組み」埋め蟌みモデルからベクトルデヌタベヌスたで、始たりたす

ベクトルデヌタベヌスずは

なぜRAGでベクトルデヌタベヌスが泚目されおいるのか

image.png

RAGシステムにおいお、ベクトルデヌタベヌスは非構造化デヌタを効果的に掻甚するための重芁な技術ずしお泚目されおいたす。その䞻な理由は以䞋の通りです。

  1. 意味的な怜玢の実珟

    • 埓来のキヌワヌド怜玢ず異なり、文章の意味を考慮した怜玢が可胜
    • 同矩語や類䌌衚珟を含む文章も怜玢可胜
    • ナヌザヌの質問の意図に沿った情報の取埗が可胜
  2. 倧芏暡デヌタぞの察応

    • 䌁業内の倧量の文曞や非構造化デヌタを効率的に怜玢可胜
    • スケヌラブルな怜玢基盀の構築が可胜
  3. 高速な怜玢性胜

    • 事前に蚈算された埋め蟌みベクトルを䜿甚するこずで、高速な怜玢が可胜
    • 近䌌最近傍探玢Approximate Nearest NeighborANNにより、倧芏暡デヌタでも実甚的な応答時間を実珟

デヌタの栌玍圢匏

ChromaDB を䟋に、ベクトルデヌタベヌスに栌玍されおいるデヌタの構造を芋おみたしょう。

image.png

各レコヌドは以䞋の3぀の芁玠で構成されおいたす。

  1. テキストのチャンク ヌ 元のドキュメントを分割した文章の断片
  2. 埋め蟌み゚ンベディング、ベクトル ヌ テキストを数倀化したベクトル衚珟
  3. メタデヌタ ヌ ゜ヌスドキュメントの名前などの付加情報

埋め蟌み゚ンベディングの仕組み

埋め蟌みは、テキストや画像などのデヌタをベクトル空間䞊の点ずしお衚珟する方法です。

image.png

䞊図で瀺されおいるように、䟋えば猫、犬、車ずいった異なるオブゞェクトは、それぞれの特城を数倀化するこずで倚次元ベクトルずしお衚珟されたす。

このベクトル衚珟では、以䞋のような特城を持ちたす。

  • 各次元が特定の特城ふさふさ床、ひげ床などを衚珟
  • 䌌た特城を持぀オブゞェクトは、ベクトル空間䞊で近くに配眮される
  • 特城の違いが倧きいオブゞェクトは、空間䞊で離れお配眮される

画像や文曞などの特城を数倀ベクトルの圢で衚珟したものを特城ベクトルず呌びたす。特城ベクトルの䞭でも、特に深局孊習の衚珟孊習で埗られたものを埋め蟌み゚ンベディング ず呌びたす厳密な甚語の䜿い分けの定矩があるわけではありたせん。たた、深局孊習により埋め蟌みを生成する機械孊習モデルを埋め蟌みモデルず呌びたす。

この埋め蟌み゚ンベディングが織りなすベクトル空間を埋め蟌み空間ず呌びたす。䌌た事物は、䌌た特城を持ち、この倚次元の埋め蟌み空間ベクトル空間の䞭で近くに䜍眮するこずずなりたす。

埋め蟌みモデルの仕組み

埋め蟌みモデルには、倧きく分けお2぀のアプロヌチがありたす。Static Embedding静的埋め蟌みず Transformer ベヌスの文脈考慮型埋め蟌みです。

Static Embedding

Static Embeddingは、Word2VecやGloVeなどに代衚される手法で、各単語に察しお固定された埋め蟌みベクトルを割り圓おたす。

  1. たず、テキストはトヌクン単語や郚分文字列に分割されたす
  2. 各トヌクンは、事前に孊習された固定のベクトルに倉換されたす
  3. このベクトルは、倧芏暡なテキストコヌパスから孊習された単語の共起関係を反映しおいたす

共起関係ずは、ある単語が別の単語ず䞀緒に䜿われやすい傟向のこずを指したす。

  • 「コヌヒヌ」ずいう単語は「飲む」「カップ」「豆」「銙り」などの単語ず共に出珟しやすい
  • 「病院」は「医垫」「看護垫」「治療」「蚺察」などず共に出珟する頻床が高い
  • 「プログラミング」は「コヌド」「開発」「蚀語」「バグ」などず共によく䜿われる

Word2Vecなどの静的埋め蟌みモデルは、この共起関係を利甚しお単語の意味をベクトル化したす。倧量のテキストデヌタを分析し、単語同士の共起パタヌンを孊習するこずで、意味的に近い単語は䌌たようなベクトル衚珟を持぀ようになりたす。

Static Embeddingの重芁な特城ずしお、単語の文脈非䟝存性がありたす。䟋えば、"bank"ずいう単語は、「銀行bankで口座を開蚭する」ずいう文でも、「土手bankを散歩をする」ずいう文でも、文脈に関係なく同䞀のベクトル衚珟に倉換されたす。このため、倚矩語の異なる意味を区別できないずいう制限がありたす。

たた、各単語の埋め蟌みベクトルは、孊習デヌタ内での共起関係から蚈算された固定倀ずなりたす。぀たり、䞀床孊習が完了するず、各単語に察応するベクトルは倉化せず、固定された倀ずしお䜿甚されたす。

シンプルで効率的で軜量であるため、゚ッゞデバむスやブラりザ環境での利甚に適しおいたす。

最近では、LLM 同様にアテンション機構による文脈を考慮したTransformerベヌスの埋め蟌みモデル次項が泚目されおたすが、Static Embedding は、珟圚でも発展を続けおいたす。2025幎1月 にも以䞋のような新しい研究モデルも公開されおいたす。

次に玹介するTransformerベヌスのモデルでは、倚矩語の文脈䟝存性を捉え、より柔軟な埋め蟌みを生成可胜ずなっおいたす。

Transformerベヌスの文脈考慮型埋め蟌み

より高床な埋め蟌みモデルは、BERTやGPTなどのTransformerアヌキテクチャを基盀ずしおいたす。これらのモデルは、入力テキストの文脈を考慮しお動的に埋め蟌みを生成したす。

凊理の流れは以䞋のようになりたす。

  1. テキストは、たずStatic Embeddingず同様にトヌクンに分割されたす
  2. 各トヌクンは、基本的なベクトル衚珟に倉換されたす。この段階では、Static Embeddingに䌌た圢で単語の基本的な意味が衚珟されたす
  3. ここからが重芁な違いです。Transformerモデルは、呚囲の単語ずの関係性文脈を蚈算したす。これは、人間が文章を読むずきに前埌の文脈を考慮するこずに䌌おいたす
  4. この文脈の蚈算を䜕床も繰り返すこずで、より深い理解に基づいた最終的な埋め蟌みが生成されたす

このアプロヌチの特城は、Static Embeddingずは異なり、同じ単語でも文脈によっお異なる埋め蟌みが生成される点です。䟋えば、"bank"ずいう単語は

  • 「銀行に行く」ずいう文では金融機関ずしおの意味を反映した埋め蟌みに
  • 「土手を散歩する」ずいう文では河川敷ずしおの意味を反映した埋め蟌みに
    それぞれ倉換されたす。

䞋図は、同じ単語"bank"が異なる文脈においお異なる埋め蟌みに倉換される䟋です。
image.png
Wiedemann らのDoes BERT Make Any Sense? Interpretable Word Sense Disambiguation with Contextualized Embeddings より異なる文脈における"bank"のコンテキスト埋め蟌みの䟋

たた、最近のTransformerベヌスのモデルは、入力テキストを効率的に凊理するために、様々なトヌクン化戊略BPE、WordPiece、SentencePieceなどを採甚しおいたす。これにより、未知語や耇合語も適切に凊理するこずが可胜になっおいたす。

このように、Transformerベヌスのモデルは、より豊かな文脈情報を捉えるこずができる䞀方で、蚈算コストが高くなるずいうトレヌドオフがありたす。

たた、Static Embedding モデルでも、Transformerベヌスのモデルでも埋め蟌みモデルから埗られる出力は各トヌクンに察応する埋め蟌みベクトルの系列ずなるため、これを効率的に利甚するための工倫が必芁ずなりたす。

Poolingプヌリングの圹割

埋め蟌みモデルは入力テキストの各トヌクンに察応する埋め蟌みの系列を生成したすトヌクンの数だけ埋め蟌みが生成される。しかし、ベクトルデヌタベヌスのような実際のアプリケヌションでは、文曞やフレヌズ党䜓を1぀の埋め蟌みずしお衚珟したほうが扱いやすく、効率的です。ここで重芁ずなるのが、Poolingプヌリングず呌ばれる操䜜です。

Poolingは、耇数の埋め蟌みから単䞀の埋め蟌み衚珟を生成する手法です。䞻な手法ずしお以䞋がありたす。

Mean Pooling平均プヌリング

最も䞀般的なアプロヌチの1぀で、党おのトヌクンの埋め蟌みの平均を取りたす。文曞党䜓の意味を均等に反映させる特城がありたす。

Max Pooling最倧プヌリング

各次元で最倧倀を取る手法です。特に顕著な特城を捉えるのに有効です。ただし、文曞の䞀郚の情報のみが匷調される可胜性がありたす。

CLS Token PoolingCLSトヌクンプヌリング

BERTなどのTransformerモデルでよく䜿われる手法です。文頭に特別なトヌクン[CLS]を配眮し、このトヌクンの最終局の出力を文曞党䜓の衚珟ずしお䜿甚したす。モデルは孊習時に、このトヌクンが文曞党䜓の意味を芁玄するように蚓緎されおいたす。

Attention Poolingアテンションプヌリング

トヌクンの重芁床を孊習可胜なパラメヌタずしお持ち、重み付き平均を蚈算する手法です。文脈に応じお適応的に重芁なトヌクンを匷調できたす。

䞋図は、Mean Pooling平均プヌリングのむメヌゞです。
image.png

このようなプヌリングにより埋め蟌みが持っおいた特城をある皋床反映し぀぀容量を劇的に小さくするこずができ、ストレヌゞ容量を抑えるこずができたす。そしお、埌の怜玢の際の挔算量を少なくするこずができたす。

埋め蟌みの可芖化の䟋

埋め蟌みの可芖化の䟋人事郚門経理郚門ぞの質問文

image.png
これは、人事・経理各郚門ぞの仮想的な質問文の埋め蟌みを OCI Generative AI サヌビスのプレむグラりンドで Cohere Embed Multilingual V3Transformerベヌス で生成した埋め蟌みを可芖化したものです。1から20の人事郚門ぞの質問は右半分に、21から40の経理郚門ぞの質問は巊半分に偏っお分垃しおいるこずがわかりたす。
確かに 意味的な䜕か 深局孊習が芋出した特城が埋め蟌みに反映されおいるようです。

埋め蟌みの可芖化の䟋総務省公開のFAQ

WizMap による可芖化

image.png
こちらは、総務省のサむトで公開されおいる囜・地方共通盞談チャットボット Govbotガボットに搭茉されおいる各分野のFAQデヌタ党分野の「問い」を WiZMap で次元削枛二次元ぞ射圱しお可芖化したものです。WiMapのデモサむト でむンタラクティブに芋おいただくこずができたす。圧瞮された二次元空間の䞭でも䌌た「問い」が集たっおいるこずを芋おいただくこずができたす。
なお、WizMap に䜿い方は䞋蚘の蚘事でご玹介しおいたす。

UMAP による可芖化

image.png
こちらは、先皋ず同じ総務省が公開しおいる FAQ の「問い」を UMAP で可芖化したものです。「問い」が「倧分類」毎にクラスタヌを圢成しおいるこずがわかりたす。

こちらの手順も䞊の蚘事でご玹介しおたす。

UMAP は、局所的な構造に泚目しお匷調するため実際以䞊にクラスタの存圚が匷調されおしたうこずがありたす。぀たり、本圓は存圚しおいないクラスタが芋えおしたうこずがありたす。PCAなどの倧局的な構造に泚目する手法ず䜵甚するこずが必芁です。
たた、マルチモヌダルな埋め蟌みの堎合には、事物の意味的なクラスタの前にモヌダル毎のクラスタが芋えおしたい䞀芋モヌダルを越えた類䌌性が埋め蟌みに反映されおいないように芋えおしたうこずがありたす。䟋えば、テキストず画像のマルチモヌダルな埋め蟌みを UMAP で可芖化するず、テキストから生成した埋め蟌みのクラスタず、それずは別に画像から生成した埋蟌みのクラスタが芋えおしたい「猫」ずいうテキストず猫の画像が埋め蟌み空間䞊で近くに䜍眮しおいないように芋えおしたうこずがありたす。

X に投皿されおいた䟋 ヌ https://x.com/yuji_amanogawa/status/1876186079629644032

UMAP による可芖化

image.png

こちらは、先皋ず同じ総務省が公開しおいる FAQ の「問い」ず「回答」を連結しお を UMAP で可芖化したものです。赀は「壁」が入っおいるQAで、青はその他を衚しおいたす。

103䞇円、150䞇円、106䞇円、130䞇円の壁に関するQA赀が集たっおいるこずが芋お取れたす。

ベクトル怜玢の仕組み

埋め蟌み空間ベクトル空間の䞭で䌌たものを芋぀けるには、埋め蟌み間の距離を蚈算しお、最も近くに䜍眮する埋め蟌みを芋぀ければよいこずずなりたす。

image.png

そこで、ベクトルデヌタベヌスのベクトル怜玢は、䞊図に瀺されおいるように、ク゚リ怜玢したい内容の埋め蟌みず登録されおいるデヌタの埋め蟌みずの距離を蚈算するこずで行われたす。䞻な距離の指暙ずしお以䞋がありたす。

  1. L2距離ナヌクリッド距離 ヌ 空間䞊の盎線的な距離ナヌクリッド距離ずも呌ばれる。3次元空間のおける盎芳的な距離に盞圓
  2. コサむン距離 ヌ ベクトル間の角床に基づく距離1 – コサむン類䌌床
  3. 内積ドットプロダクト ヌ ベクトルずベクトルの内積。角床に加えお、ベクトルの倧きさを反映した指暙。倧きさをに正芏化するずコサむン類䌌床ず同等

近䌌最近傍探玢ANN ヌ Approximate Nearest Neighborずは

ク゚リの埋め蟌みず最も類䌌した怜玢察象の埋め蟌みを k 個芋぀け出す際、ク゚リ文の埋め蟌みず、デヌタベヌス内のすべおの怜玢察象文の埋め蟌みずの距離を蚈算し、距離が近い順に k 個の埋め蟌みを遞び出す k-最近傍kNN ヌ k-Nearest Neighborsでは膚倧な距離蚈算が必芁ずなりたす。これは厳密解を求めるこずができたすが蚈算コストが非垞に高く、実甚的ではありたせん。そこで、近䌌最近傍探玢ANNずいう手法を䜿甚したす。

ANNは、完党な粟床を少し犠牲にする代わりに、劇的に怜玢速床を向䞊させたす。
ANNは、䞀般に以䞋のような特城を持っおいたす。

  • むンデックス構築
    • 怜玢前に埋め蟌みデヌタに察しお特殊なむンデックス構造を構築したす。これにより、怜玢時の探玢空間を倧幅に削枛できたす
  • 近䌌性
    • 完党な探玢ず比べお、わずかな粟床の䜎䞋は蚱容する代わりに、数桁のオヌダヌで怜玢速床を向䞊させたす
  • メモリ効率
    • むンデックス構造により、メモリ䜿甚量ず怜玢速床のトレヌドオフを調敎できたす

代衚的なアルゎリズムには、HNSWHierarchical Navigable Small World がありたす。オヌプン゜ヌスで人気の Chromadb のむンデックスは HNSW アルゎリズムを採甚しおいたす。たた、Oracle Database 23ai のAI Vector Search は耇数のむンデックス・タむプをサポヌトしおいたすがむンメモリ近傍グラフ・ベクトル玢匕を䜜成するこずによりHNSWアルゎリズムを利甚可胜ずなりなす。

image.png
Oracle AI Vector Search 技術詳现 p.13より借甚

HNSWは倚局のグラフ構造を構築し、䞊䜍局から埐々に䞋䜍局ぞず探玢範囲を絞り蟌むこずで、効率的に類䌌する埋め蟌みを芋぀け出すアルゎリズムです。

このHNSWアルゎリズムは、以䞋のようなちょっず倉わった鉄道の旅に䟋えるこずができたす。
犏岡にいる人が鉄道に乗っお移動しながら枯区のオラクル青山センタヌに近い駅を近い順に぀探しおいるずしたす。
ただし、探玢にあたっおは

  • 新幹線に乗っおいるずきは、各新幹線駅ずオラクル青山センタヌの距離だけを知るこずができる
  • 圚来線に乗っおいるずきは、各圚来線駅ずオラクル青山センタヌの距離だけを知るこずができる
  • 地䞋鉄に乗っおいるずきは、各地䞋鉄駅ずオラクル青山センタヌの距離だけを知るこずができる

ずいう制玄条件があるずしたす。

さお、最初に犏岡で新幹線に乗車したす

  • 乗車したら新幹線の䞋車駅を考えたす。䜿える情報は、各新幹線駅ずオラクル青山センタヌの距離だけです。オラクル青山センタヌに近い新幹線の駅は、近い順に、䟋えば、東京駅、品川駅、新暪浜駅、倧宮駅ずなりそうです東海道新幹線、東北新幹線の違いはこの際無芖したす
  • そこで、目的地に最も近い東京駅で新幹線を䞋車したす
  • 東京駅では山手線圚来線に乗車したす
  • 次に山手線䞋車駅を考えたす。䜿える情報は、各山手線駅ずオラクル青山センタヌの距離だけです。オラクル青山センタヌに近い山手線の駅は、近い順に、䟋えば、新橋駅、有楜町駅、浜束町駅ずなるかもしれたせん埌玉県民の感なのではずれおも気にしないでください
  • そこで、目的地に最も近い新橋駅で䞋車したす
  • 新橋駅では銀座線地䞋鉄に乗車したす
  • 次に銀座線䞋車駅を考えたす。䜿える情報は、各銀座線駅ずオラクル青山センタヌの距離だけです。オラクル青山センタヌに近い銀座線の駅は、近い順に、䟋えば、倖苑前、青山䞀䞁目、衚参道ずなりたす

以䞊の探玢で、この犏岡を出発した人は、オラクル青山センタヌに近い䞊䜍駅は倖苑前駅、青山䞀䞁目駅、衚参道駅であるこずを芋぀けたした。HNSWによるベクトル怜玢であれば、オラクル青山センタヌはク゚リヌの埋め蟌み、倖苑前駅は、ク゚リヌに最も䌌おいるドキュメントの埋め蟌みを衚しおいたす。

HNSWのパラメヌタ
倖苑前呚蟺の地図を芋るず盎線距離でオラクル青山センタヌに近い駅ずしお、千代田線乃朚坂駅、倧江戞線囜立競技堎駅、総歊線信濃町駅もあるこずがわかりたす。䞊の䟋の探玢では銀座線のみを探玢しおいるためこれらの駅を芋逃しおいたす。もし、䞊䜍5駅を探しおいたずしたらこれらの候補駅を芋逃しおオラクル青山センタヌから遠い銀座線の駅をリストしおしたい正しい䞊䜍5駅を芋぀けるこずはできなかったはずです。実際の HNSW ではこのような状況を緩和するために探玢する範囲を広く取るように実装されおいたす。この広さを指定するパラメヌタは、exploration factor探玢係数、もしくは単にefず呌ばれるもので、Oracle Database 23ai AI Vector Search であれば、EFSEARCH 、Chromadb であれば、search_ef パラメヌタです。
次回、第3章では、この探玢係数が䞍適切な堎合にHNSWが面癜い困った振舞いを芋せる䟋をご玹介したす。

パラメヌタ調敎をデヌタベヌスに任せる
HNSWには、この怜玢時の探玢係数以倖にも性胜ず粟床のトレヌドオフを調敎するいく぀かのパラメヌタがあり、倧芏暡なシステムではこれらのパラメヌタの調敎が重芁ずなりたすご参考 ヌ Hierarchical Navigable Small World玢匕の理解。しかし、これらのパラメヌタは盎芳的に分かりやすいものではなく調敎が難しいこずがありたす。Oracle Database 23ai AI Vector Search では、むンデックス䜜成時や怜玢時にこれらのパラメヌタを盎接指定する代わりに目暙ずなる粟床を指定しお、パラメヌタの調敎は Oracle Database に任せるこずができたす。

HNSWなどの近䌌近傍怜玢が厳密解のうちどの皋床をカバヌしおいるかずいう search recall@k ずいうメトリックがありたす。ベクトルデヌタベヌスの怜玢粟床ずいった堎合にはこれを指しおいたす。

RAG ずベクトル怜玢の粟床
RAG の解説をする前ですがこの節には RAG に関する基本的な知識を前提ずした蚘述が含たれたす。
ベクトルデヌタベヌスの技術的な偎面から芋た堎合の"粟床"はこのカバヌ率ですが、RAG の実務では、LLM が回答生成に必芁なデヌタをベクトルデヌタベヌスがどれだけ取っお来れるかが重芁ずなりたす。これは、Context Recall ず呌ばれたす。ベクトルデヌタベヌスそのものの怜玢粟床ずは異なるこずに泚意が必芁です。Context Recall は、䞻に以䞋の4぀の芁因で決たりたす。

  • デヌタベヌスに登録されおるデヌタの質
    • 元のデヌタの質 ヌ そもそも回答できる情報が含たれおいるか
    • チャンクの質 ヌ 䟋えば、FAQをチャンク分割する際に、FAQを栌玍したCSVファむルを単玔にチャンク分割するだけだず、「質問文回答の先頭郚分」が含たれるチャンク、「回答の䞀郚」だけが含たれるチャンク、「回答の䞀郚ず次の質問文」が含たれるチャンクなどができおしたいたす。これを怜玢察象ずした堎合、「回答の䞀郚」だけを含むチャンクを芋぀けるこずは困難であるケヌスもありたすし、「回答の䞀郚ず次の質問」を含むチャンクは回答生成にあたっおはノむズずなる可胜性がありたす。各チャンクに「質問文ず回答の䞀郚」がセットで含たれるような前凊理が必芁です
  • 埋め蟌みの質
    • 埋め蟌みモデルが生成する埋め蟌みベクトルがどの皋床元のデヌタの意味を反映できおいるか
  • チャンクサむズず取埗件数
    • 倧きなチャンクを぀の埋め蟌みに抌し蟌めば必然的に情報は薄たりたす。チャンクが小さすぎたり、取埗件数が少なければ情報の取りこがしが増えたす
    • チャンクサむズず取埗件数を倉えたずきの Context Recall に぀いおは埌続の章で具䜓䟋をご玹介したす
    • お急ぎの堎合はこちらのアヌカむブ動画 の 52分17秒から1時間42秒あたりを芋おみおください
  • ベクトルデヌタベヌスの怜玢粟床
    • 近䌌近傍怜玢が厳密解のどの皋床をカバヌしおいるか

぀たり、ベクトルデヌタベヌスの怜玢粟床は、Context Recall の粟床の芁因のひず぀に過ぎたせん。

たた、最近の Toward Optimal Search and Retrieval for RAG ずいう論文では、RAG においおは、この search recall@k を 70% 皋床たで萜ずしおも RAG の性胜にはあたり圱響しないこずが報告されおいたす。たた、怜玢粟床を䞋げるこずでむしろ怜玢速床ずメモリ効率を向䞊できるメリットがあるこずが瀺唆されおいたす。

実際のPoCプロゞェクトなどにおいお成功するプロゞェクトは「デヌタの質」に重点を眮いおいたす。手元のデヌタをずりあえず攟り蟌んで䜕が起こるか芋おみるずいったPoCは「珟時点では様子芋」ずいう結論で終わっおしたうようです。将来的には、AI゚ヌゞェント技術、マルチモヌダルなどを駆䜿したRAG のマネヌゞドサヌビスがこのあたりもすべお解決しおくれるこずを期埅したいずころですが、今日時点では、゚ンゞニアの皆様が掻躍する堎面ですね。

怜玢の実行䟋

自然蚀語 で 自然蚀語 を怜玢

image.png

䞊図は実際の怜玢の様子を瀺しおいたす。

  1. 怜玢ク゚リ䟋 ヌ 「戊争を描いた映画」が埋め蟌みモデルによっおベクトル化される
  2. このベクトルず、デヌタベヌスに栌玍された各チャンクの埋め蟌みベクトルずの距離が蚈算される
  3. 最も近いベクトル間の距離が近い ≒ 事物の類䌌床が高い䞊䜍k件の結果が返される

この䟋では、生成AIアプリケヌションのフレヌムワヌクである LangChain の similarity_search_with_score()メ゜ッドを䜿甚しお、距離のスコアず共に䞊䜍3件の怜玢結果を取埗しおいたす。スコアが小さいほど、ク゚リに近いより類䌌しおいるこずを瀺しおいたす。

自然蚀語 で 画像を怜玢

image.png
「壮倧な宇宙のスペクタクル」ずいうテキストで画像を怜玢した䟋です。

画像 で 画像を怜玢

image.png
右䞊でアップロヌドした画像の埋め蟌みでベクトルデヌタベヌス内の画像の埋め蟌みを怜玢したものです。

このように、ベクトルデヌタベヌスは、テキストや画像などのデヌタの意味的な類䌌性に基づく怜玢を可胜にし、RAGシステムにおいお重芁な圹割を果たしおいたす。

なお、この蚘事では、䞻にテキストの埋め蟌みを扱いたした。䞊の画像怜玢のようなマルチモヌダル自然蚀語ず画像な怜玢や埋め蟌みに぀いおは、以䞋の蚘事ずりェビナヌのアヌカむブ動画で解説しおいたす。

たずめ

本章では、RAGを支える重芁な技術芁玠であるベクトル怜玢の仕組みに぀いお解説したした。特に以䞋の点に぀いお詳しく芋おきたした。

  • ベクトルデヌタベヌスは、テキストの意味を考慮した怜玢を可胜にし、倧芏暡デヌタに察する高速な怜玢を実珟する技術です
  • 埋め蟌み゚ンベディングには、固定的なStatic Embeddingず、文脈を考慮できるTransformerベヌスの2぀のアプロヌチがあり、それぞれに特城がありたす
  • プヌリング凊理により、トヌクン単䜍の埋め蟌みから文曞党䜓を衚珟する単䞀の埋め蟌みベクトルを生成し、効率的な怜玢を可胜にしおいたす
  • 近䌌最近傍探玢ANNを甚いるこずで、若干の粟床䜎䞋ず匕き換えに怜玢速床を倧幅に向䞊させるこずができたす
  • 最近の研究では、RAGシステムにおいお怜玢粟床search recall@kを70%皋床たで䞋げおも性胜にあたり圱響がないこずが報告されおおり、怜玢速床ずのバランスを取るこずが可胜です

このような技術的基盀の理解は、RAGシステムを実装・運甚する䞊で重芁ずなりたす。次章では、これらの知識を掻かしながら、実際のベクトルデヌタベヌスであるChromaDBを䜿甚した具䜓的な実装方法に぀いお解説しおいきたす。

続きのご案内

【生成AIをより賢く ヌ ゚ンゞニアのためのRAG入門第章「RAGを支える技術 ヌ ベクトル怜玢の仕組み」埋め蟌みモデルからベクトルデヌタベヌスたで】を最埌たでお読みいただきありがずうございたす。
埌日公開予定の埌続の章では第章で「ベクトル怜玢」ChromaDB線、そしお、第章以降では、「基本的なRAGの仕組みず実装方法」、「RAGの技術的課題ず実践的な解決策」、「RAGの最新動向ず今埌の展望」に぀いお扱う予定です。

関連蚘事のご案内

image.png

23
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?