论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
图数据库
›
[DataWhale大模型应用开辟]学习笔记1-尝试搭建向量数据 ...
[DataWhale大模型应用开辟]学习笔记1-尝试搭建向量数据库 ...
瑞星
金牌会员
|
2024-7-23 11:52:43
|
显示全部楼层
|
阅读模式
楼主
主题
971
|
帖子
971
|
积分
2913
1.词向量
1.界说
词向量(Word Vector)是将单词表示为向量形式的技术,是天然语言处理(NLP)中的一种常用方法。通过将单词转化为向量,盘算机可以或许更好地明确和处理语言。简单来说,词向量就是将单词表示为一组数字,通常是高维空间中的点,每个单词都有一个独特的向量表示。
2.目的
为什么需要将单词转化为词向量呢,由于他可以或许捕捉单词之间的语义相似性。假如数据库中存放的是笔墨,那么我们可能需要去一个个比对,比对关键字相同的数量或两个单词是否完全一致。但是假如利用向量的方式进行表达,可以通过盘算来获取数据在语义层面上的相似度,且盘算效率更高。
2.向量数据库
1.界说及特点
检索和管理高维向量数据的数据库。随着呆板学习、天然语言处理(NLP)和盘算机视觉等领域的发展,向量数据库在处理复杂数据类型(如图像、文本和音频)的相似性搜刮和推荐体系中变得越来越重要。
向量数据库可以或许有效存储高维向量数据,且支持快速地相似性搜刮,可以在大量向量中找到与查询向量最相似的向量。最重要的一点就是向量数据库利用特定的索引结构,加速检索效率。
2.常见的向量数据库
1.Pinecone
2.Faiss
3.Chroma
3.对RAG的意义
向量数据库在RAG算法中通过高效存储和检索大规模文档的向量表示,显著提拔了检索相关文档的效率和质量,支持大规模数据处理,加速生成过程,从而使生成的答案更加准确和相关,满足实时性要求高的应用需求。
3.调用Embedding API
我利用的环境是Python3.11
需要安装langchain_community库
今天我尝试了调用星火大模型的Embedding API,利用demo调用乐成。
后续我尝试利用SparkLLMTextEmbeddings对背面的向量化数据库存储的数据进行向量化操作。官方文档如下图所示:
编写代码如下:
4.数据读取与处理
为了构建我的本地知识库,需要对多种类型存储的本地文档进行处理,读取本地文档并通过前文描述的 Embedding 方法将本地文档的内容转化为词向量来构建向量数据库。后续我利用的是一个随意的pdf文档进行处理。
1.读取pdf文档
我们可以利用 LangChain 的 PyMuPDFLoader 来读取知识库的 PDF 文件。PyMuPDFLoader 是 PDF 剖析器中速度最快的一种,效果会包含 PDF 及其页面的详细元数据,并且每页返回一个文档。
以下是我的一个代码过程:
读取之后需要调用load()方法,是由于读取的内容还是字符串类型的,为了后续的操作,我们需要调用load方法将类型转换为document类型,才能进行后续操作。
2.数据清洗
我提供的pdf文档中,只存在着少量的空行,因此这里的处理,我模仿文档中的处理方式,将一些无关空行\n进行删除。
3.文档分割
为什么需要文档分割呢,假如我们将文档作为大模型的一个输入,并且盼望大模型能利用输入作为配景知识,办理一些专业领域内的知识,但是我们都知道对于token一般都会有限定,假如发送的token超过了大模型api输入的最大token就会报错。此时我们的文档是十分巨大的,因此需要对文档进行分割,将文档按照固定的长度分为若干个chunk。
以下是文档分割的代码:
其中的参数:
chunk_size:表示分割后每一块chunk的巨细。
chunk_overlap表示块与块之间的重叠巨细。指的是分割后的每个chunk里包含多少上一个chunk结尾的内容,主要是为了保持每个chunk之间的上下文关联性。好比chunk_overlap设置为2,此时上一块chunk的结尾为aaaaa,那么下一块chunk的开头就是aabbbbbb。
Langchain 还提供了多种文档分割方式,区别在怎么确定块与块之间的界限、块由哪些字符/token组成、以及如何丈量块巨细。但是这些方法我还未来得及尝试:
RecursiveCharacterTextSplitter(): 按字符串分割文本,递归地尝试按不同的分隔符进行分割文本。
CharacterTextSplitter(): 按字符来分割文本。
MarkdownHeaderTextSplitter(): 基于指定的标题来分割markdown 文件。
TokenTextSplitter(): 按token来分割文本。
SentenceTransformersTokenTextSplitter(): 按token来分割文本
Language(): 用于 CPP、Python、Ruby、Markdown 等。
NLTKTextSplitter(): 利用 NLTK(天然语言工具包)按句子分割文本。
SpacyTextSplitter(): 利用 Spacy按句子的切割文本。
4.搭建向量数据库
对于分割后的文档,我们就可以将每一块文档转换为向量,存储到向量数据库中了。这里我尝试了Chroma数据库。一开始我还不太相识Chroma数据库,以为他是和MySQL那样的数据库类似,通过调研发现,他类似于sqlite,是一个可以存储在本地的文件。以下是我搭建Chroma向量数据库的代码,首先需要pip install chroma:
对于这一块内容,我尝试了一天,不停在报错,还未搭建起来,通过搜刮与调研。我尝试更换Python环境,当我将Python环境更换到12时,又会出现数据库无法安装的报错,尝试安装后,又会提示不存在Chroma库。当我把环境换回11时,还是出现了key error报错我以为主要的题目可能出现在Embedding那一块。后序的话我打算尝试改变Embedding API调用后,再继承更新该笔记。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
瑞星
金牌会员
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
OpenSSL RSA相关基本接口和编程示例 ...
2022护网面试题总结
一次服务器被入侵的处理过程分享 ...
适用于顺序磁盘访问的1分钟法则 ...
内网安全-横向移动(1)
kubernetes入门
Oracle实现金额小写转大写函数 ...
Iceberg在袋鼠云的探索及实践 ...
Android studio 连接SQLite数据库 +创 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
快速回复
返回顶部
返回列表