「ベクターデータベースは、生成型AIソリューションの未来をどのように形作るのか?」

「ベクターデータベースが生成型AIソリューションの未来をどのように変えるのか?」

紹介

生成AIの急速に進化する風景において、ベクトルデータベースの重要な役割がますます明らかになってきました。本記事ではベクトルデータベースと生成AIソリューションとのダイナミックな相乗効果について探求し、これらの技術的基盤が人工知能の創造性の将来を形作っているかを紐解きます。革新的なAIソリューションの最先端にもたらすベクトルデータベースの変革的な影響を解き放つため、この強力な連携の複雑さを旅してください。

学習目標

この記事では以下のベクトルデータベースの側面を理解するのに役立ちます。

  • ベクトルデータベースの重要性とその主要な構成要素
  • 従来のデータベースとのベクトルデータベースの詳細比較
  • 応用の観点からのベクトル埋め込みの探求
  • Pineconeを使用したベクトルデータベースの構築
  • langchain LLMモデルを使用したPineconeベクトルデータベースの実装

この記事はData Science Blogathonの一部として公開されました。

ベクトルデータベースとは何ですか?

ベクトルデータベースとは、空間に格納されたデータの集合の形式です。しかし、ここでは数学的な表現で格納されているため、AIモデルが入力を覚えるのに便利であり、オープンAIアプリケーションが認知検索、推奨、テキスト生成を使用してさまざまなユースケースで活用できるようになっています。データの格納と検索は「ベクトル埋め込み」と呼ばれます。また、これは数値配列形式で表されます。トラディショナルなデータベースと比べて、非常に大規模でインデックス化された機能を持つAIの観点での検索ははるかに容易です。

ベクトルデータベースの特徴

  • これらのベクトル埋め込みのパワーを活用し、巨大なデータセット全体でのインデックス作成と検索を実現します。
  • あらゆるデータ形式(画像、テキスト、データ)と互換性があります。
  • 埋め込み技術と高度なインデックス化された機能を採用しているため、与えられた問題のデータと入力の完全なソリューションを提供できます。
  • ベクトルデータベースは、数百の次元を含む高次元ベクトルを通じてデータを整理します。これらは非常に迅速に構成できます。
  • 各次元は、それが表しているデータオブジェクトの特定の特徴または属性に対応しています。

従来のデータベースとベクトルデータベースの比較

  • 図は従来のデータベースとベクトルデータベースのハイレベルなワークフローを示しています。
  • フォーマルなデータベースのやり取りはSQLステートメントを通じて行われ、データは行ベースおよび表形式で格納されます。
  • ベクトルデータベースでは、やり取りはプレーンテキスト(英語など)を通じて行われ、データは数学的な表現で格納されます。

従来のデータベースとベクトルデータベースの類似点

ベクトルデータベースが従来のデータベースとどのように異なるかを考える必要があります。ここでそれについて話し合いましょう。一つの違いは、従来のデータベースではデータがそのまま格納されるということです。ビジネス要件や要求に応じてデータを調整したり、データを統合したり分割したりすることができます。しかし、ベクトルデータベースは大規模な変換を行い、データは複雑なベクトル表現になります。

以下は、リレーショナルデータベースに対するベクトルデータベースの理解と明確な視点を提供するためのマップです。下の図は、従来のデータベースとベクトルデータベースを理解するためのものです。要するに、ベクトルデータベースには挿入や削除が行えますが、更新ステートメントは実行できません。

ベクトルデータベースを理解するための簡単な類推

データは、格納された情報の内容の類似性に基づいて自動的に空間的に配置されます。したがって、ベクトルデータベースのアナロジーとしてデパートメントストアを考えてみましょう。すべての商品は、性質、目的、製造、使用、数量に基づいて棚に配置されます。同様の振る舞いにより、ジャンルがデータの保管やアクセス時に明確に定義されていなくても、データはベクトルデータベース内で自動的に配置されます。

ベクトルデータベースでは、特異な類似性に対して優れた粒度と次元を提供します。したがって、顧客は目的の製品、メーカー、数量を検索し、アイテムをカートに入れることができます。ベクトルデータベースはすべてのデータを完璧なストレージ構造で保管します。ここでは、機械学習とAIエンジニアは格納されたコンテンツに手動でラベル付けやタグ付けする必要はありません。

