eliwill's picture
Update app.py
68a85c3
raw
history blame contribute delete
No virus
4.18 kB
import gradio as gr
from transformers import pipeline
import numpy as np
import pandas as pd
from sentence_transformers import SentenceTransformer, util
import nltk
from nltk import sent_tokenize
nltk.download("punkt")
# Loading in dataframes
krishnamurti_df = pd.read_json("krishnamurti_df.json")
stoic_df = pd.read_json("stoic_df.json")
alan_df = pd.read_json("alan-watts_df.json")
# Loading in sentence_similarity model
sentence_similarity_model = "all-mpnet-base-v2"
model = SentenceTransformer(sentence_similarity_model)
# Loading in text-generation models
stoic_generator = pipeline("text-generation", model="eliwill/stoic-generator-10e")
krishnamurti_generator = pipeline("text-generation", model="eliwill/distilgpt2-finetuned-final-project")
alan_generator = pipeline("text-generation", model="eliwill/alan-watts-8e")
# Creating philosopher dictionary
philosopher_dictionary = {
"Marcus Aurelius": {
"generator": stoic_generator,
"dataframe": stoic_df,
"image": "marcus-aurelius.jpg"
},
"Krishnamurti": {
"generator": krishnamurti_generator,
"dataframe": krishnamurti_df,
"image": "krishnamurti.jpg"
},
"Alan Watts": {
"generator": alan_generator ,
"dataframe": alan_df ,
"image": "rsz_1alan_watts.jpg"
}
}
############### DEFINING FUNCTIONS ###########################
def ask_philosopher(philosopher, question):
""" Return first 5 sentences generated by question for the given philosopher model """
generator = philosopher_dictionary[philosopher]['generator']
answer = generator(question, min_length=100, max_length=120)[0]['generated_text'] # generate about 50 word tokens
answer = " ".join(sent_tokenize(answer)[:6]) # Get the first five sentences
return answer
def get_similar_quotes(philosopher, question):
""" Return top 5 most similar quotes to the question from a philosopher's dataframe """
df = philosopher_dictionary[philosopher]['dataframe']
question_embedding = model.encode(question)
sims = [util.dot_score(question_embedding, quote_embedding) for quote_embedding in df['Embedding']]
ind = np.argpartition(sims, -5)[-5:]
similar_sentences = [df['quote'][i] for i in ind]
top5quotes = pd.DataFrame(data = similar_sentences, columns=["Quotes"], index=range(1,6))
top5quotes['Quotes'] = top5quotes['Quotes'].str[:-1].str[:250] + "..."
return top5quotes
def main(question, philosopher):
out_image = philosopher_dictionary[philosopher]['image']
return ask_philosopher(philosopher, question), get_similar_quotes(philosopher, question), out_image
with gr.Blocks(css=".gradio-container {background-image: url('file=blue_mountains.jpg')} # title {color: #F0FFFF}") as demo:
gr.Markdown("""
# Ask a Philsopher
""",
elem_id="title"
)
with gr.Row():
with gr.Column():
inp1 = gr.Textbox(placeholder="Place your question here...", label="Ask a question", elem_id="title")
inp2 = gr.Dropdown(choices=["Alan Watts", "Marcus Aurelius", "Krishnamurti"], value="Marcus Aurelius", label="Choose a philosopher")
out1 = gr.Textbox(
lines=3,
max_lines=10,
label="Answer"
)
with gr.Row():
out_image = gr.Image(label="Picture", image_mode="L")
out2 = gr.DataFrame(
headers=["Quotes"],
max_rows=5,
interactive=False,
wrap=True,
value=[["When you arise in the morning, think of what a precious privilege it is to be alive – to breathe, to think, to enjoy, to love."],
["Each day provides its own gifts."],
["Only time can heal what reason cannot."],
["He who is brave is free."],
["First learn the meaning of what you say, and then speak."]]
)
btn = gr.Button("Run")
btn.click(fn=main, inputs=[inp1,inp2], outputs=[out1,out2,out_image])
demo.launch()