前期知识回顾

Java程序员转大模型开发 基础篇
Java程序员转大模型开发 实战篇-rag系统连接redis
Java程序员转大模型开发 基础篇-向量数据库 看这一篇全盘掌握



前言

本文将为大家介绍智能体开发中的关键组件——文本向量模型。我们将从基本概念入手,系统地讲解文本向量模型的定义、核心价值及应用场景。


什么是文本向量模型

文本向量模型本质上是通过数学转换,将文本信息表示为固定维度的数值向量(如768维或1024维)。这种表示方式使计算机能够理解语义信息,并计算文本间的相似度。

为什么要使用向量模型

在RAG项目开发中,我们需要借助向量数据库实现信息检索功能(关于向量数据库的详细介绍,可参考这篇文章:Java程序员转大模型开发 基础篇-向量数据库 看这一篇全盘掌握)。为了将数据存入向量数据库,我们需要使用各厂商提供的向量模型进行数据向量化转换。

相关网站推荐

Hugging Face 是一个专注于开源 AI 模型的平台,该网站汇集了大量优质的开源模型代码资源。(需要科学上网)

https://huggingface.co/maidalun1020/bce-embedding-base_v1/tree/main

文本向量模型

今天为大家介绍有道团队开源的文本向量模型BCE-Embedding-Base_v1。该模型已在Hugging Face平台开源,接下来我将详细说明其使用方法。

1.如何下载

首先我们要下载这个BCE-Embedding-Base_v 推荐大家使用的方法是通过sentence_transformers 这个开源库进行模型下载。

from sentence_transformers import SentenceTransformer

# 自定义模型缓存路径(替换成你想要的路径)
custom_cache_path = "D:/trace/RagText/bce-embedding-base_v1"

# 加载模型(自动下载到指定路径,首次需联网)
model = SentenceTransformer(
    "maidalun1020/bce-embedding-base_v1",
    cache_folder=custom_cache_path
)

# 验证:生成向量,说明模型下载成功
vec = model.encode("模型下载成功测试")
print(f"向量维度:{len(vec)}")
print(f"模型已保存到:{custom_cache_path}")

成功下载模型后,所需的可执行模型目录路径为:
在这里插入图片描述

2.如何使用文本向量模型

首先我们需要引入的库为:

from sentence_transformers import SentenceTransformer
import json
import numpy as np
import chromadb

在这里我们chromad的知识以及在之前的文章里面有过讲述,感兴趣的朋友可以查看-Java程序员转大模型开发 基础篇-向量数据库 看这一篇全盘掌握

使用方式

#创建初始模型
modle=SentenceTransformer(r'bce-embedding-base_v1')
# 对指令进行向量化 convert_to_numpy=True 输出格式为 NumPy 数组
instruction_embeddings = modle.encode(instruction, convert_to_numpy=True)
#对转换的向量进行保存
np.save(r'./instruction_embeddings.npy',instruction_embeddings)

以下是文本向量模型转换与存储的核心代码步骤。接下来我将演示一个简单示例:使用bce-embedding-base_v1模型进行向量转换,并通过chromadb向量数据库实现本地存储。

#创建初始模型
modle=SentenceTransformer(r'bce-embedding-base_v1')
with open (r'./health_qa_500.json',encoding='utf-8') as f:
    #将文本读取成字典
    data=json.load(f)
#问题 data 其实是一个字典
instruction=[i["instruction"]for i in data]
#答案
output=[i["output"]for i in data]
# 对指令进行向量化 convert_to_numpy=True 输出格式为 NumPy 数组
instruction_embeddings = modle.encode(instruction, convert_to_numpy=True)
np.save(r'./instruction_embeddings.npy',instruction_embeddings)
#指定数据库路径
client = chromadb.PersistentClient(path='./collection.pkl')
#从向量数据库中创建一个集合
collection = client.create_collection(name="health_qa")

for i,(sen,emb) in enumerate(zip(instruction,instruction_embeddings)):
    collection.add(
        documents=[sen],#原始文本(问题) 相当于书的标题
        embeddings=[emb.tolist()],#向量(问题生成)相当于书的目录
        ids=[f"id{i}"],
        metadatas=[{'output':output[i]}] # 存储原始文本(答案)相当于书的正文
    )

我整理了 health_qa_500.json 文件,有需要的朋友可以关注后私信我获取。

总结

以上就是关于文本向量数据库的介绍,以及常见的使用方式。如有任何疑问,欢迎通过私信或留言的方式联系我。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