README.md
5.6 KB · 150 lines · markdown Raw
1 ---
2 license: apache-2.0
3 library_name: synthefy-nori
4 pipeline_tag: tabular-regression
5 tags:
6 - tabular
7 - tabular-regression
8 - tabular-foundation-model
9 - in-context-learning
10 - synthetic-data
11 - pytorch
12 ---
13
14 <p align="center">
15 <img src="synthefy_nori_banner.png" alt="Nori" width="100%">
16 </p>
17
18 # Nori-30M
19
20 **Nori-30M** is the ~29.2M-parameter variant of [Nori](https://huggingface.co/Synthefy/Nori),
21 a tabular foundation model for **regression** via in-context learning (ICL). Given a few labeled
22 rows as context, it predicts on new query rows in a **single forward pass**, with no task-specific
23 training or fine-tuning. The model is trained **entirely on synthetic data**.
24
25 - **Documentation:** https://docs.synthefy.com/nori/
26 - **Repository:** https://github.com/Synthefy/synthefy-nori
27 - **Library:** `pip install synthefy-nori`
28 - **Checkpoint:** `nori.pt` (this repo)
29 - **Parameters:** ~29.2M
30 - **License:** Apache-2.0
31
32 ## Results
33
34 Mean and median R² across 96 regression tasks from three public benchmark suites, on the same
35 protocol as the [base Nori](https://huggingface.co/Synthefy/Nori):
36
37 | Suite | Datasets | Mean R² | Median R² |
38 |-------|---------:|--------:|----------:|
39 | TabArena | 13 | 0.8148 | 0.8834 |
40 | TALENT | 72 | 0.7575 | 0.8844 |
41 | OpenML | 11 | 0.6459 | 0.6212 |
42 | **Overall** | **96** | **0.7525** | **0.8745** |
43
44 Stronger than the ~6M base on every suite. Evaluated with the bundled default inference config
45 and the large-GPU protocol (up to 50k context rows per dataset).
46
47 ## Use it from your AI coding assistant
48
49 Paste this into Claude Code, Cursor, or any AI coding assistant and it will wire
50 Nori into your own project:
51
52 ````text
53 Look at my code/task/report here and figure out where Nori would best fit — it's
54 Synthefy's tabular foundation model, a drop-in scikit-learn estimator that predicts
55 a continuous target by in-context learning: no training loop, no hyperparameters,
56 and it uses the GPU automatically when one's available (CPU otherwise).
57
58 1. Install it with this project's package manager
59 (e.g. `uv add synthefy-nori`, or `pip install -U synthefy-nori`).
60
61 2. Use it wherever a tabular regression / prediction step fits:
62
63 ```python
64 from synthefy_nori import NoriRegressor
65
66 reg = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first predict
67 reg.fit(X_train, y_train) # stores your rows as context — no training happens
68 y_pred = reg.predict(X_test) # point predictions (predictive-distribution mean)
69
70 # Prediction intervals come free — no conformal/quantile add-ons:
71 lo, mid, hi = reg.predict(X_test, output_type="quantiles", quantiles=[0.1, 0.5, 0.9])
72 ```
73
74 X is a numeric feature matrix (encode categoricals as ordinals/one-hot, leave
75 missing values as NaN, no scaling needed); y is a finite continuous target. If I
76 already have a model, wire Nori up alongside it on the same train/test split and
77 metric so I can compare them. If the best place to plug Nori in isn't obvious,
78 show me where you'd put it and confirm with me before making changes.
79
80 Going deeper: synthefy-nori ships a ready-made nori-regression skill for AI coding
81 assistants with vetted recipes — calibrated prediction intervals, honest baseline
82 comparison under fixed CV, SHAP/PDP interpretability, and leak-safe one-step
83 time-series forecasting. Read and follow it if relevant:
84 https://github.com/Synthefy/synthefy-nori/tree/main/.claude/skills/nori-regression
85 ````
86
87 ## Usage
88
89 ```bash
90 pip install synthefy-nori
91 ```
92
93 ```python
94 from sklearn.datasets import load_diabetes
95 from sklearn.model_selection import train_test_split
96 from synthefy_nori import NoriRegressor
97
98 X, y = load_diabetes(return_X_y=True)
99 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
100
101 model = NoriRegressor(model="nori-30m") # downloads these weights from the Hub on first use
102 model.fit(X_train, y_train) # "fit" just stores the labeled rows as context
103 pred = model.predict(X_test) # predictions in a single forward pass, no training
104 ```
105
106 It uses a GPU when one is available and falls back to CPU. A one-shot helper skips the object
107 entirely:
108
109 ```python
110 from synthefy_nori import predict
111 pred = predict(X_train, y_train, X_test, task="regression", model="nori-30m")
112 ```
113
114 `predict` follows the `TabPFNRegressor.predict` contract: pass `output_type="mean"` (default),
115 `"median"`, or `"mode"` to choose the point estimate drawn from the model's predictive
116 distribution.
117
118 To run from a local checkpoint instead of the Hub, pass a path:
119 `NoriRegressor(model_path="path/to/nori.pt")`.
120
121 This model is **public**: the first call downloads and caches it automatically, with no token and no
122 access request. A Hugging Face token (read scope) is only worth setting if you hit anonymous
123 download rate limits — provide it via `export HF_TOKEN=hf_...`, `hf auth login`, or
124 `NoriRegressor(model="nori-30m", token="hf_...")`.
125
126 ## Intended use & limitations
127
128 - **Intended for** small-to-medium tabular regression where in-context learning is attractive
129 (no per-task training).
130 - **Limitations:** dense O(N²) sample attention bounds practical context size, so the current gap
131 vs the best baselines is on **large-N / long-context** tables. Trained entirely on synthetic
132 data; no benchmark data is used in training.
133
134 ## Citation
135
136 ```bibtex
137 @software{synthefy_nori_2026,
138 title = {Nori: A Tabular Foundation Model Trained on Synthetic Data},
139 author = {Synthefy},
140 year = {2026},
141 url = {https://github.com/Synthefy/synthefy-nori}
142 }
143 ```
144
145 ## License
146
147 Apache-2.0. See
148 [LICENSE](https://github.com/Synthefy/synthefy-nori/blob/main/LICENSE) and
149 [NOTICE](https://github.com/Synthefy/synthefy-nori/blob/main/NOTICE).
150