ホームページ > テクノロジー周辺機器 > AI > Rag vs微調整:実用的な例を備えた包括的なチュートリアル

Rag vs微調整:実用的な例を備えた包括的なチュートリアル

Joseph Gordon-Levitt
リリース: 2025-03-05 11:31:10
オリジナル
119 人が閲覧しました

GPT-4のようなほとんどの大規模な言語モデル(LLM)は、一般化された、しばしば時代遅れのデータセットでトレーニングされています。彼らは一般的な質問への回答に優れている間、彼らは最近のニュース、最新の開発、ドメイン固有のトピックについての質問と格闘しています。そのような場合、彼らは幻覚を起こすか、不正確な反応を提供するかもしれません。 

Claude 3.5ソネットのようなより優れたパフォーマンスモデルの出現にもかかわらず、カスタマイズされた応答を生成するために微調整をモデル化するか、Baseモデルに追加のコンテキストを提供するために検索された生成(RAG)システムを使用する必要があります。 このチュートリアルでは、LLM応答を改善するために使用される2つの異なる手法であるRAGと微調整を検討します。結果を評価することにより、それらの違いを調べ、理論を実践します。 

さらに、さらに、微調整されたモデルとRAGシステムを組み合わせて、両方の最高の世界を活用するハイブリッドテクニックに飛び込みます。最後に、特定のユースケースと要件に基づいて、これら3つのアプローチを選択する方法を学びます。

ragと微調整の概要

ragおよび微調整技術は、ドメイン固有のクエリの応答生成を改善しますが、それらは本質的に完全に異なる手法です。それらについて学びましょう。

検索された生成(rag)

検索された生成は、GPT-4oのような大規模な言語モデルが外部データソースを使用してコンテキスト認識になるプロセスです。レトリバーとジェネレーターの組み合わせです。 Retriverは、インターネットまたはVectorデータベースからデータを取得し、元のユーザーのクエリでジェネレーターに提供します。ジェネレーターは、追加のコンテキストを使用して、非常に正確で関連性のある応答を生成します。  

詳細については、記事を読んでください、検索拡張生成(RAG)とは何ですか?基本のガイドであり、RAGアプリケーションの内部の仕組みとさまざまなユースケースを理解します。 

微調整

微調整は、ドメイン固有のデータセットを使用して、事前に訓練されたモデルをチューニングするプロセスです。事前に訓練されたモデルは、インターネットから廃棄された一般的なデータセットの複数の大きな死体でトレーニングされています。彼らは一般的な質問に答えるのが得意ですが、ドメイン固有の質問に応答しながら苦労したり、幻覚したりすることさえあります。 

たとえば、

事前に訓練されたモデルは、一般的な会話能力に熟練している可能性がありますが、複雑な医療処置や法的先例について尋ねられた場合、間違った答えを生み出す可能性があります。 

医療または法的データセットでそれを微調整すると、モデルはそれらの分野内の質問をより正確であり、関連性が高いことを理解し、応答することができます。

微調整LLMSチュートリアルの入門ガイドに従って、視覚ガイドで事前に訓練されたモデルのカスタマイズについて学びます。 

rag vs.微調整

LLMSの応答生成を改善するための各方法論について学びました。違いを調べて、それらをよりよく理解しましょう。 

1。学習スタイル

RAGは動的学習スタイルを使用します。これにより、言語モデルは、データベース、インターネット、またはAPIの最新かつ最も正確なデータにアクセスして使用できます。このアプローチにより、生成された応答が常に最新かつ関連性があることが保証されます。

微調整には静的学習が含まれ、モデルはトレーニングフェーズ中に新しいデータセットを介して学習します。この方法により、モデルはドメイン固有の応答生成に適応できますが、再トレーニングなしでトレーニング後に新しい情報を統合することはできません。

2。適応性

ragは一般化に最適です。検索プロセスを使用して、さまざまなデータソースから情報を引き出します。 RAGはモデルの応答を変更しません。モデルをガイドするための追加情報を提供するだけです。 

微調整はモデル出力をカスタマイズし、トレーニングデータセットに密接に関連する特別なドメインのモデルパフォーマンスを向上させます。また、応答生成のスタイルを変更し、RAGシステムよりも関連性の高い回答を提供する場合があります。 

3。リソース強度

ragは、モデル推論中に実行されるため、リソース集約型です。 RAGのない単純なLLMと比較して、RAGにはより多くのメモリとコンピューティングが必要です。 

微調整は計算集約型ですが、一度実行されます。トレーニングプロセス中に複数のGPUと高いメモリが必要ですが、その後、RAGシステムと比較して非常にリソースに優しいです。 

4。コスト

