from transformers import pipeline import numpy as np import gradio as gr HEXACO = [ "honesty-humility", "emotionality", "extraversion", "agreeableness", "conscientiousness", "openness to experience" ] def netScores(tagList: list, sequence_to_classify: str, modelName: str) -> dict: classifier = pipeline("zero-shot-classification", model=modelName) hypothesis_template_pos = "This example is {}" hypothesis_template_neg = "This example is not {}" output_pos = classifier(sequence_to_classify, tagList, hypothesis_template=hypothesis_template_pos, multi_label=True) output_neg = classifier(sequence_to_classify, tagList, hypothesis_template=hypothesis_template_neg, multi_label=True) positive_scores = {} for x in range(len(tagList)): positive_scores[output_pos["labels"][x]] = output_pos["scores"][x] negative_scores = {} for x in range(len(tagList)): negative_scores[output_neg["labels"][x]] = output_neg["scores"][x] pos_neg_scores = {} for tag in tagList: pos_neg_scores[tag] = [positive_scores[tag],negative_scores[tag]] net_scores = {} for tag in tagList: net_scores[tag] = positive_scores[tag]-negative_scores[tag] net_scores = dict(sorted(net_scores.items(), key=lambda x:x[1], reverse=True)) return net_scores def scoresMatch(tagList: list, scoresA: dict, scoresB: dict): maxDistance = 2*np.sqrt(len(tagList)) differenceSquares = [] for tag in tagList: difference = (scoresA[tag] - scoresB[tag]) differenceSquare = difference*difference differenceSquares.append(differenceSquare) distance = np.sqrt(np.sum(differenceSquares)) percentDifference = distance/maxDistance return 1-percentDifference def compareTextAndLabels (userText, userLabels): userLabelsArray = userLabels.split(",") labelsMatches = {} textScores = netScores (HEXACO, userText, 'akhtet/mDeBERTa-v3-base-myXNLI') for label in userLabelsArray: labelScores = netScores (HEXACO, label, 'akhtet/mDeBERTa-v3-base-myXNLI') labelMatch = scoresMatch(HEXACO, textScores, labelScores) labelsMatches[label] = str(np.round(labelMatch*100,2))+"%" return labelsMatches demo = gr.Interface( fn=compareTextAndLabels, inputs=[gr.Textbox(label="Text"), gr.Textbox(label="Tags (separated by commas)")], outputs=[gr.Textbox(label="Tag Scores")], ) demo.launch()