Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -1,82 +1,95 @@
|
|
1 |
-
import streamlit as st
|
2 |
-
import torch
|
3 |
-
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
|
4 |
-
|
5 |
-
|
6 |
-
@st.cache(allow_output_mutation=True)
|
7 |
-
def get_model():
|
8 |
-
# Load fine-tuned MRC model by HuggingFace Model Hub
|
9 |
-
HUGGINGFACE_MODEL_PATH = "bespin-global/klue-bert-base-aihub-mrc"
|
10 |
-
tokenizer = AutoTokenizer.from_pretrained(HUGGINGFACE_MODEL_PATH
|
11 |
-
model = AutoModelForQuestionAnswering.from_pretrained(HUGGINGFACE_MODEL_PATH
|
12 |
-
|
13 |
-
return tokenizer, model
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
)
|
30 |
-
|
31 |
-
#
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
)
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
st.error(e)
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import torch
|
3 |
+
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
|
4 |
+
|
5 |
+
|
6 |
+
@st.cache(allow_output_mutation=True)
|
7 |
+
def get_model():
|
8 |
+
# Load fine-tuned MRC model by HuggingFace Model Hub
|
9 |
+
HUGGINGFACE_MODEL_PATH = "bespin-global/klue-bert-base-aihub-mrc"
|
10 |
+
tokenizer = AutoTokenizer.from_pretrained(HUGGINGFACE_MODEL_PATH)
|
11 |
+
model = AutoModelForQuestionAnswering.from_pretrained(HUGGINGFACE_MODEL_PATH).to(device)
|
12 |
+
|
13 |
+
return tokenizer, model
|
14 |
+
|
15 |
+
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
|
16 |
+
tokenizer, model = get_model()
|
17 |
+
|
18 |
+
|
19 |
+
def predict_answer(qa_text_pair):
|
20 |
+
# Encoding
|
21 |
+
encodings = tokenizer(
|
22 |
+
qa_text_pair['question'], qa_text_pair['context'],
|
23 |
+
max_length=512,
|
24 |
+
truncation=True,
|
25 |
+
padding="max_length",
|
26 |
+
return_token_type_ids=False,
|
27 |
+
return_offsets_mapping=True
|
28 |
+
)
|
29 |
+
encodings = {key: torch.tensor([val]).to(device) for key, val in encodings.items()}
|
30 |
+
|
31 |
+
# Predict
|
32 |
+
with torch.no_grad():
|
33 |
+
pred = model(encodings['input_ids'], encodings['attention_mask'])
|
34 |
+
start_logits, end_logits = pred.start_logits, pred.end_logits
|
35 |
+
token_start_index, token_end_index = start_logits.argmax(dim=-1), end_logits.argmax(dim=-1)
|
36 |
+
pred_ids = encodings['input_ids'][0][token_start_index: token_end_index + 1]
|
37 |
+
|
38 |
+
# Answer start/end offset of context.
|
39 |
+
answer_start_offset = int(encodings['offset_mapping'][0][token_start_index][0][0])
|
40 |
+
answer_end_offset = int(encodings['offset_mapping'][0][token_end_index][0][1])
|
41 |
+
answer_offset = (answer_start_offset, answer_end_offset)
|
42 |
+
|
43 |
+
# Decoding
|
44 |
+
answer_text = tokenizer.decode(pred_ids) # text
|
45 |
+
del encodings
|
46 |
+
return {'answer_text':answer_text, 'answer_offset':answer_offset}
|
47 |
+
|
48 |
+
|
49 |
+
## Title
|
50 |
+
st.title('โ๏ธ Bespin โ QuestionAnswering')
|
51 |
+
|
52 |
+
## Text
|
53 |
+
st.write('[โกbespin-global/klue-bert-base-aihub-mrc](https://huggingface.co/bespin-global/klue-bert-base-aihub-mrc) ๋ชจ๋ธ ์ฑ๋ฅ ํ
์คํธ ํ์ด์ง ์
๋๋ค.')
|
54 |
+
|
55 |
+
|
56 |
+
context_option = st.selectbox(' ๐ Select Context Examples.',
|
57 |
+
(
|
58 |
+
'์คํฐ๋ธ ํด ์คํฐ๋ธ ์ก์ค(์์ด:ย Steven Paul "Steve" Jobs,ย 1955๋
ย 2์ 24์ผย ~ย 2011๋
ย 10์ 5์ผ)๋ย ๋ฏธ๊ตญ์ย ๊ธฐ์
์ธ์ด์์ผ๋ฉฐย ์ ํ์ ์ CEO์ด์ ๊ณต๋ ์ฐฝ๋ฆฝ์์ด๋ค.ย 2011๋
ย 10์ 5์ผย ์ท์ฅ์์ผ๋ก ์ฌ๋งํ๋ค. 1976๋
ย ์คํฐ๋ธ ์์ฆ๋์
,ย ๋ก๋๋ ์จ์ธ๊ณผ ํจ๊ปย ์ ํ์ ๊ณต๋ ์ฐฝ์
ํ๊ณ ,ย ์ ํ 2๋ฅผ ํตํดย ๊ฐ์ธ์ฉ ์ปดํจํฐ๋ฅผ ๋์คํํ๋ค. ๋ํ,ย GUI์ย ๋ง์ฐ์ค์ ๊ฐ๋ฅ์ฑ์ ์ฒ์์ผ๋ก ๋ด๋ค๋ณด๊ณ ย ์ ํ ๋ฆฌ์ฌ์ย ๋งคํจํ ์์์ ์ด ๊ธฐ์ ์ ๋์
ํ์๋ค.ย 1986๋
ย ๊ฒฝ์๋ถ์์ ์ํด ์ ํ์์ ๋์จ ์ดํย NeXTย ์ปดํจํฐ๋ฅผ ์ฐฝ์
ํ์ฌ ์๋ก์ด ๊ฐ๋
์ ์ด์ ์ฒด์ ๋ฅผ ๊ฐ๋ฐํ๋ค.ย 1996๋
ย ์ ํ์ด NeXT๋ฅผ ์ธ์ํ๊ฒ ๋๋ฉด์ ๋ค์ ์ ํ๋ก ๋์์ค๊ฒ ๋์๊ณ 1997๋
์๋ ์์ CEO๋ก ์ ํ์ ๋ค์ ์ด๋๊ฒ ๋์์ผ๋ฉฐ ์ดํ ๋ค์๊ธ ์ ํ์ ํ์ ํด ์์ฅ์์ ์ฑ๊ณต์ ๊ฑฐ๋๊ฒ ์ด๋์๋ค. 2001๋
ย ์์ดํ์ ์ถ์ํ์ฌ ์์
์ฐ์
์ ์ฒด๋ฅผ ๋ค๋ฐ๊พธ์ด ๋์๋ค. ๋ํ, 2007๋
ย ์์ดํฐ์ ์ถ์ํ๋ฉด์ ์ค๋งํธํฐ ์์ฅ์ ๋ฐ๊พธ์ด ๋์๊ณ 2010๋
ย ์์ดํจ๋๋ฅผ ์ถ์ํจ์ผ๋ก์จย ํฌ์คํธPC ์๋(Post-PC era)๋ฅผ ์ด์๋ค. ์คํฐ๋ธ ์ก์ค๋ ์ ๋๋ฉ์ด์
์ํ ใ์ธํฌ๋ ๋๋ธใ๊ณผ ใํ ์ด ์คํ ๋ฆฌใ ๋ฑ์ ์ ์ํย ์ปดํจํฐ ์ ๋๋ฉ์ด์
ย ์ ์์ฌ์ธย ํฝ์ฌ์ ์์ ์ฃผ์ด์ย CEO์๋ค.ย ์ํธ ๋์ฆ๋ ํ์ฌ๋ 74์ต ๋ฌ๋ฌ์ด์น์ ์์ฌ ์ฃผ์์ผ๋ก ์ด ํ์ฌ๋ฅผ ๊ตฌ์
ํ์๋ค.ย 2006๋
ย 6์ ์ด ๊ฑฐ๋๊ฐ ์๋ฃ๋์ด ์ก์ค๋ ์ด ๊ฑฐ๋๋ฅผ ํตํด ๋์ฆ๋ ์ง๋ถ์ 7%๋ฅผ ์์ ํ, ์ต๋์ ๊ฐ์ธ ์ฃผ์ฃผ์ด์ ๋์ฆ๋ ์ด์ฌํ์ ์ด์ฌ๊ฐ ๋์๋ค. ํํธ ๊ทธ๋ย 2003๋
ย ๋ฌด๋ ต๋ถํฐย ์ท์ฅ์์ผ๋ก ํฌ๋ณ์ํ์ ์ด์ด์๋ค. ๊ทธ์ ์
ํ๋ ๊ฑด๊ฐ์ํ๋ก ์ธํ์ฌย 2011๋
ย 8์ 24์ผ ์ ํ์ ์คํฐ๋ธ ์ก์ค๊ฐ ์ต๊ณ ๊ฒฝ์์ฑ
์์(CEO)๋ฅผ ์ฌ์ํ๊ณ ์ต๊ณ ์ด์์ฑ
์์(COO)์ธย ํ ์ฟก์ด ์๋ก์ด CEO๋ฅผ ๋งก๋๋ค๊ณ ๋ฐํ๋ค. ์ก์ค๋ CEO์ง์์ ๋ฌผ๋ฌ๋์ง๋ง ์ด์ฌํ ์์ฅ์ง์ ์ ์ง์ํค๊ธฐ๋ก ํ์ผ๋, ๊ฑด๊ฐ์ํ๊ฐ ๋์ฑ ์
ํ๋์ด ์ฌ์ 2๊ฐ์๋ ์ง๋์ง ์์ย 2011๋
ย 10์ 5์ผย ํฅ๋
56์ธ์ ๋์ด๋ก ์ฌ๋งํ๋ค.',
|
59 |
+
'๋นํธ์ฝ์ธ์ย 2009๋
ย ์ฌํ ์ ๋์นด๋ชจํ [6]๊ฐ ๋ง๋ ย ๊ฐ์ํํ๋ก, ํตํ๋ฅผ ๋ฐํํ๊ณ ๊ด๋ฆฌํ๋ ์ค์ ์ฅ์น๊ฐ ์กด์ฌํ์ง ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋์ , ๋นํธ์ฝ์ธ์ ๊ฑฐ๋๋ย P2Pย ๊ธฐ๋ฐย ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํด ์ด๋ฃจ์ด์ง๋ฉฐ,ย ๊ณต๊ฐ ํค ์ํธ ๋ฐฉ์ย ๊ธฐ๋ฐ์ผ๋ก ๊ฑฐ๋๋ฅผ ์ํํ๋ค. ๋นํธ์ฝ์ธ์ ๊ณต๊ฐ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋นํธ์ฝ์ธ์ ์ง๊ฐ ํ์ผ์ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ์ด ์ง๊ฐ์๋ ๊ฐ๊ฐ์ ๊ณ ์ ์ฃผ์๊ฐ ๋ถ์ฌ๋๋ฉฐ, ๊ทธ ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋นํธ์ฝ์ธ์ ๊ฑฐ๋๊ฐ ์ด๋ฃจ์ด์ง๋ค. ๋นํธ์ฝ์ธ์ 1998๋
์จ์ด๋ฐ์ด๊ฐ ์ฌ์ด๋ฒํํฌ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ์ฌ๋ฆฐย ์ํธํตํ(cryptocurrency)๋ ๊ตฌ์์ ์ต์ด๋ก ๊ตฌํํ ๊ฒ ์ค์ ํ๋์ด๋ค.[7][8] ๋นํธ์ฝ์ธ์ย ๊ณต๊ฐ ํค ์ํธ ๋ฐฉ์์ ์ด์ฉํด ๊ณต๊ฐ๋ ๊ณ์ ๊ฐ์ ๊ฑฐ๋๋ฅผ ํ๋ค. ๋ชจ๋ ๊ฑฐ๋๋ ๋น๊ณต๊ฐ์ ์ด๋ ๊ฑฐ๋์ ๊ธฐ๋ก์ ๋จ์ผ๋ฉฐ,ย ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ค.ย ๋ถ์ฐ๋ ์๊ฐ์๋ฒ๋ก ์ผ๋ จ์ย ์์
์ฆ๋ช
(proof-of-work)์ ํ์ฌ ์ค๋ณต์ง์ถ(double-spending)์ ๋ฐฉ์งํ๋ค. ๊ฑฐ๋ ๊ธฐ๋ก์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด์ผ ํ๋ค. ์ ์ฅ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํดย ๋จธํด ํธ๋ฆฌ(Merkle tree)๊ฐ ์ฌ์ฉ๋๋ค.'
|
60 |
+
)
|
61 |
+
)
|
62 |
+
# Text Input
|
63 |
+
context = st.text_area("Context.", value=context_option, height=300, on_change=None) # placeholder="Please input some context..",
|
64 |
+
|
65 |
+
|
66 |
+
if '์คํฐ๋ธ ํด ์คํฐ๋ธ ์ก์ค' in context_option:
|
67 |
+
question_option = st.selectbox('๐ก Select Question Examples.',
|
68 |
+
(
|
69 |
+
'์คํฐ๋ธ ์ก์ค๊ฐ ๋๊ตฌ์ผ?', '์คํฐ๋ธ ์ก์ค๋ ์ ํ๋ก ๋์์์ ์ด๋ป๊ฒ ํ์ด?', '์ ์ ํ์ ๋์์ด?', '์คํฐ๋ธ ์ก์ค๋ ์ด๋ป๊ฒ ๋ค์ ์ ํ๋ก ๋์์ค๊ฒ ๋์์ด?', 'ํฝ์ฌ๋ ๋ญ ์ ์ํ์ด?', '์ ํ ์ฟก์ ์๋ก์ด CEO๋ก ๋งก์์ด?', '์คํฐ๋ธ ์ก์ค๋ ์ธ์ ์ฌ๋งํ์ด?'
|
70 |
+
)
|
71 |
+
)
|
72 |
+
elif '๋นํธ์ฝ์ธ' in context_option:
|
73 |
+
question_option = st.selectbox('๐ก Select Question Examples.',
|
74 |
+
(
|
75 |
+
'๋นํธ์ฝ์ธ์ ์ด๋ค ๊ตฌ์กฐ์ผ?', '๋นํธ์ฝ์ธ์ ์ด๋ป๊ฒ ๊ฑฐ๋๊ฐ ๋ผ?', '๋นํธ์ฝ์ธ ์ง๊ฐ์๋ ๋ญ๊ฐ ๋ถ์ฌ ๋ผ?', '๊ณต๊ฐ๋ ๊ณ์ ๊ฐ ๊ฑฐ๋ ์ ๋ญ ์ด์ฉํด?', '๋ชจ๋ ๊ฑฐ๋๋ ์ด๋ป๊ฒ ๋จ์?', '๋จธํด ํธ๋ฆฌ๊ฐ ์ ์ฌ์ฉ ๋ผ?'
|
76 |
+
)
|
77 |
+
)
|
78 |
+
|
79 |
+
# Text Area
|
80 |
+
question = st.text_area("Question.", value=question_option, on_change=None) # placeholder="Please input your question.."
|
81 |
+
|
82 |
+
|
83 |
+
|
84 |
+
if st.button("Submit", key='question'):
|
85 |
+
try:
|
86 |
+
# Progress spinner
|
87 |
+
with st.spinner('Wait for it...'):
|
88 |
+
qa_text_pair = {'context':context, 'question':question}
|
89 |
+
result = predict_answer(qa_text_pair)
|
90 |
+
|
91 |
+
# answer
|
92 |
+
st.success(result['answer_text'])
|
93 |
+
|
94 |
+
except Exception as e:
|
95 |
st.error(e)
|