Spaces:
Sleeping
Sleeping
from sentence_transformers import SentenceTransformer | |
import numpy as np | |
import requests | |
import gradio as gr | |
from description import project_description | |
def request_and_response(url): | |
response = requests.get(url) | |
papers = response.json() | |
return papers | |
def extract_abstracts_and_ids(papers): | |
abstracts = [paper["paper"]["summary"] for paper in papers] | |
paper_ids = [paper["paper"]["id"] for paper in papers] | |
return abstracts, paper_ids | |
def get_embeddings(model, texts): | |
embeddings = model.encode(texts) | |
return embeddings | |
def compute_similarity(model, embeddings1, embeddings2): | |
similarities = model.similarity(embeddings1, embeddings2) | |
return similarities | |
def find_closest(similarities, paper_ids): | |
best_match_idx = np.argmax(similarities) | |
best_match_id = paper_ids[best_match_idx] | |
return best_match_id | |
# Step 0: Get the model | |
model = SentenceTransformer("all-MiniLM-L6-v2") | |
# Step 1: Get papers from API | |
papers = request_and_response("https://hf.co/api/daily_papers") | |
# Step 2: Extract abstracts and paper ids | |
abstracts, paper_ids = extract_abstracts_and_ids(papers) | |
# Step 3: Embed Query and the Abstracts of papers | |
abstract_embeddings = get_embeddings(model, abstracts) | |
def get_closest_paper(query): | |
query_embeddings = get_embeddings(model, [query]) | |
# Step 4: Find similarity scores | |
similarities = compute_similarity(model, query_embeddings, abstract_embeddings) | |
# Step 5: Find the closest match | |
best_match_id = find_closest(similarities, paper_ids) | |
# Step 6: Get the best match paper title and id | |
paper = request_and_response(f"https://hf.co/api/papers/{best_match_id}") | |
title = paper["title"] | |
summary = paper["summary"] | |
return title, f"https://huggingface.co/papers/{best_match_id}", summary | |
with gr.Blocks() as iface: | |
gr.Markdown(project_description) | |
with gr.Row(): | |
with gr.Column(scale=1): | |
query = gr.Textbox(placeholder="What do you have in mind?") | |
btn = gr.Button(value="Submit") | |
with gr.Column(scale=3): | |
with gr.Row(): | |
title = gr.Textbox() | |
paper_link = gr.Textbox() | |
abstract = gr.Textbox() | |
btn.click(get_closest_paper, query, [title, paper_link, abstract]) | |
if __name__ == "__main__": | |
iface.launch() |