Copycats commited on
Commit
bfe4f62
โ€ข
1 Parent(s): 541f775

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -81
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
- tokenizer, model = get_model()
16
-
17
-
18
- ## Title
19
- st.title('โ˜๏ธ Bespin โ†’ QuestionAnswering')
20
-
21
- ## Text
22
- st.write('[โšกbespin-global/klue-bert-base-aihub-mrc](https://huggingface.co/bespin-global/klue-bert-base-aihub-mrc) ๋ชจ๋ธ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€ ์ž…๋‹ˆ๋‹ค.')
23
-
24
-
25
- context_option = st.selectbox(' ๐Ÿ“‘ Select Context Examples.',
26
- (
27
- '์Šคํ‹ฐ๋ธ ํด ์Šคํ‹ฐ๋ธŒ ์žก์Šค(์˜์–ด:ย 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์„ธ์˜ ๋‚˜์ด๋กœ ์‚ฌ๋งํ–ˆ๋‹ค.',
28
- '๋น„ํŠธ์ฝ”์ธ์€ย 2009๋…„ย ์‚ฌํ† ์‹œ ๋‚˜์นด๋ชจํ† [6]๊ฐ€ ๋งŒ๋“ ย ๊ฐ€์ƒํ™”ํ๋กœ, ํ†ตํ™”๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์žฅ์น˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋Œ€์‹ , ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฑฐ๋ž˜๋Š”ย P2Pย ๊ธฐ๋ฐ˜ย ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ,ย ๊ณต๊ฐœ ํ‚ค ์•”ํ˜ธ ๋ฐฉ์‹ย ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋น„ํŠธ์ฝ”์ธ์€ ๊ณต๊ฐœ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋น„ํŠธ์ฝ”์ธ์€ ์ง€๊ฐ‘ ํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ด ์ง€๊ฐ‘์—๋Š” ๊ฐ๊ฐ์˜ ๊ณ ์œ  ์ฃผ์†Œ๊ฐ€ ๋ถ€์—ฌ๋˜๋ฉฐ, ๊ทธ ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„ํŠธ์ฝ”์ธ์˜ ๊ฑฐ๋ž˜๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋น„ํŠธ์ฝ”์ธ์€ 1998๋…„ ์›จ์ด๋”ฐ์ด๊ฐ€ ์‚ฌ์ด๋ฒ„ํŽ‘ํฌ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ฆฐย ์•”ํ˜ธํ†ตํ™”(cryptocurrency)๋ž€ ๊ตฌ์ƒ์„ ์ตœ์ดˆ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค.[7][8] ๋น„ํŠธ์ฝ”์ธ์€ย ๊ณต๊ฐœ ํ‚ค ์•”ํ˜ธ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๊ณต๊ฐœ๋œ ๊ณ„์ •๊ฐ„์— ๊ฑฐ๋ž˜๋ฅผ ํ•œ๋‹ค. ๋ชจ๋“  ๊ฑฐ๋ž˜๋Š” ๋น„๊ณต๊ฐœ์ ์ด๋‚˜ ๊ฑฐ๋ž˜์˜ ๊ธฐ๋ก์€ ๋‚จ์œผ๋ฉฐ,ย ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ๋‹ค.ย ๋ถ„์‚ฐ๋œ ์‹œ๊ฐ„์„œ๋ฒ„๋กœ ์ผ๋ จ์˜ย ์ž‘์—…์ฆ๋ช…(proof-of-work)์„ ํ•˜์—ฌ ์ค‘๋ณต์ง€์ถœ(double-spending)์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ๊ฑฐ๋ž˜ ๊ธฐ๋ก์€ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ €์žฅ์†Œ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ดย ๋จธํด ํŠธ๋ฆฌ(Merkle tree)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.'
29
- )
30
- )
31
- # Text Input
32
- context = st.text_area("Context.", value=context_option, height=300, on_change=None) # placeholder="Please input some context..",
33
-
34
-
35
- if '์Šคํ‹ฐ๋ธ ํด ์Šคํ‹ฐ๋ธŒ ์žก์Šค' in context_option:
36
- question_option = st.selectbox('๐Ÿ’ก Select Question Examples.',
37
- (
38
- '์Šคํ‹ฐ๋ธŒ ์žก์Šค๊ฐ€ ๋ˆ„๊ตฌ์•ผ?', '์Šคํ‹ฐ๋ธŒ ์žก์Šค๋Š” ์• ํ”Œ๋กœ ๋Œ์•„์™€์„œ ์–ด๋–ป๊ฒŒ ํ–ˆ์–ด?', '์™œ ์• ํ”Œ์„ ๋‚˜์™”์–ด?', '์Šคํ‹ฐ๋ธŒ ์žก์Šค๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์• ํ”Œ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋˜์—ˆ์–ด?', 'ํ”ฝ์‚ฌ๋Š” ๋ญ˜ ์ œ์ž‘ํ–ˆ์–ด?', '์™œ ํŒ€ ์ฟก์„ ์ƒˆ๋กœ์šด CEO๋กœ ๋งก์•˜์–ด?', '์Šคํ‹ฐ๋ธŒ ์žก์Šค๋Š” ์–ธ์ œ ์‚ฌ๋งํ–ˆ์–ด?'
39
- )
40
- )
41
- elif '๋น„ํŠธ์ฝ”์ธ' in context_option:
42
- question_option = st.selectbox('๐Ÿ’ก Select Question Examples.',
43
- (
44
- '๋น„ํŠธ์ฝ”์ธ์€ ์–ด๋–ค ๊ตฌ์กฐ์•ผ?', '๋น„ํŠธ์ฝ”์ธ์€ ์–ด๋–ป๊ฒŒ ๊ฑฐ๋ž˜๊ฐ€ ๋ผ?', '๋น„ํŠธ์ฝ”์ธ ์ง€๊ฐ‘์—๋Š” ๋ญ๊ฐ€ ๋ถ€์—ฌ ๋ผ?', '๊ณต๊ฐœ๋œ ๊ณ„์ •๊ฐ„ ๊ฑฐ๋ž˜ ์‹œ ๋ญ˜ ์ด์šฉํ•ด?', '๋ชจ๋“  ๊ฑฐ๋ž˜๋Š” ์–ด๋–ป๊ฒŒ ๋‚จ์•„?', '๋จธํด ํŠธ๋ฆฌ๊ฐ€ ์™œ ์‚ฌ์šฉ ๋ผ?'
45
- )
46
- )
47
-
48
- # Text Area
49
- question = st.text_area("Question.", value=question_option, on_change=None) # placeholder="Please input your question.."
50
-
51
-
52
-
53
- if st.button("Submit", key='question'):
54
- try:
55
- # Progress spinner
56
- with st.spinner('Wait for it...'):
57
- # Encoding
58
- encodings = tokenizer(context, question,
59
- max_length=512,
60
- truncation=True,
61
- padding="max_length",
62
- return_token_type_ids=False
63
- )
64
- encodings = {key: torch.tensor([val]) for key, val in encodings.items()}
65
- input_ids = encodings["input_ids"]
66
- attention_mask = encodings["attention_mask"]
67
-
68
- # Predict
69
- pred = model(input_ids, attention_mask=attention_mask)
70
-
71
- start_logits, end_logits = pred.start_logits, pred.end_logits
72
- token_start_index, token_end_index = start_logits.argmax(dim=-1), end_logits.argmax(dim=-1)
73
- pred_ids = input_ids[0][token_start_index: token_end_index + 1]
74
-
75
- # Decoding
76
- prediction = tokenizer.decode(pred_ids)
77
-
78
- # answer
79
- st.success(prediction)
80
-
81
- except Exception as e:
 
 
 
 
 
 
 
 
 
 
 
 
 
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)