LangChain实战课学习笔记:大语言模型的调用与应用
课程引入
在大语言模型的广阔领域中,OpenAI的API固然方便高效,但随着技术的发展,我们有了更多的选择。这节课探讨了如何在LangChain中调用其他模型,如开源的Llama2或ChatGLM,以及如何在本机上训练自己的模型并应用于实际场景,这为我们在大语言模型的应用开发中提供了更多的可能性和灵活性。
大语言模型发展史
大语言模型的发展历程犹如一部波澜壮阔的科技史诗。2018年,Google的论文提出的Transformer架构,如同点亮了AI世界的一盏明灯,为后续的发展奠定了基础。它成为了几乎所有预训练模型的核心底层架构,基于此架构预训练所得的大规模语言模型被称为“基础模型”。在这个过程中,模型不断学习和积累丰富的语言知识,从词汇、语法到句子结构以及上下文信息,为解决各种复杂的NLP问题提供了强大的支持。BERT作为早期的代表性模型,通过独特的学习方式实现了对句子结构的深入理解,随后大量的预训练模型如雨后春笋般涌现,推动了NLP技术的飞速发展。然而,随着模型参数的不断增加,训练成本也日益高昂,这成为了普通组织和院校面临的巨大挑战。
预训练 + 微调的模式
预训练和微调的结合是大语言模型应用的重要模式。预训练就像是为模型打下了坚实的知识基础,让它在大规模无标注文本数据中学习到自然语言的通用表达和语义知识。而微调则是根据具体的下游任务,对模型进行针对性的调整,使其能够更好地适应特定任务的需求。这种模式的优势在于,它减少了训练时间和数据需求,简化了模型部署的难度,并且具有很强的可扩展性,能够广泛应用于各种自然语言处理任务,极大地提高了NLP技术在实际应用中的可用性和普及程度。
用HuggingFace跑开源模型
注册并安装HuggingFace
首先,我们需要登录Huggingface网站获取专属的Token,这是使用HuggingFace服务的关键步骤。然后,通过pip安装HuggingFace Library,为后续的模型调用做好准备。最后,在命令行中运行huggingface-cli login并设置Token,确保我们能够安全地访问和使用HuggingFace的资源。
申请使用Meta的Llama2模型
在HuggingFace的Model中,Llama2模型有多个版本可供选择,我们这里以最小的7B版为例。找到meta-llama/Llama-2-7b后,需要申请Access才能使用。申请过程通常较为简单,且批准速度较快。
通过HuggingFace调用Llama
调用Llama模型时,我们需要导入AutoTokenizer和AutoModelForCausalLM,分别用于加载分词器和因果语言模型。通过from_pretrained方法加载预训练的分词器和模型,并使用device_map='auto'自动将模型加载到可用的硬件设备上。接着,定义一个提示,如“请给我讲个玫瑰的爱情故事?”,将其转化为模型可理解的格式并移动到GPU上(如果使用CPU则需相应调整),然后使用模型的.generate()方法生成文本。最后,对生成的令牌进行解码,得到最终的回答。但需要注意的是,开源模型尤其是较小的模型,与OpenAI的ChatGPT相比,在回答质量上可能存在一定差距。
LangChain和HuggingFace的接口
通过HuggingFace Hub
这种集成方式非常便捷,只需在HuggingFaceHub类的repo_id中指定模型名称,即可直接下载并使用模型。模型会自动下载到HuggingFace的Cache目录,无需手动操作。在实际测试中,虽然尝试使用某些模型时可能会出现错误,但这并不影响我们对这种集成方式的理解和应用。
通过HuggingFace Pipeline
HuggingFace Pipeline是一种强大的工具,它简化了多种常见NLP任务的使用流程。通过指定预训练模型的名称、加载词汇器、创建文本生成管道等步骤,我们可以轻松地利用预训练模型完成各种任务。在测试中,我们可以看到不同模型在处理相同任务时的表现差异,这也提醒我们在选择模型时需要根据具体需求进行评估。
用LangChain调用自定义语言模型
当我们想要使用自己训练或微调的模型时,LangChain也提供了相应的支持。我们可以创建一个LLM的衍生类,实现_call方法来接收输入字符串并返回响应字符串,以及_identifying_params方法来帮助打印模型的属性。通过下载量化后的模型并安装相关包,我们可以将自定义模型加载到LangChain中进行使用。例如,我们可以用自定义的LLM生成关于客服回复的内容,虽然模型在中文表达上可能存在一些不足,但在英文表现上却相当出色,这也展示了开源模型的潜力和优势。
总结
大模型的训练是一个复杂而庞大的工程,需要充足的知识、经验、语料数据、GPU硬件和强大的工程能力。而预训练 + 微调的模式为我们提供了一种高效利用大模型的方法。同时,量化技术的应用使得模型能够在资源有限的环境下运行,进一步扩大了模型的应用范围。在实际开发中,我们可以根据具体需求选择合适的模型和工具。PyTorch作为深度学习框架,常用于模型的训练和微调;HuggingFace提供了大量的预训练模型和微调工具,为我们的开发提供了便利;LangChain则擅长利用大语言模型的推理功能,开发出各种实用的工具和应用。这些工具和库相互配合,在AI模型的全生命周期中发挥着关键作用,推动着AI技术的不断发展和应用。
个人感悟
通过这节课的学习,我深刻认识到了大语言模型领域的广阔和复杂。在面对众多的模型和工具时,我们需要根据实际情况进行选择和应用。同时,不断学习和探索新的技术和方法,才能更好地应对各种挑战,开发出更加优秀的AI应用。此外,开源模型的发展为我们提供了更多的机会和可能性,我们可以充分利用这些资源,发挥自己的创造力,为AI技术的发展贡献自己的力量。