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

向量数据库及ChromaDB的使用

什么是向量数据库?

向量数据库(Vector Database),也叫矢量数据库,主要用来存储和处理向量数据。

在数学中,向量是有大小和方向的量,可以使用带箭头的线段表示,箭头指向即为向量的方向,线段的长度表示向量的大小。

图像、文本和音视频这种非结构化数据都可以通过某种变换或者嵌入学习转化为向量数据存储到向量数据库中,从而实现对图像、文本和音视频的相似性搜索和检索。这意味着您可以使用向量数据库根据语义或上下文含义查找最相似或相关的数据,而不是使用基于精确匹配或预定义标准查询数据库的传统方法。从技术上来讲,要实现对非结构化数据的精确匹配是很困难的,因为数据没有结构,就不存在类似关系型数据库中的表定义,无法通过某个字段(属性)来查询。

可以将向量理解为原始非结构化数据的一个标识(似hash但非hash,可以类比),任何一个非结构化数据经过某种embedding算法后,都能转换成一个向量(向量维数一般很高,成千上万)。在存储时会将向量和对应的原始非结构化数据关联起来,找到向量就能找到对应的原始数据。在查询时,首先将待查询的条件进行embedding,查询条件就转换成了一个向量。然后比较条件向量和数据库中存在的原始数据向量,返回最相似的N个原始数据向量,进而得到N个原始数据的查询结果。

这里有三个关键点:

1. 不同的结构化数据的embedding的算法都有哪些?

2. 怎样才能在大量的原始非结构化数据向量中找到与查询向量最相似的N个向量?一个一个去暴检查,还是有索引相关的技术(类似MySQL中的B+ Tree)?

3. 怎么判断两个向量最相似?

不同的结构化数据的embedding的算法都有哪些?

Embedding又叫嵌入,用于将复杂的非结构化数据表示为结构化的向量格式,以便在向量数据库中存储以及实现对非结构化数据的相似性判断。一旦数据被嵌入为向量,向量数据库可以执行相似性搜索,以找到在向量空间中彼此接近的数据点,这对于推荐、聚类和分类非常有用。

文本嵌入

Word2Vec:根据语料库中的上下文将单词转换为向量。

GloVe(全局向量表示):使用词共现统计生成嵌入。

FastText:通过考虑子词信息扩展Word2Vec。

BERT(双向编码器表示):为句子和单词生成上下文感知的嵌入。

GPT(生成预训练变换器):提供嵌入作为其语言建模能力的一部分。

Sentence Transformers:专为句子级别嵌入设计。

图像嵌入

卷积神经网络(CNNs):从图像中提取特征,用于分类和识别任务。

ResNet、VGG、Inception:用于生成图像嵌入的预训练CNN模型。

视觉变换器(ViT):将变换器架构应用于图像数据。

视频嵌入

3D卷积网络:通过考虑时间信息扩展CNN以处理视频数据。

循环神经网络(RNNs)/ LSTMs:处理视频帧序列。

I3D(膨胀3D卷积网络):用于视频动作识别。

音频嵌入

MFCC(梅尔频率倒谱系数):传统的音频特征提取方法。

基于频谱图的CNNs:使用频谱图作为输入的CNN模型。

WaveNet:用于生成音频嵌入的深度神经网络架构。

OpenAI的Whisper:用于语音识别和嵌入的模型。

这些算法和模型根据应用的具体需求选择,例如数据类型、所需的准确性水平和计算资源。嵌入使得在向量数据库中对大规模非结构化数据进行高效处理和分析成为可能。

怎样才能在大量的原始非结构化数据向量中找到与查询向量最相似的N个向量?

组织和索引嵌入后的向量是向量数据库和相似性搜索系统的核心任务,类似MySQL中的B+ tree,是向量数据库最核心的地方。为了高效地存储和检索这些向量,通常会使用专门的算法和数据结构。以下是一些常见的组织和索引嵌入向量的算法和方法:

基于树的算法

KD-Tree: 用于低维空间的最近邻搜索。通过递归地将空间划分为超矩形来组织数据。在高维空间中性能下降。

Ball Tree: 适用于高维空间。使用球体而不是矩形来划分空间。在某些情况下比 KD-Tree 更有效。

VP-Tree (Vantage Point Tree): 适合度量空间的最近邻搜索。通过选择一个“视点”并根据距离划分空间。

Annoy (Approximate Nearest Neighbors Oh Yeah): 用于大规模数据集的近似最近邻搜索。构建多个树并在查询时搜索这些树。适合内存受限的环境。

基于图的算法

