Spaces:
Sleeping
Sleeping
| import onnxruntime as ort | |
| from transformers import AutoTokenizer | |
| import numpy as np | |
| import requests | |
| import os | |
| VERSION = "v0.1.1" | |
| class IntentClassifier: | |
| def __init__(self): | |
| self.id2label = {0: 'information_intent', | |
| 1: 'yelp_intent', | |
| 2: 'navigation_intent', | |
| 3: 'travel_intent', | |
| 4: 'purchase_intent', | |
| 5: 'weather_intent', | |
| 6: 'translation_intent', | |
| 7: 'unknown'} | |
| self.label2id = {label: id for id, label in self.id2label.items()} | |
| self.tokenizer = AutoTokenizer.from_pretrained("Mozilla/mobilebert-uncased-finetuned-LoRA-intent-classifier") | |
| model_url = f"https://huggingface.co/Mozilla/mobilebert-uncased-finetuned-LoRA-intent-classifier/resolve/{VERSION}/onnx/model_quantized.onnx" | |
| model_dir_path = "models" | |
| model_path = f"{model_dir_path}/mobilebert-uncased-finetuned-LoRA-intent-classifier_model_quantized.onnx" | |
| if not os.path.exists(model_dir_path): | |
| os.makedirs(model_dir_path) | |
| if not os.path.exists(model_path): | |
| print("Downloading ONNX model...") | |
| response = requests.get(model_url) | |
| with open(model_path, "wb") as f: | |
| f.write(response.content) | |
| print("ONNX model downloaded.") | |
| # Load the ONNX model | |
| self.ort_session = ort.InferenceSession(model_path) | |
| def find_intent(self, sequence, verbose=False): | |
| inputs = self.tokenizer(sequence, | |
| return_tensors="np", # ONNX requires inputs in NumPy format | |
| padding="max_length", # Pad to max length | |
| truncation=True, # Truncate if the text is too long | |
| max_length=64) | |
| # Convert inputs to NumPy arrays | |
| onnx_inputs = {k: v for k, v in inputs.items()} | |
| # Run the ONNX model | |
| logits = self.ort_session.run(None, onnx_inputs)[0] | |
| # Get the prediction | |
| prediction = np.argmax(logits, axis=1)[0] | |
| probabilities = np.exp(logits) / np.sum(np.exp(logits), axis=1, keepdims=True) | |
| rounded_probabilities = np.round(probabilities, decimals=3) | |
| pred_result = self.id2label[prediction] | |
| proba_result = dict(zip(self.label2id.keys(), rounded_probabilities[0].tolist())) | |
| if verbose: | |
| print(sequence + " -> " + pred_result) | |
| print(proba_result, "\n") | |
| return pred_result, proba_result | |
| def main(): | |
| text_list = [ | |
| 'floor repair cost', | |
| 'pet store near me', | |
| 'who is the us president', | |
| 'italian food', | |
| 'sandwiches for lunch', | |
| "cheese burger cost", | |
| "What is the weather today", | |
| "what is the capital of usa", | |
| "cruise trip to carribean", | |
| ] | |
| cls = IntentClassifier() | |
| for sequence in text_list: | |
| cls.find_intent(sequence, verbose=True) | |
| if __name__ == '__main__': | |
| main() | |