Views
No views yet
Status: archived precursor — superseded, retained for lineage
This is one of the preliminary Procrustes-whitening exercises that opened the alignment chain in this account. It predatesgeolip-captionbert-8192(Mar 18),geolip-constellation-core(Mar 21), thegeolip-vit-*-x3line andgeolip-vit-captionbank-coco(Jul 28), andclip-vitb-mini-distilled(Jul 30). It follows directly fromprocrustes-analysis(Mar 6), which profiled Procrustes alignability across 17 pretrained models in weight space; Bertenstein was the first attempt to apply the same idea in activation space across modalities.A 2026-07-31 audit found the original evaluation protocol invalid, and the headline retrieval numbers on this card have been withdrawn and replaced below. The architecture is best understood as an alignment determinant — an instrument for deciding whether the approach carried — rather than as a deployable model. The answer it returned was largely negative, and it was not pursued because it did not yield the invariant elements needed for distillation, which is the direction this line went instead.The negative result was local, not general. Later alignment work found Procrustes to be substantially more capable than this prototype indicated, and a corrected form of exactly this operation is now used as a standing instrument (see Lineage).
| measurement | value | note |
|---|---|---|
| text↔image, independent encoding | R@1 0.0007 | N=4962 COCO val, chance 0.0002 |
| text↔image, original joint-pass protocol | R@1 1.0000 | withdrawn — see below |
| Procrustes map alone, out-of-sample | R@1 0.0088 | N=4962, 43.5× chance; cos 0.112 vs 0.011 random |
| text↔{audio, code, protein} | withdrawn | not yet re-measured under the corrected protocol |
<TEXT> and <IMAGE> are read from one unmasked
sequence, and the training objective compares the same two readouts. That objective
is satisfiable without any cross-modal alignment. Diagnostics: R@1 stayed at 1.0000
from gallery size 64 to 4096 (real retrieval decays with gallery size), deliberately
mismatched pairs scored identically to matched ones, and the two readouts agreed at
cos 0.94 on pure-noise inputs.image_coco_test cache has no usable captions. It was built from
COCO-Caption split="test", whose annotations are withheld; upstream encodes that as
answer: ['None'], and the ingestion embedded the literal string. Every row is the
same 3-token sequence. The "40K test" row was additionally computed on n=5000, not
40K. image_coco, audio_librispeech, code_csn and protein_p2t are unaffected
and carry real text.| Expert | dimension | reported (in-sample, whitened frame) | out-of-sample |
|---|---|---|---|
| audio | 1280 → 1024 (PCA) | 0.4404 | not re-measured |
| code | 768 → 1024 (pad) | 0.4036 | not re-measured |
| image | 1024 → 1024 | 0.4107 | cos 0.112, R@1 0.0088 |
| protein | 1280 → 1024 (PCA) | 0.3771 | not re-measured |
┌─────────────┐
│ Shared │
┌──────┐ │ Fusion │ ┌──────┐
│ BERT │──text──→ │ Transformer│ ←──img──│DINOv2│
│large │ │ (1 layer) │ │large │
└──────┘ │ 1024-d │ └──────┘
│ 16 heads │
┌──────┐ │ │ ┌──────┐
│Whisp.│──audio─→ │ Procrustes │ ←─prot──│ESM-2 │
│large │ │ pre-aligned│ │650M │
└──────┘ │ │ └──────┘
│ │
┌──────┐ │ │
│Code- │──code──→ │ │
│BERT │ └─────────────┘
└──────┘<|MODALITY|> token and an output head. The fusion sequence is
[<|TEXT|>] [text] [<|IMAGE|>] [img] … with bidirectional attention, and each modality's
embedding is read from its special-token position. Loss: InfoNCE + a pentachoron volume
term + a Procrustes alignment term.<|TEXT|> readout is not a function
of the text alone. Measured: it retains ~0.8% of itself when the attached image is
swapped, and ~99.5% when the text is swapped. An untrained model shows the same
asymmetry more mildly (34% / 59%), so this is a property of the unmasked joint sequence
that training amplified. It also means the intended indirect association had no
mechanism to travel on — alignments cannot compose through an anchor that isn't a
function of its own modality.AbstractPhil/bertenstein-v1
— configs image_coco, image_coco_test, audio_librispeech, code_csn, protein_p2t.geolip-captionbert-8192's cached
consensus, which aligns heterogeneous frozen encoders to a reference member rather than
to a running mean — the property that lets it fuse experts of differing dimension.geolip-vit-captionbank-coco, clip-vitb-mini-distilled), where the target is cached
and model-free at training time.image_coco_test failure was a
validity flag derived from the image alone, letting empty and placeholder captions
through.geolip-bertenstein/
├── checkpoints/
│ ├── epoch_001/ · epoch_002/ · epoch_003/
│ └── final/ model.safetensors · loss.safetensors · training_state.pt
│ config.json · aligner_{audio,code,image,protein}.safetensors
├── tensorboard/
├── bertenstein_results.json # original metrics — see Corrected results above
├── cell1_prepare_data.py # Stage 1: encode + cache
├── cell2_prototype_model_trainer_v1.py # Stage 2: align, train, evaluate
└── README.mdcheckpoints/final/model.safetensors contains 102 tensors; the Procrustes aligner
buffers ship inside it as experts.<name>.aligner.* as well as separately.
Class definitions (BertensteinFusion, ExpertModule, ProcrustesAligner,
FusionConfig) live in cell2_prototype_model_trainer_v1.py — earlier revisions of
this card referenced a stage2_bertenstein.py, which was never part of this repo.AbstractPhil/procrustes-analysis — the weight-space profiling this grew out ofAbstractPhil/geolip-captionbert-8192 — reference-member consensus, the successor constructionAbstractPhil/clip-vitb-mini-distilled — where the distillation direction landed1@misc{abstractphil2026bertenstein,
2 title={GEOLIP-Bertenstein: A Multimodal Procrustes Alignment Prototype},
3 author={AbstractPhil},
4 year={2026},
5 note={Archived research precursor; evaluation protocol corrected 2026-07-31},
6 url={https://huggingface.co/AbstractPhil/geolip-bertenstein}
7}