使用 Qdrant 加载和搜索 Hugging Face 数据集
Hugging Face 提供了一个用于共享和使用机器学习模型和数据集的平台。Qdrant 也发布了数据集以及嵌入,您可以使用它们来练习 Qdrant 并构建基于语义搜索的应用程序。如果您想看到特定的数据集,请告诉我们!
arxiv-titles-instructorxl-embeddings
此数据集仅包含从论文标题生成的嵌入。每个向量都有一个负载,其中包含用于创建它的标题以及 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("https://: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+ 的愉快用户,您可以使用itertools包中的batched函数来代替。
无论您使用哪个 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 告诉我们。