ベクトルデータベースの基本理論

  • ベクトル埋め込みとそのスコープ
  • インデックスの要件
  • 意味と類似性検索の理解

ベクトル埋め込みとそのスコープ

ベクトル埋め込みは、数値の値によるベクトル表現です。圧縮形式で埋め込みは元のデータの固有の特性と関連を捉え、人工知能や機械学習のユースケースで重要な役割を果たしています。適切な情報を低次元空間にエンコードするための埋め込みの設計により、高速な検索速度、計算効率、効率的なストレージが実現されます。

データの本質をより同一の構造で捉えることをベクトル埋め込みのプロセスとし、それによって「埋め込みモデル」が形成されます。これらのモデルはすべてのデータオブジェクトを考慮し、データソース内の意味のあるパターンや関係を抽出し、それらをベクトル埋め込みに変換します。その後、アルゴリズムはこれらのベクトル埋め込みを活用してさまざまなタスクを実行します。多くの高度に開発された埋め込みモデルがオンラインで無料または課金制で利用可能であり、ベクトル埋め込みを達成するための手助けをします。

アプリケーション視点から見たベクトル埋め込みのスコープ

これらの埋め込みはコンパクトであり、複雑な情報を含み、ベクトルデータベースに格納されたデータ間の関係を引き継ぎ、効率的なデータ処理分析を可能にし、組織全体でさまざまな革新的なデータ製品を構築することができます。

ベクトル埋め込み技術は、読み取り可能なデータと複雑なアルゴリズムの間のギャップを埋めるために必要です。データ型が数値ベクトルであるため、利用可能なオープンAIモデルとともに、さまざまな生成AIアプリケーションの可能性を開放することができました。

ベクトル埋め込みを用いた複数のジョブ

このベクトル埋め込みは、次のような複数のジョブを実行するのに役立ちます:

  • 情報の検索: これらの強力な技術の助けを借りて、格納されたファイル、ドキュメント、メディアからユーザーのクエリに基づいて応答を見つけることができる影響力のある検索エンジンを構築することができます
  • 類似性検索操作: これは整理されてインデックス化されており、ベクトルデータ内の異なる事例間の類似性を見つけるのに役立ちます。
  • 分類とクラスタリング: これらの埋め込み技術を使用することにより、関連する機械学習アルゴリズムをトレーニングし、グループ化および分類することができます。
  • レコメンデーションシステム: 埋め込み技術が適切に組織されているため、過去のデータに基づいて製品、メディア、記事の関連性を正確に関連付けることができます。
  • 感情分析: この埋め込みモデルは、感情の分類と解決策の導出に役立ちます。

インデックスの要件

伝統的なデータベースにおけるテーブルの検索データを向上させるためにインデックスが使用されることはよく知られていますが、ベクトルデータベースにも同様にインデックス機能が提供されます。

ベクトルデータベースは「フラットインデックス」を提供し、それはベクトル埋め込みの直接的な表現です。検索機能は包括的であり、事前にトレーニングされたクラスタを使用しないため、クエリベクトルは各個別のベクトル埋め込みに対して実行され、各ペアのK距離が計算されます。

  • このインデックスの利便性から新しいインデックスを作成するためには最小限の計算が必要です。
  • 実際、フラットインデックスは効果的にクエリを処理し、迅速な検索時間を提供することができます。

