Ismail Ashraq commited on
Commit
c6dd262
1 Parent(s): e652c12

add app and requirements

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