File size: 2,481 Bytes
1418942 01d0bc8 1418942 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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()
|