TabRank

Qwen3-8B, fine-tuned for single-call generative listwise table reranking. Given a question and a list of candidate tables, it reads them all in one prompt and returns the full ranking in a single generation — no pairwise scoring, no cross-encoder passes.

TabRank vs Standard SFT — nDCG@10 on out-of-distribution benchmarks, TabRank wins on speed and accuracy

This is our reasoning-conditioned method: trained on 6,728 chain-of-thought reasoning traces distilled from a teacher model, but instead of imitating the teacher's exact reasoning text, it conditions on that reasoning as context and learns its own, shorter reasoning at inference. It's the best-generalizing checkpoint we trained, and 4.3x faster at inference than standard CoT SFT. Full method and ablations in the paper.

Related: TabRankStandardSFT (same data, standard CoT SFT) · TabRankNaive (same data, no reasoning trace, fastest).

Input / output format

Input — a chat message with the question followed by each candidate table, labeled ### Table 1, ### Table 2, ...:

Question: Which table shows 2022 quarterly revenue by region?

### Table 1
| Region | Q1 2022 | Q2 2022 | Q3 2022 | Q4 2022 |
|---|---|---|---|---|
| North America | 120 | 134 | 128 | 145 |
| Europe | 88 | 91 | 95 | 102 |

### Table 2
| Product | Units Sold | Year |
|---|---|---|
| Widget A | 4200 | 2021 |

### Table 3
| Region | Headcount |
|---|---|
| North America | 340 |

Output — a <think> block with the model's reasoning, followed by a single JSON object with the ranked, one-indexed candidate positions, best first:

<think>
Table 1 has quarterly revenue by region for 2022, which is exactly what the question asks
for. Table 3 has region data but no revenue. Table 2 has neither region nor 2022 data.
</think>
{"ranked_tables": [1, 3, 2]}

Map the numbers back to your own table ids to get the reranked list — position 1 in the output is ### Table 1 from the input, etc.

Evaluation

Scored as a listwise reranker reordering a first-stage top-25 candidate list on 5 in-distribution benchmarks (SQA, TAT-QA, HybridQA, TabFact, and NQ-Tables — the actual training split) and 7 out-of-distribution benchmarks from the IBM table-text-ir-evaluation suite that this model never saw during training.

Model SQA TAT-QA HybridQA TabFact NQ-Tables OpenWikiTables OTT-QA MultiHiertt AIT-QA FeTaQA StatCanDialogue WatsonxDocsQA Mean
Base Qwen3-8B — — 0.735 0.656 0.723 0.887 0.813 0.521 0.495 0.896 0.615 0.756 0.710
Standard SFT 0.736 0.540 0.791 0.670 0.735 0.903 0.832 0.537 0.506 0.881 0.585 0.679 0.700
TabRank (this model) 0.741 0.519 0.783 0.688 0.747 0.938 0.903 0.599 0.536 0.919 0.580 0.690 0.720

nDCG@10. The first 5 columns are in-distribution; the remaining 7 are out-of-distribution. TabRank has the best overall mean and wins 5 of 7 out-of-distribution benchmarks. On acc@10 against the 4 paper-eval in-distribution benchmarks, TabRank improves over base Qwen3-8B by +30.5% on HybridQA, +15.2% on SQA, +52.9% on TabFact, and +13.1% on TAT-QA.

Full eval code and logs: GitHub.

Usage with vLLM

from vllm import LLM, SamplingParams
from transformers import AutoTokenizer

repo = "AdarshSingh7647/TabRank"
tok = AutoTokenizer.from_pretrained(repo)
llm = LLM(model=repo, dtype="bfloat16", max_model_len=32768)

system = ("You are a table relevance expert. Given a question and a set of candidate tables "
          "rank them from most to least useful for answering the question. Reason in a "
          "<think>...</think> block then output exactly JSON with key ranked_tables.")
user = "Question: ...\n\n### Table 1\n...\n\n### Table 2\n...\n"

msgs = [{"role": "system", "content": system}, {"role": "user", "content": user}]
text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
out = llm.generate([text], SamplingParams(temperature=0.6, top_p=0.95, max_tokens=8192))
print(out[0].outputs[0].text)

Usage with Transformers

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "AdarshSingh7647/TabRank"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, torch_dtype=torch.bfloat16, device_map="auto")

system = ("You are a table relevance expert. Given a question and a set of candidate tables "
          "rank them from most to least useful for answering the question. Reason in a "
          "<think>...</think> block then output exactly JSON with key ranked_tables.")
user = "Question: ...\n\n### Table 1\n...\n\n### Table 2\n...\n"

msgs = [{"role": "system", "content": system}, {"role": "user", "content": user}]
text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=8192, temperature=0.6, top_p=0.95, do_sample=True)
print(tok.decode(out[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))

Full training and eval code: github.com/AdarshSingh7647/TabRanker.

Model details

  • Base model: Qwen3-8B
  • Method: LoRA rank 16, merged into base weights
  • Precision: bfloat16, ~16 GB
  • Training data: NQ Tables + MultiTabQA

Citation

@misc{singh2026tabrank,
      title={TabRank: Chain-of-Thought Distillation for Table Re-Rankers},
      author={Adarsh Singh and Kushal Raj Bhandari and Jianxi Gao and Soham Dan and Vivek Gupta},
      year={2026},
      eprint={2607.25182},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2607.25182}
}

The MultiTabQA data in this checkpoint's training mix comes from RAG over Tables:

@misc{zou2025ragtableshierarchicalmemory,
      title={RAG over Tables: Hierarchical Memory Index, Multi-Stage Retrieval, and Benchmarking},
      author={Jiaru Zou and Dongqi Fu and Sirui Chen and Xinrui He and Zihao Li and Yada Zhu and Jiawei Han and Jingrui He},
      year={2025},
      eprint={2504.01346},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2504.01346}
}
Downloads last month
78
Safetensors
Model size
8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for AdarshSingh7647/TabRank

Finetuned
Qwen/Qwen3-8B
Finetuned
(2048)
this model

Collection including AdarshSingh7647/TabRank

Papers for AdarshSingh7647/TabRank