当前位置: 首页 > news >正文

【自然语言处理与大模型】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)

相关文章:

  • laravel 12 监听syslog消息,并将消息格式化后存入mongodb
  • CVE-2025-24813:Apache Tomcat RCE 漏洞分析
  • CyberSentinel AI开源程序 是一个自动化安全监控与AI分析系统
  • Tomcat中Web应用程序停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册出现原因
  • 【落羽的落羽 C++】list及其模拟实现
  • 某公园楼栋自由曲面薄壳结构自动化监测
  • 薪技术|0到1学会性能测试第45课-apache调优技术
  • Apache Doris 使用指南:从入门到生产实践
  • 2025 后端自学UNIAPP【项目实战:旅游项目】2、安装下载引用前端UI框架:uview-plus
  • 从试错到智能决策:Python与强化学习优化自动驾驶策略
  • 高等数学第五章---定积分(§5.2微积分基本定理)
  • Labview培训5_以空间换时间的数据采集策略介绍
  • 消除AttributeError: module ‘ttsfrd‘ has no attribute ‘TtsFrontendEngine‘报错输出的记录
  • 在sheel中运行Spark
  • Python之内省与反射应用
  • 前端-HTML+CSS+JavaScript+Vue+Ajax概述
  • Axure : 列表分页、 列表翻页
  • 链表结构深度解析:从单向无头到双向循环的实现全指南
  • VBA ListBox/ComboBox 响应鼠标滚轮操作
  • FPGA实战项目1——坦克大战
  • 印度袭击巴基斯坦已致至少3人死亡
  • 重庆荣昌机关食堂五一期间受热捧:肉类总消耗2万斤,单日吃卤鹅800只
  • 商务部:自5月7日起对原产于印度的进口氯氰菊酯征收反倾销税
  • 五一假期上海两大机场客流量超193万人次,创历年同期最高
  • 9金收官!跳水世界杯总决赛朱子锋、程子龙包揽男子10米台冠亚军
  • 解放日报头版:上海张江模力社区托举“年轻的事业”