Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions relbench/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
ratebeer,
salt,
stack,
tgb,
trial,
)
from relbench.utils import get_relbench_cache_dir
Expand Down Expand Up @@ -152,3 +153,22 @@ def get_dataset(name: str, download=True) -> Dataset:
register_dataset("dbinfer-amazon", dbinfer.DBInferAmazonDataset)
register_dataset("dbinfer-stackexchange", dbinfer.DBInferStackExchangeDataset)
register_dataset("dbinfer-outbrain-small", dbinfer.DBInferOutbrainSmallDataset)

Comment thread
rishabh-ranjan marked this conversation as resolved.
# Temporal Graph Benchmark (TGB)
register_dataset("tgbl-wiki", tgb.TGBDataset, tgb_name="tgbl-wiki")
register_dataset("tgbl-wiki-v2", tgb.TGBDataset, tgb_name="tgbl-wiki-v2")
register_dataset("tgbl-review", tgb.TGBDataset, tgb_name="tgbl-review")
register_dataset("tgbl-review-v2", tgb.TGBDataset, tgb_name="tgbl-review-v2")
register_dataset("tgbl-coin", tgb.TGBDataset, tgb_name="tgbl-coin")
register_dataset("tgbl-comment", tgb.TGBDataset, tgb_name="tgbl-comment")
register_dataset("tgbl-flight", tgb.TGBDataset, tgb_name="tgbl-flight")

register_dataset("thgl-software", tgb.TGBDataset, tgb_name="thgl-software")
register_dataset("thgl-forum", tgb.TGBDataset, tgb_name="thgl-forum")
register_dataset("thgl-github", tgb.TGBDataset, tgb_name="thgl-github")
register_dataset("thgl-myket", tgb.TGBDataset, tgb_name="thgl-myket")

register_dataset("tgbn-trade", tgb.TGBDataset, tgb_name="tgbn-trade")
register_dataset("tgbn-genre", tgb.TGBDataset, tgb_name="tgbn-genre")
register_dataset("tgbn-reddit", tgb.TGBDataset, tgb_name="tgbn-reddit")
register_dataset("tgbn-token", tgb.TGBDataset, tgb_name="tgbn-token")
20 changes: 19 additions & 1 deletion relbench/datasets/hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,23 @@
"dbinfer-outbrain-small/db.zip": "d186a71fc534bcac4299c616110805a997fa56fd16c15110d02e1c8eb3975210",
"dbinfer-retailrocket/db.zip": "6dbe83488e11c0d159b4592aa4cff57f6fa22b9f4bbf4ae38d0388d536897d75",
"dbinfer-seznam/db.zip": "77314bf874dc495e8a4a61f2dc5f12982bbec3c5b6b7af5555e9a2bb587154d9",
"dbinfer-stackexchange/db.zip": "4c8b8ac38b56d57bc2ead3c12be1237b69cae76062ed3f176fc02ad327a84d19"
"dbinfer-stackexchange/db.zip": "4c8b8ac38b56d57bc2ead3c12be1237b69cae76062ed3f176fc02ad327a84d19",

"tgbl-coin/db.zip": "6de3b62bcfc59bb18ff8de0614ce5cbcf21179ad56cb58920d25ade32ec43e00",
"tgbl-comment/db.zip": "4eb41776954efa2cb06cdb64e093b182335b8683e60236a6645cf4bcd83597be",
"tgbl-flight/db.zip": "e82646893a45be6c5312e5dc1a774c08d929ecb9eb309c0ad9fdec6dae3b156a",
"tgbl-review/db.zip": "63b405aafd8092cbda297694e649329ca806ccc3c49c8e6f53eb4a3c19075091",
"tgbl-review-v2/db.zip": "a5f1a7a9661a700ebb1a3b43df74037853ad3bd6ed54c74342045d2dc8448bc2",
"tgbl-wiki/db.zip": "ad7b55d1d7b7125c06588db0b8cbebe87c629a95a6c9a911369f89aca9dffdc9",
"tgbl-wiki-v2/db.zip": "5eb56f8e459405e3b554ce56585903c80038d84a99ca4333b00ce32c8c7a38f1",