RAGには、より良い応答生成のために、クラスの最高の埋め込みモデルとLLMが必要です。また、高速ベクトルデータベースも必要です。 APIと操作コストは非常に急速に上昇する可能性があります

微調整はトレーニングプロセス中に一度だけ大きなコストをかけますが、その後、モデル推論の代金を支払うことになります。   

全体として、全体として、すべてが考慮された場合、平均して微調整はぼろきれよりも高くなります。 

5。実装の複雑さ

RAGシステムはソフトウェアエンジニアによって構築され、中程度の技術的専門知識が必要です。 LLMのデザイン、ベクトルデータベース、埋め込み、プロンプトエンジニアなどについて学ぶ必要がありますが、時間がかかりますが、1か月で簡単に学ぶことができます。 

モデルを微調整するには、高い技術的専門知識が必要です。データセットの準備からパラメーターの調整まで、モデルのパフォーマンスの監視まで、自然言語処理の分野での経験が必要です。 

実用的な例を使用して理論をテストに配置します

微調整されたモデル、RAGアプリケーション、およびハイブリッドアプローチに同じプロンプトを提供して、結果を評価して、理論をテストしましょう。ハイブリッドアプローチは、微調整されたモデルとRAGアプリケーションを組み合わせます。この例では、さまざまな健康状態について患者と医師の間の会話を含む、顔を抱きしめたRuslanmv/AI-Medical-Chatbotデータセットを使用します。 Llama 3

を使用したRAGアプリケーションの構築

Llama 3とLangchain Ecosystemを使用してRAGアプリケーションを構築することから始めます。 

llamaindexを使用してコードに沿ってコードに従うことにより、Llamaindexを使用してRAGアプリケーションを構築することも学ぶことができます。

1。必要なすべてのPythonパッケージをインストールします

2。 LangchainおよびTransformersライブラリから必要な機能をロードします。

3。制限されたモデルとデータセットにアクセスするには、APIキーを使用して抱きしめるフェイスハブにログインすることをお勧めします。
%%capture
%pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4。データセット名と列名をHuggingFaceDataSetLoaderに提供して、データセットをロードします。 「医師」の列が私たちの主な文書であり、残りの列はメタデータになります。 
from langchain.document_loaders import HuggingFaceDatasetLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline
from langchain_huggingface import HuggingFacePipeline
from langchain.chains import RetrievalQA
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

5。データセットを最初の1000行に制限します。データセットを削減すると、ベクトルデータベースのデータストレージ時間を短縮できます。 

from huggingface_hub import login
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()

hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN")
login(token = hf_token)
ログイン後にコピー
ログイン後にコピー

ご覧のとおり、「医師」列はページの内容であり、残りはメタデータと見なされます。 

# Specify the dataset name
dataset_name = "ruslanmv/ai-medical-chatbot"


# Create a loader instance using dataset columns
loader_doctor = HuggingFaceDatasetLoader(dataset_name,"Doctor")

# Load the data
doctor_data = loader_doctor.load()

# Select the first 1000 entries
doctor_data = doctor_data[:1000]

doctor_data[:2]
ログイン後にコピー
ログイン後にコピー

6。 GPU加速度の有効化などの特定のパラメーターを使用して、埋め込みモデルを顔から抱きしめます。

7。サンプルテキストで提供して、埋め込みモデルをテストします。 Rag vs微調整:実用的な例を備えた包括的なチュートリアル

8。データを埋め込みに変換し、それらをベクトルデータベースに保存します。

9。ローカルディレクトリにベクトルデータベースを保存します。
# Define the path to the embedding model
modelPath = "sentence-transformers/all-MiniLM-L12-v2"

# GPU acceleration
model_kwargs = {'device':'cuda'}

# Create a dictionary with encoding options
encode_kwargs = {'normalize_embeddings': False}

# Initialize an instance of HuggingFaceEmbeddings with the specified parameters
embeddings = HuggingFaceEmbeddings(
    model_name=modelPath,     
    model_kwargs=model_kwargs, 
    encode_kwargs=encode_kwargs
)
text = "Why are you a doctor?"
query_result = embeddings.embed_query(text)
query_result[:3]
ログイン後にコピー
[-0.059351932257413864, 0.08008933067321777, 0.040729623287916183]
ログイン後にコピー
10。サンプルプロンプトを使用して類似性検索を実行します。

11。 VectorデータベースインスタンスをRetriverに変換します。これにより、RAGチェーンの作成に役立ちます。
vector_db = FAISS.from_documents(doctor_data, embeddings)
vector_db.save_local("/kaggle/working/faiss_doctor_index")
question = "Hi Doctor, I have a headache, help me."
searchDocs = vector_db.similarity_search(question)
print(searchDocs[0].page_content)
ログイン後にコピー

