Spaces:
Runtime error
Runtime error
File size: 10,267 Bytes
efecb81 8b91e86 ef4dea0 7fbedaa 8b91e86 955e6e8 d67ec36 b5d5ceb ef4dea0 6608d38 e5946dc a9262b6 6608d38 4cc15a6 6608d38 c9fad14 6608d38 13fca63 4cc15a6 13fca63 6608d38 d9d263e 6608d38 c9fad14 6608d38 4cc15a6 6608d38 4cc15a6 6608d38 |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import gradio as gr
import sentence_transformers
from sentence_transformers import SentenceTransformer
import torch
from sentence_transformers.util import semantic_search
import pandas as pd
import requests
from datasets import load_dataset
import os
#Import corpus embeddings
corpus_ger = pd.DataFrame(load_dataset('ECLASS-Standard/eclass_properties_ger')['train'], token=str(os.environ['hf_token']))
corpus_eng = pd.DataFrame(load_dataset('ECLASS-Standard/eclass_properties_eng')['train']) #, token=str(os.environ['hf_token'])
corpus_fr = pd.DataFrame(load_dataset('ECLASS-Standard/eclass_properties_fr')['train']) #, token=str(os.environ['hf_token'])
#Import models
model_ger = SentenceTransformer('ECLASS-Standard/gbert-base-eclass', token=str(os.environ['user_token']))
model_eng = SentenceTransformer('ECLASS-Standard/mboth-distil-eng-quora-sentence') #, token=str(os.environ['hf_token'])
model_fr = SentenceTransformer('ECLASS-Standard/Sahajtomar-french_semantic') #, token=str(os.environ['hf_token'])
#Definition of search function
def predict(name, description, language, classCode='nofilter', top_k=10):
#language detection
if language == 'german':
model = model_ger
corpus = corpus_ger
if language == 'english':
model = model_eng
corpus = corpus_eng
if language == 'french':
model = model_fr
corpus = corpus_fr
text = name + '; ' + description #Verkettung name und description
query_embedding = model.encode(text, convert_to_tensor=True) #Erzeugung Query Embedding
#Filterung ECLASS Corpus
if classCode == 'nofilter':
corpus_filtered = corpus
else:
url = f'https://bcon2-api.azurewebsites.net/api/eclass?codedname={classCode}'
response = requests.get(url) #http request um auf Filter API zuzugreifen
lines = response.text.split('\n')
properties_filtered_list = [line[-21:-1] for line in lines]
corpus_filtered = corpus[corpus['irdi'].isin(properties_filtered_list)] #Der ECLASS Corpus wird mit Hilfe der Liste gefiltert
corpus_filtered.reset_index(drop=True,inplace=True) #Index wird zurückgesetzt
#Umwandlung corpus Embeddings in Tensor
corpus_embeddings = torch.Tensor(corpus_filtered["Embeddings"])
#Einspeisung Modell
output = sentence_transformers.util.semantic_search(query_embedding, corpus_embeddings, top_k = top_k)
#Auslesen der Modellausgabe
preferedNames = []
definitions = []
irdis = []
scores = []
for i in range(0,top_k):
preferedNames.append(corpus_filtered.iloc[output[0][i].get('corpus_id'),1])
definitions.append(corpus_filtered.iloc[output[0][i].get('corpus_id'),2])
irdis.append(corpus_filtered.iloc[output[0][i].get('corpus_id'),0])
scores.append(round(output[0][i].get('score'),2))
predictions = pd.DataFrame({'preferedName' : preferedNames, 'irdi' : irdis,'score' : scores,'definition' : definitions})
return predictions
#gradio user interface
with gr.Blocks() as demo:
with gr.Row():
with gr.Column(scale=15):
gr.Markdown(""" # ECLASS-Search-Demo
This is a semantic search application that maps unknown product properties to the ECLASS standard. It is created by ECLASS e.V. in collaboration with the GART-labortory of the cologne university of applied science.""")
with gr.Column(scale=1):
gr.Markdown("""<p align="right"><img src='data:image/png;base64,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' width=300p></p>""")
with gr.Row():
#inputs
name_tx = gr.Textbox(label="Name:",placeholder="Name of the Property", lines=1)
description_tx = gr.Textbox(label="Description:", placeholder="Description of the Property", lines=1)
with gr.Row():
#inputs
classcode_tx = gr.Textbox(value='nofilter', label="Filter with ECLASS ClassCode", placeholder="for no filter type: 'nofilter'", lines=1)
top_k_nu = gr.Number(value=10, label="Number of Matches")
language_drop = gr.Dropdown(["german", "english","french"], value='german', label="Select language")
#button
search = gr.Button("search")
#output
prediction_df = gr.Dataframe(headers = ['preferedName', 'irdi', 'score', 'definition'])
#defines search function for button “search”
search.click(fn=predict, inputs=[name_tx,description_tx,language_drop,classcode_tx,top_k_nu], outputs=prediction_df)
#examples
gr.Examples(examples=[["LED grün", "","german","nofilter",10],["Abmessungen", "","german","27272803",10],["Kabel", "","german","27272803",10],["Umgebungstemperatur", "","german","27272803",10],["Reproduzierbarkeit", "","german","27272803",10],["Repeat accuracy", "","english","27272803",10]],inputs=[name_tx,description_tx,language_drop,classcode_tx,top_k_nu])
demo.launch(debug=True) |