>像GPT-4这样的大多数大型语言模型(LLMS)经过广泛的,通常过时的数据集培训。尽管他们擅长回答一般问题,但他们在疑问最近的新闻,最新发展和特定领域的主题方面挣扎。在这种情况下,它们可能会幻觉或提供不准确的反应。
尽管出现了诸如Claude 3.5十四行诗之类的表现更好的模型,但我们仍然需要进行微调来生成自定义响应,或者使用检索结果(RAG)系统来为基本模型提供额外的背景。 在本教程中,我们将探索抹布和微调,这是两种不同的技术,用于改善LLM响应。我们将检查它们的差异,并通过评估结果将理论付诸实践。此外,我们还将深入研究混合技术,将微调模型与抹布系统相结合,以利用两全其美的世界。最后,我们将学习如何根据特定用例和要求在这三种方法之间进行选择。
抹布和微调概述
>检索增强生成(抹布)
>检索增强的生成是一个使用外部数据源(例如GPT-4O)成为上下文感知的大型语言模型的过程。它是猎犬和发电机的组合。猎犬从Internet或Vector数据库中获取数据,并使用原始用户的查询将其提供给生成器。发电机使用其他上下文来生成高度准确且相关的响应。
要了解更多信息,请阅读我们的文章,什么是检索增强发电(RAG)?基础知识的指南,并了解RAG应用程序的内部工作和各种用例。
微调
微调是使用特定域数据集对预训练模型进行调整的过程。预先训练的模型在从互联网上废弃的多个大型一般数据集上进行了培训。他们擅长回答一般问题,但是在回答特定领域的问题时,他们会挣扎甚至幻觉。
例如,预先训练的模型可能会精通一般的对话能力,但是当被问及复杂的医疗程序或法律先例时可能会产生错误的答案。
在医疗或法律数据集上对其进行微调,使该模型能够以更准确和相关性理解和回答这些领域的问题。遵循微调LLMS教程的介绍性指南,以了解使用视觉指南自定义预训练的模型。
rag vs.微调
>我们已经了解了每种方法来改善LLMS的响应生成。让我们检查一下以更好地理解它们的差异。
1。学习样式
>微调涉及静态学习,该模型在训练阶段通过新数据集学习。尽管此方法允许该模型适应特定于域的响应生成,但如果不重新培训,它就无法在培训后整合新信息。
2。适应性
微调可以自定义模型输出,并改善与培训数据集紧密相关的特殊域上的模型性能。它还改变了响应的风格,有时比抹布系统提供更多相关的答案。
3。资源强度
rag是资源密集型的,因为它是在模型推断期间执行的。与没有抹布的简单LLM相比,RAG需要更多的内存和计算。
>微调是计算密集型的,但一次执行一次。在培训过程中,它需要多个GPU和高内存,但是此后,与RAG系统相比,它非常适合资源友好。
4。费用
> 在培训过程中,微调只能花费您一次,但是在那之后,您将为模型推理付费,这比RAG便宜。
如果考虑到一切,总体而言,总体而言,平均而言,微调成本比抹布高。5。实施复杂性
微调模型需要高技术专业知识。从准备数据集到设置调谐参数,再到监视模型性能,需要在自然语言处理领域的多年经验。
将理论与实际示例进行测试
>让我们通过为微调模型,抹布应用和混合方法提供相同的提示来测试我们的理论,然后评估结果。混合方法将将微调模型与RAG应用程序相结合。在此示例中,我们将通过拥抱面孔使用Ruslanmv/Ai-Medical-Medical-Chatbot数据集,该数据集包含患者与医生之间有关各种健康状况的对话。
>使用Llama 3构建抹布应用程序
我们将使用Llama 3和Langchain生态系统构建RAG应用程序。>您还可以学习使用LlamainDex构建抹布应用程序,然后遵循该代码,与llamaindex的检索增强生成。
1。安装所有必要的python软件包。
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate2。从Langchain和Transformers库中加载必要的功能。
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 RetrievalQA3。为了访问受限制的模型和数据集,建议您使用API键登录到拥抱面线。
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)4。通过将数据集名称和列名提供给HuggingFacedatAsetLoader加载数据集。 “医生”列将是我们的主要文件,其余的列将是元数据。
5。将我们的数据集限制为第一个1000行。减少数据集将有助于我们减少矢量数据库中的数据存储时间。
正如我们所看到的,“医生”列是页面内容,其余的被视为元数据。
# 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。通过提供示例文本来测试嵌入模型。
# 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]8。将数据转换为嵌入,并将其保存到矢量数据库中。
[-0.059351932257413864, 0.08008933067321777, 0.040729623287916183]
9。将矢量数据库保存在本地目录中。
10。使用示例提示进行相似性搜索。
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)
11。将矢量数据库实例转换为回收器。这将有助于我们创建抹布链。
12。使用Llama 3 8B聊天型号加载令牌和模型。
retriever = vector_db.as_retriever()
13。使用它们来创建测试生成管道。
14。将管道转换为Langchain LLM客户端。
15。使用猎犬,用户查询,RAG提示和LLM创建一个问答链。
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)
16。通过向医生提出问题来测试问答链。
from langchain import hub from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough rag_prompt = hub.pull("rlm/rag-prompt") qa_chain = ( {"context": retriever, "question": RunnablePassthrough()} | rag_prompt | llm | StrOutputParser() )
>它与数据集非常相似,但是它不会拾取样式。它已经理解了上下文,并用它以自己的风格编写响应。
question = "Hi Doctor, I have a headache, help me." result = qa_chain.invoke(question) print(result.split("Answer: ")[1])
>让我们再试一次问题。
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
这是一个非常直接的答案。也许我们需要微调模型,而不是为医生和患者聊天机器人使用抹布方法。
如果您遇到运行代码的困难,请咨询Kaggle笔记本:使用Llama 3构建RAG应用程序。
通过遵循如何改善抹布性能来改善诸如块,重读和查询转换等技术的技术:5个与示例的示例教程。
>医学数据的微调骆驼3>我们不会在医生和患者数据集上微调模型,因为我们已经在上一个教程中这样做了:微调Llama 3并在本地使用它:逐步指南。我们要做的就是加载微调模型,并为其提供相同的问题来评估结果。在拥抱的脸和kaggle上可以使用微调模型。
>
如果您有兴趣使用OpenAI API微调GPT-4型号,则可以参考易于遵循的DataCamp教程Fine-Tuning OpenAI的GPT-4:逐步指南。
来源:kingabzpro/llama-3-8b-chat-doctor
1。使用变压器库加载令牌和模型。
2。确保使用正确的参数将模型加载到Kaggle GPU T4 X2环境中。
3。将聊天模板应用于消息。
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
4。使用模型和代币器创建文本生成管道。
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。让我们问第二个问题。
样式是相同的,并且反应是同理心和解释性的。
# 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推断。
>现在,我们将为微调模型提供额外的上下文,以进一步调整响应并找到平衡。
>而不是再次编写所有代码,我们将使用问答链直接潜入响应生成。如果您想查看我们如何将微调型号与抹布Q&A链组合在一起的完整代码,请查看混合方法(抹布微调)Kaggle Notebook。
为链条提供了与我们提出的抹布和微调模型相同的问题。
%%capture %pip install -U langchain langchainhub langchain_community langchain-huggingface faiss-gpu transformers accelerate
答案非常准确,并且以医生的方式产生了反应。
让我们问第二个问题。
>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
这很奇怪。我们从未提供有关痤疮是否充满脓液的其他背景。也许混合模型不适用于某些查询。
>
混合方法的官方术语是筏(检索增强的微调)。通过阅读什么是筏子,了解有关它的更多信息?将抹布和微调结合起来,以使LLM适应专用域博客。>如何在抹布与微调与筏
之间进行选择>这一切都取决于您的用例和可用资源。如果您是资源有限的初创公司,请尝试使用打开的AI API和Langchain框架来构建抹布概念证明。为此,您将需要有限的资源,专业知识和数据集。
您是一家中级公司,想微调以提高响应准确性并在云上部署开源模型,则需要聘请数据科学家和机器学习操作工程师等专家。微调需要一流的GPU,大型内存,清洁的数据集和了解LLM的技术团队。
rag |
| 微调
| 木筏
|
>上下文理解,最小化幻觉,很容易适应新数据,成本效益。 |
特定于任务的专业知识,自定义,增强的精度,提高了鲁棒性。 |
结合了抹布和微调的优势,更深入的理解和背景。
|
|
缺点
| 数据源管理,复杂性。
| 数据偏见,资源密集,高计算成本,大量内存需求,时间和专业知识密集。
| 实施中的复杂性,需要平衡检索和微调过程。>
|
实现复杂度
| 高于及时工程。
| 高于抹布。需要高度技术专家。
| 这三个中最复杂的。
|
学习样式
| >动态
| >静态
| >动态静态
|
Adaptability
| 很容易适应新的数据并不断发展的事实。
>将输出自定义为特定的任务和域。 | >
适应实时数据和特定任务。 | >
|
|
中等 |
高 |
|
低。推理期间使用资源。 |
中等。在微调过程中使用资源。 |
高 |
| 结论
以上是抹布与微调:一个全面的教程,带有实际示例的详细内容。更多信息请关注PHP中文网其他相关文章!
![无法使用chatgpt!解释可以立即测试的原因和解决方案[最新2025]](https://img.php.cn/upload/article/001/242/473/174717025174979.jpg?x-oss-process=image/resize,p_40)
ChatGPT无法访问?本文提供多种实用解决方案!许多用户在日常使用ChatGPT时,可能会遇到无法访问或响应缓慢等问题。本文将根据不同情况,逐步指导您解决这些问题。 ChatGPT无法访问的原因及初步排查 首先,我们需要确定问题是出在OpenAI服务器端,还是用户自身网络或设备问题。 请按照以下步骤进行排查: 步骤1:检查OpenAI官方状态 访问OpenAI Status页面 (status.openai.com),查看ChatGPT服务是否正常运行。如果显示红色或黄色警报,则表示Open

2025年5月10日,麻省理工学院物理学家Max Tegmark告诉《卫报》,AI实验室应在释放人工超级智能之前模仿Oppenheimer的三位一体测试演算。 “我的评估是'康普顿常数',这是一场比赛的可能性

AI音乐创作技术日新月异,本文将以ChatGPT等AI模型为例,详细讲解如何利用AI辅助音乐创作,并辅以实际案例进行说明。我们将分别介绍如何通过SunoAI、Hugging Face上的AI jukebox以及Python的Music21库进行音乐创作。 通过这些技术,每个人都能轻松创作原创音乐。但需注意,AI生成内容的版权问题不容忽视,使用时务必谨慎。 让我们一起探索AI在音乐领域的无限可能! OpenAI最新AI代理“OpenAI Deep Research”介绍: [ChatGPT]Ope

ChatGPT-4的出现,极大地拓展了AI应用的可能性。相较于GPT-3.5,ChatGPT-4有了显着提升,它具备强大的语境理解能力,还能识别和生成图像,堪称万能的AI助手。在提高商业效率、辅助创作等诸多领域,它都展现出巨大的潜力。然而,与此同时,我们也必须注意其使用上的注意事项。 本文将详细解读ChatGPT-4的特性,并介绍针对不同场景的有效使用方法。文中包含充分利用最新AI技术的技巧,敬请参考。 OpenAI发布的最新AI代理,“OpenAI Deep Research”详情请点击下方链

CHATGPT应用程序:与AI助手释放您的创造力!初学者指南 ChatGpt应用程序是一位创新的AI助手,可处理各种任务,包括写作,翻译和答案。它是一种具有无限可能性的工具,可用于创意活动和信息收集。 在本文中,我们将以一种易于理解的方式解释初学者,从如何安装chatgpt智能手机应用程序到语音输入功能和插件等应用程序所独有的功能,以及在使用该应用时要牢记的要点。我们还将仔细研究插件限制和设备对设备配置同步

ChatGPT中文版:解锁中文AI对话新体验 ChatGPT风靡全球,您知道它也提供中文版本吗?这款强大的AI工具不仅支持日常对话,还能处理专业内容,并兼容简体中文和繁体中文。无论是中国地区的使用者,还是正在学习中文的朋友,都能从中受益。 本文将详细介绍ChatGPT中文版的使用方法,包括账户设置、中文提示词输入、过滤器的使用、以及不同套餐的选择,并分析潜在风险及应对策略。此外,我们还将对比ChatGPT中文版和其他中文AI工具,帮助您更好地了解其优势和应用场景。 OpenAI最新发布的AI智能

这些可以将其视为生成AI领域的下一个飞跃,这为我们提供了Chatgpt和其他大型语言模型聊天机器人。他们可以代表我们采取行动,而不是简单地回答问题或产生信息

使用chatgpt有效的多个帐户管理技术|关于如何使用商业和私人生活的详尽解释! Chatgpt在各种情况下都使用,但是有些人可能担心管理多个帐户。本文将详细解释如何为ChatGpt创建多个帐户,使用时该怎么做以及如何安全有效地操作它。我们还介绍了重要的一点,例如业务和私人使用差异,并遵守OpenAI的使用条款,并提供指南,以帮助您安全地利用多个帐户。 Openai


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

WebStorm Mac版
好用的JavaScript开发工具