gliner2-small / evaluation /scripts /check_protocol.py
Siddharth63's picture
Document audited training labels, context settings and reproducible NER evaluation
b3d5b6b verified
Raw History Blame Contribute Delete
2.44 kB
"""Meaningful checks for scoring, alignment, ontology mapping and publication safety."""
from benchmark_schema import make_schema
from prepare_benchmarks import bio_document
from evaluate_model import chunks,counts,Adapter
from collections import defaultdict
import json
from pathlib import Path
def main():
d=bio_document(['New','York','and','York'],['B-place','I-place','O','B-place'],'test')
assert d['entities']==[[0,8,'place'],[13,17,'place']]
assert counts(d['entities'],[[0,8,'place'],[13,17,'wrong']])==[1,1,1]
assert counts([[0,5,'x']],[[0,4,'x']])==[0,1,1]
long=' '.join('t'+str(i) for i in range(180));parts=chunks(long)
assert all(long[o:o+len(t)]==t for o,t in parts)
covered=set(i for o,t in parts for i in range(o,o+len(t)))
assert all(i in covered for i,c in enumerate(long) if not c.isspace())
a=Adapter.__new__(Adapter);a.events=defaultdict(int)
assert a.parse_json('York York','{"place":["York","York"]}',{'place':'Named place'})==[[0,4,'place'],[5,9,'place']]
assert a.parse_json('York','{"place":["Paris"]}',{'place':'Named place'})[0][0]<0
assert a.parse_gner('New York is large','New(B-place), York(I-place), is(O), large(O)',{'place':'Named place'})==[[0,8,'place']]
assert a.parse_gner('New York is large','New(B-place) York(I-place) is(O) large(O)',{'place':'Named place'})==[[0,8,'place']]
assert a.parse_gner('New , York','New(B-place) ,(O) York(B-place)',{'place':'Named place'})==[[0,3,'place'],[6,10,'place']]
inv=json.loads((Path(__file__).resolve().parents[1]/'audit/labels.json').read_text())
s=make_schema(['Actor','Rating','Chemical','Year'],inv)
assert s['Actor']['status']=='new_specific_type_related'
assert s['Rating']['status']=='scope_mismatch_or_unresolved'
assert s['Chemical']['training_definition'] in [x['definition'] for x in inv['chemical_compound']['definitions']]
semantic=make_schema(['chemicalelement','theory'],inv)
assert semantic['chemicalelement']['training_definition']=='Chemical element from periodic table'
assert semantic['theory']['training_definition']=='Scientific theory or hypothesis'
from investigate_models import flat_predictions
flat=flat_predictions([[[0,5,'person',.7],[0,5,'scientist',.9],[6,10,'company',.8],[1,4,'other',.4]]])
assert flat==[[[0,5,'scientist',.9],[6,10,'company',.8]]]
print('Protocol checks passed',flush=True)
if __name__=='__main__':main()