|
Download README.md from thinkhong/RAIC: direct link, hf CLI and curl.
- Browser
- Download file 5.06 kB
-
https://huggingface.co/thinkhong/RAIC/resolve/main/README.md
- Command line
-
hf download hf://thinkhong/RAIC/README.md
-
curl -L -o README.md https://huggingface.co/thinkhong/RAIC/resolve/main/README.md
5.06 kB
| license: unknown | |
| tags: | |
| - tabular-classification | |
| - feature-tokenizer-transformer | |
| - distilbert | |
| - cardiovascular-disease | |
| - uk-biobank | |
| pipeline_tag: tabular-classification | |
| # RAIC — FTT (Feature Tokenizer Transformer) for UK Biobank CVD risk classification | |
| A DistilBERT-style transformer adapted to **tabular** clinical data. Each row (participant) | |
| is treated as a "sentence" whose "tokens" are its features: | |
| - **Continuous features** are embedded via a per-feature learned weight vector, scaled by | |
| the (min-max normalized) value (`num_input_val * variable_weights_embeddings[num_input_ids]`). | |
| - **Categorical features** are embedded via a per-value lookup table | |
| (`variable_weights_embeddings[cat_input_ids]`). | |
| - A separate **variable/bias embedding** table encodes which feature slot ("variable") each | |
| token corresponds to, acting like a position embedding | |
| (`variable_bias_embeddings[num_variable_ids | cat_variable_ids]`). | |
| The model was trained to predict **5-year incident cardiovascular disease (CVD)** from UK | |
| Biobank baseline assessment data (`YEAR_5_CVD`, binary), using 69 continuous and 76 | |
| categorical features. | |
| This checkpoint corresponds to the local experiment `20240603_1_UKB_CVD_cls_hp_search`. | |
| > **Data/label note:** No participant-level data is included in this repository — only model | |
| > weights, config, tokenizers, and aggregate (variable-level) min/max normalization | |
| > statistics used at training time. UK Biobank data governance means this model should only | |
| > be applied to appropriately approved data/use cases. | |
| ## Model details | |
| - Architecture: `FTTForSequenceClassification` (DistilBERT encoder, 8 layers, 16 heads, | |
| hidden dim 128, feed-forward dim 1024) | |
| - Task: binary sequence classification (`num_labels=2`) | |
| - `0`: no 5-year CVD event | |
| - `1`: 5-year CVD event | |
| - Custom modeling code lives in [`modeling_ftt.py`](modeling_ftt.py) and is loaded | |
| automatically via `trust_remote_code=True` (see `auto_map` in `config.json`). | |
| ## Files | |
| | File | Purpose | | |
| |---|---| | |
| | `config.json` | Model hyperparameters + `auto_map` for custom-code loading | | |
| | `modeling_ftt.py` | `FTTConfig`, `FTTModel`, `FTTForSequenceClassification`, `FTTForMaskedLM` | | |
| | `model.safetensors` | Fine-tuned classification weights | | |
| | `ftt_variable_weights_tokenizer_20240530/` | Maps each continuous-variable name and each categorical (variable, value) pair to a token id used for the *weight* embedding table | | |
| | `ftt_variable_bias_tokenizer_20240530/` | Maps each variable name to a token id used for the *bias/position* embedding table | | |
| | `train_continuous_variables_min_max_values.json` | Per-continuous-variable `[min, max]` from the training set, used to min-max normalize raw values into `[1, 3]` before scoring (see `test_upload.py`) | | |
| ## Usage | |
| ```python | |
| from transformers import AutoConfig, AutoModelForSequenceClassification, AutoTokenizer | |
| repo_id = "thinkhong/RAIC" | |
| config = AutoConfig.from_pretrained(repo_id, trust_remote_code=True) | |
| model = AutoModelForSequenceClassification.from_pretrained(repo_id, trust_remote_code=True) | |
| model.eval() | |
| weights_tok = AutoTokenizer.from_pretrained(repo_id, subfolder="ftt_variable_weights_tokenizer_20240530") | |
| bias_tok = AutoTokenizer.from_pretrained(repo_id, subfolder="ftt_variable_bias_tokenizer_20240530") | |
| ``` | |
| The model's `forward()` does **not** take `input_ids`/text. Instead it expects: | |
| - `num_input_val` (float): normalized continuous values, `[CLS]` slot = `1.0` | |
| - `num_input_ids` (long): weight-tokenizer ids for each continuous variable's *name*, `[CLS]`-prefixed | |
| - `num_variable_ids` (long): bias-tokenizer ids for each continuous variable's *name*, `[CLS]`-prefixed | |
| - `cat_input_ids` (long): weight-tokenizer ids for each categorical `variable_value` pair present | |
| - `cat_variable_ids` (long): bias-tokenizer ids for each categorical variable's *name* | |
| - `attention_mask` (long): `1` for real tokens (`1 CLS + n_continuous + n_categorical`), `0` for padding | |
| See [`test_upload.py`](test_upload.py) for a full worked (dummy-value) example, including how | |
| to normalize a raw continuous value with `train_continuous_variables_min_max_values.json`. | |
| ## Testing | |
| Two test scripts are included: | |
| - **`test_upload.py`** — a runnable demo/smoke test. Downloads the model from the Hub with | |
| `trust_remote_code=True`, builds a full synthetic example, and prints the logits/predicted class. | |
| ```bash | |
| pip install transformers huggingface_hub torch | |
| python test_upload.py --repo-id thinkhong/RAIC | |
| ``` | |
| - **`test_ftt_hub.py`** — a `pytest` suite with pass/fail assertions (architecture, param count, | |
| tokenizer vocab sizes, forward-pass shape, determinism, and an exact-match check against the | |
| reference logits recorded at publish time). | |
| ```bash | |
| pip install pytest transformers huggingface_hub torch | |
| pytest test_ftt_hub.py -v | |
| ``` | |
| ## Verification | |
| This checkpoint was uploaded from the original training output directory and verified to | |
| produce bit-identical logits to the source checkpoint on an identical input before publishing | |
| (see `test_upload.py`). | |