【自然语言处理与大模型】LlamaIndex的词嵌入模型和向量数据库

(1)嵌入模型的定义和作用

        嵌入模型(Embedding Model)的本质在于将高维的、稀疏的数据转换为低维的、密集的向量表示,使得这些向量能够在数学空间中表达原始数据的语义信息。作用如下:

  • 降维表示:嵌入模型能够将文本、图像或其它类型的数据映射到一个连续的向量空间中,这个过程通常伴随着维度的降低。例如,一个包含大量词汇的文本可以通过嵌入模型被表示为固定长度的向量。

  • 捕捉语义关系:在生成的向量空间中,相似或相关的概念在空间中的距离较近,而不相关或相异的概念则距离较远。这意味着嵌入模型不仅能捕捉单个词语或数据点的含义,还能反映它们之间的语义关系。在计算嵌入向量之间的相似度时,有多种方法可供选择,如点积、余弦相似度等。LlamaIndex 在默认情况下使用余弦相似度来进行嵌入比较。

  • 应用于各种任务:这些向量表示可以用于各种自然语言处理和机器学习任务,如文本分类、情感分析、问答系统、推荐系统等。通过使用嵌入向量,模型可以在不需要理解人类语言复杂性的情况下,理解和处理输入数据。

  • 基于上下文的学习:对于一些先进的嵌入模型(如BERT及其变体),它们不仅考虑单词本身的含义,还考虑了单词在其出现的上下文中的意义。这种方式极大地提高了对多义词的理解能力,并能更好地捕捉句子层面的语义信息。 

下面介绍一个llamaindex里面最常用的词嵌入类HuggingFaceEmbedding用之前先安装库

pip install llama-index-embeddings-huggingface
# 导入 HuggingFaceEmbedding 类,用于加载本地的词嵌入(Embedding)模型
from llama_index.embeddings.huggingface import HuggingFaceEmbedding# 初始化一个 HuggingFaceEmbedding 实例
# 指定模型路径为本地已经下载好的中文 BGE 模型(版本1.5)
# 该模型可以将文本转换为向量表示(即 Embedding)
embed_model = HuggingFaceEmbedding(model_name="/root/workspace/llm_models/bge_small_zh_v1.5"
)# 使用词嵌入模型对文本 "Hello World!" 进行编码,得到其对应的向量表示
# 注意:虽然这是中文模型,但也能处理英文文本
embeddings = embed_model.get_text_embedding("Hello World!")# 打印向量的长度(维度),通常 BGE 模型输出为 384 或 768 维等
print(len(embeddings))# 打印前5个维度的数值,查看部分向量结果
print(embeddings[:5])

(2)向量数据库ChromaDB

        ChromaDB是LlamaIndex中的一个存储向量数据的组件。它允许用户将文本数据转换为向量,并将这些向量存储在数据库中,以便进行高效的相似性搜索。ChromaDB特别适用于需要快速检索与查询最相似文档的场景。

pip install chromadb
pip install llama-index-vector-stores-chroma

临时存放数据(放在内存里) 

from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.vector_stores.chroma import ChromaClient# 初始化 ChromaVectorStore
vector_store = ChromaVectorStore()# ChromaVectorStore 需要一个 ChromaDB 客户端来存储和管理向量数据。你可以选择连接到一个现有的 ChromaDB 实例,或者创建一个新的临时实例。
# 创建一个临时客户端
chroma_client = chromadb.EphemeralClient()# 创建一个集合
collection_name = "example_collection"
chroma_collection = chroma_client.create_collection(collection_name)# 通过将客户端实例传递给 ChromaVectorStore,可以将其与具体的数据库集合关联起来。
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)# 完成初始化后,您可以使用 ChromaVectorStore 来添加、查询和检索向量数据。

持久存放数据(存在磁盘里)