HNSW (Hierarchical Navigable Small World): 基于图的近似最近邻搜索算法。构建一个小世界网络以实现快速搜索。在许多实际应用中表现出色。

基于Hash的算法

LSH (Locality-Sensitive Hashing): 用于近似最近邻搜索。通过哈希函数将相似的项映射到相同的桶中。适合处理大规模数据集。

基于倒排索引的算法

主要用于文档的搜索,倒排索引首先提取关键词,然后将所有与此关键字相关的文档都关联到这个关键字,这样查询到这个关键字以后就能快速找到对应的文档。

怎么判断两个向量最相似?

向量的距离可以用来衡量两个向量的相似度,常见的有余弦距离,欧式距离和向量内积几种方式。

余弦距离

通过计算两个向量的夹角余弦值来计算相似性。夹角为0时相似度为1,夹角90度时,相似度为0,夹角180时相似度为-1,因此余弦相似度的取值范围为[-1,1]。

欧式距离

欧式距离全称是欧几里得距离,度量的是空间上两个点之间的连线距离,空间上的点都可以看着是从原点出发的向量。

向量内积

又称数量积,点积,得到的是一个数字。两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:a·b=a1b1+a2b2+……+anbn。

通过三角形余弦定理可推导出,

a1b1+a2b2+……+anbn = |a||b|cos(θ),等号的左边部分刚好就是向量的内积。所以就有了上面余弦距离中求cos(θ)的公式了。

向量的内积在几何上表示为其中一个向量(a)的距离(|a|)与另一个向量(b)在此向量(a)上的投影(|b|cos(θ))的距离的乘积,即:|a||b|cos(θ)。

向量数据库在LLM中的作用

在大规模语言模型(LLM)中,向量数据库扮演着重要角色,主要用于高效存储和检索嵌入向量。由于我们的文档等非结构化数据可能非常的多,也可能在不停的增加和变化,且这些文档可能是内部非公开的。这些因素就决定了不可能实时训练基于这些非公开数据的大模型,训练的成本和代价太高了。向量数据库在一定程度上可以解决此问题,其主要作用是可以实时存储这些大量的非结构化数据,通过查询条件从向量数据库中查询到最合适(最相关,最相似,最相近,etc.)的提示词(Prompt),再将这些提示词送入到LLM模型中进行推理。如果没有向量数据库,我们人为很难从大量的非结构化数据中找到最合适的上下文关系,可能导致LLM理解错误,答非所问等。

以下是向量数据库在 LLM 中的几个关键用途和优势:

高效的相似性搜索

  • 快速检索: 向量数据库能够快速执行相似性搜索,找到与查询向量最相似的向量。这对于 LLM 的应用场景,如语义搜索、推荐系统和问答系统,至关重要。
  • 近似最近邻搜索: 向量数据库支持近似最近邻搜索算法(如 HNSW、LSH),在大规模数据集上实现快速检索,同时保持较高的准确性。

处理大规模数据

  • 扩展性: 向量数据库设计用于处理大规模数据集,能够存储和管理数百万甚至数十亿的嵌入向量。
  • 分布式架构: 向量数据库通常支持分布式架构,允许在多个节点上分布存储和计算,以提高处理能力和容错性。

实时更新和查询

  • 动态数据: 向量数据库支持实时插入、更新和删除操作,使得 LLM 可以处理动态数据集,适应不断变化的输入和需求。
  • 低延迟查询: 向量数据库优化了查询性能,能够在低延迟下提供实时响应,这对于交互式应用至关重要。

语义理解和增强

  • 语义搜索: 通过嵌入向量,LLM 可以进行语义搜索,理解查询的意图和上下文,而不仅仅是字面匹配。
  • 知识增强: 向量数据库可以存储丰富的语义信息,帮助 LLM 在生成内容时参考和利用这些信息。

集成和扩展

  • 与LLM集成: 向量数据库可以无缝集成到 LLM 的工作流中,提供嵌入存储和检索功能,增强模型的能力。
  • 支持多模态数据: 向量数据库不仅限于文本嵌入,还可以存储图像、音频等多模态数据的嵌入,支持更复杂的应用场景。

常见的向量数据库

Elasticsearch

ElasticSearch是一个支持各种类型数据的分布式搜索和分析引擎。 Elasticsearch 支持的数据类型之一是矢量字段,它存储密集的数值矢量。

Faiss

Meta的Faiss是一个用于高效相似性搜索和密集向量聚类的库。 它包含搜索任意大小的向量集的算法,直到可能不适合 RAM 的向量集。 它还包含用于评估和参数调整的支持代码。