ベクトルデータベースでは、2つの異なる検索を実行します:セマンティック検索と類似検索。

  • セマンティック検索:キーワードではなく意味のある会話の方法論に基づいて情報を検索します。入力をシステムに渡す際には、プロンプトエンジニアリングが重要な役割を果たします。この検索により、革新的なアプリケーション、SEO、テキスト生成、要約に供することができる高品質な検索結果が得られます。
  • 類似検索:データ分析の場合、類似検索は構造化されていない、より優れたデータセットを提供します。ベクトルデータベースにおいては、2つのベクトルの近さと類似性を確認する必要があります:テーブル、テキスト、ドキュメント、画像、単語、オーディオファイルなど。理解のプロセスにおいて、ベクトル間の類似性は与えられたデータセット内のデータオブジェクト間の類似性として明らかになります。この演習は相互作用の理解、パターンの特定、洞察の抽出、アプリケーションの視点からの意思決定を支援します。セマンティックおよび類似検索は、以下の産業利益のためのアプリケーションの構築に役立ちます。
  • 情報検索:Open AIとベクトルデータベースを使用して、ビジネスユーザーまたはエンドユーザーのクエリとベクトルデータベース内のインデックスされたドキュメントを使用して情報検索エンジンを構築します。
  • 分類とクラスタリング:似たデータポイントまたはオブジェクトグループを分類またはクラスタリングすることは、共有の特徴に基づいてそれらを複数のカテゴリに割り当てることを意味します。
  • 異常検知:データポイントの類似性を測定し、異常を検出することによって通常のパターンからの異常を発見します。

ベクトルデータベースの類似性測定の種類

測定方法はデータの性質とアプリケーションによって異なります。一般的には、機械学習との似た概念の類似性を測るために、3つの方法が使用されます。

ユークリッド距離

簡単に言えば、2つのベクトル間の距離は、それらのベクトルポイント間の直線距離で測定されます。

ドット積

これにより、2つのベクトル間の整列具合を理解し、それらが同じ方向を指しているか、逆の方向を指しているか、または直交しているかを示すことができます。

コサイン類似度

2つのベクトル間の類似性を評価するために、それらの間の角度を使用します。この場合、ベクトルの値と大きさは無視され、結果に影響を与えません。計算には角度のみが考慮されます。

従来のデータベースでは、正確なSQLステートメントの一致を検索し、データを表形式で取得します。一方、ベクトルデータベースでは、プロンプトエンジニアリングの技術を使用して英語で入力クエリに最も類似したベクトルを検索します。データベースは近似最近傍探索(ANN)検索アルゴリズムを使用して類似データを見つけます。高い性能、精度、応答時間で比較的正確な結果を提供します。

動作メカニズム

  • ベクトルデータベースはまずデータを埋め込みベクトルに変換し、ベクトルデータベースに格納し、高速な検索のためにインデックスを作成します。
  • アプリケーションからのクエリは、埋め込みベクトルと対話し、ベクトルデータベース内で最も近い隣接データまたは類似データを検索し、インデックスを使用して結果をアプリケーションに渡します。
  • ビジネスの要件に基づいて、取得したデータは調整、フォーマット、エンドユーザー側またはクエリまたはアクションに表示されます。

ベクトルデータベースの作成

Pineconeに接続しましょう。

https://app.pinecone.io/

Google、GitHub、またはMicrosoft IDを使用してPineconeに接続できます。

使用するために新しいユーザーログインを作成してください。

ログインに成功すると、インデックスページに移動します。ベクトルデータベースの目的に応じて、インデックスを作成することができます。Create Indexボタンをクリックしてください。

名前と寸法を指定して新しいインデックスを作成してください。

インデックスリストページ

インデックスの詳細 – 名前、地域、環境 – モデルビルディングコードからベクトルデータベースに接続するためにこれらの詳細が必要です。

プロジェクト設定の詳細

プロジェクトの目的に応じて複数のインデックスとキーの設定をアップグレードすることができます。

これまでに、Pineconeでのベクトルデータベースのインデックスと設定の作成について説明しました。

Pythonを使用したベクトルデータベースの実装

では、コーディングを行いましょう。

ライブラリのインポート

from langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.llms import OpenAIfrom langchain.vectorstores import Pineconefrom langchain.document_loaders import TextLoaderfrom langchain.chains.question_answering import load_qa_chainfrom langchain.chat_models import ChatOpenAI

OpenAIとベクトルデータベースのAPIキーの提供

import osos.environ["OPENAI_API_KEY"] = "xxxxxxxx"PINECONE_API_KEY = os.environ.get('PINECONE_API_KEY', 'xxxxxxxxxxxxxxxxxxxxxxx')PINECONE_API_ENV = os.environ.get('PINECONE_API_ENV', 'gcp-starter')api_keys="xxxxxxxxxxxxxxxxxxxxxx"llm = OpenAI(OpenAI=api_keys, temperature=0.1)