Rag vs微調整:実用的な例を備えた包括的なチュートリアル 12。 llama 3 8bチャットモデルを使用してトークネイザーとモデルをロードします。

13。それらを使用して、テスト生成パイプラインを作成します。

14。パイプラインをLangchain LLMクライアントに変換します。
retriever = vector_db.as_retriever()
ログイン後にコピー

15。 Retriver、ユーザークエリ、RAGプロンプト、およびLLMを使用して、質問と回答チェーンを作成します。

16。医師に質問をしてQ&Aチェーンをテストします。

import torch
base_model = "/kaggle/input/llama-3/transformers/8b-chat-hf/1"

tokenizer = AutoTokenizer.from_pretrained(base_model)

model = AutoModelForCausalLM.from_pretrained(
        base_model,
        return_dict=True,
        low_cpu_mem_usage=True,
        torch_dtype=torch.float16,
        device_map="auto",
        trust_remote_code=True,
)

pipe = pipeline(
    "text-generation", 
    model=model, 
    tokenizer=tokenizer,
    max_new_tokens=120
)

llm = HuggingFacePipeline(pipeline=pipe)
ログイン後にコピー

データセットに非常に似ていますが、スタイルを拾いません。それはコンテキストを理解し、それを使用してそれ自体のスタイルで応答を書きました。 

Rag vs微調整:実用的な例を備えた包括的なチュートリアル

別の質問でもう一度やりましょう。 

%%capture
%pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これは非常に直接的な答えです。医師と患者のチャットボットにRAGアプローチを使用する代わりに、モデルを微調整する必要があるかもしれません。 

Rag vs微調整:実用的な例を備えた包括的なチュートリアル

コードの実行が困難になっている場合は、Kaggleノートブックを参照してください。Llama3を使用してRAGアプリケーションを構築してください。

ラグパフォーマンスを向上させる方法に従って、チャンク、再ランキング、クエリ変換などのテクニックを使用してRAGシステムのパフォーマンスを改善する方法を学ぶ:5つの重要なテクニックの例チュートリアル。

医療データに関するラマ3を微調整します

医師と患者のデータセットでモデルを微調整することはありません。これは、以前のチュートリアルで既にそれを行っているため、llama 3を微調整し、ローカルで使用しています。ステップバイステップガイドです。私たちがやろうとしていることは、微調整されたモデルをロードし、結果を評価するために同じ質問を提供することです。微調整されたモデルは、顔とKaggleを抱き締めることで利用できます。

OpenAI APIを使用してGPT-4モデルを微調整することに興味がある場合は、わかりやすいデータサンプチュートリアルを参照できます。

出典:Kingabzpro/llama-3-8b-chat-doctor

Rag vs微調整:実用的な例を備えた包括的なチュートリアル 1。トランスライブラリを使用してトークン剤とモデルをロードします。

2。正しいパラメーターを使用して、Kaggle GPU T4 X2環境にモデルをロードしてください。

3。チャットテンプレートをメッセージに適用します。

4。モデルとトークンザーを使用してテキスト生成パイプラインを作成します。
from langchain.document_loaders import HuggingFaceDatasetLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline
from langchain_huggingface import HuggingFacePipeline
from langchain.chains import RetrievalQA
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
5。パイプラインオブジェクトにプロンプ​​トを提供し、応答を生成します。

応答はデータセットと非常に似ています。スタイルは同じですが、直接的な答えを与える代わりに、患者がさらなるテストを受けることを示唆しています。

from huggingface_hub import login
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()

hf_token = user_secrets.get_secret("HUGGINGFACE_TOKEN")
login(token = hf_token)
ログイン後にコピー
ログイン後にコピー
6。 2番目の質問をしましょう。

スタイルは同じであり、応答は非常に共感的で説明的です。 Rag vs微調整:実用的な例を備えた包括的なチュートリアル

# Specify the dataset name
dataset_name = "ruslanmv/ai-medical-chatbot"


# Create a loader instance using dataset columns
loader_doctor = HuggingFaceDatasetLoader(dataset_name,"Doctor")

# Load the data
doctor_data = loader_doctor.load()

# Select the first 1000 entries
doctor_data = doctor_data[:1000]

doctor_data[:2]
ログイン後にコピー
ログイン後にコピー
コードの実行が困難になっている場合は、Kaggleノートブック:微調整されたLlama 3 HF推論を参照してください。

ハイブリッドアプローチ(rag微調整)

微調整されたモデルに、応答をさらに調整してバランスを見つけるための追加のコンテキストを提供します。 Rag vs微調整:実用的な例を備えた包括的なチュートリアル