# 初始化一个 ChromaDB 的持久化客户端,数据将被保存在 "./chroma_db" 目录下
db = chromadb.PersistentClient(path="./chroma_db")# 获取或创建一个名为 "quickstart" 的集合(collection),用于存储向量数据
chroma_collection = db.get_or_create_collection("quickstart")# 将该集合包装成 LlamaIndex 可用的 VectorStore 接口
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)# 创建一个 StorageContext,指定当前使用的 vector_store,用于控制索引如何存储和加载数据
storage_context = StorageContext.from_defaults(vector_store=vector_store)# 使用文档(documents)和 storage_context 构建一个 VectorStoreIndex 索引
# 在此过程中会使用 embed_model 对文档进行嵌入编码,并将结果写入磁盘上的 ChromaDB
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context, embed_model=embed_model
)

从磁盘加载(恢复索引)

# 重新初始化一个 ChromaDB 客户端,指向同一个路径
db2 = chromadb.PersistentClient(path="./chroma_db")# 获取之前创建的 collection(集合)
chroma_collection = db2.get_or_create_collection("quickstart")# 同样包装成 LlamaIndex 的 VectorStore
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)# 从现有的 vector_store 中重建索引,不依赖原始文档
index = VectorStoreIndex.from_vector_store(vector_store,embed_model=embed_model,
)

查询索引:查询引擎会在底层自动将问题嵌入,然后在向量库中查找最相关的文档片段。结合检索结果,生成自然语言的回答。

# 将索引封装为一个查询引擎
query_engine = index.as_query_engine()# 执行自然语言查询:"作者在成长过程中做了什么?"
response = query_engine.query("作者在成长过程中做了什么?")展示响应结果
print(response)

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

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

相关文章

长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南

引言:凌晨三点的告警 "张工!生产库又告警了!"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式,排查发现某核心表的年龄值(Age)已突破20亿大关。经过一夜奋战&#xff0c…

【Elasticsearch入门到落地】12、索引库删除判断以及文档增删改查

接上篇《11、RestClient初始化索引库》 上一篇我们完成了使用RestHighLevelClient创建索引库的代码实现,本篇将讲解如何判断索引库是否存在并删除它,以及如何对索引库中的文档进行增删改查操作。 一、索引库判断与删除 在操作索引库时,有时…

国联股份卫多多与国术科技签署战略合作协议

4月30日,国术科技(北京)有限公司(以下简称“国术科技”)营销中心总经理 王志广、贾雷一行到访国联股份卫多多,同卫多多/纸多多副总裁、产发部总经理段任飞,卫多多机器人产业链总经理桂林展开深入…

linux mcelog inject注入

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、mce inject是什么?二、使用步骤1.操作示例 总结 前言 记录下mce 触发inject和内核打印 内核版本: 5.10.92 开启选项:…

Nginx安全防护与HTTPS部署实战

目录 一:核心安全配置 1:编译安装nginx (1)安装支持软件 (2)创建运行用户,组和日志目录 (3)编译安装nginx (4)添加nginx系统服务 2&#xf…

