Spaces:
Runtime error
Runtime error
File size: 7,085 Bytes
bfe4f62 fb82652 |
1 2 3 4 5 6 7 8 9 10 11 12 13 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 83 84 85 86 87 88 89 90 91 92 93 94 95 |
import streamlit as st
import torch
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
@st.cache(allow_output_mutation=True)
def get_model():
# Load fine-tuned MRC model by HuggingFace Model Hub
HUGGINGFACE_MODEL_PATH = "bespin-global/klue-bert-base-aihub-mrc"
tokenizer = AutoTokenizer.from_pretrained(HUGGINGFACE_MODEL_PATH)
model = AutoModelForQuestionAnswering.from_pretrained(HUGGINGFACE_MODEL_PATH).to(device)
return tokenizer, model
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
tokenizer, model = get_model()
def predict_answer(qa_text_pair):
# Encoding
encodings = tokenizer(
qa_text_pair['question'], qa_text_pair['context'],
max_length=512,
truncation=True,
padding="max_length",
return_token_type_ids=False,
return_offsets_mapping=True
)
encodings = {key: torch.tensor([val]).to(device) for key, val in encodings.items()}
# Predict
with torch.no_grad():
pred = model(encodings['input_ids'], encodings['attention_mask'])
start_logits, end_logits = pred.start_logits, pred.end_logits
token_start_index, token_end_index = start_logits.argmax(dim=-1), end_logits.argmax(dim=-1)
pred_ids = encodings['input_ids'][0][token_start_index: token_end_index + 1]
# Answer start/end offset of context.
answer_start_offset = int(encodings['offset_mapping'][0][token_start_index][0][0])
answer_end_offset = int(encodings['offset_mapping'][0][token_end_index][0][1])
answer_offset = (answer_start_offset, answer_end_offset)
# Decoding
answer_text = tokenizer.decode(pred_ids) # text
del encodings
return {'answer_text':answer_text, 'answer_offset':answer_offset}
## Title
st.title('โ๏ธ Bespin โ QuestionAnswering')
## Text
st.write('[โกbespin-global/klue-bert-base-aihub-mrc](https://huggingface.co./bespin-global/klue-bert-base-aihub-mrc) ๋ชจ๋ธ ์ฑ๋ฅ ํ
์คํธ ํ์ด์ง ์
๋๋ค.')
context_option = st.selectbox(' ๐ Select Context Examples.',
(
'์คํฐ๋ธ ํด ์คํฐ๋ธ ์ก์ค(์์ด:ย 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์ธ์ ๋์ด๋ก ์ฌ๋งํ๋ค.',
'๋นํธ์ฝ์ธ์ย 2009๋
ย ์ฌํ ์ ๋์นด๋ชจํ [6]๊ฐ ๋ง๋ ย ๊ฐ์ํํ๋ก, ํตํ๋ฅผ ๋ฐํํ๊ณ ๊ด๋ฆฌํ๋ ์ค์ ์ฅ์น๊ฐ ์กด์ฌํ์ง ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋์ , ๋นํธ์ฝ์ธ์ ๊ฑฐ๋๋ย P2Pย ๊ธฐ๋ฐย ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํด ์ด๋ฃจ์ด์ง๋ฉฐ,ย ๊ณต๊ฐ ํค ์ํธ ๋ฐฉ์ย ๊ธฐ๋ฐ์ผ๋ก ๊ฑฐ๋๋ฅผ ์ํํ๋ค. ๋นํธ์ฝ์ธ์ ๊ณต๊ฐ์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋นํธ์ฝ์ธ์ ์ง๊ฐ ํ์ผ์ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ์ด ์ง๊ฐ์๋ ๊ฐ๊ฐ์ ๊ณ ์ ์ฃผ์๊ฐ ๋ถ์ฌ๋๋ฉฐ, ๊ทธ ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋นํธ์ฝ์ธ์ ๊ฑฐ๋๊ฐ ์ด๋ฃจ์ด์ง๋ค. ๋นํธ์ฝ์ธ์ 1998๋
์จ์ด๋ฐ์ด๊ฐ ์ฌ์ด๋ฒํํฌ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ์ฌ๋ฆฐย ์ํธํตํ(cryptocurrency)๋ ๊ตฌ์์ ์ต์ด๋ก ๊ตฌํํ ๊ฒ ์ค์ ํ๋์ด๋ค.[7][8] ๋นํธ์ฝ์ธ์ย ๊ณต๊ฐ ํค ์ํธ ๋ฐฉ์์ ์ด์ฉํด ๊ณต๊ฐ๋ ๊ณ์ ๊ฐ์ ๊ฑฐ๋๋ฅผ ํ๋ค. ๋ชจ๋ ๊ฑฐ๋๋ ๋น๊ณต๊ฐ์ ์ด๋ ๊ฑฐ๋์ ๊ธฐ๋ก์ ๋จ์ผ๋ฉฐ,ย ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ค.ย ๋ถ์ฐ๋ ์๊ฐ์๋ฒ๋ก ์ผ๋ จ์ย ์์
์ฆ๋ช
(proof-of-work)์ ํ์ฌ ์ค๋ณต์ง์ถ(double-spending)์ ๋ฐฉ์งํ๋ค. ๊ฑฐ๋ ๊ธฐ๋ก์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด์ผ ํ๋ค. ์ ์ฅ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํดย ๋จธํด ํธ๋ฆฌ(Merkle tree)๊ฐ ์ฌ์ฉ๋๋ค.'
)
)
# Text Input
context = st.text_area("Context.", value=context_option, height=300, on_change=None) # placeholder="Please input some context..",
if '์คํฐ๋ธ ํด ์คํฐ๋ธ ์ก์ค' in context_option:
question_option = st.selectbox('๐ก Select Question Examples.',
(
'์คํฐ๋ธ ์ก์ค๊ฐ ๋๊ตฌ์ผ?', '์คํฐ๋ธ ์ก์ค๋ ์ ํ๋ก ๋์์์ ์ด๋ป๊ฒ ํ์ด?', '์ ์ ํ์ ๋์์ด?', '์คํฐ๋ธ ์ก์ค๋ ์ด๋ป๊ฒ ๋ค์ ์ ํ๋ก ๋์์ค๊ฒ ๋์์ด?', 'ํฝ์ฌ๋ ๋ญ ์ ์ํ์ด?', '์ ํ ์ฟก์ ์๋ก์ด CEO๋ก ๋งก์์ด?', '์คํฐ๋ธ ์ก์ค๋ ์ธ์ ์ฌ๋งํ์ด?'
)
)
elif '๋นํธ์ฝ์ธ' in context_option:
question_option = st.selectbox('๐ก Select Question Examples.',
(
'๋นํธ์ฝ์ธ์ ์ด๋ค ๊ตฌ์กฐ์ผ?', '๋นํธ์ฝ์ธ์ ์ด๋ป๊ฒ ๊ฑฐ๋๊ฐ ๋ผ?', '๋นํธ์ฝ์ธ ์ง๊ฐ์๋ ๋ญ๊ฐ ๋ถ์ฌ ๋ผ?', '๊ณต๊ฐ๋ ๊ณ์ ๊ฐ ๊ฑฐ๋ ์ ๋ญ ์ด์ฉํด?', '๋ชจ๋ ๊ฑฐ๋๋ ์ด๋ป๊ฒ ๋จ์?', '๋จธํด ํธ๋ฆฌ๊ฐ ์ ์ฌ์ฉ ๋ผ?'
)
)
# Text Area
question = st.text_area("Question.", value=question_option, on_change=None) # placeholder="Please input your question.."
if st.button("Submit", key='question'):
try:
# Progress spinner
with st.spinner('Wait for it...'):
qa_text_pair = {'context':context, 'question':question}
result = predict_answer(qa_text_pair)
# answer
st.success(result['answer_text'])
except Exception as e:
st.error(e) |