jaimin commited on
Commit
047f4de
·
1 Parent(s): 76d98a9

Create new file

Browse files
Files changed (1) hide show
  1. app.py +80 -0
app.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pinecone
2
+ import streamlit as st
3
+ from transformers import pipeline
4
+ from sentence_transformers import SentenceTransformer
5
+
6
+ PINECONE_KEY = st.secrets["b2aaea5e-1395-4270-8c6b-2c89ff1d0a13"] # app.pinecone.io
7
+
8
+ @st.experimental_singleton
9
+ def init_pinecone():
10
+ pinecone.init(api_key=PINECONE_KEY, environment="us-west1-gcp") # get a free api key from app.pinecone.io
11
+ return pinecone.Index("extractive-question-answering")
12
+
13
+ @st.experimental_singleton
14
+ def init_models():
15
+ retriever = SentenceTransformer("multi-qa-MiniLM-L6-cos-v1")
16
+ model_name = 'jaimin/bert-large-squad'
17
+ reader = pipeline(tokenizer=model_name, model=model_name, task='question-answering')
18
+ return retriever, reader
19
+
20
+ st.session_state.index = init_pinecone()
21
+ retriever, reader = init_models()
22
+
23
+
24
+ def card(title, context, score):
25
+ return st.markdown(f"""
26
+ <div class="container-fluid">
27
+ <div class="row align-items-start">
28
+ <div class="col-md-12 col-sm-12">
29
+ <b>{title}</b>
30
+ <br>
31
+ <span style="color: #808080;">
32
+ <small>{context}</small>
33
+ [<b>Score: </b>{score}]
34
+ </span>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ """, unsafe_allow_html=True)
39
+
40
+ st.title("")
41
+
42
+ st.write("""
43
+ # Extractive Question Answering
44
+ Ask me a question!
45
+ """)
46
+
47
+ st.markdown("""
48
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
49
+ """, unsafe_allow_html=True)
50
+
51
+ def run_query(query):
52
+ xq = retriever.encode([query]).tolist()
53
+ try:
54
+ xc = st.session_state.index.query(xq, top_k=3, include_metadata=True)
55
+ except:
56
+ # force reload
57
+ pinecone.init(api_key=PINECONE_KEY, environment="us-west1-gcp")
58
+ st.session_state.index = pinecone.Index("extractive-question-answering")
59
+ xc = st.session_state.index.query(xq, top_k=3, include_metadata=True)
60
+
61
+ results = []
62
+ for match in xc['matches']:
63
+ answer = reader(question=query, context=match["metadata"]['context'])
64
+ answer["title"] = match["metadata"]['title']
65
+ answer["context"] = match["metadata"]['context']
66
+ results.append(answer)
67
+
68
+ sorted_result = sorted(results, key=lambda x: x['score'], reverse=True)
69
+
70
+ for r in sorted_result:
71
+ answer = r["answer"]
72
+ context = r["context"].replace(answer, f"<mark>{answer}</mark>")
73
+ title = r["title"].replace("_", " ")
74
+ score = round(r["score"], 4)
75
+ card(title, context, score)
76
+
77
+ query = st.text_input("Search!", "")
78
+
79
+ if query != "":
80
+ run_query(query)