抹布与微调:一个全面的教程,带有实际示例
>像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 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
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)
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]
[-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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Vibe编码通过让我们使用自然语言而不是无尽的代码行创建应用程序来重塑软件开发的世界。受Andrej Karpathy等有远见的人的启发,这种创新的方法使Dev

2025年2月,Generative AI又是一个改变游戏规则的月份,为我们带来了一些最令人期待的模型升级和开创性的新功能。从Xai的Grok 3和Anthropic的Claude 3.7十四行诗到Openai的G

Yolo(您只看一次)一直是领先的实时对象检测框架,每次迭代都在以前的版本上改善。最新版本Yolo V12引入了进步,可显着提高准确性

本文回顾了AI最高的艺术生成器,讨论了他们的功能,对创意项目的适用性和价值。它重点介绍了Midjourney是专业人士的最佳价值,并建议使用Dall-E 2进行高质量的可定制艺术。

Chatgpt 4当前可用并广泛使用,与诸如ChatGpt 3.5(例如ChatGpt 3.5)相比,在理解上下文和产生连贯的响应方面取得了重大改进。未来的发展可能包括更多个性化的间

本文讨论了AI模型超过Chatgpt,例如Lamda,Llama和Grok,突出了它们在准确性,理解和行业影响方面的优势。(159个字符)

MISTRAL OCR:通过多模式文档理解彻底改变检索效果 检索增强的生成(RAG)系统具有明显高级的AI功能,从而可以访问大量的数据存储,以获得更明智的响应

文章讨论了Grammarly,Jasper,Copy.ai,Writesonic和Rytr等AI最高的写作助手,重点介绍了其独特的内容创建功能。它认为Jasper在SEO优化方面表现出色,而AI工具有助于保持音调的组成
