Datawhale llm-universe task3

向量知识库搭建实践与处理

本节的内容是向量知识库的搭建(周末拖拉了点)
word embedding: nlp中常见的步骤之一, 即将 词 从自然语言通过向量来进行数学表示, 这样就可以用概率模型进行建模, 类似的手段就比如常见在召回和搜索系统中, 对手动设定的特征(比如是否推荐、是否减少推荐次数等)做成一个one-hot独热编码, 这种向量化的建模思想将自然语言特征与数学建模思想统一起来, 就可以用数据进行可量化的表达.

RAG中使用向量的优势: 1. 向量易检索, 通过点积、L1L2距离可以直接进行相似度匹配 2. 向量是一个好用的中间态信息媒介, 文本、数据、音频、图像等都可以通过embedding的方式(或者类似的方式)编码成向量, 送入到后续进行统一处理

向量数据库: 顾名思义是存储向量的数据库, 可以对内部存储的向量实现数据库的增删改查, 常用的向量数据库有Chroma、Weaviate、Qdrant等

实践部分: 使用embedding api(我这里还是用智谱为例)
在这里插入图片描述直接使用智谱的cell时, 记得要用dotenv把.env中的环境变量加载进来, 然后用封装好的智谱embedding库就可以实现embedding功能
接下来我们就用这个embedding的api对我们的数据(示例的南瓜书)进行处理
处理数据先用langchain包进行load, langchain包提供了对常见的文本数据进行预处理的功能, 比如下面用到的PDF阅读部分
在这里插入图片描述
然后markdown方式也同样可以用langchain部分的加载包来实现
在这里插入图片描述
接着我们需要对已经加载的数据做数据清洗(算法工作很大的部分都需要对数据进行清洗和整理, 必要的步骤) 这里文本的数据处理可以用正则表达式来实现, 即python中的re包
在这里插入图片描述
接着, 每个LLM都会限制输入的最大token数, 因此我们在数据处理的时候也需要将其纳入考虑, 在构建向量数据库的过程中, 往往是需要将一个大文本划分为不同的chunk, 然后对不同的chunk再使用embedding转化成词向量, 这里langchain同样有一个包方便我们分割上下文.
在这里插入图片描述

原课程在这里提供了按照字符串分割文本的RecursiverCharacterTextSplitter, 我自己也实现了一些按照字符和toke的方式
按照字符
在这里插入图片描述
按照token
在这里插入图片描述
可以看到每种不同的分词方式都会对我们的输出产生区别
经过数据处理和分词后, 就完成了搭建向量数据库的前序准备, 这里搭建向量数据库我们使用chroma, 比较简单和方便, 使用langchain库中的vectorstore包就可以将Chroma导入
在这里插入图片描述

chroma建立向量数据库使用from_documents即可完成, 需要传入的参数主要是分词后的文本、还有embedding的方式
chroma中使用的检索方式是向量检索, 即计算两向量的余弦距离, 挑选这个值超过某阈值的为检索到的结果
关于检索到的内容, 为避免结果过于单一, 可以使用
在这里插入图片描述
最后课程的补充里还给我们提供了一个构建embedding的API框架,用已经封装好的智谱embedding模型为例, 我们可以看到每一部分的api在框架中的结构是怎样的
在这里插入图片描述
其中比较重要的是embed_documents和embed_query,完成自定义embedding API之后就可以将其导入到上面的embedding模型里看一下使用效果

### 大型语言模型生态系统 #### 构成要素 大型语言模型生态系统的构成要素主要包括数据源、预训练框架、微调工具集以及下游应用接口。这些组件共同作用,使得LLM能够处理各种自然语言任务并提供广泛的服务。 - **数据源**:高质量的数据对于构建有效的LLM至关重要。这不仅限于文本本身还包括元数据和其他辅助信息。通过多样化的数据输入,可以增强模型的理解能力和表达能力[^1]。 - **预训练框架**:这是指用于开发和优化神经网络架构的技术栈,如TensorFlow或PyTorch等平台支持下的Transformer结构。它们允许研究人员快速迭代实验设计,并利用分布式计算资源加速训练过程[^2]。 - **微调工具集**:为了使通用的语言理解技能适应特定领域的需求,通常需要针对目标场景调整权重参数。为此目的而创建的各种API和服务简化了这一流程,降低了进入门槛的同时提高了效率[^3]。 - **下游应用场景**:最终用户交互界面构成了整个链条的最后一环;无论是聊天机器人还是自动摘要生成器,在实际部署之前都需要经过严格的测试来验证性能指标是否满足预期标准。 ```python import transformers as trfms from datasets import load_dataset model_name = "bert-base-uncased" tokenizer = trfms.BertTokenizer.from_pretrained(model_name) dataset = load_dataset('imdb') ``` #### 半参数化方法的优势 相比于完全依赖内部参数存储世界知识的传统做法,引入外部记忆机制后的混合模式能够在保持灵活性的基础上显著提升检索精度与响应速度。具体来说就是把静态的记忆单元替换成了动态查询接口,从而更好地应对长尾分布特征带来的挑战。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值