Views
No views yet
SK_Morph_BLM-qa model in a Python script:1import torch
2from torch.nn.functional import softmax
3from transformers import RobertaForQuestionAnswering
4from huggingface_hub import snapshot_download
5import sys
6import json
7
8class QuestionAnsweringModel:
9 def __init__(self, model, tokenizer):
10 self.model = RobertaForQuestionAnswering.from_pretrained(model)
11
12 repo_path = snapshot_download(repo_id=tokenizer)
13 sys.path.append(repo_path)
14
15 from SKMT_lib_v2.SKMT_BPE import SKMorfoTokenizer
16 self.tokenizer = SKMorfoTokenizer()
17
18 def decode(self, tensor):
19 result = "".join(self.tokenizer.convert_list_ids_to_tokens(tensor.tolist()))
20 result = result.replace("Ġ", " ").strip()
21 return result
22
23 def predict(self, context, question):
24 inputs = self.tokenizer.tokenizeQA(context, question, max_length=256, return_tensors="pt", return_subword=False)
25 input_ids = inputs["input_ids"][0]
26
27 outputs = self.model(**inputs)
28 start_logits = outputs.start_logits
29 end_logits = outputs.end_logits
30
31 start_probs = softmax(start_logits, dim=1)
32 end_probs = softmax(end_logits, dim=1)
33
34 answer_start = torch.argmax(start_probs)
35 answer_end = torch.argmax(end_probs) + 1
36
37 answer = self.decode(input_ids[answer_start:answer_end])
38
39 start_prob = start_probs[0, answer_start].item()
40 end_prob = end_probs[0, answer_end - 1].item()
41
42 return answer, start_prob, end_prob
43
44# Instantiate the QA model with the specified tokenizer and model
45qa_model = QuestionAnsweringModel(tokenizer="daviddrzik/SK_Morph_BLM", model="daviddrzik/SK_Morph_BLM-qa")
46
47context = "Albert Einstein, narodený v roku 1879, je jedným z najvplyvnejších fyzikov všetkých čias. Vyvinul teóriu relativity, ktorá zmenila naše chápanie priestoru, času a gravitácie. Jeho slávna rovnica E = mc², ktorá vyjadruje vzťah medzi energiou a hmotou, je považovaná za jednu z najvýznamnejších rovníc vo fyzike. Einstein získal Nobelovu cenu za fyziku v roku 1921 za jeho prácu na fotoelektrickom jave, ktorý bol kľúčový pre rozvoj kvantovej mechaniky."
48question = "V ktorom roku získal Albert Einstein Nobelovu cenu za fyziku?"
49
50print("\nContext: " + context + "\n")
51print("Question: " + question + "\n")
52
53# Predict the answer
54answer = qa_model.predict(context, question)
55print(f"Predicted answer: {answer}")1Context: Albert Einstein, narodený v roku 1879, je jedným z najvplyvnejších fyzikov všetkých čias.
2Vyvinul teóriu relativity, ktorá zmenila naše chápanie priestoru, času a gravitácie.
3Jeho slávna rovnica E = mc², ktorá vyjadruje vzťah medzi energiou a hmotou,
4je považovaná za jednu z najvýznamnejších rovníc vo fyzike.
5Einstein získal Nobelovu cenu za fyziku v roku 1921 za jeho prácu na fotoelektrickom jave,
6ktorý bol kľúčový pre rozvoj kvantovej mechaniky.
7
8Question: V ktorom roku získal Albert Einstein Nobelovu cenu za fyziku?
9
10Predicted answer: ('v roku 1921', 0.7977392673492432, 0.9985119700431824)