| import torch |
| from transformers import AutoTokenizer |
| from fin_tinybert_pytorch import TinyFinBERTRegressor |
|
|
|
|
| class InferenceAPI: |
| def __init__(self): |
| self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
| self.model = TinyFinBERTRegressor() |
| self.model.load_state_dict(torch.load("./saved_model/pytorch_model.bin", map_location=self.device)) |
| self.model.to(self.device) |
| self.model.eval() |
| self.tokenizer = AutoTokenizer.from_pretrained("./saved_model") |
|
|
| def __call__(self, inputs): |
| if not isinstance(inputs, list): |
| inputs = [inputs] |
|
|
| results = [] |
| for text in inputs: |
| encoded = self.tokenizer(text, return_tensors="pt", truncation=True, |
| padding='max_length', max_length=128) |
| encoded = {k: v.to(self.device) for k, v in encoded.items() if k != "token_type_ids"} |
|
|
| with torch.no_grad(): |
| score = self.model(**encoded)["score"].item() |
|
|
| sentiment = "positive" if score > 0.3 else "negative" if score < -0.3 else "neutral" |
|
|
| results.append({ |
| "label": sentiment, |
| "score": round(score, 4) |
| }) |
|
|
| if len(results) == 1: |
| return results[0] |
| return results |