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 event1: 5-year CVD event
- Custom modeling code lives in
modeling_ftt.pyand is loaded automatically viatrust_remote_code=True(seeauto_mapinconfig.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
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.0num_input_ids(long): weight-tokenizer ids for each continuous variable's name,[CLS]-prefixednum_variable_ids(long): bias-tokenizer ids for each continuous variable's name,[CLS]-prefixedcat_input_ids(long): weight-tokenizer ids for each categoricalvariable_valuepair presentcat_variable_ids(long): bias-tokenizer ids for each categorical variable's nameattention_mask(long):1for real tokens (1 CLS + n_continuous + n_categorical),0for padding
See 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 withtrust_remote_code=True, builds a full synthetic example, and prints the logits/predicted class.pip install transformers huggingface_hub torch python test_upload.py --repo-id thinkhong/RAICtest_ftt_hub.pyβ apytestsuite 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).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).
- Downloads last month
- -