Rag vs微調整:実用的な例を備えた包括的なチュートリアル
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。サンプルテキストで提供して、埋め込みモデルをテストします。
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]
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)
12。 llama 3 8bチャットモデルを使用してトークネイザーとモデルをロードします。
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)
データセットに非常に似ていますが、スタイルを拾いません。それはコンテキストを理解し、それを使用してそれ自体のスタイルで応答を書きました。
別の質問でもう一度やりましょう。
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
これは非常に直接的な答えです。医師と患者のチャットボットにRAGアプローチを使用する代わりに、モデルを微調整する必要があるかもしれません。
コードの実行が困難になっている場合は、Kaggleノートブックを参照してください。Llama3を使用してRAGアプリケーションを構築してください。
ラグパフォーマンスを向上させる方法に従って、チャンク、再ランキング、クエリ変換などのテクニックを使用してRAGシステムのパフォーマンスを改善する方法を学ぶ:5つの重要なテクニックの例チュートリアル。医療データに関するラマ3を微調整します
医師と患者のデータセットでモデルを微調整することはありません。これは、以前のチュートリアルで既にそれを行っているため、llama 3を微調整し、ローカルで使用しています。ステップバイステップガイドです。私たちがやろうとしていることは、微調整されたモデルをロードし、結果を評価するために同じ質問を提供することです。微調整されたモデルは、顔とKaggleを抱き締めることで利用できます。
OpenAI APIを使用してGPT-4モデルを微調整することに興味がある場合は、わかりやすいデータサンプチュートリアルを参照できます。
出典:Kingabzpro/llama-3-8b-chat-doctor
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
応答はデータセットと非常に似ています。スタイルは同じですが、直接的な答えを与える代わりに、患者がさらなるテストを受けることを示唆しています。
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]
ハイブリッドアプローチ(rag微調整)
微調整されたモデルに、応答をさらに調整してバランスを見つけるための追加のコンテキストを提供します。
すべてのコードを再度書き込む代わりに、Q&Aチェーンを使用して応答生成に直接飛び込みます。微調整されたモデルとRag Q&Aチェーンをどのように組み合わせたかについての完全なコードを表示したい場合は、ハイブリッドアプローチ(ラグファインチューニング)Kaggleノートブックをご覧ください。
チェーンに、ぼろきれモデルと微調整されたモデルを尋ねたのと同じ質問を提供します。
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
答えは非常に正確であり、応答は医師のスタイルで生成されます。
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
これは奇妙です。にきびが膿に満ちているかどうかについて、追加のコンテキストを提供しませんでした。ハイブリッドモデルがいくつかのクエリには適用されない可能性があります。
医師と患者のチャットボットの場合、微調整されたモデルはスタイルの採用と精度に優れています。ただし、これは他のユースケースで異なる場合があります。そのため、特定のユースケースに最適な方法を決定するために広範なテストを実施することが重要です。
ハイブリッドアプローチの公式用語はRAFTです(検索された微調整)。 RAFTとは何ですか?ラグと微調整を組み合わせて、LLMSを専門ドメインブログに適応させます。rag vs微調整とraft
を選択する方法それはすべて、ユースケースと利用可能なリソースに依存します。限られたリソースを持つスタートアップの場合は、Open AI APIとLangchainフレームワークを使用して概念のぼろぼろを作成してみてください。そのためには、限られたリソース、専門知識、およびデータセットが必要です。
あなたが中間レベルの会社であり、応答の精度を向上させ、クラウドにオープンソースモデルを展開するために微調整したい場合は、データサイエンティストや機械学習運用エンジニアなどの専門家を雇う必要があります。微調整には、クラスの最高のGPU、大きなメモリ、クリーン化されたデータセット、およびLLMSを理解する技術チームが必要です。
ハイブリッドソリューションは、リソースであり、集中的に計算されます。また、微調整とぼろきれのバランスを取ることができるLLMOPSエンジニアも必要です。 RAGの優れた品質と微調整されたモデルを利用して、応答生成をさらに改善したい場合は、これを考慮する必要があります。
ぼろ、微調整、ラフトソリューションの概要については、以下の表を参照してください。
rag |
| 微調整
| raft
|
コンテキストの理解、幻覚を最小限に抑え、新しいデータに簡単に適応する、費用対効果が高い。 |
タスク固有の専門知識、カスタマイズ、精度の向上、堅牢性の向上 |
ぼろと微調整の両方の強度を組み合わせ、より深い理解とコンテキスト。
|
|
短所
| データソース管理、複雑さ。
| データバイアス、リソース集中、高い計算コスト、実質的なメモリ要件、時間と専門知識が集中しています。
実装の複雑さでは、検索と微調整プロセスのバランスをとる必要があります |
|
迅速なエンジニアリングよりも高い。 |
ラグよりも高い。高度に技術的な専門家が必要です。 |
3つの中で最も複雑です。 |
|
dynamic |
static |
動的静的 |
|
新しいデータと進化する事実に簡単に適応します。 |
特定のタスクとドメインに出力をカスタマイズします |
リアルタイムデータと特定のタスクの両方に適応します
|
コスト |
low 中程度 |
high |
|
リソースの強度 |
低い。リソースは、推論中に使用されます。 中程度。リソースは微調整中に使用されます。 |
high |
|
結論 大規模な言語モデルは、今日のAI開発の中心にあります。企業は、トレーニングに数百万ドルを費やすことなく、これらのモデルを改善およびカスタマイズするさまざまな方法を探しています。パラメーターの最適化と迅速なエンジニアリングから始めます。彼らはラグを選択するか、モデルを微調整してさらに良い反応を得て幻覚を減らします。応答を改善するための他の手法はありますが、これらは利用可能な最も人気のあるオプションです。 このチュートリアルでは、理論と実用的な例の両方を使用して、ぼろと微調整の違いについて学びました。また、ハイブリッドモデルを調査し、どの方法が最適かを比較しました。 LLMSと関連するさまざまな手法の展開の詳細については、llamaindexでragでコードをチェックし、langchainでLLMアプリケーションを展開するコースをご覧ください。 |
以上がRag vs微調整:実用的な例を備えた包括的なチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

導入 Openaiは、待望の「Strawberry」アーキテクチャに基づいて新しいモデルをリリースしました。 O1として知られるこの革新的なモデルは、推論能力を強化し、問題を通じて考えられるようになりました

導入 鮮やかな絵画や彫刻に囲まれたアートギャラリーを歩くことを想像してください。さて、各ピースに質問をして意味のある答えを得ることができたらどうでしょうか?あなたは尋ねるかもしれません、「あなたはどんな話を言っていますか?

メタのラマ3.2:マルチモーダルAIパワーハウス Metaの最新のマルチモーダルモデルであるLlama 3.2は、AIの大幅な進歩を表しており、言語理解の向上、精度の向上、および優れたテキスト生成機能を誇っています。 その能力t

SQLの変更テーブルステートメント:データベースに列を動的に追加する データ管理では、SQLの適応性が重要です。 その場でデータベース構造を調整する必要がありますか? Alter Tableステートメントはあなたの解決策です。このガイドの詳細は、コルを追加します

導入 Mistralは、最初のマルチモーダルモデル、つまりPixtral-12B-2409をリリースしました。このモデルは、Mistralの120億個のパラメーターであるNemo 12bに基づいて構築されています。このモデルを際立たせるものは何ですか?これで、画像とTexの両方を採用できます
