Spaces:
Sleeping
Sleeping
import gensim.downloader | |
import gradio as gr | |
import pandas as pd | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from sklearn.decomposition import PCA | |
from sklearn.manifold import TSNE | |
model = gensim.downloader.load("glove-wiki-gigaword-50") | |
# Function to reduce dimensions | |
def reduce_dimensions(data, method='PCA'): | |
if method == 'PCA': | |
model = PCA(n_components=2) | |
elif method == 'TSNE': | |
model = TSNE(n_components=2, learning_rate='auto', init='random', perplexity=3) | |
return model.fit_transform(data) | |
description = """ | |
### Word Embedding Demo App | |
Universidade Federal de São Paulo - Escola Paulista de Medicina | |
The output is Word3 + (Word2 - Word1) | |
Credits: | |
* Gensim | |
* Glove | |
""" | |
Word1 = gr.Textbox() | |
Word2 = gr.Textbox() | |
Word3 = gr.Textbox() | |
label = gr.Label(show_label=True, label="Word4") | |
sp = gr.ScatterPlot(x="x", y="y", color="color", label="label") | |
def inference(word1, word2, word3): | |
output = model.similar_by_vector(model[word3] + model[word2] - model[word1]) | |
print(output) | |
word_list = [word1, word2, word3] | |
word_list.extend([x for x,y in [item for item in output[:4]]]) | |
words = {key: model[key] for key in word_list} | |
data = np.concatenate([x[np.newaxis, :] for x in words.values()], axis=0) | |
print(data.shape) | |
labels = words.keys() | |
reduced_data_pca = reduce_dimensions(data, method='PCA') | |
print(reduced_data_pca.shape) | |
#''' | |
df = pd.DataFrame({ | |
"x": reduced_data_pca[:, 0], | |
"y": reduced_data_pca[:, 1], | |
"color": [x for x in labels][:len(data)] | |
#"label": ["W1", "W2", "W3", "W4", "W5", "W6", "W7"][:len(data)] | |
}) | |
#''' | |
return df | |
examples = [ | |
["woman", "man", "aunt"], | |
["woman", "man", "girl"], | |
["woman", "man", "granddaughter"], | |
] | |
iface = gr.Interface( | |
fn=inference, | |
inputs=[Word1, Word2, Word3], | |
outputs=sp, | |
description=description, | |
examples=examples | |
) | |
iface.launch() |