Milvus

Milvus是一个开源矢量数据库,可以管理万亿矢量数据集,支持多种矢量搜索索引和内置过滤。综合表现Milvus非常好,性能强大。

Pgvector

pgvector是PostgreSQL 的开源扩展,允许你在数据库中存储和查询向量嵌入。 它建立在 Faiss 库之上,Faiss 库是一个流行的密集向量高效相似性搜索库。 pgvector 易于使用,只需一条命令即可安装。

ChromaDB

Chroma 是轻量级的向量数据库,支持内存模式,文件模式和服务模式,底层基于sqlite3。

ChromaDB安装及使用

安装

pip3 install chromadb

Note1:ChromaDB 默认使用 all-MiniLM-L6-v2 作为文本embedding算法,会自动下载到类似下面目录: /home/sunny/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx.tar.gz

all-MiniLM-L6-v2 是一种用于生成文本嵌入的预训练模型,属于 Sentence Transformers 库的一部分。它是基于微软的 MiniLM(Miniature Language Model)架构开发的,专门设计用于高效地生成句子级别的嵌入。

特点:

  • 架构: MiniLM 是一种轻量级的 Transformer 模型,旨在提供高效的性能和较小的计算资源需求。
  • 层数: L6 表示该模型有 6 层 Transformer。
  • 用途: 主要用于生成句子嵌入,以便进行语义相似性比较、聚类、分类等任务。
  • 效率: all-MiniLM-L6-v2 以其较小的尺寸和快速的推理速度而闻名,非常适合在资源受限的环境中使用。

使用场景:

  • 语义搜索: 通过生成嵌入来比较文本的语义相似性。
  • 文本分类: 将句子嵌入作为特征输入到分类器中。
  • 聚类: 使用嵌入进行文本聚类分析。

Note2: 目前ChromaDB只支持HNSW(Hierarchical Navigating Small World)的图算法作为向量数据的索引和查询。HNSW是一种基于NSW的改进方案,主要是利用跳表的思想,使用分层来实现,每层都是一个NSW,即也可以叫做分层的NSW方法。越上层,节点数稀疏,节点之间距离越远,越往下,节点变多,连接也增加,平均距离越近。ChromaDB中nhsw相关的配置:

Configuration - Chroma Cookbook

ChromaDB HelloWorld

hello_world.py

# import chromadb and create client
import chromadbclient = chromadb.Client()
# client = chromadb.PersistentClient(path="/home/sunny/work/llm/chromadb/study/hello_world/mydb.db")
# client = chromadb.HttpClient(host='localhost', port=8000)collection = client.get_or_create_collection("my-collection")# add the documents in the db
collection.add(documents=["This is a document about cat", "This is a document about car", "This is a document about bike"],metadatas=[{"category": "animal"}, {"category": "vehicle"}, {"category": "vehicle"}],ids=["id1", "id2","id3"]
)# ask the querying to retrieve the data from DB
results = collection.query(query_texts=["vehicle"],n_results=1
)
print(results)

ChromaDB支持的三种模式,Memory,Client,Server,

Memory
client = chromadb.Client()

 

Client

chroma_client = chromadb.PersistentClient(path="E:\Data\chroma\mydb.db")

 

sunny@xxx:~/work/llm/chromadb/study/hello_world/mydb.db$ ll

total 180

drwxrwxr-x 3 sunny sunny   4096 May 20 14:41 ./

drwxrwxr-x 3 sunny sunny   4096 May 20 14:41 ../

drwxrwxr-x 2 sunny sunny   4096 May 20 14:41 47f53b4e-9d91-4c44-9ed4-e6c586be7a30/

-rw-r--r-- 1 sunny sunny 172032 May 20 14:41 chroma.sqlite3


注意:chroma.sqlite3中存放的是原始文档数据,metadata等。47f53b4e-9d91-4c44-9ed4-e6c586be7a30/中存放是的是向量的索引等。

Server

vi ~/.bashrc

export PATH=$PATH:/home/sunny/.local/bin

source ~/.bashrc

chroma run --path /home/sunny/work/llm/chromadb/study/hello_world/server_mode_path/

sunny@xxx:~/work/llm/chromadb/study/hello_world$ ll server_mode_path/

total 184

drwxrwxr-x 3 sunny sunny   4096 May 20 14:53 ./

drwxrwxr-x 4 sunny sunny   4096 May 20 14:44 ../

drwxrwxr-x 2 sunny sunny   4096 May 20 14:52 4c440ead-9a93-45c8-8509-bc8b80948760/

