Views
No views yet
⚠️ Pretraining degeneracy (audit 2026-05-18): empirical inspection shows this checkpoint's encoder is largely collapsed: pair-wise within-sequence hidden-state cosines hover at ≈ 0.999 and the MLM head returns nearly the same top-k tokens regardless of context. The model nominally achieved a low MLM eval_loss but appears to have settled on a degenerate "predict the most frequent token" strategy. Root cause traced to an under-sized BERT pretrain corpus (training_ready_hf_dataset≈ 4k rows vs ≈ 3.3M available inarrow_splits/). Not recommended for downstream use as-is; consider re-training fromarrow_splits/instead. (Note: the matching-largevariant exhibits an even more severe collapse and was therefore not uploaded.)
1from transformers import AutoModelForMaskedLM, AutoTokenizer
2import torch
3
4model = AutoModelForMaskedLM.from_pretrained("kojima-lab/molcrawl-molecule-nat-lang-bert-medium")
5tokenizer = AutoTokenizer.from_pretrained("kojima-lab/molcrawl-molecule-nat-lang-bert-medium")
6
7# Predict masked token
8# Use tokenizer.mask_token instead of hardcoded "[MASK]":
9# BERT-style tokenizers vary ("[MASK]", "<mask>", etc.)
10if tokenizer.mask_token is None:
11 raise ValueError("This tokenizer has no mask_token; masked LM inference is not supported.")
12prompt = "your input {MASK} sequence".replace("{MASK}", tokenizer.mask_token)
13inputs = tokenizer(prompt, return_tensors="pt")
14mask_index = (inputs["input_ids"] == tokenizer.mask_token_id).nonzero(as_tuple=True)[1]
15
16with torch.no_grad():
17 outputs = model(**inputs)
18logits = outputs.logits
19
20predicted_token_id = logits[0, mask_index].argmax(dim=-1)
21predicted_token = tokenizer.decode(predicted_token_id)
22result = prompt.replace(tokenizer.mask_token, predicted_token)
23print(f"Predicted: {result}")
241@misc{molcrawl_molecule_nat_lang_bert_medium,
2 title={molcrawl-molecule-nat-lang-bert-medium},
3 author={{RIKEN}},
4 year={2026},
5 publisher={{Hugging Face}},
6 url={{https://huggingface.co/kojima-lab/molcrawl-molecule-nat-lang-bert-medium}}
7}Note:AutoTokenizerrequirescodellama/CodeLlama-7b-hfcached locally. When loading from Hub without a local CodeLlama cache, usemolcrawl.molecule_nat_lang.utils.tokenizer.MoleculeNatLangTokenizerdirectly.
1import sys
2sys.path.insert(0, "/path/to/riken-dataset-fundational-model") # project root
3
4import torch
5from transformers import AutoModelForMaskedLM
6from molcrawl.data.molecule_nat_lang.utils.tokenizer import MoleculeNatLangTokenizer
7
8REPO_ID = "kojima-lab/molcrawl-molecule-nat-lang-bert-medium"
9model = AutoModelForMaskedLM.from_pretrained(REPO_ID)
10model.eval()
11
12tokenizer_wrap = MoleculeNatLangTokenizer()
13tokenizer = tokenizer_wrap.tokenizer
14
15MASK = getattr(tokenizer, "mask_token", "[MASK]")
16prompt = "The molecule aspirin has the SMILES CC(=O)Oc1ccccc1C(=O)O and it is an {MASK}.".format(MASK=MASK)
17
18inputs = tokenizer(prompt, return_tensors="pt")
19mask_index = (inputs["input_ids"] == tokenizer.mask_token_id).nonzero(as_tuple=True)[1]
20
21with torch.no_grad():
22 outputs = model(**inputs)
23logits = outputs.logits
24
25predicted_token_id = logits[0, mask_index].argmax(dim=-1)
26predicted_token = tokenizer.decode(predicted_token_id)
27result = prompt.replace(MASK, predicted_token)
28print(f"Predicted: {result}")
29# => Predicted: The molecule aspirin has the SMILES CC(=O)Oc1ccccc1C(=O)O and it is an without.