"tgbn-genre/db.zip": "e46aecc28315ca9872117817ce65bc1f4d00ed261ab6d35038a84bcf0ebab7bf",
"tgbn-reddit/db.zip": "bc444f5cbaf7004ef7c6c8f98ae12ae72e8427ccc9710e96e46b0fc156cc952e",
"tgbn-token/db.zip": "44a0f90a62642b8054ef1fbee35c862a67e5d0cec92f08b8fd44c503e0986be8",
"tgbn-trade/db.zip": "8a983ae6281ea058dc8d84f6ce339d2dacf0ae9bb98bb82cca3fed54ec3fe370",

"thgl-forum/db.zip": "fdb20c1afc542e8026b85df850b5e8a539694c182eb4530924fad65964461256",
"thgl-github/db.zip": "f69c1d49779a4dbead101e7325447854c8890982d254efb2b722117819ba8304",
"thgl-myket/db.zip": "67a3af25553ceabe8a7eff8906c2213bd82e932cdaeb48ffa326b39d30e0f0cf",
"thgl-software/db.zip": "35816ef6a07be2291349f081814e18b498a2e46e006ed21be36fdb1a8a0eb90d"
}
75 changes: 75 additions & 0 deletions relbench/datasets/tgb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
from __future__ import annotations

from dataclasses import dataclass
from pathlib import Path
from typing import Optional

import pandas as pd

from relbench.base import Database, Dataset


@dataclass(frozen=True)
class TGBCutoffs:
val_timestamp_s: int
test_timestamp_s: int


_TGB_CUTOFFS: dict[str, TGBCutoffs] = {
"tgbl-wiki": TGBCutoffs(val_timestamp_s=1862653, test_timestamp_s=2218300),
"tgbl-wiki-v2": TGBCutoffs(val_timestamp_s=1862653, test_timestamp_s=2218300),
"tgbl-review": TGBCutoffs(val_timestamp_s=1464912000, test_timestamp_s=1488844800),
"tgbl-review-v2": TGBCutoffs(
val_timestamp_s=1464912000, test_timestamp_s=1488844800
),
"tgbl-coin": TGBCutoffs(val_timestamp_s=1662096249, test_timestamp_s=1664482319),
"tgbl-comment": TGBCutoffs(val_timestamp_s=1282869285, test_timestamp_s=1288838725),
"tgbl-flight": TGBCutoffs(val_timestamp_s=1638162000, test_timestamp_s=1653796800),
"thgl-software": TGBCutoffs(
val_timestamp_s=1706003880, test_timestamp_s=1706315669
),
"thgl-forum": TGBCutoffs(val_timestamp_s=1390426563, test_timestamp_s=1390838358),
"thgl-github": TGBCutoffs(val_timestamp_s=1711075987, test_timestamp_s=1711482874),
"thgl-myket": TGBCutoffs(val_timestamp_s=1603724860, test_timestamp_s=1606341312),
"tgbn-trade": TGBCutoffs(val_timestamp_s=1262304000, test_timestamp_s=1388534400),
"tgbn-genre": TGBCutoffs(val_timestamp_s=1216427762, test_timestamp_s=1230448684),
"tgbn-reddit": TGBCutoffs(val_timestamp_s=1279485233, test_timestamp_s=1286653871),
"tgbn-token": TGBCutoffs(val_timestamp_s=1522889022, test_timestamp_s=1525386888),
}


class TGBDataset(Dataset):
r"""Temporal Graph Benchmark (TGB) datasets exported to RelBench format."""

url = "https://tgb.complexdatalab.com/"

