Views
No views yet
SK_Morph_BLM-ner model in a Python script:1import torch
2from transformers import RobertaForTokenClassification, RobertaTokenizerFast
3from huggingface_hub import hf_hub_download
4import json
5
6class TokenClassifier:
7 def __init__(self, model, tokenizer):
8 self.model = RobertaForTokenClassification.from_pretrained(model, num_labels=10)
9 self.tokenizer = RobertaTokenizerFast.from_pretrained(tokenizer, max_length=256)
10 byte_utf8_mapping_path = hf_hub_download(repo_id=tokenizer, filename="byte_utf8_mapping.json")
11 with open(byte_utf8_mapping_path, "r", encoding="utf-8") as f:
12 self.byte_utf8_mapping = json.load(f)
13
14 def decode(self, tokens):
15 decoded_tokens = []
16 for token in tokens:
17 for k, v in self.byte_utf8_mapping.items():
18 if k in token:
19 token = token.replace(k, v)
20 token = token.replace("Ġ"," ")
21 decoded_tokens.append(token)
22 return decoded_tokens
23
24 def tokenize_text(self, text):
25 encoded_text = self.tokenizer(text.lower(), max_length=256, padding='max_length', truncation=True, return_tensors='pt')
26 return encoded_text
27
28 def classify_tokens(self, text):
29 encoded_text = self.tokenize_text(text)
30 tokens = self.tokenizer.convert_ids_to_tokens(encoded_text['input_ids'].squeeze().tolist())
31
32 with torch.no_grad():
33 output = self.model(**encoded_text)
34 logits = output.logits
35 predictions = torch.argmax(logits, dim=-1)
36
37 active_loss = encoded_text['attention_mask'].view(-1) == 1
38 active_logits = logits.view(-1, self.model.config.num_labels)[active_loss]
39 active_predictions = predictions.view(-1)[active_loss]
40
41 probabilities = torch.softmax(active_logits, dim=-1)
42
43 results = []
44 for token, pred, prob in zip(self.decode(tokens), active_predictions.tolist(), probabilities.tolist()):
45 if token not in ['<s>', '</s>', '<pad>']:
46 result = f"Token: {token: <10} NER tag: ({self.model.config.id2label[pred]} = {max(prob):.4f})"
47 results.append(result)
48
49 return results
50
51# Instantiate the NER classifier with the specified tokenizer and model
52classifier = TokenClassifier(tokenizer="daviddrzik/SK_BPE_BLM", model="daviddrzik/SK_BPE_BLM-ner")
53
54# Tokenize the input text
55text_to_classify = "Dávid Držík je interný doktorand na Fakulte prírodných vied a informatiky UKF v Nitre na Slovensku."
56
57# Classify the NER tags of the tokenized text
58classification_results = classifier.classify_tokens(text_to_classify)
59print(f"============= NER Token Classification =============")
60print("Text to classify:", text_to_classify)
61for classification_result in classification_results:
62 print(classification_result)1============= NER Token Classification =============
2Text to classify: Dávid Držík je interný doktorand na Fakulte prírodných vied a informatiky UKF v Nitre na Slovensku.
3Token: dá NER tag: (B-PER = 0.9673)
4Token: vid NER tag: (B-PER = 0.9816)
5Token: drží NER tag: (I-PER = 0.6309)
6Token: k NER tag: (I-PER = 0.6584)
7Token: je NER tag: (O = 0.9970)
8Token: inter NER tag: (O = 0.9005)
9Token: ný NER tag: (O = 0.9833)
10Token: doktorand NER tag: (O = 0.8623)
11Token: na NER tag: (O = 0.9965)
12Token: fakulte NER tag: (B-ORG = 0.9886)
13Token: prírodných NER tag: (I-ORG = 0.8822)
14Token: vied NER tag: (I-ORG = 0.9970)
15Token: a NER tag: (I-ORG = 0.9908)
16Token: informatiky NER tag: (I-ORG = 0.9849)
17Token: ukf NER tag: (I-ORG = 0.9112)
18Token: v NER tag: (I-ORG = 0.9969)
19Token: nitre NER tag: (I-ORG = 0.9790)
20Token: na NER tag: (O = 0.9744)
21Token: slovensku NER tag: (B-LOC = 0.9944)
22Token: . NER tag: (O = 0.9767)