LLMの初期化

llm=OpenAI(openai_api_key=os.environ["OPENAI_API_KEY"],temperature=0.6)

Pineconeの初期化

import pineconepinecone.init(    api_key=PINECONE_API_KEY,      environment=PINECONE_API_ENVindex_name = "demoindex" 

ベクトルデータベースの構築のために.csvファイルをロードする

from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path="/content/drive/My Drive/Colab_Notebooks/cereal.csv",source_column="name")data = loader.load()

テキストをチャンクに分割

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=20)text_chunks = text_splitter.split_documents(data)

text_chunk内のテキストを見つける

text_chunks

出力

[Document(page_content=‘name: 100% Bran\nmfr: N\ntype: C\ncalories: 70\nprotein: 4\nfat: 1\nsodium: 130\nfiber: 10\ncarbo: 5\nsugars: 6\npotass: 280\nvitamins: 25\nshelf: 3\nweight: 1\ncups: 0.33\nrating: 68.402973\nrecommendation: Kids’, metadata={‘source’: ‘100% Bran’, ‘row’: 0}), , …..

埋め込みの構築

embeddings = OpenAIEmbeddings()

「data」からベクトルデータベースのためのPineconeインスタンスを作成します。

vectordb = Pinecone.from_documents(text_chunks,embeddings,index_name="demoindex")

ベクトルデータベースへのクエリ用のリトリーバを作成します。

retriever = vectordb.as_retriever(score_threshold = 0.7)

ベクトルデータベースからデータを取得します。

rdocs = retriever.get_relevant_documents("Cocoa Puffs")rdocs

Promptを使用してデータを検索します。

from langchain.prompts import PromptTemplateprompt_template = """次の文脈と質問に基づいて、この文脈だけで回答を生成してください。「わかりません」と答える必要があります。回答を作り出さないでください。文脈:{context}質問:{question}"""PROMPT = PromptTemplate(    template=prompt_template, input_variables=["context", "question"])chain_type_kwargs = {"prompt": PROMPT}

from langchain.chains import RetrievalQAchain = RetrievalQA.from_chain_type(llm=llm,                            chain_type="stuff",                            retriever=retriever,                            input_key="query",                            return_source_documents=True,                            chain_type_kwargs=chain_type_kwargs)                            

データをクエリします。

chain('Can you please provide cereal recommendation for Kids?')

クエリの出力

{'query': 'Can you please provide cereal recommendation for Kids?','result': [Document(page_content='name: Crispix\nmfr: K\ntype: C\ncalories: 110\nprotein: 2\nfat: 0\nsodium: 220\nfiber: 1\ncarbo: 21\nsugars: 3\npotass: 30\nvitamins: 25\nshelf: 3\nweight: 1\ncups: 1\nrating: 46.895644\nrecommendation: Kids', metadata={'row': 21.0, 'source': '/content/drive/My Drive/Colab_Notebooks/cereal.csv'}), ..]

結論

ベクトルデータベースの動作原理、コンポーネント、アーキテクチャ、および生成型AIソリューションにおけるベクトルデータベースの特徴を理解していただけたでしょうか。ベクトルデータベースが従来のデータベースと異なる点、および従来のデータベース要素との比較についての理解を深めていただければ幸いです。実際には、この類推はベクトルデータベースをより良く理解するのに役立ちます。Pineconeベクトルデータベースとインデックス作成のステップは、ベクトルデータベースの作成と次のコードの実装に役立ちます。

キーポイント

  • 構造化、非構造化、および半構造化データに適応可能です。
  • 埋め込み技術と高度なインデックス化された特徴を採用しています。
  • 対話はプレーンテキストを介して行われ、プロンプト(例:英語)を使用します。そして、データは数学表現で保存されます。
  • 類似性はベクトルデータベース内でユークリッド距離、コサイン類似度、ドット積を介して調整されます。

よくある質問

この記事で表示されるメディアはAnalytics Vidhyaの所有ではなく、著者の裁量に基づいて使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more