>像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中文网其他相关文章!

自2008年以来,我一直倡导这辆共享乘车面包车,即后来被称为“ Robotjitney”,后来是“ Vansit”,这是城市运输的未来。 我预见这些车辆是21世纪的下一代过境解决方案Surpas

革新结帐体验 Sam's Club的创新性“ Just Go”系统建立在其现有的AI驱动“扫描和GO”技术的基础上,使会员可以在购物旅行期间通过Sam's Club应用程序进行扫描。

NVIDIA在GTC 2025上的增强可预测性和新产品阵容 NVIDIA是AI基础架构的关键参与者,正在专注于提高其客户的可预测性。 这涉及一致的产品交付,达到绩效期望以及

Google的Gemma 2:强大,高效的语言模型 Google的Gemma语言模型家族以效率和性能而庆祝,随着Gemma 2的到来而扩展。此最新版本包括两种模型:270亿个参数VER

这一领先的数据剧集以数据科学家,天体物理学家和TEDX演讲者Kirk Borne博士为特色。 Borne博士是大数据,AI和机器学习的著名专家,为当前状态和未来的Traje提供了宝贵的见解

这次演讲中出现了一些非常有见地的观点——关于工程学的背景信息,这些信息向我们展示了为什么人工智能如此擅长支持人们的体育锻炼。 我将从每位贡献者的观点中概括出一个核心思想,以展示三个设计方面,这些方面是我们探索人工智能在体育运动中应用的重要组成部分。 边缘设备和原始个人数据 关于人工智能的这个想法实际上包含两个组成部分——一个与我们放置大型语言模型的位置有关,另一个与我们人类语言和我们的生命体征在实时测量时“表达”的语言之间的差异有关。 Alexander Amini 对跑步和网球都很了解,但他还

卡特彼勒(Caterpillar)的首席信息官兼高级副总裁杰米·恩格斯特(Jamie Engstrom)领导了一支由28个国家 /地区的2200多名IT专业人员组成的全球团队。 在卡特彼勒(Caterpillar)工作了26年,其中包括她目前的四年半,Engst

Google Photos的新Ultra HDR工具:快速指南 使用Google Photos的新型Ultra HDR工具增强照片,将标准图像转换为充满活力的高动态范围杰作。对于社交媒体而言,此工具可提高任何照片的影响,


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。