philipphager/baidu-ultr_uva-mlm-ctr
Query-document vectors and clicks for a subset of the Baidu Unbiased Learning to Rank dataset: https://arxiv.org/abs/2207.03051 This dataset uses a Jax-based BERT cross-encoder with 12 layers pre-trained for 2 million steps on the Baidu ULTR dataset to create query-document embeddings (768 dims). We link the model checkpoint also under `model/`.
Baidu ULTR Dataset - UvA BERT-12l-12h
Query-document vectors and clicks for a subset of the Baidu Unbiased Learning to Rank dataset. This dataset uses a BERT cross-encoder with 12 layers trained on a Masked Language Modeling (MLM) and click-through-rate (CTR) prediction task to compute query-document vectors (768 dims). The model is available at: https://huggingface.co/philipphager/baidu-ultruva-bertnaive-pointwise
Setup
- Install huggingface datasets
- Install pandas and pyarrow:
pip install pandas pyarrow - Optionally, you might need to install a pyarrow-hotfix if you cannot install
pyarrow >= 14.0.1 - You can now use the dataset as described below.
Load train / test click dataset:
from datasets import load_dataset
dataset = load_dataset(
"philipphager/baidu-ultr_uva-mlm-ctr",
name="clicks",
split="train", # ["train", "test"]
cache_dir="~/.cache/huggingface",
)
dataset.set_format("torch") # [None, "numpy", "torch", "tensorflow", "pandas", "arrow"]Load expert annotations:
from datasets import load_dataset
dataset = load_dataset(
"philipphager/baidu-ultr_uva-mlm-ctr",
name="annotations",
split="test",
cache_dir="~/.cache/huggingface",
)
dataset.set_format("torch") # [None, "numpy", "torch", "tensorflow", "pandas", "arrow"]Available features
Each row of the click / annotation dataset contains the following attributes. Use a custom collate_fn to select specific features (see below):
Click dataset
Expert annotation dataset
Example PyTorch collate function
Each sample in the dataset is a single query with multiple documents. The following example demonstrates how to create a batch containing multiple queries with varying numbers of documents by applying padding:
import torch
from typing import List
from collections import defaultdict
from torch.nn.utils.rnn import pad_sequence
from torch.utils.data import DataLoader
def collate_clicks(samples: List):
batch = defaultdict(lambda: [])
for sample in samples:
batch["query_document_embedding"].append(sample["query_document_embedding"])
batch["position"].append(sample["position"])
batch["click"].append(sample["click"])
batch["n"].append(sample["n"])
return {
"query_document_embedding": pad_sequence(
batch["query_document_embedding"], batch_first=True
),
"position": pad_sequence(batch["position"], batch_first=True),
"click": pad_sequence(batch["click"], batch_first=True),
"n": torch.tensor(batch["n"]),
}
loader = DataLoader(dataset, collate_fn=collate_clicks, batch_size=16)