def __init__(self, *, tgb_name: str, cache_dir: Optional[str] = None) -> None:
if tgb_name not in _TGB_CUTOFFS:
raise ValueError(
f"Unknown tgb_name='{tgb_name}'. Known keys: {sorted(_TGB_CUTOFFS.keys())}"
)
self.tgb_name = str(tgb_name)

cutoffs = _TGB_CUTOFFS[self.tgb_name]
self.val_timestamp = pd.to_datetime(
int(cutoffs.val_timestamp_s), unit="s", utc=True
)
self.test_timestamp = pd.to_datetime(
int(cutoffs.test_timestamp_s), unit="s", utc=True
)

super().__init__(cache_dir=cache_dir)

def make_db(self) -> Database:
if self.cache_dir is None:
raise RuntimeError("TGBDataset requires cache_dir to locate the cached db.")

db_dir = Path(self.cache_dir) / "db"
if db_dir.exists() and any(db_dir.glob("*.parquet")):
return Database.load(db_dir)

raise RuntimeError(
f"TGB dataset '{self.tgb_name}' not found at {db_dir}. "
"This dataset is distributed as a pre-built RelBench database (db.zip). "
"Please run `download_dataset(...)` or place `db/*.parquet` in the cache directory."
)
50 changes: 50 additions & 0 deletions relbench/tasks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
mimic,
ratebeer,
stack,
tgb,
trial,
)
from relbench.utils import get_relbench_cache_dir
Expand Down Expand Up @@ -544,3 +545,52 @@ def get_task(dataset_name: str, task_name: str, download=False) -> BaseTask:
register_task("dbinfer-stackexchange", "churn", dbinfer.StackExchangeChurnTask)
register_task("dbinfer-stackexchange", "upvote", dbinfer.StackExchangeUpvoteTask)
register_task("dbinfer-outbrain-small", "ctr", dbinfer.OutbrainCTRTask)

# Temporal Graph Benchmark (TGB)
for dataset_name in [
"tgbl-wiki",
"tgbl-wiki-v2",
"tgbl-review",
"tgbl-review-v2",
"tgbl-coin",
"tgbl-comment",
"tgbl-flight",
]:
register_task(
dataset_name,
"src-dst-mrr",
tgb.TGBOneVsManyLinkPredTask,
spec=tgb.TGBLinkPredSpec(event_table="events"),
k_value=10,
)


def _register_thgl_edge_type_tasks(dataset_name: str, edge_types: list[int]) -> None:
for et in edge_types:
register_task(
dataset_name,
f"edge-type-{int(et)}-mrr",
tgb.TGBOneVsManyLinkPredTask,
spec=tgb.TGBLinkPredSpec(event_table=f"events_edge_type_{int(et)}"),
k_value=10,
)


_register_thgl_edge_type_tasks("thgl-software", list(range(14)))
_register_thgl_edge_type_tasks("thgl-github", list(range(14)))
_register_thgl_edge_type_tasks("thgl-forum", [0, 1])
_register_thgl_edge_type_tasks("thgl-myket", [0, 1])

for dataset_name in [
"tgbn-trade",
"tgbn-genre",
"tgbn-reddit",
"tgbn-token",
]:
register_task(
dataset_name,
"node-label-ndcg",
tgb.TGBNodePropNDCGTask,
spec=tgb.TGBNodePropSpec(),
k=10,
)
46 changes: 45 additions & 1 deletion relbench/tasks/hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,49 @@
"dbinfer-seznam/tasks/charge.zip": "6e62750bcd39fe5fdd4d550325953f117517ce153cd5d84a2c5e7ded2caa1b60",
"dbinfer-seznam/tasks/prepay.zip": "377564195dd8f8603859771e952fb707a489a5247abf274a5f02ca1bfa3f441d",
"dbinfer-stackexchange/tasks/churn.zip": "d649b0a70dc8be9fca797c82e14d19ed4311637711144f4c5b74249081b107ca",
"dbinfer-stackexchange/tasks/upvote.zip": "af8f516422e3e19c0d76f13c00c4c0577cdc218b84468006eda369de8f9c7953"
"dbinfer-stackexchange/tasks/upvote.zip": "af8f516422e3e19c0d76f13c00c4c0577cdc218b84468006eda369de8f9c7953",

