Views
No views yet
transformers >= 4.25
huggingface_hub >= 0.14
torchhuggingface-cli download qnguy3n/eyebert-base --local-dir models/eyebert-base1import transformers
2import huggingface_hub
3
4print(f"transformers version: {transformers.__version__}")
5print(f"huggingface_hub version: {huggingface_hub.__version__}")1import torch
2from transformers import AutoModelForTokenClassification, AutoTokenizer
3
4# Load tokenizer and model
5tokenizer = AutoTokenizer.from_pretrained("qnguy3n/eyebert-base")
6model = AutoModelForTokenClassification.from_pretrained("qnguy3n/vabert-eyebert")
7
8# Check label mappings
9id2label = model.config.id2label
10label2id = model.config.label2id
11
12def predict_ner(text, model, tokenizer, verbose=False):
13 """
14 Predict NER spans for input text using BIO tagging
15 """
16 encoding = tokenizer(
17 text,
18 return_tensors="pt",
19 truncation=True,
20 max_length=512,
21 return_offsets_mapping=True
22 )
23
24 offset_mapping = encoding.pop("offset_mapping") # ✅ remove before model call
25 encoding = encoding.to(model.device)
26
27 model.eval()
28 with torch.no_grad():
29 outputs = model(**encoding)
30
31 predictions = outputs.logits.argmax(dim=-1)[0]
32 tokens = tokenizer.convert_ids_to_tokens(encoding["input_ids"][0])
33
34 labels = []
35 for token, pred in zip(tokens, predictions):
36 if token in ["[CLS]", "[SEP]", "[PAD]"]:
37 continue
38 labels.append(model.config.id2label[pred.item()])
39
40 # rebuild a BatchEncoding-like object for the util
41 encoding["offset_mapping"] = offset_mapping
42
43 spans = get_ents_from_bio(
44 tokens=encoding,
45 labels=labels,
46 sent=text,
47 verbose=verbose
48 )
49
50 return spans
51
52# Example usage
53text = "Visual acuity: Right Eye: 6/5 Unaided Left Eye: 6/6 Unaided"
54spans = predict_ner(text, model, tokenizer)@misc{vabert_eyebert,
title={VABERT-EyeBERT: Visual Acuity NER for Ophthalmology},
author={Nguyen, Quang},
year={2024},
publisher={Hugging Face}
}