学习笔记:大语言模型(LLM)的使用与微调

113 阅读2分钟

一、大语言模型的发展史

  • Transformer架构:由Google在2018年的论文《Attention is all you need》中提出,成为几乎所有预训练模型的核心架构。
  • 基础模型:基于Transformer预训练的大规模语言模型,如BERT,通过学习词汇、语法、句子结构和上下文信息,为下游任务提供丰富的语言表示基础。
  • 大模型趋势:参数多、模型大、训练费用高昂,主要由顶级大厂负担。

二、预训练+微调的模式

  • 预训练:在大规模无标注文本数据上训练,使模型学习自然语言的基础表达、上下文信息和语义知识。
  • 微调:在预训练模型的基础上,根据特定下游任务进行适应性调整,通常在较小的有标注数据集上进行有监督学习。
  • 优势:减少训练时间和数据需求,快速优化模型,提高NLP技术在应用中的可用性和普及程度。

三、使用开源模型(以Llama2为例)

  • 注册并安装HuggingFace:登录HuggingFace网站获取Token,下载开源模型llama-2-7b-chat.ggmlv3.q4_K_S.bin。
  • 安装llama-cpp-python包pip install llama-cpp-python
  • 自定义LLM类:继承自LangChain的LLM基类,实现_call方法和_identifying_params方法。
    from llama_cpp import Llama
    from langchain.llms.base import LLM
    
    class CustomLLM(LLM):
        model_name = 'llama-2-7b-chat.ggmlv3.q4_K_S.bin'
    
        def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
            llm = Llama(model_path=MODEL_PATH+MODEL_NAME, n_threads=4)
            response = llm(f"Q: {prompt} A: ", max_tokens=256)
            output = response['choices'][0]['text'].replace('A: ', '').strip()
            return output[len(prompt)+5:]
    
        @property
        def _identifying_params(self) -> Mapping[str, Any]:
            return {"name_of_model": self.model_name}
    
        @property
        def _llm_type(self) -> str:
            return "custom"
    
  • 使用自定义LLM类:初始化并生成回复。
    llm = CustomLLM()
    result = llm("昨天有一个客户抱怨他买了花给女朋友之后,两天花就枯了,你说作为客服我应该怎么解释?")
    print(result)
    

四、模型效果与总结

  • Llama2表现:尽管经过量化,Llama2在英文表现上接近GPT3.5,但中文能力有待提高。尽管如此,其开源、免费且可在CPU上运行的特点使其极具吸引力。
  • 未来学习方向:深入学习PyTorch、HuggingFace和LangChain等工具,以更好地开发和部署高效的AI系统。

五、总结

  • 通过本次课程的学习,我们掌握了如何利用现有资源快速搭建起一套基于开源大语言模型的应用系统。
  • 了解到预训练加微调的方式不仅提高了工作效率,还降低了进入门槛,使得更多人可以参与到AI技术的研发当中。
  • 推荐进一步探索PyTorch、HuggingFace以及LangChain等相关工具和技术栈,以便更好地理解和应用先进的NLP技术。