すべてのコードを再度書き込む代わりに、Q&Aチェーンを使用して応答生成に直接飛び込みます。微調整されたモデルとRag Q&Aチェーンをどのように組み合わせたかについての完全なコードを表示したい場合は、ハイブリッドアプローチ(ラグファインチューニング)Kaggleノートブックをご覧ください。 

チェーンに、ぼろきれモデルと微調整されたモデルを尋ねたのと同じ質問を提供します。

%%capture
%pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

答えは非常に正確であり、応答は医師のスタイルで生成されます。 

Rag vs微調整:実用的な例を備えた包括的なチュートリアル

2番目の質問をしましょう。

from langchain.document_loaders import HuggingFaceDatasetLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from transformers import AutoTokenizer, AutoModelForCausalLM,pipeline
from langchain_huggingface import HuggingFacePipeline
from langchain.chains import RetrievalQA
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これは奇妙です。にきびが膿に満ちているかどうかについて、追加のコンテキストを提供しませんでした。ハイブリッドモデルがいくつかのクエリには適用されない可能性があります。 

Rag vs微調整:実用的な例を備えた包括的なチュートリアル

医師と患者のチャットボットの場合、微調整されたモデルはスタイルの採用と精度に優れています。ただし、これは他のユースケースで異なる場合があります。そのため、特定のユースケースに最適な方法を決定するために広範なテストを実施することが重要です。

ハイブリッドアプローチの公式用語はRAFTです(検索された微調整)。 RAFTとは何ですか?ラグと微調整を組み合わせて、LLMSを専門ドメインブログに適応させます。

rag vs微調整とraft

を選択する方法

それはすべて、ユースケースと利用可能なリソースに依存します。限られたリソースを持つスタートアップの場合は、Open AI APIとLangchainフレームワークを使用して概念のぼろぼろを作成してみてください。そのためには、限られたリソース、専門知識、およびデータセットが必要です。 

あなたが中間レベルの会社であり、応答の精度を向上させ、クラウドにオープンソースモデルを展開するために微調整したい場合は、データサイエンティストや機械学習運用エンジニアなどの専門家を雇う必要があります。微調整には、クラスの最高のGPU、大きなメモリ、クリーン化されたデータセット、およびLLMSを理解する技術チームが必要です。 

ハイブリッドソリューションは、リソースであり、集中的に計算されます。また、微調整とぼろきれのバランスを取ることができるLLMOPSエンジニアも必要です。 RAGの優れた品質と微調整されたモデルを利用して、応答生成をさらに改善したい場合は、これを考慮する必要があります。 

ぼろ、微調整、ラフトソリューションの概要については、以下の表を参照してください。

rag 微調整raft 利点データソース管理、複雑さ。データバイアス、リソース集中、高い計算コスト、実質的なメモリ要件、時間と専門知識が集中しています。 実装の複雑さ学習スタイルadaptability

コンテキストの理解、幻覚を最小限に抑え、新しいデータに簡単に適応する、費用対効果が高い。

タスク固有の専門知識、カスタマイズ、精度の向上、堅牢性の向上

ぼろと微調整の両方の強度を組み合わせ、より深い理解とコンテキスト。

短所

実装の複雑さでは、検索と微調整プロセスのバランスをとる必要があります

迅速なエンジニアリングよりも高い。

ラグよりも高い。高度に技術的な専門家が必要です。

3つの中で最も複雑です。

dynamic

static

動的静的

新しいデータと進化する事実に簡単に適応します。

特定のタスクとドメインに出力をカスタマイズします

リアルタイムデータと特定のタスクの両方に適応します

コスト
low

中程度

high

リソースの強度

低い。リソースは、推論中に使用されます。 

中程度。リソースは微調整中に使用されます。 

high

結論

大規模な言語モデルは、今日のAI開発の中心にあります。企業は、トレーニングに数百万ドルを費やすことなく、これらのモデルを改善およびカスタマイズするさまざまな方法を探しています。パラメーターの最適化と迅速なエンジニアリングから始めます。彼らはラグを選択するか、モデルを微調整してさらに良い反応を得て幻覚を減らします。応答を改善するための他の手法はありますが、これらは利用可能な最も人気のあるオプションです。 このチュートリアルでは、理論と実用的な例の両方を使用して、ぼろと微調整の違いについて学びました。また、ハイブリッドモデルを調査し、どの方法が最適かを比較しました。 LLMSと関連するさまざまな手法の展開の詳細については、llamaindexでragでコードをチェックし、langchainでLLMアプリケーションを展開するコースをご覧ください。

以上がRag vs微調整:実用的な例を備えた包括的なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート