这是一个 PostgreSQL 扩展,它将最佳匹配 25 分数 (BM25) 文本查询的强大功能引入您的数据库,从而增强您执行高效和准确的文本检索的能力。此扩展允许用户从文本生成 BM25 统计稀疏向量,利用 BM25 在各种基准测试任务中经过验证的性能。
为什么是 BM25?
BM25(最佳匹配 25)是信息检索中使用的概率排名函数,用于评估文档与查询的匹配程度。它根据词频 (TF) 和逆文档频率 (IDF) 计算相关性分数,并通过文档长度规范化来平衡这些分数。该公式可确保在文档中频繁出现的术语 (TF) 和在语料库中罕见的术语 (IDF) 具有适当的权重,从而提高搜索的准确性和相关性。
BM25 在众多RAG 基准测试任务中已被证明优于基于密集向量的检索方法。通过将 BM25 集成到 PostgreSQL,您可以实现卓越的搜索性能和相关性,尤其是对于需要高质量文本检索的应用程序。您还可以将其与向量搜索结合使用,作为混合搜索集成。
主要特点
- BM25统计稀疏向量:根据自己的文本数据为文本生成BM25稀疏向量。
- 与向量搜索扩展集成:兼容pgvecto.rs并pgvector用于 PostgreSQL 中的高效向量搜索。
- 无缝标记化:利用 Huggingface 的bert-base-uncased词汇表和字节对编码 (BPE)
标记器,通过子词标记化提高性能
它是如何工作的?
BM25 计算可以分解为查询和文档的独立部分。最终相关性得分计算为查询的稀疏向量与文档的稀疏向量之间的点积。因此,我们将 BM25 转换为具有点积距离的稀疏向量检索问题!
用法
以下是其工作原理的逐步概述:
- 创建 BM25 统计信息:使用该bm25_create函数为您的文档集生成 BM25
统计信息。此函数以表名、列名和统计信息名称作为参数,并创建一个物化视图来存储 BM25 统计信息。
SELECT bm25_create('documents', 'passage', 'documents_passage_bm25');
- 生成文档稀疏向量:使用该函数将文档文本转换为稀疏向量表示bm25_document_to_svector。此函数将 BM25 统计名称和文档文本作为输入。
SELECT bm25_document_to_svector('documents_passage_bm25', 'document_text') as document_vector;
- 生成查询稀疏向量:对于每个搜索查询,使用该函数生成相应的稀疏向量bm25_query_to_svector。此函数还将 BM25 统计名称和查询文本作为输入。
SELECT bm25_query_to_svector('documents_passage_bm25', 'search_query') as query_vector;
- 计算相关性分数:通过对查询稀疏向量和文档稀疏向量进行点积运算,计算给定查询的文档相关性分数。此分数表示文档与查询的匹配程度。
SELECT document_id, (query_vector <#> document_vector) AS bm25_score
FROM documents
ORDER BY bm25_score
LIMIT 10;
#PCP#PCA#postgresql培训#postgresql考试#postgresql认证