一、大模型LLM理论简介


本系列笔记基于 llm-universe,旨在构建知识库,通过LangChain构建RAG应用。非常感谢datawhale 的开源组队学习。

1、大模型理论简介

大模型是大规模参数和复杂计算结构的模型,参数达到十亿乃至上千亿。当参数变多,模型就会出现涌现能力

1.1总结常见LLM

1.1.1 GPT系列

GPT系列是OpenAI的大语言模型,采用Transformer模型的编码器,而BERT采用解码器。
编码器和解码器的作用

  • 编码器:捕捉输入序列的语义信息,通过自注意力层和前馈神经网络层处理输入词汇,以捕捉词汇间的依赖关系和语义信息。
  • 解码器:根据编码器的输出和之前的输出生成目标序列,通过自注意力层和前馈神经网络层进行多轮预测,生成新的输出序列。

所以,BERT和GPT使用不同部分的原因及优劣如下:

  • BERT:使用编码器,因为其目标是学习上下文相关的词表示,通过双向语言模型预训练来理解词语的语义和上下文信息。
  • GPT:使用解码器,因为其目标是生成连贯且适当的上下文文本,通过自回归语言模型预训练来学习生成连贯文本的能力。
  • 优劣
    • BERT:在文本理解任务中表现出色,如问答、文本分类等,具有较强的上下文理解能力。
    • GPT:在文本生成任务中表现较好,如对话生成、文本生成等,能够生成具有上下文连贯性和逻辑性的文本。

1.1.2 Gemini| 文心一言| 通义千问等10+模型及地址

名称开发公司访问地址是否开源
Gemini谷歌https://gemini.google.com/
文心一言百度https://yiyan.baidu.com/
通义千问阿里巴巴https://tongyi.aliyun.com/
星火科大讯飞https://xinghuo.xfyun.cn/desk
豆包字节跳动https://www.doubao.com/
智谱GLM清华大学&智谱https://www.zhipuai.cn/
盘古华为https://pangu.huaweicloud.com/
百川百川智能https://www.baichuan-ai.com/chathttps://github.com/baichuan-inc
元宝腾讯https://yuanbao.tencent.com/chat
商量商汤https://platform.sensenova.cn/home#/home
kimi月之暗面https://kimi.moonshot.cn/
LLAMAxxxxxx

1.2 LLM的能力

  • 涌现能力
  1. 上下文学习
  2. 指令微调
  3. 逐步推理
  • 作为基座模型支持多元应用的能力
  • 对话统一入口

1.3 LLM特点

  1. 大规模参数
  2. 预训练和微调
  3. 多场景多模态的应用

2.搜索增强RAG简介

2.1 是什么?为什么?

RAG 是Retrieval-Augmented Generation的简称,是通过搜索知识库辅助大模型生成答案的方法。
由于LLM的幻觉、知识滞后、专业知识欠缺等问题,需要通过RAG来提高生成结果的准确性和专业性。

2.2 工作流程

  1. 文档加载与分割:从各种来源加载大量文档数据作为知识库,用于后续的信息检索。文档数据会被分割成块,以便进行后续处理。
  2. 编码与向量化:使用编码模型将这些文档块嵌入到向量中,这样可以将文本数据转换成机器可以处理的数值形式。使得文本数据可以被高效地存储和检索。
  3. 索引构建:将所有这些向量放入索引中,以便在需要时能够快速检索到与用户查询相关的信息。可以是图数据库、向量数据库等
  4. 用户查询处理:当用户提出查询时,RAG会使用相同的编码器模型对用户的查询矢量化,然后针对索引执行该查询向量的搜索,找到最相关的结果。
  5. 结果增强与输出:从数据库中检索相应的文本块,并将它们作为上下文输入到LLM(大型语言模型)提示中,以生成更准确和相关的回答。

2.3 RAG vs FT微调

搜索外部知识库+prompt技术 vs 特定领域知识调参
RAG的成本更低,实时性更好,可解释性更强,适用于多任务场景。
RAG的应用场景:问答系统、文档生成和自动摘要、智能助手和虚拟代理、信息检索、知识图谱填充等。
微调的应用场景:特定任务的数据集较小、模型能力的定制、模型幻觉的降低、可解释性的需求、低延迟的场景、智能设备的场景等。

3. Langchain简介

在这里插入图片描述
LangChain框架是一个开源工具,能够实现模型与数据来源的连接,允许与环境的交互。上图就是利用LangChain构建RAG,椭圆是模块,方框是数据状态。
作为一个LLM的开发框架,将LLM模型、向量数据库、交互层prompt、外部知识和代理整合在一起,主要组件有6个:

  • 模型输入输出接口
  • 数据接口
  • 链:连接各组件
  • 记忆:用于链之间
  • 代理 agent: 拓展推理能力
  • 回调 callback: 扩展推理能力

4 开发llm应用流程

开发LLM应用,是利用LLM的理解能力和生成能力,作为调用工具,对特殊的数据和业务逻辑进行处理的应用。所以不需要考虑模型的优化以及内部如何运行,只把它当做工具去用。
LLM开发与传统的AI开发在整体思路和评估思路上有很大的不同。

整体思路

  • 传统AI:将复杂的业务逻辑拆解成子任务,对每个子任务设计模型,通过训练集训练,对每个子任务在验证集上优化,最后通过完整的模型链来实现业务逻辑。
  • LLM开发:通过prompt工程来实现子任务模型的优化,通过prompt链路实现业务逻辑。通过一个基座大模型+若干prompt调优来实现。

评估思路

  • 传统AI:设计训练集训练、验证集调优、测试集评估
  • LLM开发:从实际业务需求中构造小批量验证集,设计合理的prompt。然后从实际业务中选择bad case 加入到验证集中针对性的优化prompt,以实现泛华效果。

所以,LLM开发流程图如下:
在这里插入图片描述

5. 配置环境

5.1 通用环境配置

conda create -n llm-universe python=3.10 #创建虚拟环境
conda activate llm-universe #激活
#进入到想要复制的个人目录 cd /hpc2hdd/home/gbian883
git clone git@github.com:datawhalechina/llm-universe.git #克隆
cd llm-universe #进入目录
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装包
# conda info --envs 查看当前虚拟环境的路径

在pycharm中选择这个环境
在这里插入图片描述

5.2 nltk库下载

NLTK(Natural Language Toolkit)是一个强大的Python库,用于处理人类语言数据的编程。它提供了简单易用的接口,可以用来进行文本的分词、词性标注、命名实体识别、语义分析等自然语言处理任务。NLTK拥有丰富的模块和大量的语料库,支持多种语言,是自然语言处理领域的标准库之一。通过NLTK,开发者可以轻松实现对文本数据的深度挖掘和分析,为各种应用场景提供支持,如情感分析、机器翻译、智能客服等。
使用方法:
分词:使用 word_tokenize()函数进行分词
词性标注:使用 pos_tag()函数进行词性标注
命名实体识别:使用 ne_chunk()函数进行命名实体识别
句法解析:使用 RegexpParser()或 RecursiveDescentParser()进行句法解析

# cd /root 变成cd /hpc2hdd/home/gbian883
git clone https://gitee.com/yzy0612/nltk_data.git  --branch gh-pages
cd nltk_data
mv packages/*  ./  #将packages文件夹中的所有文件和子文件夹移动到当前目录(.表示当前目录)
cd tokenizers
unzip punkt.zip
cd ../taggers  #返回到上一级目录,再进入taggers子目录
unzip averaged_perceptron_tagger.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值