MilvusとDatabricks DBRXによるRAGアプリケーションの構築

#はじめに
大規模言語モデル(LLM)は急速に発展し続けており、定期的に新しいモデルがリリースされ、以前のバージョンよりも機能が向上している。2024年3月、大手データプラットフォームであるDatabricksは、初のオープンソースモデルであるDBRXをリリースした。このモデルは、きめ細かいmixture-of-experts(MoE)アーキテクチャを持つ新しい最先端のモデルである。このtransformer-basedデコーダのみのモデルは、MMLU、プログラミング(HumanEval)、数学(GSM8K)などのいくつかのベンチマークを凌駕している。
DBRXを実世界のアプリケーションに統合することで、RAG(Retrieval Augmented Generation)システムのような強力なGenAIアプリケーションを構築するための新たな道が開かれました。これらのシステムは、LLMの文脈理解と効率的な情報検索メカニズムを組み合わせ、複雑なクエリに対しても、高精度で文脈に関連した応答を提供する。
このチュートリアルでは、類似検索に最適化されたスケーラブルなベクトルデータベースであるMilvusとDBRXの機能を組み合わせることで、堅牢なRAGアプリケーションを構築する方法を探ります。Milvusは大規模な埋め込みを効率的に処理しクエリを実行することができ、DBRXは最先端の自然言語処理(NLP)機能を提供します。DBRXは、最先端の自然言語処理(NLP)機能を提供し、ナレッジマネジメント、カスタマーサポート、パーソナライズド・レコメンデーションなどのアプリケーションに理想的な相乗効果を生み出します。
あなたが最も興味深いと思うものにジャンプします:
RAGを理解する
Milvusの紹介
Databricks DBRXの紹介
MoEアーキテクチャの紹介
MilvusとDBRXでRAGを構築する:ステップバイステップガイド
#検索拡張世代(RAG)を理解する
検索拡張世代(RAG)は、外部の情報検索システムを統合することで、LLMのパフォーマンスを向上させるハイブリッドなアプローチである。従来のLLMは、応答を生成するために、事前に訓練された知識と微調整のみに依存しており、最新の情報やドメイン固有の情報を必要とするクエリに直面した場合、その有効性が制限される可能性がある。RAGは、推論中にベクトルデータベースや文書リポジトリのような外部ソースから関連するコンテキストやデータをフェッチする検索メカニズムを組み込むことによって、この制限に対処する。
RAGシステムは通常2つの主要なコンポーネントから構成される:
1.レトリーバー:このコンポーネントは、クエリや入力に基づいて、大規模なコーパスやデータベースから関連する情報をフェッチする役割を担っている。テキストデータを埋め込みに変換することで、意味検索を可能にし、MilvusやZillizのようなベクトルデータベースを知識ベースのストレージシステムとして活用し、最も関連性の高い情報を効率的に特定する。
2.生成器:検索された文脈を入力として、LLMは外部データから情報を得て、入力クエリと首尾一貫した応答を生成する。これにより、応答が正確であるだけでなく、最も関連性の高い最新の情報に基づいたものとなる。
RAGアーキテクチャ](https://assets.zilliz.com/RAG_architecture_a4710eb118.png)
図1:RAGアーキテクチャ
検索と生成を組み合わせることで、RAGシステムは、より正確で、文脈を認識し、事実に基づいた応答を生成することができる:
知識ベース照会**:構造化されていない大規模なデータセットから、詳細で正確な回答を提供する。
カスタマーサポート特定のナレッジベースを参照することで、パーソナライズされた的確な回答を提供。
コンテンツ作成:コンテンツ作成:文脈に関連した情報を収集し、クリエイティブまたはテクニカルライティングを支援する。
科学的調査**:学術論文やデータベースから情報を収集し、研究結果を要約したり、領域特有のクエリに回答する。
ベクターデータベース
Milvusは、大規模なベクトルembeddingsを効率的に管理、保存、照会するために設計されたオープンソースのベクトルデータベースです。類似検索やセマンティック検索を必要とするアプリケーション、例えばRAG(Retrieval-Augmented Generation)パイプライン、推薦システム、チャットボット、セマンティック検索エンジンなどで広く利用されている。
なぜ Milvus **RAGシステムに最適なのでしょうか?
RAGシステムでは、Milvusのようなベクトル・データベースがレトリバー・コンポーネントのバックボーンとして機能する。ここでは、このデータベースがどのようなアーキテクチャーに適合するかを説明します:
効率的なストレージMilvusは、テキストデータやマルチモーダルデータから生成された億単位の高次元embeddingsを格納することができ、膨大な知識ベースをコンパクトかつ効率的に表現することができる。
高速検索:クエリがシステムに入力されると、Milvus**は最も関連性の高い埋め込みを検索するためにセマンティック検索を実行します。
スケーラビリティMilvusは、知識ベースのサイズが大きくなっても、検索プロセスがパフォーマンスを維持することを保証し、RAGシステムが企業の需要に合わせて拡張できるようにする。
DBRXの紹介
DBRXは、2024年3月にリリースされたDatabricksの新しいLLMで、高度なAI技術の成長エコシステムに対する同社初のオープンソース貢献です。ベースモデル(DBRX Base)とファインチューニングモデル(DBRX Instruct)の2つのバージョンがあります。トランスフォーマーをベースとしたデコーダのみのアーキテクチャで構築されたDBRXは、多くの既存モデルとは一線を画す、きめ細かなMoE(Mixture-of-Experts)設計を採用しています。この革新的なアーキテクチャにより、DBRXは計算リソースを異なるタスクやクエリに動的に割り当てることができ、非常に効率的で様々なユースケースに適応することができます。DBRXを深く掘り下げる前に、Mixture of Expert (MoE) アーキテクチャの基本を学びましょう。
専門家の混合(MoE)アーキテクチャ
ミクスチャー・オブ・エキスパートは、計算負荷を複数の特化したサブモデル、つまり "エキスパート "に分割するニューラルネットワークアーキテクチャである。推論中にすべての層とパラメータを一様に活性化する従来のモデルとは異なり、MoEは与えられた入力に最も関連するエキスパートのサブセットのみを動的に選択し、活性化する。この選択的活性化により、効率と専門化の両方がもたらされる。
MoEのアーキテクチャは以下の主要コンポーネントで構成されている:
専門家ネットワーク**:複数のニューラルネットワークモジュールで、それぞれが異なるタイプの入力やタスクに特化するように訓練されている。これらのエキスパートは、特定のデータ領域を処理したり、特定の問題タイプを解決したりするための独自の能力を開発する。
ルーターメカニズム**:洗練されたゲーティング機構が、与えられた入力に対して最も適切なエキスパートを動的に選択し、起動する。このルーティングシステムは、学習可能なパラメータを使用して、与えられたタスクに最も関連するエキスパートを決定する。
疎活性化**:各入力に対して活性化するエキスパートのサブセットのみを活性化し、高い性能を維持しながら計算複雑度を劇的に低減する。このアプローチは、全てのモデルパラメータが同時に作動しないことを保証する。
図2:エキスパート混合(MoE)層](https://assets.zilliz.com/Figure_2_Mixture_of_Experts_Mo_E_layer_c24bf880fd.png)
図2:専門家の混合(MoE)層|_ ソース
MoEアーキテクチャには、以下のようなさまざまな利点がある:
計算効率:計算効率:各入力に対してエキスパートのサブセットのみをアクティブにし、全体的な計算要件を削減する。
深い専門化**:個々の専門家ネットワークが高度に集中した能力を開発できるようにします。
スケーラブルなアーキテクチャエキスパートを追加することで、モデル能力を容易に拡張できます。
動的リソース割り当て**:入力を最も適切な計算リソースにインテリジェントにルーティングします。
DBRXの主な利点
DBRXは主要なベンチマークで素晴らしい結果を出しています:
MMLU (Massive Multitask Language Understanding)**](https://zilliz.com/glossary/mmlu-benchmark):幅広い一般知識と推論能力を実証。
プログラミングタスク(HumanEval)**:コードの生成と理解に優れ、ソフトウェア開発支援に最適。
数学タスク (GSM8K)**:複雑な数学的問題を解くことに強い適性を示す。
図3:DBRXベンチマーク](https://assets.zilliz.com/Figure_3_DBRX_Benchmarks_b468c2de14.png)
図3:DBRXベンチマーク(Source)_。
**スケーラビリティと効率性
DBRXは、1秒あたりのトークン処理速度を高速化するMoE設計により、大規模な展開とリソースに制約のある環境の両方に最適化されています。
そのスケーラビリティは、エンタープライズグレードのシステムから小規模なドメイン固有のセットアップまで、幅広いアプリケーションに適しています。
図4:DBRX推論](https://assets.zilliz.com/Figure_4_DBRX_Inference_1f68888015.png)
図4:DBRX推論(Source)
オープンソースのアクセシビリティ:
オープンソースモデルとして、DBRXは開発者と組織がプロプライエタリなエコシステムに縛られることなく、実験、適応、革新することを可能にします。
その開発の透明性は、モデルの改善と統合へのコミュニティ主導のアプローチを促します。
RAGシステムにおけるDBRX
DBRXは、検索された情報に基づいて文脈に正確で首尾一貫した応答を生成する能力があるため、検索支援生成(RAG)システムに適している。主な利点は以下の通りです:
文脈適応性**:DBRXは、検索されたコンテキストを生成出力にシームレスに統合し、応答がクエリに高度に関連し、固有であることを保証します。
Domain-Specific Fine-Tuning:DBRXはすぐに利用可能な状態で非常に優れたパフォーマンスを発揮しますが、ドメイン固有のデータを用いて微調整を行うことで、特殊なアプリケーションの精度と関連性をさらに高めることができます。
複雑なタスクの効率化**:.MoEアーキテクチャにより、DBRXは専門的なエキスパートを効率的に活用することで、複雑で多面的なクエリを処理することができ、要求の厳しいRAGシステムに最適です。
MilvusとDBRXによるRAGアプリケーション
このノートブックチュートリアルでは、Milvusをベクトルストアとして、DBRXを言語モデルとして、LangChainをフレームワークとして使用し、RAG(Retrieval-Augmented Generation)パイプラインを実装する方法を示します。モデルのサイズを考慮し、この実装ではDatabricksのワークスペース提供エンドポイントを利用しています。また、OllamaやHugging Face Transformersライブラリ経由でモデルをダウンロードすることもできますが、この場合は高性能なGPUが必要になります。
ステップ1:データのロード
このチュートリアルのデータソースはDatabricks DBRXの公式リリースブログです。ドキュメントをロードし、再帰的テキスト分割メソッドを使用して管理可能なチャンクに分割します。
# ドキュメントのロードと分割
loader = WebBaseLoader("https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm")
ドキュメント = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
ステップ2:埋め込みデータを読み込む
次に、Hugging Faceのオープンソースの埋め込みを利用して、検索目的のために文書内容をエンコードする。
# 埋め込みデータを読み込む
embeddings = HuggingFaceBgeEmbeddings(
モデル名 = "BAAI/bge-small-ja-v1.5")
ステップ3:Milvus Retrieverの作成
Milvusをベクターストアとして設定し、効率的な類似検索を可能にする。セットアップが完了したら、サンプルクエリーでテストする。
# ミルバスレトリバーの作成
vectorstore = Milvus.from_documents(documents=docs、
embedding=embeddings、
コレクション名='my_collection'、
connection_args={
"uri":"./milvus_demo.db"})
)
retriever = vectorstore.as_retriever()
# レトリバーをテストする
query = "DBRXとは何ですか?"
vectorstore.similarity_search(query, k=1)
```
出力されます:
[Document(metadata={'description': '', 'language': 'en-US', 'pk':454492864071335939, 'source': 'https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm', 'title':DBRXの紹介:Databricks Blog'}, page_content='and GPT-3.5 Turbo on RAG tasks.専門家混合モデルのトレーニングは難しい。専門家混合モデルのトレーニングは難しい。
```
ステップ4:RAGパイプラインの実装
RAGパイプラインはDatabricks DBRXモデルを質問応答タスクに統合します。Databricks ワークスペース外でこのモデルを使用するには、Databricks Host URL と Token を設定する必要があります。パイプラインには、簡潔でコンテキストに特化した応答のためのプロンプトテンプレートも含まれています。
# 環境変数のロード
DATABRICKS_HOST = userdata.get('DATABRICKS_HOST')
DATABRICKS_TOKEN = userdata.get('DATABRICKS_TOKEN')
# Databricks DBRX で RAG パイプラインを設定する
llm = ChatDatabricks(endpoint="dbrx-instruct"、
max_tokens=200)
prompt_template = ""
Human: あなたはDatabricksに関する質問に答えるAIアシスタントです。
以下の情報を使って、<question>タグで囲まれた質問に簡潔に答えてください。
答えがわからない場合は、わからないと答え、答えを作ろうとしないでください。
<context>
{コンテキスト}
</context>
<question>
質問
</question>
回答は具体的で、信頼できるDatabricksの情報のみを使用すること。
アシスタント:""
prompt = PromptTemplate(
template=PROMPT_TEMPLATE、input_variables=["context", "question"])
)
def format_docs(docs):
return "nn".join(doc.page_content for doc in docs)
最後に、検索と生成プロセスを処理するためにRAGチェーンが構築される。このチェーンは、retrieverを使用してクエリを処理し、結果をフォーマットし、DBRXモデルを使用して回答を生成する。
# RAG (Retrieval-Augmented Generation)チェーンの定義
rag_chain = (
{"context": retriever | format_docs, "question":RunnablePassthrough()}を使用する。
| プロンプト
| プロンプト
| StrOutputParser()
)
res = rag_chain.invoke(query)
res
```
出力される:
DBRXは変換器ベースのデコーダのみの大規模言語モデル(LLM)であり、ネクストトークン予測を用いて学習された。DBRXは合計132Bのパラメータを持つMoE(Mixture-of-Experts)アーキテクチャを使用しており、そのうち36Bのパラメータが任意の入力に対してアクティブである。DBRXは12Tのテキストとコードデータのトークンで事前学習され、RoPE(rotary position encodings)、GLU(gated linear units)、GQA(grouped query attention)を使用する。また、GPT-4トークナイザーも使用する。DBRXはLLaMA2-70Bと比較して推論が最大2倍高速であり、総パラメータ数とアクティブパラメータ数の両方でGrok-1の約40%のサイズであるなど、その効率性で知られている。GPT-3.5を上回り、Gemini 1.0 Proに匹敵する。コードモデルとしての能力は特に高く、プログラミングタスクではCodeLaMA-70Bのような特殊なモデルを凌駕する。
```
このチュートリアルは以下のnotebookにあります。
結論
DBRXの革新的なMoE(Mixture of Experts)アーキテクチャとMilvusのスケーラブルなベクトルデータベースの組み合わせは、インテリジェントでコンテキストを意識したAIシステムを構築するための強固な基盤を確立します。DBRXのきめ細かなMoE設計は、多様なタスクに動的に適応することを可能にし、様々なユースケースにおいて計算効率と卓越したパフォーマンスを保証します。この能力は、特にRAG(Retrieval Augmented Generation)システムにおいて極めて重要です。そこでは、文脈に即した正確でドメイン固有の応答を生成する能力が最重要となります。
Milvusは、RAGシステムが巨大な知識ベースを容易に扱えるようにすることで、このアーキテクチャを補完する。この組み合わせは、ナレッジマネジメント、カスタマーサポート、コンテンツ作成、科学研究などの分野でのアプリケーションを強化し、最も正確で最新の情報に基づいた適切な結果を提供します。開発者や組織にとって、これは技術的な進歩であり、よりインテリジェントで応答性が高く、コンテキストを意識したシステムを構築する機会でもある。
関連リソース
ベクターデータベースとは何か、どのように機能するのか](https://zilliz.com/learn/what-is-vector-database)
あなたのGenAIアプリのためのトップパフォーマンスAIモデル|Zilliz](https://zilliz.com/ai-models)
MilvusでAIアプリを作る:チュートリアル&ノートブック](https://zilliz.com/learn/milvus-notebooks)
ジェネレーティブAIリソースハブ|Zilliz](https://zilliz.com/learn/generative-ai)
ZillizとVectorizeでRAGアプリケーションを10倍速く提供する](https://zilliz.com/blog/deliver-rag-apps-10x-faster-with-zilliz-and-vectorize)
MilvusによるマルチテナントRAGの設計:ベストプラクティス ](https://zilliz.com/blog/build-multi-tenancy-rag-with-milvus-best-practices-part-one)
RAGの評価:知っておくべきことすべて ](https://zilliz.com/blog/evaluating-rag-everything-you-should-know)
読み続けて

How to Build RAG with Milvus, QwQ-32B and Ollama
Hands-on tutorial on how to create a streamlined, powerful RAG pipeline that balances efficiency, accuracy, and scalability using the QwQ-32B model and Milvus.

Vector Databases vs. In-Memory Databases
Use a vector database for AI-powered similarity search; use an in-memory database for ultra-low latency and high-throughput data access.

Producing Structured Outputs from LLMs with Constrained Sampling
Discuss the role of semantic search in processing unstructured data, how finite state machines enable reliable generation, and practical implementations using modern tools for structured outputs from LLMs.