-rw-r--r-- 1 sunny sunny 176128 May 20 14:53 chroma.sqlite3

执行结果,

python3 hello_world.py
{'ids': [['id2']], 'embeddings': None, 'documents': [['This is a document about car']], 'uris': None, 'included': ['metadatas', 'documents', 'distances'], 'data': None, 'metadatas': [[{'category': 'vehicle'}]], 'distances': [[0.8069301843643188]]}

查询 embedding 和距离

这个示例用于展示查询结果对应的embedding向量,以及和查询向量之间的距离。

embedding_distance.py

# import chromadb and create client
import chromadbclient = chromadb.Client()
# client = chromadb.PersistentClient(path="/home/sunny/work/llm/chromadb/study/hello_world/mydb.db")
# client = chromadb.HttpClient(host='localhost', port=8000)collection = client.get_or_create_collection("my-collection")# add the documents in the db
collection.add(documents=["This is a document about cat", "This is a document about car", "This is a document about bike"],metadatas=[{"category": "animal"}, {"category": "vehicle"}, {"category": "vehicle"}],ids=["id1", "id2","id3"]
)# ask the querying to retrieve the data from DB
results = collection.query(query_texts=["vehicle"],n_results=2,include=['embeddings', "metadatas","documents","distances"]
)embeddings = results['embeddings']
for embedding in embeddings:print(embedding)distances = results['distances']
for distance in distances:print(distance)

执行结果,

python3 embedding_distance.py[[-5.51235713e-02  1.52854636e-01  3.12788226e-02  2.36310791e-028.60533770e-03  3.87765057e-02 -2.06919331e-02  9.81663391e-02-9.27124638e-03 -7.19712907e-03  5.14170043e-02  7.82726333e-028.43452197e-03 -2.50998959e-02 -1.18557192e-01  1.19964266e-03-3.31853069e-02  2.67846659e-02 -1.56946499e-02  6.82560652e-023.89062092e-02  6.76235110e-02  3.28093618e-02  1.92673225e-02-6.98528364e-02  7.97063038e-02 -6.35242909e-02  3.62504460e-023.50057520e-02 -2.77410280e-02 -2.05433983e-02  5.67422621e-027.79896379e-02  6.11019833e-03  1.78695545e-02 -1.06959574e-012.93507595e-02  7.49049429e-03  3.73246893e-02  3.16817989e-03-3.07840537e-02 -1.27698302e-01 -3.40455882e-02  1.64174139e-025.67837171e-02  5.96045777e-02  9.44891479e-03  2.05571465e-023.53460461e-02 -1.63447727e-02 -7.61030540e-02 -5.60337678e-03-3.03025432e-02 -4.42031287e-02 -2.38465853e-02  3.68492156e-02-3.12719978e-02  5.50226048e-02 -4.74394597e-02 -4.76584695e-028.89088959e-02 -8.28462746e-03 -7.26111382e-02  5.59074171e-025.71168810e-02  2.96091400e-02  7.19457772e-03 -6.24391297e-03-5.19460626e-02  2.01907624e-02  5.07644191e-02 -1.77446264e-033.11921146e-02 -2.75035687e-02 -2.76914537e-02 -1.03084430e-012.35482994e-02  1.86237833e-03  2.94787306e-02 -9.59735289e-02-7.43687106e-03 -2.19864547e-02  1.29540134e-02 -4.54264209e-02-1.03222840e-02 -1.22361518e-02  3.77193615e-02 -4.38989997e-02-2.89154723e-02  4.71794717e-02 -5.57317585e-02 -9.73769650e-025.66139296e-02 -2.51488574e-02 -7.95028880e-02  7.15861246e-021.37667852e-02 -5.65953851e-02  8.93380344e-02  8.02760199e-029.66410860e-02  4.63791415e-02  6.39920756e-02  3.50891463e-02-1.02184318e-01 -3.18480190e-03 -4.61248234e-02  1.10937515e-02-1.53139895e-02 -5.46158291e-03  1.79416556e-02 -1.26942955e-02-1.07598685e-01 -8.75363871e-03 -4.78730164e-02 -5.48802428e-021.95106808e-02  2.08845958e-02  4.65220809e-02  2.13828515e-02-5.25453761e-02 -6.48660287e-02 -2.02535316e-02 -2.28790287e-03-3.80262807e-02 -5.85148185e-02  5.91957904e-02 -9.61317223e-33-4.92373742e-02  5.86195244e-03 -1.83777064e-02  9.46880728e-02-6.98947115e-03  1.23149576e-03  5.23560913e-03  2.17139926e-02-5.95224239e-02 -1.01895314e-02  1.76708177e-02 -3.79525013e-02-3.45160589e-02 -2.51057986e-02  5.64029673e-03  4.47063632e-02-1.74009353e-01  2.39241170e-03 -2.40121391e-02 -6.14991337e-02-1.36439130e-02  4.96444404e-02  5.17504252e-02 -2.39632614e-026.23342916e-02  6.43768907e-02  3.57293757e-03 -4.63726409e-02-2.58617997e-02  3.52490321e-02  3.14319506e-02  9.49108228e-02-1.29878742e-03 -3.03832553e-02  7.61224306e-04  9.22478735e-02-8.80702138e-02 -7.86386430e-02 -3.36390804e-03 -6.46708393e-03-2.13944819e-03 -4.81416769e-02 -3.62363793e-02 -2.26839408e-023.52595118e-03  8.20232406e-02  2.14677434e-02 -1.07164672e-026.46596551e-02  2.37780288e-02 -3.85642909e-02 -3.86537947e-02-3.11590135e-02 -4.70272265e-02  4.86570504e-03  5.34939542e-02-3.07364156e-03  7.25965500e-02 -5.17596826e-02 -2.26730611e-02-4.25514206e-02  7.28469416e-02  2.82381829e-02 -1.60674248e-02-2.88853589e-02  3.56471799e-02 -1.17264323e-01 -4.90986230e-036.14833310e-02  4.18692408e-03 -4.46545891e-02 -1.75290238e-02-1.50426710e-03 -1.67544279e-02 -7.98405800e-03  7.06051737e-023.34911123e-02 -5.48080094e-02 -8.62293169e-02 -4.87209344e-03-1.37303039e-01 -2.68498156e-03  3.38269509e-02 -1.34643316e-022.77790762e-02  4.17912863e-02  4.41535376e-03 -4.22975831e-022.99845878e-02  1.35622900e-02 -5.65679139e-03  7.55025726e-03-6.68863505e-02 -4.75143492e-02  4.28354405e-02  4.86053359e-33-2.27480289e-03 -4.56633195e-02 -4.46879072e-03  5.31673990e-023.03630810e-02 -9.05754976e-03 -4.85570580e-02  3.80327702e-02-1.31005561e-02  6.25618175e-02 -6.40660152e-02 -3.63184251e-028.09927583e-02  3.39861289e-02  5.33703007e-02 -3.15433927e-026.54230192e-02 -6.79924637e-02 -5.35797700e-02  3.95634323e-02-6.12724088e-02  1.54063329e-02  2.33375281e-03  4.02996205e-021.84919611e-02 -8.47442076e-03  2.14818167e-03 -9.58596319e-02-1.67829229e-03 -5.13587147e-02  1.18147405e-02 -6.53317645e-02-8.87418017e-02  7.64792487e-02 -6.93091974e-02 -5.17678112e-027.77170062e-02  7.42535992e-03 -6.74340874e-02  1.03290267e-021.17086591e-02 -3.62063758e-02  7.88650885e-02  3.49415094e-02-1.81160327e-02 -6.68865293e-02  2.87711155e-02  2.62637045e-024.23633680e-02  4.15552668e-02  9.60361436e-02 -2.66494434e-021.18866898e-02  1.86837260e-02 -5.27411066e-02  2.82303914e-025.86426705e-02 -3.60708274e-02  6.20547356e-03  8.01408812e-026.44527972e-02  6.71107471e-02 -6.66696429e-02  4.72092927e-02-1.78784002e-02 -1.83032259e-01 -1.02186359e-01 -2.33891048e-02-3.01547605e-03 -3.50991040e-02  5.33243604e-02 -2.43201330e-02-3.77843380e-02 -3.85170826e-03  6.01191400e-03 -2.67302375e-024.73886803e-02 -2.12318413e-02 -9.53720883e-03 -8.08621272e-026.20906428e-02  2.43735802e-03 -6.63686171e-03  1.21713243e-011.58442296e-02 -7.24592665e-03 -4.95810658e-02 -4.52359356e-024.43184376e-02  4.16592397e-02 -2.49886941e-02  9.18951929e-02-6.12047352e-02  2.86937654e-02 -1.37771919e-01 -1.68921126e-082.67703384e-02  1.74532570e-02  1.53461508e-02 -5.62684648e-02-1.07499491e-02  3.69195193e-02  8.07241723e-02 -2.29682550e-02-1.05804592e-01  2.59130131e-02  6.07567467e-02 -1.06461588e-021.18667698e-02  1.72446517e-03 -1.26989689e-02 -2.59244889e-021.27300499e-02 -2.67052976e-03 -5.04424162e-02  2.47387085e-022.11685877e-02 -1.56346280e-02 -2.73997989e-02  5.71284927e-022.25512013e-02 -8.63282196e-03  3.20629291e-02  2.70428583e-025.22802956e-02 -8.40447545e-02 -4.92905714e-02  1.12147607e-019.35171321e-02 -2.76911743e-02  3.07648554e-02  2.70773936e-026.70321882e-02  4.79361452e-02 -1.92931574e-02 -7.58080781e-027.66231418e-02  3.09634022e-02 -3.73509154e-02  4.69642691e-028.07070285e-02  2.79405713e-02 -2.96845920e-02 -2.09198240e-02-4.41821627e-02 -1.13287903e-02 -2.18940154e-02 -6.50739521e-022.83642784e-02  1.04757249e-01 -6.51283339e-02  3.54287960e-039.68760904e-03  1.28732575e-03  5.71171194e-03 -1.08499765e-015.01627661e-02  1.04212090e-01  5.70583194e-02  3.70089523e-02][-5.58803156e-02  1.76175684e-01 -2.07401738e-02  6.52905874e-05-4.58630696e-02  1.64273456e-02 -2.60989666e-02  7.58589879e-02-1.81473643e-02  3.30786631e-02  4.35174257e-02  7.50922263e-028.82234350e-02 -4.29246910e-02 -9.97861102e-02  7.21197724e-02-1.91027485e-02  4.41086292e-02  4.70905611e-03  8.20366815e-025.64754233e-02  8.66378248e-02  2.22304370e-02  4.43637520e-02-3.85643579e-02  3.41000035e-02 -9.85762328e-02  1.86521560e-021.77723970e-02 -2.21531615e-02 -2.41587721e-02  9.82543305e-021.00167707e-01 -2.06647534e-02 -1.64003018e-02 -3.15253362e-025.87913059e-02  3.77776325e-02  3.94225493e-02  1.33492833e-03-1.45638539e-02 -6.48019016e-02 -1.15112290e-02  3.31919082e-038.23054686e-02  1.21216036e-01  8.26479774e-03 -5.43749444e-02-1.21267443e-03  2.95868833e-02 -3.67843956e-02 -2.04603188e-023.70622724e-02 -2.48956885e-02  1.03580020e-02  3.91912088e-03-9.88640860e-02  4.02636677e-02 -2.34435666e-02 -1.06535144e-011.06818706e-01  2.20163129e-02 -8.45870674e-02  8.00049156e-028.76241997e-02  3.03576291e-02  2.59762909e-03 -4.31507006e-02-3.49370353e-02 -5.20847254e-02  5.28764492e-03 -5.63459983e-03-6.09374372e-03 -5.64415231e-02 -2.69918181e-02 -7.64575973e-022.10034233e-02 -4.30447701e-03 -7.03549609e-02 -6.40655607e-02-7.94465467e-02 -4.33908887e-02  8.62805769e-02  2.82304492e-024.88971956e-02  8.81604571e-03  5.93085103e-02 -1.45062301e-02-1.32659087e-02  2.21131649e-02 -6.14198074e-02 -5.08657880e-024.19579558e-02 -4.40267939e-03 -9.99284163e-02  5.20171151e-02-3.86213399e-02 -4.82078604e-02  5.80198094e-02  9.86963362e-021.04035206e-01  1.55172441e-02  1.31643578e-01  5.71080595e-02-8.53131041e-02 -3.23780850e-02 -1.59796719e-02  1.71956904e-02-9.65563813e-04  1.23554980e-02  1.77834893e-03 -2.10377052e-02-5.95345423e-02  1.02031967e-02 -1.09771546e-02 -2.51441896e-02-3.52580994e-02  4.68253680e-02  1.00817733e-01  1.81610708e-03-2.55462192e-02  2.58991960e-02 -8.14333372e-03  3.87092377e-03-7.02504516e-02 -7.38867223e-02  2.91569065e-02 -8.54128522e-33-5.19148931e-02  1.64264329e-02  5.85617498e-03  3.99673618e-021.45331509e-02 -7.72146657e-02 -2.71554315e-03 -6.49270266e-02-4.72497642e-02 -1.85515429e-03  3.34825516e-02  1.21013755e-025.10268919e-02  1.48508791e-02  1.80548355e-02 -3.11886948e-02-1.34413555e-01 -3.99939120e-02  1.68142132e-02  6.81218645e-03-2.37114402e-03 -1.14972638e-02  2.63181422e-02 -5.95327653e-031.77239385e-02  3.62066962e-02  5.70673756e-02 -2.07903180e-02-5.24219051e-02  4.33677174e-02 -1.82509404e-02  4.00153957e-021.16102109e-02 -5.47469519e-02  2.78692804e-02  4.77705412e-02-2.91873589e-02 -5.76392561e-02 -2.08287612e-02 -1.29495270e-03-1.02139888e-02 -9.72446129e-02 -3.94572355e-02 -4.13814038e-023.07868570e-02  9.68698859e-02  3.06438785e-02  7.93362036e-023.91537622e-02  2.75275856e-02 -5.82632385e-02 -2.23299861e-03-6.02646684e-03 -2.17402726e-02 -1.67722441e-02 -1.40845031e-022.39696866e-03  5.81234097e-02 -8.32505375e-02  3.90641056e-02-6.57045050e-03  5.79387024e-02  8.67432973e-05  2.09339578e-02-6.42830357e-02 -5.01946872e-03 -9.76422429e-02 -4.26191464e-026.00178428e-02 -5.21645583e-02 -7.26931393e-02  1.32500436e-025.70796989e-02  2.10500471e-02  1.52225541e-02  3.68148871e-02-3.43459323e-02 -6.54993504e-02 -7.19513744e-02  2.90945694e-02-7.70430863e-02 -7.10250884e-02 -3.34204398e-02 -3.00371256e-02-1.62958596e-02  4.03568894e-03  8.55795741e-02 -6.59987628e-02-1.95334572e-02 -2.25771945e-02 -1.80503931e-02 -5.32966442e-02-2.66840421e-02 -6.77284040e-03  5.09233996e-02  4.06820779e-338.17323849e-03  9.35941190e-03  4.07853946e-02  4.23102975e-023.82294394e-02 -3.26809920e-02  5.57922311e-02 -8.31714272e-03-5.64248301e-02  7.66928680e-03 -2.83703450e-02 -6.96439072e-024.57653962e-02  5.45678027e-02  6.04683273e-02  5.12658386e-031.71600506e-02 -3.42134461e-02 -1.27538126e-02  1.09048476e-02-1.92852318e-02  2.21772362e-02 -4.22786027e-02  1.62305194e-033.74707580e-02  3.58876623e-02  8.34353827e-03 -5.68953417e-02-5.76716438e-02  8.79769679e-03 -1.06735982e-01 -4.08094488e-02-4.26842049e-02  1.20512150e-01 -1.11248545e-01  1.56262051e-022.79938076e-02 -1.51987523e-02  1.54628512e-03 -2.16001868e-02-4.56071086e-03 -3.95043790e-02  2.59739645e-02  3.13732028e-021.00531969e-02 -3.07843257e-02  1.82842985e-02  8.37984830e-023.27902697e-02 -3.45447287e-02  1.04151778e-01  9.19993222e-026.47615269e-02 -4.90132459e-02  2.06762757e-02  1.31106824e-02-1.48197263e-02 -4.36062440e-02 -1.71329025e-02  1.88300870e-022.50030942e-02  6.36616424e-02 -6.29625916e-02  8.87891501e-022.96341954e-03 -1.46568820e-01 -6.49572313e-02 -3.94866653e-02-7.35699236e-02  1.17721036e-02  5.14745945e-03 -3.31177004e-033.51425149e-02 -3.08553781e-02  5.88293634e-02 -1.56031372e-024.74173278e-02 -2.25533806e-02 -4.15975600e-02 -3.31746899e-021.97363477e-02 -2.26725955e-02  2.47860737e-02  1.32911235e-018.40727333e-03 -3.89834121e-02 -4.89281304e-02 -6.93260133e-021.09994989e-02 -4.71044378e-03 -1.91300064e-02  7.86179751e-02-7.00484887e-02  4.08874042e-02 -4.56467271e-02 -1.60062523e-082.71903425e-02 -1.91820413e-02 -5.57332300e-02 -9.95578989e-023.15552987e-02  7.84810260e-02  9.50208604e-02 -5.15582599e-02-1.22537121e-01  1.31960132e-03  7.11738244e-02  8.27374868e-03-1.48323132e-02  2.66981814e-02  8.51214118e-03 -4.42688726e-025.38083054e-02 -4.37662099e-03 -3.22459340e-02 -3.79745401e-022.61231083e-02 -6.82722852e-02  3.20339128e-02 -2.34477054e-02-3.57331745e-02 -3.42528895e-02  2.39284448e-02  3.76036135e-03-2.01881095e-03 -6.42111748e-02 -3.87483947e-02  9.46727470e-023.81158479e-02 -8.00766051e-02  3.50940861e-02  3.14917564e-02-1.26838614e-03  4.47944589e-02  4.59655523e-02 -2.94053322e-03-3.41515765e-02  6.35732263e-02 -1.40693896e-02  6.79980740e-029.20654833e-02  1.87964202e-03 -2.77891122e-02 -4.06434610e-02-3.80436257e-02 -5.80305234e-02  4.95091863e-02 -7.40072206e-029.77305323e-02  5.65399267e-02 -5.87914325e-02  9.49629247e-02-9.29459743e-03 -4.56156284e-02 -2.67779101e-02 -5.99320158e-021.22925062e-02  1.02876261e-01  5.12782522e-02 -5.95757887e-02]]
[0.8069301843643188, 1.181997537612915]

