visor841's picture
Change labels language to tags
01d0bc8
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()