Views
No views yet
neuralmind/bert-large-portuguese-casedminute_id, date, meeting_type, location, begin_time, end_time, participant1from transformers import AutoTokenizer, AutoModelForTokenClassification
2import torch
3
4# Load model and tokenizer
5MODEL_NAME = "anonymous13542/BERTimbau-large-metadata-council-pt"
6tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
7model = AutoModelForTokenClassification.from_pretrained(MODEL_NAME)
8model.eval()
9
10# Example text
11text = "ATA Nº 23 REUNIÃO ORDINÁRIA PÚBLICA DA CÂMARA MUNICIPAL DE CAMPO MAIOR, REALIZADA EM 17 DE NOVEMBRO DE 2021.\nAos dezassete dias do mês de novembro do ano de dois mil e vinte e um, no Edifício dos Paços do Concelho, nesta Vila, realizou-se, pelas nove horas e trinta minutos, a reunião Ordinária Pública da Câmara Municipal, comparecendo os Excelentíssimos Senhores Luis Fernando Martins Rosinha, Paulo Ivo Sabino Martins de Almeida, Paulo Jorge Furtado Pinheiro, Maria da Encarnação Grifo Silveirinha e Fátima do Rosário Pingo Vitorino Pereira, respetivamente, Presidente e Vereadores efetivos deste Órgão Autárquico.\n-Verificada a presença dos respectivos membros, o Senhor Presidente declarou aberta a reunião:\n-Estava presente o Chefe **************************************, Dr. *********************************** e a Assistente Técnico **************************************.\n\n-ORDEM DO DIA:\n-INICIANDO A ORDEM DO DIA, ENTREGUE A TODO O EXECUTIVO E ELABORADA NOS TERMOS DO ARTIGO 53º DA LEI Nº 75/2013, DE 12 DE SETEMBRO, A CÂMARA TRATOU OS SEGUINTES ASSUNTOS:\n-ORDEM DO DIA:\n-FINANÇAS MUNICIPAIS:\n"
12
13# Tokenize with offset mapping
14inputs = tokenizer(
15 text,
16 return_tensors="pt",
17 truncation=True,
18 max_length=512,
19 return_offsets_mapping=True
20)
21offsets = inputs.pop("offset_mapping")[0]
22
23# Predict
24with torch.no_grad():
25 outputs = model(**inputs)
26
27predictions = torch.argmax(outputs.logits, dim=2)[0]
28labels = [model.config.id2label[p.item()] for p in predictions]
29
30# Extract entities using character spans
31entities = []
32current = None
33
34for (start, end), label in zip(offsets.tolist(), labels):
35 if label == "O" or start == end:
36 if current:
37 entities.append(current)
38 current = None
39 continue
40
41 if label.startswith("B-"):
42 if current:
43 entities.append(current)
44 current = {"label": label[2:], "start": start, "end": end}
45 elif label.startswith("I-") and current and label[2:] == current["label"]:
46 current["end"] = end
47 else:
48 if current:
49 entities.append(current)
50 current = None
51
52if current:
53 entities.append(current)
54
55# Print results
56print("\nDetected Entities:")
57for ent in entities:
58 span = text[ent["start"]:ent["end"]]
59 print(f"- {ent['label']}: {span}")| Metric | Score |
|---|---|
| F1 score | 0.96 |
| Precision | 0.95 |
| Recall | 0.97 |