Note: 可见embedding后的词向量的维度是384,这个也是理论上all-MiniLM-L6-v2模型输出的维度。最后的distance表示的是欧氏距离,距离越小则越接近,ChromaDB中支持下面三种类型,欧式距离(12),余弦距离(cosine),内积(ip)。

    def supported_spaces(self) -> List[Space]:

        """

        Return the supported spaces for the embedding function.

        """

        return ["cosine", "l2", "ip"]

遍历某个目录下的文档

此示例用于遍历某个目录下的所有文档,并根据关键词进行查询。

iter_dir_doc.py

import os
import chromadb# Initialize ChromaDB client
client = chromadb.Client()# Create or get a collection
collection = client.create_collection(name='documents_collection')# Directory containing the files
directory_path = '/home/sunny/work/git/applications.networking.ntr/ntr_manager'documents=[]
metadatas=[]
ids=[]# Iterate directory
for root, dirs, files in os.walk(directory_path):for filename in files:file_path = os.path.join(root, filename)if os.path.isfile(file_path) and filename.endswith(".java"):with open(file_path, 'r') as file:content = file.read()documents.append(content)metadatas.append({'filename': filename})ids.append(file_path)# add the documents in the db
collection.add(documents=documents,metadatas=metadatas,ids=ids
)# Query the collection for the keyword "queryDBTableInfoByName"
results = collection.query(query_texts=["queryDBTableInfoByName"],n_results=5
)ret_metadatas = results['metadatas']
for metadata in ret_metadatas[0]:print(metadata)

