|
Download README.md from aldebaran-research/temps: direct link, hf CLI and curl.
- Browser
- Download file 5.82 kB
-
https://huggingface.co/aldebaran-research/temps/resolve/main/README.md
- Command line
-
hf download hf://aldebaran-research/temps/README.md
-
curl -L -o README.md https://huggingface.co/aldebaran-research/temps/resolve/main/README.md
5.82 kB
| license: apache-2.0 | |
| base_model: sentence-transformers/all-MiniLM-L6-v2 | |
| language: | |
| - en | |
| library_name: pytorch | |
| pipeline_tag: sentence-similarity | |
| tags: | |
| - temporal-retrieval | |
| - information-retrieval | |
| - retrieval-augmented-generation | |
| - gaussian-embeddings | |
| # TEMPS: temporal module | |
| **TEMPS** (Temporal Embedding Model for Precise Search) adds a temporal score to any dense | |
| retriever. This repository holds the trained temporal module from | |
| *TEMPS: Temporal Sentence Embeddings for Temporal Information Retrieval* | |
| (Hassani, Romero, Bouzeghoub, Jacquelinet, EMNLP 2026). | |
| - **Code:** https://github.com/aldebaran-care/TEMPS | |
| - **Weights:** `temps-weights.pth` (PyTorch `state_dict`, fp32) | |
| ## Model description | |
| Dense retrievers match queries and passages on topic but not on time, so they return passages | |
| that are on-topic yet temporally wrong. TEMPS attaches to a **frozen** semantic retriever and | |
| scores how well two *anchored* texts (text + anchor date) align in time. | |
| For a text and its anchor date, the module outputs a diagonal Gaussian over time. Its layers are: | |
| - a frozen `all-MiniLM-L6-v2` backbone (up to 512 tokens) | |
| - a sinusoidal anchor-date encoder | |
| - attention pooling | |
| - mean and variance heads | |
| Two texts are compared with the KL-based score | |
| ``` | |
| ts(1, 2) = 1 / (1 + KL(p_1 || p_2)) | |
| ``` | |
| which is fused with the semantic retriever's cosine score after per-query min-max | |
| normalization: | |
| ``` | |
| s(1, 2) = (1 - alpha) * cos(E_1, E_2) + alpha * ts(1, 2) | |
| ``` | |
| `alpha` is set per benchmark on a held-out validation split: 0.6 for TimeQA, 0.8 for | |
| TempReason and 0.3 for TS-Retriever. | |
| ## Training | |
| No hand-labeled temporal data is used. Each anchored temporal expression is resolved to an | |
| inclusive day interval `[a, b]` and moment-matched to a Gaussian | |
| (`mu = (a + b + 1) / 2`, `sigma^2 = (b - a + 1)^2 / 12`). The pair label is | |
| `1 / (1 + KL(p_I1 || p_I2))`, and the module is trained with a CoSENT ranking loss to reproduce | |
| that ordering. | |
| - **Data:** 60M automatically generated tuples (55M synthetic, 5M from Wikipedia text in the | |
| Multilingual MLM Temporal Tagging Resources) | |
| - **Setup:** 3 epochs, global batch size 2,048, lr 3e-4, weight decay 0.01, 5% linear warmup, | |
| max 512 tokens, fp16, seed 42; about 4 hours on 8×A100-80GB | |
| ## Usage | |
| The model class lives in the code repository. Clone it and run from its root: | |
| ```bash | |
| git clone https://github.com/aldebaran-care/TEMPS && cd TEMPS | |
| uv sync | |
| ``` | |
| ```python | |
| import torch | |
| from torch.distributions import Normal, kl_divergence | |
| from huggingface_hub import hf_hub_download | |
| from transformers import AutoTokenizer | |
| from temporal_embeddings.model.gauss_model import GaussModel | |
| from temporal_embeddings.utils.positional_encoding import positional_encoding | |
| backbone = "sentence-transformers/all-MiniLM-L6-v2" | |
| model = GaussModel(backbone).eval() | |
| model.load_state_dict(torch.load(hf_hub_download("aldebaran-research/temps", "temps-weights.pth"), map_location="cpu")) | |
| tokenizer = AutoTokenizer.from_pretrained(backbone) | |
| @torch.inference_mode() | |
| def encode(texts, anchor_dates): | |
| batch = tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors="pt") | |
| return model(**batch, dates=positional_encoding(anchor_dates)) | |
| query = encode(["Who led the company last spring?"], ["2021-11-09"]) | |
| docs = encode(["In April 2021 she was appointed CEO.", "He ran the firm from 1998 to 2003."], | |
| ["2021-11-09", "2021-11-09"]) | |
| # Temporal score 1 / (1 + KL(query || doc)), KL averaged over dimensions; higher = better match | |
| kl = kl_divergence(Normal(query.mu, query.std), Normal(docs.mu, docs.std)).mean(dim=-1) | |
| print(1 / (1 + kl)) # tensor([0.7331, 0.7130]) | |
| ``` | |
| To reproduce the paper's evaluation, `uv run python scripts/download_model.py` saves this | |
| checkpoint where the evaluation configs expect it; see the repository README. | |
| ## Results | |
| On the held-out test splits (MRR): | |
| | Benchmark | Best system | MRR | Gain over backbone | | |
| |---|---|---|---| | |
| | TimeQA (alpha=0.6) | SFR-Embedding-Mistral + TEMPS | 0.5360 | +31.9% | | |
| | TempReason (alpha=0.8) | SFR-Embedding-Mistral + SUTime control | 0.6901 | +11.5% | | |
| | TS-Retriever (alpha=0.3) | SFR-Embedding-Mistral + TEMPS | 0.8240 | +9.3% | | |
| On TS-Retriever, `E5-base-v2 + TEMPS` lifts R@1 from 19.92 to 25.39 and P@1 from 58.63 to | |
| 69.14 over TSContriever. On TempReason, the rule-based SUTime control outperforms TEMPS; see | |
| the paper for the full tables. | |
| ## Limitations | |
| - English only. | |
| - Covers expressions that can be anchored and resolved to an interval: absolute dates, | |
| deictic expressions and offsets, present references, seasons, durations and intervals. | |
| Discourse-level reasoning and event–event relations are out of scope. | |
| - A passage of up to 512 tokens is reduced to a single Gaussian, which loses information on | |
| long or temporally mixed passages. | |
| - Passages with no temporal expression were held out of training, so their Gaussians are | |
| uncalibrated; the semantic score is what ranks them. | |
| - Results come from a single training run (seed 42). | |
| ## License | |
| Apache-2.0, inherited from | |
| [`sentence-transformers/all-MiniLM-L6-v2`](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2). | |
| The code repository is MIT. | |
| ## Citation | |
| ```bibtex | |
| @inproceedings{hassani-etal-2026-temps, | |
| title = {{TEMPS}: Temporal Sentence Embeddings for Temporal Information Retrieval}, | |
| author = {Hassani, Mourad and Romero, Julien and Bouzeghoub, Amel and Jacquelinet, Christian}, | |
| booktitle = {Proceedings of the 2026 Conference on Empirical Methods in Natural Language Processing (EMNLP)}, | |
| year = {2026}, | |
| publisher = {Association for Computational Linguistics} | |
| } | |
| ``` | |
| ## Acknowledgments | |
| This project was provided with computing and storage resources by GENCI at IDRIS thanks to the | |
| grant 2025-105442 on the supercomputer Jean Zay's A100 partition. | |