numanBot/Customer_feedback_summarization
0
1"""Inference file to get Customer Feedback Summary."""2from transformers import (TFAutoModelForSeq2SeqLM,3 TFAutoModelForSequenceClassification, AutoTokenizer)4from config import (SUMMARY_MODEL_NAME, SCORING_MODEL_NAME,5 HF_HUB_SUMMARY_MODEL_NAME, HF_HUB_SCORING_MODEL_NAME,6 GENERATION_PARAMS, PREFIX)7 8 9summary_tokenizer = AutoTokenizer.from_pretrained(SUMMARY_MODEL_NAME)10scoring_tokenizer = AutoTokenizer.from_pretrained(SCORING_MODEL_NAME)11 12try:13 summary_model = TFAutoModelForSeq2SeqLM.from_pretrained(HF_HUB_SUMMARY_MODEL_NAME)14except:15 summary_model = TFAutoModelForSeq2SeqLM.from_pretrained(SUMMARY_MODEL_NAME)16 17try:18 scoring_model = TFAutoModelForSequenceClassification.from_pretrained(HF_HUB_SCORING_MODEL_NAME)19except:20 scoring_model = TFAutoModelForSequenceClassification.from_pretrained(SCORING_MODEL_NAME)21 22 23def get_annotation_score(text, summary):24 """Annotation score for a generated summary.25 Args:26 text: Appended user review on which summary is generated27 Ex: (Twitter: Notion: User: This is a review.)28 summary: Summary for the customer review29 Ex: (User has given a review.)30 31 Returns:32 annotation_score (float): score according to satisfied guidelines 33 """34 args = (text, summary)35 input_ids = scoring_tokenizer(*args, return_tensors="np")36 annotation_score = round(scoring_model(input_ids).logits.numpy()[0][0], 2)37 return annotation_score38 39 40def get_summary_score(request_body):41 """Customer Feedback Summary for a given review.42 Args:43 request_body: Dictionary containing44 customer: Any one of [Notion, figma, zoom]45 type: Any one of [Appstore/Playstore, Twitter, G2]46 feedback: user review for the customer on (type) platform47 48 Returns:49 Dictionary:50 summary: summarized text51 annotation_score: score according to satisfied guidelines 52 """53 customer = request_body.get("customer", "")54 type = request_body.get("type", "")55 feedback = request_body.get("feedback", "")56 appended_text = ": ".join([type, customer, "User", feedback])57 input_text = PREFIX + appended_text58 input_ids = summary_tokenizer(input_text, return_tensors="tf").input_ids59 outputs = summary_model.generate(input_ids, **GENERATION_PARAMS)60 summarized_text = summary_tokenizer.decode(outputs[0], skip_special_tokens=True)61 annotation_score = get_annotation_score(appended_text, summarized_text)62 return {"summary": summarized_text, "annotation_score": annotation_score}63 