"tgbl-coin/tasks/src-dst-mrr.zip": "702ff505d95955b29c9998eb4f9c2e38e6c112c2b9e21ed7c2aa75ae4a923280",
"tgbl-comment/tasks/src-dst-mrr.zip": "50846c6b82433bcac2bb025c3e7edfed46b651a9d06b462b058a071f08741fdc",
"tgbl-flight/tasks/src-dst-mrr.zip": "10527b2122a73bcb35a6b3e6230ded99242825bf955c363b710cce20545c8104",
"tgbl-review-v2/tasks/src-dst-mrr.zip": "aeded6586c00995a33881305717c3a625f96a1cc7253d2806af6125b53173fb3",
"tgbl-review/tasks/src-dst-mrr.zip": "aeded6586c00995a33881305717c3a625f96a1cc7253d2806af6125b53173fb3",
"tgbl-wiki-v2/tasks/src-dst-mrr.zip": "9517a458de6dc921e54af91154f1823d7bdbfa16207650df16a32bcd9b1aab92",
"tgbl-wiki/tasks/src-dst-mrr.zip": "a105ef6cf8dcdd5f94d1fbcfa856a3ecf10821a9d217b53c8266eca2d8b04b1b",
"tgbn-genre/tasks/node-label-ndcg.zip": "4fe66c0e9e0442fa9c4979fa386f8249f812b19b817faaefae46f3b82f8c3dce",
"tgbn-reddit/tasks/node-label-ndcg.zip": "bdcdb15597719541e2873408d36ccc7589ddc25e8fd9be60d3bc2928a4fb02d5",
"tgbn-token/tasks/node-label-ndcg.zip": "64daa8ca8d3ff62bff0929f8af8dcbb0836c004646102df94df8236b13fffba1",
"tgbn-trade/tasks/node-label-ndcg.zip": "f69920871dac5e365fa521d180d9a234802318bdbb313a59a362fe6c68f14e1d",
"thgl-forum/tasks/edge-type-0-mrr.zip": "14975fa000b5a4d8458fe5f9fd23d6662af8205d4ef9d3463da2051b16b3a5a8",
"thgl-forum/tasks/edge-type-1-mrr.zip": "fffe1b4dc3ed985e1d442d3db56da2ebfb18b05ccf3fefe0d13ae64431993027",
"thgl-github/tasks/edge-type-0-mrr.zip": "9c346bf63c2dcc36171b62884c18c4062781ca689ec861177d70f80531856e43",
"thgl-github/tasks/edge-type-1-mrr.zip": "e0db81eec7a8b12c488fe7c773f7226e7f7914ec5613b9ba11192a3bb2c19e21",
"thgl-github/tasks/edge-type-10-mrr.zip": "dcfaa9094d7d0f7944dda32075d165c5f97c4d0d2530dced6e27121163599a65",
"thgl-github/tasks/edge-type-11-mrr.zip": "7f707920f58c4fea8dabcfe0e511be1a60603ba73301f28a698a4fce87e804da",
"thgl-github/tasks/edge-type-12-mrr.zip": "58cf770c6917081865c4c8f5660670e3f821618bc9a3a03f57d5a12891254ea4",
"thgl-github/tasks/edge-type-13-mrr.zip": "cfaa8350612cc1aa99d7dcaccd32849bae294e3b2ef8e3cf2232c8b82e45650c",
"thgl-github/tasks/edge-type-2-mrr.zip": "d42be110b69c9dae1d952459118864af5701a18393a3ca11ddb96766889ea5be",
"thgl-github/tasks/edge-type-3-mrr.zip": "61e31b44e361a23c498e7aacdc271ba8b4b276b0134d1c07e0ecd694ab732665",
"thgl-github/tasks/edge-type-4-mrr.zip": "61832694d14aa45ddf393122e1530d63a0c93d902913767d29928bbadf208f0e",
"thgl-github/tasks/edge-type-5-mrr.zip": "a5378c8797a79b655b6eb4678ce2b6f5d1d39e992e6ceda08a1a6f3f7b26cd66",
"thgl-github/tasks/edge-type-6-mrr.zip": "76d606d9f7d6c69be22b39e7b1086a7d75fd47b29f682538153fdc9ccf08e1bf",
"thgl-github/tasks/edge-type-7-mrr.zip": "7c9405cc05cad4f299967aee0510eaf718a2dee1884bac790e76c81263b72f22",
"thgl-github/tasks/edge-type-8-mrr.zip": "44cad0c9358293530781d20b78cb87bd21ebf8fea36628c0875ed4558a6a9117",
"thgl-github/tasks/edge-type-9-mrr.zip": "19be77af66f1cb0cb640158f97d42a0d16431eb79bd23ed1aaace4b68519c8a9",
"thgl-myket/tasks/edge-type-0-mrr.zip": "979133caaa02ddf444e3b23ada4b5cbe11147b18adab90537740cea914e36daa",
"thgl-myket/tasks/edge-type-1-mrr.zip": "f4f84ca245d499c0773ec0c95619e5f6041461c3233cce96ad3a6302da41c12c",
"thgl-software/tasks/edge-type-0-mrr.zip": "6262267aae8309bda302c64e365d227d036f95f934ee8ba6fb038f20d28b3fed",
"thgl-software/tasks/edge-type-1-mrr.zip": "7de5c8664e9b78460cad9345a4a537e9d75641f0875605a5151e189ab568fd0e",
"thgl-software/tasks/edge-type-10-mrr.zip": "b3a1ed7410ed737fb2ca6ecd4f1de59cc0d7e0cfd29fdcb68ccd13e76e1997e3",
"thgl-software/tasks/edge-type-11-mrr.zip": "9e24b4c1365dfb989fc6c4db4cc19146e998f852205fca0fe7f1fe4a047ef44d",
"thgl-software/tasks/edge-type-12-mrr.zip": "1580ff8adde8202edae05a555b12a7fe38ce0addd360010ec925b4a7503350d2",
"thgl-software/tasks/edge-type-13-mrr.zip": "e4a51a47777c34748fec03813bb2368bf841f90479bd37ca41c653b9203491cb",
"thgl-software/tasks/edge-type-2-mrr.zip": "1b8177e304b62939b3081c054b56b99d5874300e101057593668af455558b385",
"thgl-software/tasks/edge-type-3-mrr.zip": "e0837e81655cfe953b805af162e7904dfe457a93783701d50a26d819dfec848f",
"thgl-software/tasks/edge-type-4-mrr.zip": "0d15eeaf8d9e456912518aedd2e6a239b6fddc6941095b95240ef41fb34f14cc",
"thgl-software/tasks/edge-type-5-mrr.zip": "1df8a435f4e978c976288c3d0a53f7430e759d27cd91ad966a1af6c3814da480",
"thgl-software/tasks/edge-type-6-mrr.zip": "51fa5917363476973c048ef19306188d0d8cf6c218e316f4949d08d10c9092f0",
"thgl-software/tasks/edge-type-7-mrr.zip": "ee8a0e231255e15fe58283b9f9243ca438695e1760db8cb24168b6bfbb6c078a",
"thgl-software/tasks/edge-type-8-mrr.zip": "26e37301204380e27934ed7046201ebd4edf72ac7b430c8ef792ad3defc9e638",
"thgl-software/tasks/edge-type-9-mrr.zip": "d68f2bcafee7a7d7761e4b4eadec36c500cb3e8711d1b23196ecb160962b5b9e"
}
Loading