执行结果,

python iter_dir_doc.py{'filename': 'IDBTableInfoDao.java'}
{'filename': 'DBTableInfo.java'}
{'filename': 'DBTableInfoDao.java'}
{'filename': 'MetadataStatsRule.java'}
{'filename': 'Constants.java'}

可见,上面结果得到了和“queryDBTableInfoByName” 这个关键字最接近的5篇文档,最接近的是IDBTableInfoDao.java,非常的准确。

http://www.xdnf.cn/news/591085.html

相关文章:

  • SQL基础概念以及SQL的执行方式
  • YOLO篇-3.1.YOLO服务器运行
  • const修饰指针
  • 【信息系统项目管理师】第15章:项目风险管理 - 55个经典题目及详解
  • 参数化建模(二):避免踩坑!优劣分析与选择诀窍
  • 禅道隐藏版权信息
  • 安装openresty使用nginx+lua,openresty使用jwt解密
  • upload-labs通关笔记-第18关文件上传之条件竞争
  • 数据结构篇--二项队列
  • linux服务器查看端口是否被占用
  • 5月22日复盘-YOLOV5
  • SQLServer与MySQL数据迁移案例解析
  • fscan教程1-存活主机探测与端口扫描
  • Android 添加系统服务的完整流程
  • JavaScript【9】ES语法
  • 阿里云 Serverless 助力海牙湾构建弹性、高效、智能的 AI 数字化平台
  • 新手到资深的Java开发编码规范
  • Python爬虫实战:研究Crawley 框架相关技术
  • 【Java Web】1.Maven
  • Docker常用命令介绍
  • upload-labs靶场通关详解:第14关
  • PyQt学习系列01-框架概述与基础环境搭建
  • 25.5.22学习总结
  • MCP Server Tool 开发学习文档
  • 国产数据库:tidb专题
  • 微信小程序 隐私协议弹窗授权
  • Git分支的强制回滚
  • 辽宁省工程系列信息通信管理专业职称评审标准
  • 国芯思辰| 高精度线性霍尔传感器AH693在角度位置传感器中的应用
  • 【机器学习】欠拟合、过拟合和正则化