如何在数据库中存储词袋或嵌入

How to store Bag of Words or Embeddings in a Database

我想将矢量特征(例如大量文本的词袋或词嵌入矢量)存储在数据集中,存储在 SQL 数据库中。 保存和检索这些特征的数据结构和最佳实践是什么?

这取决于许多因素,例如您打算使用的精确 SQL 数据库以及存储此嵌入的方式。 例如,PostgreSQL 允许存储查询和检索 JSON 变量 ( https://www.postgresqltutorial.com/postgresql-json/ ); SQLite 等其他选项将允许存储 JSONs 或 pickle 对象的字符串表示形式 - 这可以用于存储,但会使查询向量内的元素变得不可能。

词向量通常应尽可能存储为 BLOB。如果不是,它们可以存储为 json 数组。由于词向量唯一合理的操作是通过词键查找它们,其他细节并不特别重要。

对于词袋,您通常需要三列,这就是它在 sqlite 中的样子。

create table bow (
  doc_id int,
  word text,
  count int)

您的文档 ID 来自其他地方。如果需要,您可以将 (doc_id, word) 作为密钥。

但是,将这样的功能存储在 SQL 数据库中通常没有帮助。当您访问字数统计或字向量时,您通常不需要它们的一个子集,而是一次需要它们,因此 SQL 的关系特征没有帮助。

有专门用于机器学习中矢量数据的数据库。这些是列表。

  1. Milvus https://milvus.io/
  2. 编织https://weaviate.io/
  3. AquilaDB https://docs.aquila.network
  4. 松果https://www.pinecone.io/

Milvus 是一个 open-source 向量数据库,用于支持嵌入相似性搜索和 AI 应用程序

https://github.com/milvus-io/milvus

我正在做测试