Instructions to use Serj/intent-classifier with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Serj/intent-classifier with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("Serj/intent-classifier") model = AutoModelForSeq2SeqLM.from_pretrained("Serj/intent-classifier", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| tags: | |
| - intent, topic-discovery | |
| datasets: | |
| - clinc/clinc_oos | |
| widget: | |
| - text: 'Topic %% Customer: How do I get my money back?. | |
| END MESSAGE | |
| Choose one topic that matches customer''s issue. | |
| # renew subscription # account deletion # cancel subscription # resume subscription | |
| # refund requests # other # general # item damaged # malfunction # hello # intro | |
| # question | |
| Class name: ' | |
| example_title: Open Label Intent Classification | |
| # Prompt Structure | |
| Topic %% Customer: text. | |
| END MESSAGE | |
| OPTIONS: | |
| each class separated by % | |
| Choose one topic that matches customer's issue. | |
| Class name: | |
| You have to have a period after the end of the text, otherwise you'll get funky results. That's how the model was trained. | |
| # Model Card for Model ID | |
| Intent classification is the act of classifying customer's in to different pre defined categories. | |
| Sometimes intent classification is referred to as topic classification. | |
| By fine tuning a T5 model with prompts containing sythetic data that resembles customer's requests this | |
| model is able to classify intents in a dynamic way by adding all of the categories to the prompt | |
| ## Model Details | |
| Fine tuned Flan-T5-Base | |
| ### Model Description | |
| <!-- Provide a longer summary of what this model is. --> | |
| This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated. | |
| - **Developed by:** Serj Smorodinsky | |
| - **Model type:** Flan-T5-Base | |
| - **Language(s) (NLP):** [More Information Needed] | |
| - **License:** [More Information Needed] | |
| - **Finetuned from model [optional]:** Flan-T5-Base | |
| ### Model Sources [optional] | |
| <!-- Provide the basic links for the model. --> | |
| - **Repository:** https://github.com/SerjSmor/intent_classification | |
| ## How to Get Started with the Model | |
| ``` | |
| class IntentClassifier: | |
| def __init__(self, model_name="serj/intent-classifier", device="cuda"): | |
| self.model = T5ForConditionalGeneration.from_pretrained(model_name).to(device) | |
| self.tokenizer = T5Tokenizer.from_pretrained(model_name) | |
| self.device = device | |
| def build_prompt(text, prompt="", company_name="", company_specific=""): | |
| if company_name == "Pizza Mia": | |
| company_specific = "This company is a pizzeria place." | |
| if company_name == "Online Banking": | |
| company_specific = "This company is an online banking." | |
| return f"Company name: {company_name} is doing: {company_specific}\nCustomer: {text}.\nEND MESSAGE\nChoose one topic that matches customer's issue.\n{prompt}\nClass name: " | |
| def predict(self, text, prompt_options, company_name, company_portion) -> str: | |
| input_text = build_prompt(text, prompt_options, company_name, company_portion) | |
| # print(input_text) | |
| # Tokenize the concatenated inp_ut text | |
| input_ids = self.tokenizer.encode(input_text, return_tensors="pt", max_length=512, truncation=True).to(self.device) | |
| # Generate the output | |
| output = self.model.generate(input_ids) | |
| # Decode the output tokens | |
| decoded_output = self.tokenizer.decode(output[0], skip_special_tokens=True) | |
| return decoded_output | |
| m = IntentClassifier("serj/intent-classifier") | |
| print(m.predict("Hey, after recent changes, I want to cancel subscription, please help.", | |
| "OPTIONS:\n refund\n cancel subscription\n damaged item\n return item\n", "Company", | |
| "Products and subscriptions")) | |
| ``` | |
| [More Information Needed] | |
| ## Training Details | |
| ### Training Data | |
| <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. --> | |
| https://github.com/SerjSmor/intent_classification | |
| HF dataset will be added in the future. | |
| [More Information Needed] | |
| ### Training Procedure | |
| <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. --> | |
| https://github.com/SerjSmor/intent_classification/blob/main/t5_generator_trainer.py | |
| Using HF trainer | |
| training_args = TrainingArguments( | |
| output_dir='./results', | |
| num_train_epochs=epochs, | |
| per_device_train_batch_size=batch_size, | |
| per_device_eval_batch_size=batch_size, | |
| warmup_steps=500, | |
| weight_decay=0.01, | |
| logging_dir='./logs', | |
| logging_steps=10, | |
| evaluation_strategy="epoch" | |
| ) | |
| trainer = Trainer( | |
| model=model, | |
| args=training_args, | |
| train_dataset=train_dataset, | |
| eval_dataset=val_dataset, | |
| tokenizer=tokenizer, | |
| # compute_metrics=compute_metrics | |
| ) | |
| ## Evaluation | |
| <!-- This section describes the evaluation protocols and provides the results. --> | |
| The newest version of the model is finetuned on 2 synthetic datasets and 41 first classes of clinc_oos in a few shot manner. | |
| All datasets have 10-20 samples per class. Training data did not include Atis dataset. | |
| Atis zero shot test set evaluation: weighted F1 87% | |
| Clinc test set is next. | |
| #### Summary | |
| #### Hardware | |
| Nvidia RTX3060 12Gb |