如何在数据库中存储词袋或嵌入
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 的关系特征没有帮助。
有专门用于机器学习中矢量数据的数据库。这些是列表。
- Milvus https://milvus.io/
- 编织https://weaviate.io/
- AquilaDB https://docs.aquila.network
- 松果https://www.pinecone.io/
Milvus 是一个 open-source 向量数据库,用于支持嵌入相似性搜索和 AI 应用程序
https://github.com/milvus-io/milvus
我正在做测试
我想将矢量特征(例如大量文本的词袋或词嵌入矢量)存储在数据集中,存储在 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 的关系特征没有帮助。
有专门用于机器学习中矢量数据的数据库。这些是列表。
- Milvus https://milvus.io/
- 编织https://weaviate.io/
- AquilaDB https://docs.aquila.network
- 松果https://www.pinecone.io/
Milvus 是一个 open-source 向量数据库,用于支持嵌入相似性搜索和 AI 应用程序
https://github.com/milvus-io/milvus
我正在做测试