File size: 5,696 Bytes
e15f1e0
9a229a7
993e75e
75eaa7d
1c8cf8d
ca6ca1c
993e75e
ca6ca1c
e15f1e0
32a4ae2
14a130a
 
 
 
 
 
 
 
 
01c2292
14a130a
 
 
01c2292
75ecc20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
01c2292
14a130a
75ecc20
 
14a130a
75ecc20
 
 
14a130a
e15f1e0
75ecc20
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
import gradio as gr
from transformers import BertForQuestionAnswering
from transformers import BertTokenizerFast
import torch

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
model = BertForQuestionAnswering.from_pretrained("CountingMstar/ai-tutor-bert-model").to(device)

def get_prediction(context, question):
    inputs = tokenizer.encode_plus(question, context, return_tensors='pt').to(device)
    outputs = model(**inputs)
    
    answer_start = torch.argmax(outputs.start_logits)
    answer_end = torch.argmax(outputs.end_logits) + 1
    
    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
    
    return answer

def question_answer(context, question):
    prediction = get_prediction(context, question)
    return prediction

def submit(context, question):
    answer = question_answer(context, question)
    return answer

examples_text = [
    ["A large language model (LLM) is a type of language model notable for its ability to achieve general-purpose language understanding and generation. LLMs acquire these abilities by using  massive amounts of data to learn billions of parameters during training and consuming large computational resources during their training and operation.[1] LLMs are artificial neural networks (mainly transformers[2]) and are (pre-)trained using self-supervised learning and semi-supervised learning.","What is large language model?"],
    ["Feature engineering or feature extraction or feature discovery is the process of extracting features (characteristics, properties, attributes) from raw data. Due to deep learning networks, such as convolutional neural networks, that are able to learn features by themselves, domain-specific-based feature engineering has become obsolete for vision and speech processing. Other examples of features in physics include the construction of dimensionless numbers such as Reynolds number in fluid dynamics; then Nusselt number in heat transfer; Archimedes number in sedimentation; construction of first approximations of the solution such as analytical strength of materials solutions in mechanics, etc.", "What is Feature engineering?"],
    ["It calculates soft weights for each word, more precisely for its embedding, in the context window. It can do it either in parallel (such as in transformers) or sequentially (such as recurrent neural networks). Soft weights can change during each runtime, in contrast to hard weights, which are (pre-)trained and fine-tuned and remain frozen afterwards. Attention was developed to address the weaknesses of recurrent neural networks, where words in a sentence are slowly processed one at a time. Machine learning-based attention is a mechanism mimicking cognitive attention. Recurrent neural networks favor more recent words at the end of a sentence while earlier words fade away in volatile neural activations. Attention gives all words equal access to any part of a sentence in a faster parallel scheme and no longer suffers the wait time of serial processing. Earlier uses attached this mechanism to a serial recurrent neural network's language translation system (below), but later uses in Transformers large language models removed the recurrent neural network and relied heavily on the faster parallel attention scheme.", "What is Attention mechanism?"]
]

input_textbox = gr.Textbox("Context", placeholder="Enter context here")
question_textbox = gr.Textbox("Question", placeholder="Enter question here")

input_section = gr.Row([input_textbox, question_textbox])

markdown_text = """"
        # AI Tutor BERT
        ์ด ๋ชจ๋ธ์€ ์ธ๊ณต์ง€๋Šฅ(AI) ๊ด€๋ จ ์šฉ์–ด ๋ฐ ์„ค๋ช…์„ ํŒŒ์ธํŠœ๋‹(fine-tuning)ํ•œ BERT ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

        ## Model
        https://huggingface.co/bert-base-uncased
        ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ชจ๋ธ ์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ Google์—์„œ ๊ฐœ๋ฐœํ•œ BERT๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์œ„ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์งˆ์˜์‘๋‹ต์ด ์ฃผ์ธ ๊ณผ์™ธ ์„ ์ƒ๋‹˜๋‹ต๊ฒŒ, BERT ์ค‘์—์„œ๋„ ์งˆ์˜์‘๋‹ต์— ํŠนํ™”๋œ Question and Answering ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
        
        ## Dataset
        ### Wikipedia
        https://en.wikipedia.org/wiki/Main_Page
        ### activeloop
        https://www.activeloop.ai/resources/glossary/arima-models/
        ### Adrien Beaulieu
        https://product.house/100-ai-glossary-terms-explained-to-the-rest-of-us/
        ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹์€ ์ธ๊ณต์ง€๋Šฅ ๊ด€๋ จ ๋ฌธ๋งฅ, ์งˆ๋ฌธ, ๊ทธ๋ฆฌ๊ณ  ์‘๋‹ต ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต(์ •๋‹ต) ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ๋งฅ ๋ฐ์ดํ„ฐ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ๋ฌธ๋งฅ ๋ฐ์ดํ„ฐ์˜ ๋ฌธ์žฅ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ๊ฐ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ ๋ฐ์ดํ„ฐ๋Š” ์ฃผ์ œ๊ฐ€ ๋˜๋Š” ์ธ๊ณต์ง€๋Šฅ ์šฉ์–ด๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์‹œ๋ฉด ์ดํ•ดํ•˜์‹œ๊ธฐ ํŽธํ•˜์‹ค ๊ฒ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ์ˆ˜๋Š” 3300์—ฌ ๊ฐœ๋กœ data ํด๋”์— pickle ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋Š” Wikipedia ๋ฐ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋“ค์„ ์—์„œ html์„ ์ด์šฉํ•˜์—ฌ ์ถ”์ถœ ๋ฐ ๊ฐ€๊ณตํ•˜์—ฌ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ถœ์ฒ˜๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

        ## How to use
        ์ž…๋ ฅ ์˜ˆ์ œ๋Š” 'Examples'์— ํ‘œ๊ธฐํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
        ๊ด€๋ จ ๋ฌธ์žฅ๊ณผ ์ •์˜๋ฅผ ์•Œ๊ณ  ์‹ถ์€ ๋‹จ์–ด๋ฅผ ๊ฐ๊ฐ 'Contexts', 'Question'์— ์ž…๋ ฅํ•œ ํ›„ 'Submit' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋‹จ์–ด์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.
        """

iface = gr.Interface(
    fn=submit,
    inputs=input_section,
    outputs=gr.Textbox("Answer"),
    examples=examples,
    live=True,
    title="BERT Question Answering"
)

iface.launch()