DeepSeek API接口调用示例(开发语言C#,替换其中key值为自己的key值即可)

示例: DeepSeek官方接口说明文档:对话补全 | DeepSeek API Docs 官网暂未提供C#代码实现:(以下为根据CURL接口C#代码调用) using System; using System.Collections.Generic; using System.Linq; using System.Text; …

一文掌握 LVGL 9 的源码目录结构

文章目录 📂 一文掌握 LVGL 9 的源码目录结构🧭 顶层目录概览📁 1. src/ — LVGL 的核心源码(🔥重点)📁 2. examples/ — API 示例📁 3. demos/ — 综合演示项目📁 4. do…

大物重修之浅显知识点

第一章 质点运动学 例1 知识点公式如下: 例2 例3 例4 例5 例6 第四章 刚体的转动 例1 例2 例3 例4 例5 例6 第五章 简谐振动 例1 例2 例3 第六章 机械波 第八章 热力学基础 第九章 静电场 第十一章 恒定磁场…

安卓的systemservice 、systemserver、systemservicemanage和servicemanage用法

以下是对安卓中SystemService、SystemServer、SystemServiceManager和ServiceManager的讲解和区别: SystemService 定义:是Framework中对应特定功能的服务,供其他模块和App调用,如BatteryService、PowerManagerService等。它是所…

LDO与DCDC总结

目录 1. 工作原理 2. 性能对比 3. 选型关键因素 4. 典型应用 总结 1. 工作原理 LDO LDO通过线性调节方式实现降压,输入电压需略高于输出电压(压差通常为0.2-2V),利用内部PMOS管或PNP三极管调整压差以稳定输出电压。其结构简单…

系统的从零开始学习电子的相关知识,该如何规划?

一、基础理论奠基(6-12个月) 1.1 数学与物理基础 核心内容: 微积分与线性代数(高频电路建模必备)复变函数与概率论(信号处理与通信系统基础)电磁场基础(麦克斯韦方程组的物理意义&…

(x ^ 2 + 2y − 1) ^ 3 − x ^ 2 * y ^ 3 = 1

二元高次方程 EquationSolver20250509.java package math;import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optim.InitialGuess; import org.apache.commons.math3.optim.MaxEval; import org.apache.commons.math3.optim.P…

解决应用程序在JAR包中运行时无法读取类路径下文件的问题

问题情景 java应用程序在IDE运行正常,打成jar包后执行却发生异常: java.io.FileNotFoundException: class path resource [cert/sync_signer_pri_test.key] cannot be resolved to absolute file path because it does not reside in the file system:…

Mac QT水平布局和垂直布局

首先上代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> #include<QVBoxLayout>//垂直布局 #include<QHBoxLayout>//水平布局头文件 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …

uniapp中用canvas绘制简单柱形图,小容量,不用插件——简单使用canvas

uniapp中用canvas绘制简单柱形图&#xff0c;小容量&#xff0c;不用插件——简单使用canvas 完整代码 <template><view><!-- 学习数据 --><!-- 头部选项卡 --><view class"navTab"><view :class"listIndexi?activite:"…

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

Unity UI Sprite UI资源导入详解图片导入项目Texture TypeTexture ShapeAdvanced Setting 高级设置 图片设置案例常见细节问题 知识点详解来源 UI资源导入详解 Unity中的UI资源有图片、矢量图、字体、预制体、图集、动画等等资源。 这其中图片是最重要以及最基础的资源组成&a…

【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题

个人主页 &#xff1a; zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 递归、搜索和回溯递归搜索VS 深度优先遍历 VS 深度优先搜索 VS 宽度优先遍历 VS 宽度优先搜索 VS 暴搜回溯与剪枝 1 面试题 08.06. 汉诺塔问题1.1 分析…

快手618购物节招商启动,国补可叠加跨店满减等大促补贴

5月8日&#xff0c;快手电商在杭州召开「破峰2025」商家大会。会上&#xff0c;快手电商C端产品负责人孔慧介绍了快手电商全域经营年度策略以及新锐商家长效经营方法论&#xff0c;并宣布快手618购物节招商报名正式启动。 信任社区生态是快手电商发展的基石&#xff0c;2025年…

AI服务器通常会运用在哪些场景当中?

人工智能行业作为现代科技的杰出代表&#xff0c;在多个领域当中发展其强大的应用能力和价值&#xff0c;随之&#xff0c;AI服务器也在各个行业中日益显现出来&#xff0c;为各个行业提供了强大的计算能力和处理能力&#xff0c;帮助企业处理复杂的大规模数据&#xff0c;本文…

MySQL高可用方案全攻略:选型指南与AI运维实践

MySQL高可用方案全攻略:选型指南与AI运维实践 引言:当数据库成为业务生命线 在数字化时代,数据库就是企业的"心脏"。一次数据库宕机可能导致: 电商网站每秒损失上万元订单游戏公司遭遇玩家大规模流失金融系统引发连锁反应本文将为你揭秘: MySQL主流高可用方案…