[DataWhale大模型应用开发]学习笔记1-尝试搭建向量数据库

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调用后,再继续更新该笔记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统安装NVM,实现Node.js多版本管理

目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…

【区块链+基础设施】国家健康医疗大数据科创平台 | FISCO BCOS应用案例

在医疗领域,疾病数据合法合规共享是亟待解决的难题。一方面,当一家医院对患者实施治疗后,若患者转到其 他医院就医,该医院就无法判断诊疗手段是否有效。另一方面,医疗数据属于个人敏感数据,一旦被泄露或被恶…

一个能让渲染性能提高100倍的办法

GPU 光线追踪是当今的热门话题,所以让我们来谈谈它!今天我们将光线追踪一个单个球体。 使用片段着色器。 是的,我知道。并不特别花哨。你可以在 Shadertoy 上搜索并获得数百个示例(https://www.shadertoy.com/results?querysphere)。甚至已…

自研直播系统-直播系统实战

文章目录 1 流媒体基础本文教程下载地址1.1 流媒体1.2 流式传输方式1.2.1 顺序流式传输1.2.2 实时流式传输 1.3 流媒体传输协议1.3.1 rtmp协议1.3.2 HLS协议1.3.3 RTSP协议1.3.4 视频流的对比 1.4 视频编码(codec)1.5 分辨率的规范分辨率簡介:1.5.2 分辨率單位 1.6 …

聊聊etsy平台,一个年入百万的项目

聊聊etsy平台,一个年入百万的项目 什么是etsy,这是怎样一个平台,怎样盈利的?相信现在大家满脑子都是这些疑问。 这个平台也是无意间一个学员提到的,据说他朋友靠这个平台年赚好几百万。苦于门槛太高,他也做不了。今天…

重磅发布|WAIC 2024最新活动日程安排完整发布!

WAIC 2024 将于 7 月在上海世博中心和世博展览馆举行,论坛时间为 7 月 4 日至 6 日,展览时间为 7 月 4 日至 7 日。会议涵盖 AI 伦理治理、大模型、具身智能、投融资、教育人才等重点话题,体现 AI 向善等价值导向,9 位大奖得主和 …

Inscription Alliance的Denim协议发行首个聚合跨链铭文BTIA,计划参与Mint注册量达15万

官方消息,由Inscription Alliance自主研发的创新性Denim协议发行首个聚合跨链铭文BTIA,并将于2024年7月19日公开Mint。Denim协议旨在解决当下铭文赛道流动性和互通性不足的痛点,基于该协议搭建的Denim Swap可以实现聚合各项协议和各条公链的彼…

数据结构常见图算法

深度优先搜索 时间复杂度 领接矩阵表示 O( n2) 领接表表示 O(n+e) 空间复杂度 O(e) DFS与回溯法类似,一条路径走到底后需要返回上一步,搜索第二条路径。在树的遍历中,首先一直访问到最深的节点,然后回溯到它的父节点,遍历另一条路径,直到遍历完所有节点…

荣耀大横评,睿蓝7-450荣耀版卷出来的性价比之王

手握11万左右预算,如何在市场内选出一辆合适自己的车?荣耀版车型无疑是当下的最佳答案。在众多荣耀版车型中,比亚迪宋PLUS荣耀版EV520km领先型(后统称宋PLUS荣耀版)、比亚迪元PLUS荣耀版430km领先型(后统称元PLUS荣耀版)、比亚迪海豚PLUS荣耀版420km时尚版(后统称海豚荣耀版)、…

【CSAPP】-binarybomb实验

目录 实验目的与要求 实验原理与内容 实验设备与软件环境 实验过程与结果(可贴图) 操作异常问题与解决方案 实验总结 实验目的与要求 1. 增强学生对于程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。 2. 掌握使用gdb调试器…

Python学习篇:PyCharm的基本使用教程(二)

目录 1 前言 2 创建Python项目 3 创建Python文件 4 编写 Hello World 并运行 5 PyCharm界面简介 1 前言 PyCharm的使用贯穿整个Python的学习,所以单独拿出来出教程不合适,说多了对于新手来说也还是不明白,这里我们先从学习开始前大家需…

【基础算法总结】分治—快排

分治—快排 1.分治2.颜色分类3.排序数组4.数组中的第K个最大元素5.库存管理 III 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.分治 分治…

搜狐新闻HarmonyOS版本 push 推送开发

背景 搜狐新闻作为HarmonyOS的合作伙伴,于2023年12月成功上架鸿蒙单框架应用市场,成为首批鸿蒙应用矩阵的一员。 新闻类推送作为应用的重要组成部分,在二期规划中,我们将推送功能列为核心功能模块。本文将推送集成过程中的步骤和…

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI孕产妇健康管理信息管理系统是一种将孕产妇健康管理信息进行集中管理和存储的系统。通过建立该系统,有助于提高孕产妇健康管理的效率和质量,减少医疗事故发生的…

新华三通用大模型算力底座方案:为AI时代注入强大动力

在人工智能技术日新月异的今天,大模型作为推动AI进步的重要驱动力,是百行百业不断追逐的热点。大模型以其强大的泛化能力、卓越的模型效果和广泛的应用场景,正改变着人工智能的未来。作为国内领先的ICT解决方案提供商,新华三集团凭…

Linux kfence使用与实现原理

0 背景 为了更好的检测linux kernel中内存out-of-bounds、mem-corruption、use-after-free、invaild-free等问题,调研了kfence功能(该功能在linux kernel 5.12引入),帮助研发更好的分析与定位这类内存错误的问题。 一、kfence介…

【ES】--Elasticsearch的Nested类型介绍

目录 一、问题现象二、普通数组类型1、为什么普通数组类型匹配不准?三、nested类型四、nested类型查询操作1、只根据nested对象内部数组条件查询2、只根据nested对象外部条件查询3、根据nested对象内部及外部条件查询4、向nested对象数组追加新数据5、删除nested对象数组某一个…

2025中国淄博化工展|淄博化工技术展|淄博化工装备展

CTEE2025第九届中国(淄博)化工技术装备展览会 时间:2025年5月16-18日 地点:山东淄博国际会展中心 主办单位:山东省机械工业科学技术协会 青岛蓝博国际会展有限公司 众所周知,山东省是我国化工大省。2023年上半年&am…

Go GMP:并发编程实践

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【工具】VS Code使用global插件实现代码跳转

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…