$30 off During Our Annual Pro Sale. View Details »

Oracle AI Vector Search 技術概要

Oracle AI Vector Search 技術概要

oracle4engineer

May 21, 2024
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2024, Oracle and/or its affiliates 2 • RAG

    (Retrieval-Augmented Generation)の現状 • Oracle AI Vector Search • 3rd Party製品との統合 • なぜOracle Databaseでベクトルを検索するのか • Appendix Agenda
  2. Fine-Tuning LLMプロバイダーが提供する学習済モデル(基盤モデル)に、企業が生み 出すドキュメントデータを追加で学習させる処理 • 学習データを網羅的に作りきることが非常に困難 • 長時間の学習時間を要する • カスタムモデルの精度が低いこともしばしば •

    ドキュメントが増える度に実行する必要がある • 高価な処理(基本的にはGPU環境が必要) • 返答のソースドキュメントの提示が困難 RAG LLMプロバイダーが提供するモデルをそのまま利用し、企業内データはベク トルデータベースでセマンティック検索 • 基盤モデルの学習処理は不要 • テキスト生成にドキュメントデータが利用されているかが明確 • ドキュメントデータが増えた場合はベクトルデータベースに配置するのみ • 返答のソースドキュメントの提示が可能 Fine-TuningとRAG Copyright © 2024, Oracle and/or its affiliates 5 基盤モデル カスタムモデル ドキュメント 学習データ 基盤モデル ドキュメント 前処理済 ドキュメント ベクトル データベース
  3. RAG のアーキテクチャ Copyright © 2024, Oracle and/or its affiliates 6

    アプリケーション SFDC SAP Confluence ベクトルデータベース LLM SharePoint ②クエリー ③検索結果 ①質問 ⑥回答 ④回答生成指示 ⑤回答 様々なデータソース 非構造化データ ナレッジベース Workday Snowflake ServiceNow ※オブジェクトストレージ経由も頻出パターン コネクター製品や作りこみ IoT データの取り込み・同期・チャンク・インデックス・ベクトル化
  4. • チャンクサイズの最適化 • チャンクのウィンドウサイズ • ハイブリッド検索 • 結果のRerank • 情報の構造化

    • メタデータの付与 • 埋め込みモデルのファインチューニング • アダプター手法 • 仮の文章の埋め込み • ナレッジグラフ • etc… LlamaIndex AIによる代表的な精度改善策のまとめ Copyright © 2024, Oracle and/or its affiliates 8 A Cheat Sheet and Some Recipes For Building Advanced RAG https://www.llamaindex.ai/blog/a-cheat-sheet-and-some-recipes-for-building-advanced-rag-803a9d94c41b
  5. 非構造化データのセマンティック検索を可能にする機能 • ベクトルは、画像や文書などの特徴をベクトルの形に落 としたもの • いわゆる高校数学ででてくるベクトル、次元が3次元を 超えて多いところが主な違い • ベクトルは、埋め込みモデルによって 非構造化データから生成される

    • 重要な点はベクトル化さえできてしまえば、 ベクトル間の距離を計算することで、類似度を評価でき るようになること ベクトル検索とは Copyright © 2024, Oracle and/or its affiliates 9 ベクトル 33 42 16 21 50
  6. 家の画像 家の画像から特徴を抽出しベクトル化する ベクトルの例 Copyright © 2024, Oracle and/or its affiliates

    10 各次元(数値)は家の各特徴を表す ベクトル 特徴 ノート: 実際には、アルゴリズムによって特徴が決定されるため、ここに示すような単純なものではない 33 42 16 21 装飾 建築材料 階数 屋根の種類
  7. ベクトル間の距離を計算することで類似したベクトルを見つける ベクトル検索の例 Copyright © 2024, Oracle and/or its affiliates 11

    22 15 42 30 33 42 16 21 23 11 38 42 ベクトルデータA クエリベクトル ベクトルデータB クエリベクトルと検索対象となる ベクトルデータとの距離計算を行う AはBよりもベクトル間の 距離が近いため クエリベクトルに、より類似している
  8. 検索精度、開発生産性、アクセスコントロールを向上 Oracle Database 23ai - AI Vector Search あらゆる生成AIをサポートする、マルチモーダルプラットフォーム Copyright

    © 2024, Oracle and/or its affiliates 12 あらゆる生成AIを支える、マルチモーダルプラットフォーム 様々なデータ、検索手法を1つのデータベースでセキュアに管理 • 品質と鮮度の高いビジネスデータと、ベクトルデータを、 一つのデータベースに集約し、SQLで検索可能 • RAG精度向上の手法を、SQL機能で実現し、検索精度を向上 • ドキュメントのテキスト化からベクトル変換までデータベース内で実施 データ一貫性維持と、開発生産性向上を実現 • データベースの持つ堅牢なアクセスコントロール スケーラビリティ、高可用性 • データ整合性を保持しながら、スケールアウトを可能に • Exadata Cloudの持つ、高性能、高可用性を活用 充実のツール群 • ドキュメントローダー、テキストスプリッターのプロシージャ • ONNXモデルをインポートし、データベース内でベクトル化 • プロンプトエンジニアリングのプロシージャ 分類 価格 テキスト ベクトル(テキスト) 画像 ベクトル(画像) 0 001 ¥1,000 AAA…… 0.1, 0.2, 0.6. .... 0.5, 1.5, 2.6, .... 1 002 ¥2,000 BBB…… 0.8, 0.1, 0.4. .... 1.0, 0.9, 1.6, .... 2 003 ¥3,000 CCC…… 0.5, 0.3, 0.9. .... 0.6, 1.1, 1.3, .... SQL 7623 SQL Single Source of Truth Oracle Database 23ai AI Vector Search
  9. エンタープライズのお客様に育てていただいたオラクルだからこそのこだわり OracleのエンタープライズRAGアーキテクチャ Copyright © 2024, Oracle and/or its affiliates 13

    アプリケーション 様々なデータソース 非構造化データ 構造化データ SFDC SAP Confluence LLM SharePoint ②クエリー ナレッジベース ①質問 ⑥回答 ④回答生成指示 ⑤回答 ※オブジェクトストレージ経由も頻出パターン コネクター製品や作りこみ GoldenGate 23ai 販売実績 顧客 製品マスタ ... Workday Snowflake ServiceNow コンバージドデータベース Data Catalog Integration IoT Streaming / Queue ③検索結果 データの取り込み・同期・チャンク・インデックス・ベクトル化
  10. DBMS_VECTOR_CHAINパッケージの利用 • ドキュメントのテキストデータ化、テキストデータのチャンク分割、ベクトル化まで 全ての処理をデータベース内で実行可能 • CHAINパッケージという名前の通りそれぞれのパッケージの入出力形式が連動している データをベクトル化するまでの流れ Copyright © 2024,

    Oracle and/or its affiliates 14 PDF Word HTML etc. ベクトルデータ チャンクテキスト テキスト ドキュメント chunk vector --- --- --- --- --- UTL_TO_TEXT ドキュメントデータの 構造解析を実行し テキストデータに変換 UTL_TO_CHUNKS テキストデータを チャンクテキストに分割 UTL_TO_EMBEDDINGS 埋め込みモデルを使い チャンクテキストを ベクトルデータに変換
  11. オブジェクト・ストレージからのONNX (Open Neural Network eXchange)モデルをインポート Embeddingモデルのインポート例 DECLARE model_source BLOB :=

    NULL; BEGIN model_source := DBMS_CLOUD.get_object( credential_name => 'OBJ_STORE_CRED', object_uri => 'https://objectstorage…bucketname/o/resnet50bundle.onnx’); DBMS_DATA_MINING.import_onnx_model( model_name => "resnet50", model_data => model_source, metadata => JSON('{ function : "embedding" }') ); END; ※ ONNXとは、機械学習モデルを異なる深層学習フレームワーク間で交換できるようにするオープンなフォーマットとなります Copyright © 2024, Oracle and/or its affiliates 15
  12. VECTORデータ型 データの形式を厳密に定義したい場合、次元数や数値 データの形式は制約的に働くため次元や数値の形式を 指定することにメリットがある 次元数など指定せずにVECTORとして指定も可 スキーマ定義やDDLの普遍性を重視する場合、こちらは 次元数の指定がないため、次元数が変化した場合にもス キーマ定義の変更は不要 ベクトル・データ型 Copyright

    © 2024, Oracle and/or its affiliates 17 CREATE TABLE my_images ( id number, image BLOB, img_vec VECTOR(768, FLOAT32)); 次元数 (任意) 数値の形式 (任意) CREATE TABLE my_images ( id number, image BLOB, img_vec VECTOR); 数値の形式に指定可能な数値型 FLOAT32, FLOAT64, INT8 ※例えば、embedding APIのバージョンアップで次元数が変更された場合でも、 スキーマ定義書の更新が不要になる →運用上の選択肢が1つ増える
  13. VECTOR_DISTANCE関数 ベクトル同士の類似性は、ベクトル間の距離計算結果で判断される 対象が似ているほど、ベクトル間の距離が短くなる。 例えば:トラとライオンのベクトルはトラとリンゴのベクトルよりも距離が短い VECTOR_DISTANCE(<Tiger Vec>, <Lion Vec>) < VECTOR_DISTANCE(<Tiger

    Vec>, <Apple Vec>) VECTOR_DISTANCEで指定する距離メトリックはエンベッディングモデルで使用された距離メトリックと同一にする ベクトル検索 Copyright © 2024, Oracle and/or its affiliates 19 VECTOR_DISTANCE(VECTOR1, VECTOR2, <distance metric>) 距離メトリック 省略形 COSINE(デフォルト) / COSINE_DISTANCE <=> DOT / INNER_PRODUCT <#> EUCLIDEAN / L2_DISTANCE <-> EUCLIDEAN_SQUARED / L2_SQUARED HAMMING / HAMMING_DISTANCE MANHATTAN / L1_DISTANCE JACCARD / JACCARD_DISTANCE VECTOR_DISTANCE(VECTOR1, VECTOR2, COSINE) COSINE_DISTANCE(VECTOR1, VECTOR2) VECTOR1 <=> VECTOR2 以下は全て同じ結果が得られる
  14. 概要 • 大量ベクトルデータの高速な近傍検索のため、近似解を許容する構造 • リソース(コスト)、検索速度、検索精度のトレードオフを実現 • 索引は2種類(索引生成時にいずれかを選択) • インメモリ近傍グラフベクトル索引 (

    In-Memory Neighbor Graph Vector Index) SGA上にインメモリで展開される高速なグラフ構造の索引 • 近傍パーティションベクトル索引 (Neighbor Partition Vector Index ) ベクトル同士を距離ベースのクラスタリングでまとめた低コストな索引 • メモリ領域としてSGA上のVECTOR_POOLを使用 • 求める検索精度を指定して索引の作成が可能 • 原理的で索引構造理解が必要となるパラメータのでの記述を回避 ベクトル索引 Copyright © 2024, Oracle and/or its affiliates 20
  15. 構築と検索時の動作イメージ 構築 • グラフの最下位レイヤー(0)にはすべてのベクトルが存在 • 高層に行くほどベクトルは減少 • 各レイヤーでベクトル間が近い距離のものをエッジで接続 することでグラフが生成される 検索

    • 検索は最上位レイヤーのエントリーポイントから開始 • 問い合わせベクトルに近づく方向にエッジを辿り、最も近 いベクトルを発見したら、探索は下のレイヤーに継承 • 問合せベクトルに最も近い上位Kベクトルが最下位レイ ヤーで見つかり次第、探索は完了 インメモリ近傍グラフ・ベクトル索引 Copyright © 2024, Oracle and/or its affiliates 21 エントリーポイント レイヤー3 レイヤー2 レイヤー1 レイヤー0 問合せベクトル 最も近い 隣人を見つけ、 レイヤーを下に移動 最も近い 隣人を見つけ、 レイヤーを下に移動 最も近い 隣人を見つけ、 レイヤーを下に移動 最寄りの Kネイバーを見つけ るための貪欲な検 索 新幹線 → 快速列車 → 普通列車 の乗り継ぎのイメー ジ
  16. 構築と検索時の動作イメージ 近傍パーティション・ベクトル索引 22 X軸 Y軸 #1 #2 #3 #4 #5

    問合せベクトル 構築 • OMLのK-meansクラスタリング・アル ゴリズムを使用し、ベクトルをパーティ ションにグループ化(K = 5)。 (OML: Oracle Machine Learning) 検索 • 問合せベクトルから各パーティション の重心までの距離を計算 • 最も近い2つのパーティションを特定 • 問合せベクトルからクラスタ#1およ び#3のすべてのベクトルと問い合わ せベクトル間の距離を計算し、最も 近い上位5件(赤 で表示)を取得 2次元データ・セット Copyright © 2024, Oracle and/or its affiliates
  17. 基本的な索引作成構文: • DISTANCE句はオプション(デフォルトはCOSINE) • 距離関数は、ベクトルの生成に使用される埋込みモデルに基づいて適切なものを選択 • 利用可能な距離関数 • EUCLIDEAN(ユークリッド距離) •

    L2_SQUARED(EUCLIDEAN_SQUARED)(ユークリッド平方距離) • COSINE(コサイン距離) • DOT(ドット積) • MANHATTAN(マンハッタン距離) • HAMMING(ハミング距離) ベクトル索引の作成 CREATE VECTOR INDEX photo_idx ON Customer(photo_vector) ORGANIZATION [INMEMORY NEIGHBOR GRAPH | NEIGHBOR PARTITIONS] DISTANCE EUCLIDEAN | COSINE_SIMILARITY | HAMMING ... Copyright © 2024, Oracle and/or its affiliates 23
  18. 作成方法 基本的な索引作成構文 ハイブリッド・ベクトル索引 Copyright © 2024, Oracle and/or its affiliates

    25 CREATE HYBRID VECTOR INDEX MY_HYBRID_INDEX ON SUPPORT_INCIDENTS (INCIDENT_TEXT) PARAMETERS (...); "embed_model" :"ALL_MINILM_L12_V2" "chunk_by" : "WORDS" "index_type" : "HNSW" "vector_distance": "COSINE" "vector_accuracy": "95" "datastore" :"network_datastore" "filter" : "auto_filter" "lexer" : "auto_lexer" "sectioner" : "basic_sectioner" "stoplist" : "default_stop_list" ベクトル索引パラメータ テキスト索引パラメータ
  19. 検索方法 • DBMS_HYBRID_VECTOR.SEARCHを使用 • ハイブリッド・ベクトル索引の名前、結果の融合方法、スコアリング方法などを指定して検索 ハイブリッド検索 Copyright © 2024, Oracle

    and/or its affiliates 26 SELECT DBMS_HYBRID_VECTOR.SEARCH( JSON('{"hybrid_index_name": "MY_HYBRID_IDX", "search_text" : "ORA-600, Incomplete Recovery", "search_fusion" : "INTERSECT", "search_scorer" : "RRF" }')) FROM DUAL;
  20. 検索結果 検索結果には結果のテキストだけではなく、スコアなども表示される ハイブリッド検索 Copyright © 2024, Oracle and/or its affiliates

    27 { "rowid" : "AK37pKAAkAAAACVAAA", "score" : 96.95, "vector_score" : 94.50, "text_score" : 92.40, "vector_rank" : 1, "text_rank" : 1, "chunk_text" : "ABCD_ATP1(133):Incomplete Recovery applied until change 41787149790615 time 08/20/2024 15:03:53. ORA-00600: internal error code, arguments: [kdsgrp_LOST_piece], [11], [830411452], [0], []", ... }
  21. • LangchainやLlamaIndexはLLMを活用した アプリケーション開発を支援するオープンソースの フレームワーク • それぞれにOracle Database用のコードが追加 • 埋め込み機能、ベクトルデータストアとしての活用 インデックスの作成と検索、RAGパイプライン統合

    などOracle Databaseを活用するための コード群が充実 • Oracle Databaseのベクトル検索機能を シンプルに実装可能 LangchainやLlamaIndexとの統合 Copyright © 2024, Oracle and/or its affiliates 29
  22. Copyright © 2024, Oracle and/or its affiliates 30 • ローカル環境でLLMを実行するための手段として、Oracle

    DatabaseでオープンソースソフトウェアのOllamaをサポート • Ollamaをインストールし、Ollamaコマンドを実行することでLLMをダウンロードしてローカル実行可能 • Oracle Databaseからは以下のDBMS_VECTORパッケージにてOllamaを指定することで それぞれの処理をローカルに完結して実行可能 • UTL_TO_EMBEDDING • UTL_TO_SUMMARY • UTL_TO_GENERATE_TEXT • レイテンシの低減、セキュリティ向上、モデルのカスタマイズなどがメリット Ollamaのサポート
  23. • AI Vector Search User‘s Guide - Supported Third- Party

    Provider Operations and Endpointsにて確認可能 • https://docs.oracle.com/en/database/oracle/oracle -database/23/vecse/supported-third-party- provider-operations-and-endpoints.html 対応する3rdパーティ製品やエンドポイントについて Copyright © 2024, Oracle and/or its affiliates 31
  24. Oracle Databaseにおけるベクトル検索の強み Why Oracle 1. パフォーマンス 大量データを使った大規模な ベクトル検索がユーザを待たせる ことなく実行可能 2.

    精度 Oracle Databaseに格納されて いるビジネス・データを利用する ことで精度の高い検索を実現 3. カスタマイズ性 SQLを使ったベクトル検索のた め、用途に合わせてカスタマイ ズする柔軟な検索が可能 Copyright © 2024, Oracle and/or its affiliates 33
  25. パフォーマンス Oracle Databaseで利用可能な多くのデータ型の一部としてVECTORが追加されている そのため、Oracleがこれまで提供している以下のような機能やサービスはそのまま使用できる • Partitioning:大規模な表をパーティション分割してアクセス対象を削減 • RAC:相互接続/共有された複数のサーバーでデータベースを構成した高可用性と処理のスケールを実現 • Exadata:Oracle

    Databaseに最適化されたOracle Databaseのためのプラットフォーム • Autonomous Database:Oracle Database + Exadata + AI/機械学習による自律型データベース Why Oracle 大量データを使った大規模なベクトル検索がユーザを待たせることなく実行可能 Copyright © 2024, Oracle and/or its affiliates 34
  26. 精度 • AI利用においてデータの鮮度は検索の精度に大きな影響を与える 格納されているデータをデータベースの中でベクトル化しすぐに類似性検索できる • 大規模なデータ検索において検索データのフィルタリングは精度、パフォーマンス向上の観点から非常に重要 格納されているメタデータで属性フィルタリングを行うことでパフォーマンスを下げることなく検索精度を向上できる Why Oracle 商品ID

    商品名 商品概要 商品画像 商品価格 商品概要_Vec 商品画像_Vec SELECT … FROM item_name WHERE price >= ‘2000‘ ORDER BY VECTOR_DISTANCE (item_vector, :qry_vector) FETCH APPROX FIRST 10 ROWS ONLY; Oracle Databaseに格納されているビジネス・データを利用することで精度の高い検索を実現 Copyright © 2024, Oracle and/or its affiliates 35
  27. SQLでベクトル検索を実行できる=SQLで記述可能な範囲であれば様々なカスタマイズが可能 • ドキュメントからのテキスト抽出 → テキストのチャンク化 → チャンクされたデータのEmbedまで全て1SQLで実行可能 • 埋込みモデルを複数使い分けるために同じ表の中でモデルごとに列を用意しそれぞれに対して検索をかけて精度確認 •

    複数のドキュメントをチャンク化しておき、全てのドキュメントの中から最も類似したチャンクを検索する マルチベクトル検索が実行可能 • ベクトル検索で出力された結果のチャンクだけでなくその前後のチャンクも結果に含める Extend Chunkの実装が簡単に可能 • VECTOR_DISTANCE関数をWHERE句で使用することで、検索したい類似度の調整が簡単に可能 カスタマイズ性 Why Oracle SQLを使ったベクトル検索のため、用途に合わせてカスタマイズする柔軟な検索が可能 Copyright © 2024, Oracle and/or its affiliates 36
  28. Copyright © 2024, Oracle and/or its affiliates 37 • OCIチュートリアル

    • Oracle AI Vector Searchを使ってみよう https://oracle-japan.github.io/ocitutorials/ai-vector-search • Oracle LiveLabs • Langchainを使ったRAGアプリの構築 https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3927 • PL/SQLを使ったRAGアプリの構築 https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3934 • Autonomous DatabaseとAPEXを使ったRAGアプリの構築 https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=4021 • Graph RAGとAI Vector Searchを使ったRAGの応用 https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3953 チュートリアル
  29. Copyright © 2024, Oracle and/or its affiliates 38 • Oracle

    AI Vector Search User's Guide • https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/ • Oracle AI Vector Search 技術概要 • https://speakerdeck.com/oracle4engineer/oracle-ai-vector-search • Oracle AI Vector Search 技術詳細 • https://speakerdeck.com/oracle4engineer/oracle-ai-vector-search-technical 公開資料