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模型里看一下使用效果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值