使用Qdrant加载和搜索Hugging Face数据集

Hugging Face 提供了一个共享和使用机器学习模型及数据集的平台。Qdrant 也发布了数据集以及嵌入向量,您可以使用这些嵌入向量来练习 Qdrant 并构建基于语义搜索的应用程序。如果您希望看到特定的数据集,请告诉我们

arxiv标题-instructorxl-嵌入

这个数据集 包含 仅从论文标题生成的嵌入。每个向量都有一个有效载荷,其中包含用于 创建它的标题,以及DOI(数字对象标识符)。

{
    "title": "Nash Social Welfare for Indivisible Items under Separable, Piecewise-Linear Concave Utilities",
    "DOI": "1612.05191"
}

您可以在练习数据集部分找到数据集的详细描述。如果您更喜欢从Qdrant快照加载数据集,那里也有链接。

加载数据集就像使用datasets库中的load_dataset函数一样简单:

from datasets import load_dataset

dataset = load_dataset("Qdrant/arxiv-titles-instructorxl-embeddings")

数据集包含2,250,000个向量。这是您可以检查数据集中特征列表的方法:

dataset.features

流式传输数据集

数据集流式处理允许您在不下载数据集的情况下使用它。当您迭代数据集时,数据会被流式传输。您可以在Hugging Face 文档中了解更多信息。

from datasets import load_dataset

dataset = load_dataset(
    "Qdrant/arxiv-titles-instructorxl-embeddings", split="train", streaming=True
)

将数据集加载到Qdrant

您可以使用Python SDK将数据集加载到Qdrant中。 嵌入已经预先计算好了,因此您可以将它们存储在一个集合中,我们稍后将创建这个集合:

from qdrant_client import QdrantClient, models

client = QdrantClient("http://localhost:6333")

client.create_collection(
    collection_name="arxiv-titles-instructorxl-embeddings",
    vectors_config=models.VectorParams(
        size=768,
        distance=models.Distance.COSINE,
    ),
)

在加载大型数据集时,使用批处理总是一个好主意,所以让我们这样做。 我们需要一个辅助函数来将数据集分割成批次:

from itertools import islice

def batched(iterable, n):
    iterator = iter(iterable)
    while batch := list(islice(iterator, n)):
        yield batch

如果你是 Python 3.12+ 的快乐用户,你可以使用 batched 函数来自 itertools 包来代替。

无论你使用的是哪个Python版本,你都可以使用upsert方法将数据集分批加载到Qdrant中:

batch_size = 100

for batch in batched(dataset, batch_size):
    ids = [point.pop("id") for point in batch]
    vectors = [point.pop("vector") for point in batch]

    client.upsert(
        collection_name="arxiv-titles-instructorxl-embeddings",
        points=models.Batch(
            ids=ids,
            vectors=vectors,
            payloads=batch,
        ),
    )

您的集合已准备好用于搜索!如果您希望在Hugging Face hub上看到更多数据集发布,请通过Discord告诉我们

这个页面有用吗?

感谢您的反馈!🙏

我们很抱歉听到这个消息。😔 你可以在GitHub上编辑这个页面,或者创建一个GitHub问题。