pg_bestmatch
在数据库内生成BM25稀疏向量
仓库
tensorchord/pg_bestmatch.rs
https://github.com/tensorchord/pg_bestmatch.rs
源码
pg_bestmatch-0.0.2.tar.gz
pg_bestmatch-0.0.2.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_bestmatch | 0.0.2 | FTS | Apache-2.0 | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2140 | pg_bestmatch | 否 | 是 | 是 | 是 | 否 | 否 | bm_catalog |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.0.2 | 1817161514 | pg_bestmatch | - |
| RPM | PIGSTY | 0.0.2 | 1817161514 | pg_bestmatch_$v | - |
| DEB | PIGSTY | 0.0.2 | 1817161514 | postgresql-$v-pg-bestmatch | - |
构建
您可以使用 pig build 命令构建 pg_bestmatch 扩展的 RPM / DEB 包:
BASH
安装
您可以直接安装 pg_bestmatch 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
预加载配置:
BASH
创建扩展:
SQL
用法
- 仓库:https://github.com/tensorchord/pg_bestmatch.rs
- 基准测试:https://hazyresearch.stanford.edu/blog/2024-05-20-m2-bert-retrieval
工作原理
- 通过
bm25_create(table_name, column_name, statistic_name);基于文档集创建 BM25 统计信息,该操作会创建一个物化视图来记录统计数据。 - 使用
bm25_document_to_svector(statistic_name, passage)生成文档的稀疏向量 - 查询时,使用
bm25_query_to_svector(statistic_name, query)生成查询的稀疏向量 - 通过查询稀疏向量与文档稀疏向量的点积计算相关性得分
- 目前使用 HuggingFace 分词器和
bert-base-uncased词汇表来进行分词。未来可能会支持更多分词器配置选项。
安装
SQL
示例
以下是一个使用 Stanford LoCo 基准测试 数据集演示本扩展用法的完整工作流。
- 加载数据集。如果您想使用该数据集体验
pg_bestmatch,可以使用以下脚本。
BASH
PYTHON
- 为
documents表创建 BM25 统计信息。
SQL
- 在
documents和queries表中添加向量列,并更新文档和查询的向量表示。
SQL
- (可选)在稀疏向量列上创建向量索引。
SQL
- 执行向量搜索,为每个查询找到最相关的文档。
SQL
此工作流展示了如何利用本扩展在 PostgreSQL 中结合 BM25 文本查询与向量搜索。BM25 在该数据集上的 Top 1 召回率为 0.77。如果您能复现该结果,说明操作正确。
与 pg_search 的比较
pg_bestmatch.rs仅提供生成稀疏向量的方法,不支持基于索引的搜索(可通过 pgvecto.rs 或 pgvector 实现)。pg_search通过外部tantivy引擎执行 BM25 检索,在与事务、过滤器或 JOIN 操作结合使用时可能存在限制。由于pg_bestmatch.rs完全原生于 PostgreSQL,因此在 PostgreSQL 内部与这些操作具有完全的兼容性。
函数参考
tokenize- 说明:将输入字符串分词为独立的词元。
- 示例:SQL
bm25_create- 说明:为指定的表和列创建 BM25 统计信息。
- 用法:SQL
- 参数:
table_name:表名。column_name:列名。stat_name:BM25 统计信息名称。b:BM25 参数(默认值 0.75)。k:BM25 参数(默认值 1.2)。
bm25_refresh- 说明:更新 BM25 统计信息以反映底层数据的变化。
- 用法:SQL
- 参数:
stat_name:要更新的 BM25 统计信息名称。
bm25_drop- 说明:删除指定表和列的 BM25 统计信息。
- 用法:SQL
- 参数:
stat_name:要删除的 BM25 统计信息名称。
bm25_document_to_svector- 说明:将文档文本转换为稀疏向量表示。
- 用法:SQL
- 参数:
stat_name:BM25 统计信息名称。document_text:文档文本内容。style:输出pgvecto.rs风格或pgvector风格的稀疏向量。
bm25_query_to_svector- 说明:将查询文本转换为稀疏向量表示。
- 用法:SQL
- 参数:
stat_name:BM25 统计信息名称。query_text:查询文本内容。style:输出pgvecto.rs风格或pgvector风格的稀疏向量。