In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:80% !important; }</style>"))
๐ก Colab Dark ๋ชจ๋ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค
In [4]:
# !pip install transformers
# !pip install sentencepiece
# !pip install sentence-transformers
# !pip install krwordrank
Self-Introduction with NLP Tasks¶
psyduck ์ ์๊ธฐ์๊ฐ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.
๋ค์ํ NLP task ๋ค์ ํ์ฉํ์ฌ ์๊ธฐ์๊ฐ๋ฅผ ํ๋ ค๊ณ ํฉ๋๋ค.
Huggingface Transformer, sentence-transformers, krwordrank ๋ฑ์ ๋ค์ํ ํจํค์ง๋ค์ ํ์ฉํฉ๋๋ค.
- ๐ kobart ์ ํ์ฉํ ์๊ธฐ์๊ฐ abstractive summariztion (์๊ธฐ ์๊ฐ์ ์์ฝ)
- ๐ kogpt ์ ํ์ฉํ ๊ด์ฌ๋ถ์ผ generation (๊ด์ฌ ๋ถ์ผ ์ค๋ช )
- ๐ sentencetransformer ์ ํ์ฉํ cosine similarity (mbti ์๊ฐ)
- โญ bart-large-mnli ์ ํ์ฉํ zero shot text classification (mbti ์๊ฐ ์ฌํ)
- ๐ KRWordRankank - PageRank altorithm ๋ฅผ ํตํ ํค์๋ ์ถ์ถ keyword extraction (ํ์ํฌ๋ ๋ฌด์์ผ๊น?)
- โญ vit ๋ชจ๋ธ์ ํตํ image classfication (
๋ ์ด๋ค class ์ผ๊น?)
1. kobart 을 활용한 자기소개 abstractive summariztion (자기 소개서 요약)¶
Naver ๋ถ์คํธ์บ ํ์ ์ง์ํ๋ ์๊ธฐ์๊ฐ์๋ฅผ ์์ฝํด๋ณด์์ต๋๋ค.
In [ ]:
import torch
from transformers import PreTrainedTokenizerFast
from transformers import BartForConditionalGeneration
tokenizer = PreTrainedTokenizerFast.from_pretrained('gogamza/kobart-summarization')
model = BartForConditionalGeneration.from_pretrained('gogamza/kobart-summarization')
The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. The tokenizer class you load from this checkpoint is 'BartTokenizer'. The class this function is called from is 'PreTrainedTokenizerFast'.
In [ ]:
# text = ๋ถ์คํธ์บ ํ์ ์ด๋ค ์ด์ ๋ก ์ง์ํ์
จ๋์? ์ ๋ํ ๋ต๋ณ"
raw_input_ids = tokenizer.encode(text)
input_ids = [tokenizer.bos_token_id] + raw_input_ids + [tokenizer.eos_token_id]
summary_ids = model.generate(torch.tensor([input_ids]), max_length=50)
tokenizer.decode(summary_ids.squeeze().tolist(), skip_special_tokens=True)
Out[ ]:
'AI์ ์ด์ ์ ์ง๋ ๋ค์ํ ๋ถ์ผ์ ๋ถ๋ค์ด ๋ชจ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ถ์คํธ์บ ํ๋ฅผ ์๋ฃํ ํ๋ค์ github๋ฅผ ์ฐพ๊ฒ ๋๋ฉด์ AI ์์ง๋์ด๊ฐ ๋๊ธฐ๋ก ๊ฒฐ์ฌํ๊ฒ ๋์๋ค.'
์๋ฌธ
์ ์์ฝ์
"AI์ ์ด์ ์ ์ง๋ ๋ค์ํ ๋ถ์ผ์ ๋ถ๋ค์ด ๋ชจ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ถ์คํธ์บ ํ๋ฅผ ์๋ฃํ ํ๋ค์ github๋ฅผ ์ฐพ๊ฒ ๋๋ฉด์ AI ์์ง๋์ด๊ฐ ๋๊ธฐ๋ก ๊ฒฐ์ฌํ๊ฒ ๋์๋ค."
๋ผ๊ณ ์์ฝ์ด ๋ฉ๋๋ค!
2. kogpt 을 활용한 관심분야 generation (관심 분야 설명)¶
๋ฐ๊ฐ์ต๋๋ค! ์ฌ๋ฌ๊ฐ์ง NLP ์ฃผ์ ๋ค์ ๊ด์ฌ์ด ์์ต๋๋ค,
์ ๋ฐ์ ์ผ๋ก๋ Large-Scale Training, MLOps ๋ฑ์ ๊ด์ฌ์ด ์๊ตฌ์.
ํนํ NLP ๋ถ์ผ์์๋ MRC(Machine Reading Comprehension), ODQA(Open Domain Question Answering) ๋ฑ์ ํฅ๋ฏธ๊ฐ ์์ต๋๋ค.
์ต๊ทผ์ ์ฐธ์ฌํ ํ๋ก์ ํธ๋ ODQA ๋ถ์ผ ์ธ๋ฐ์. ODQA๋...
🎉🎊🎉 Caution 🎉🎊🎉¶
KoGPT6B-ryan1.5b-float16 ๋ ์ฉ๋์ด 11.5G ์ ๋๋ค.
COLAB P100, T4 (16G) ์์ inference ๋ ๊ฐ๋ฅํ๋ค์
In [ ]:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
bos_token='[BOS]', eos_token='[EOS]', unk_token='[UNK]', pad_token='[PAD]', mask_token='[MASK]'
)
model = AutoModelForCausalLM.from_pretrained(
'kakaobrain/kogpt', revision='KoGPT6B-ryan1.5b-float16', # or float32 version: revision=KoGPT6B-ryan1.5b
pad_token_id=tokenizer.eos_token_id,
torch_dtype='auto', low_cpu_mem_usage=True
).to(device='cuda', non_blocking=True)
_ = model.eval()
In [ ]:
prompt = 'ODQA(Open Domain Question Answering)์ ๊ด์ฌ์ด ์์ต๋๋ค. ์ต๊ทผ์ ์ฐธ์ฌํ ํ๋ก์ ํธ๋ ODQA ๋ถ์ผ ์ธ๋ฐ์. ODQA๋ '
with torch.no_grad():
tokens = tokenizer.encode(prompt, return_tensors='pt').to(device='cuda', non_blocking=True)
gen_tokens = model.generate(tokens, do_sample=True, temperature=0.8, max_length=256)
generated = tokenizer.batch_decode(gen_tokens)[0]
print(generated)
ODQA(Open Domain Question Answering)์ ๊ด์ฌ์ด ์์ต๋๋ค. ์ต๊ทผ์ ์ฐธ์ฌํ ํ๋ก์ ํธ๋ ODQA ๋ถ์ผ ์ธ๋ฐ์. ODQA๋ Open Domain Question Answering ์ ์ฝ์๋ก, ์ฌ์ฉ์๋ค์ด ์ง์ ๋ค์ํ ์์ญ์ ODQA (Open Domain Question Answering)์ ์ง๋ฌธ์ ์ฌ๋ฆฌ๊ณ ๋ต๋ณ์ ์ฐพ์๋ณด๋, ๊ฐ๋ฐฉํ ์ง๋ฌธ ๋ต๋ณ ์๋น์ค ์ ๋๋ค. ํ์ฌ ์ฌ๋ฌ ODQA ์๋น์ค๊ฐ ์์ง๋ง, ์ ๊ฐ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ ๊ณณ์ ODQA(Open Domain Question Answering) ์ ๋๋ค. OpenDocqA (OnddocqA)๋ ์ต๊ทผ์ ์ด๋ฆฐ ODQA ์ปค๋ฎค๋ํฐ์ ์ค์ฌ์ ์ค๋งํผ ์ฃผ๋ชฉ๋ฐ๊ณ ์์ต๋๋ค. ์คํ ๋ฐ์ดํฐ์ ์คํ API๋ฅผ ํตํด ODQA(Open Domain Question Answering)๋ฅผ ํ์ฑํ ํ๊ณ ์ ํฉ๋๋ค. ํ์ฌ OpenDocqA(OpenDocqA)๋ ๊ธฐ์กด์ ODQA์๋ ์์ ํ ๋ค๋ฆ๋๋ค. ๊ธฐ์กด ์คํ Data์ API์ ํ์ฅ์์ ๋๋๋ ๊ฒ์ด ์๋, OpenDocqA(OpenDocqA)๋ ์ฌ์ฉ์์๊ฒ ์๋ก์ด ODQA ๊ฒฝํ์ ์ ๊ณตํ๋
์ฒซ๋ฒ์งธ ์ค์ ์ถ๋ ฅ์ด ๋น๊ต์ ์ ์ค๋ช
๋์ด ์์ต๋๋ค.
"ODQA(Open Domain Question Answering)์ ๊ด์ฌ์ด ์์ต๋๋ค. ์ต๊ทผ์ ์ฐธ์ฌํ ํ๋ก์ ํธ๋ ODQA ๋ถ์ผ ์ธ๋ฐ์. ODQA๋ Open Domain Question Answering ์ ์ฝ์๋ก, ์ฌ์ฉ์๋ค์ด ์ง์ ๋ค์ํ ์์ญ์ ODQA (Open Domain Question Answering)์ ์ง๋ฌธ์ ์ฌ๋ฆฌ๊ณ ๋ต๋ณ์ ์ฐพ์๋ณด๋, ๊ฐ๋ฐฉํ ์ง๋ฌธ ๋ต๋ณ ์๋น์ค ์
๋๋ค."
์ด๋ก์จ kogpt odqa์ ๋ํ ์ ๋ณด๊ฐ ํ์ต๋์ด ์๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
3. sentencetransformer 을 활용한 cosine similarity (mbti 소개)¶
"""
๋ฐ๊ฐ์ต๋๋ค.
๋ํ์์ ํต๊ณํ์ ์ ๊ณตํ๊ณ ์กธ์
ํ๊ณ ํ์ฌ์ ์
์ฌํด NLP ๊ด๋ จ ์
๋ฌด๋ฅผ ์งํํ์ต๋๋ค.
์ดํ ๋ค์ด๋ฒ AI ๋ถ์คํธ์บ ํ ๊ณผ์ ์ ํฉ๊ฒฉํ์ฌ ์ข์ ๋๋ฃ๋ค๊ณผ ํจ๊ป ๊ณผ์ ์ ์๋ฃํ์์ต๋๋ค.
"""
๋ ๋ฌธ์ฅ์ sentencetransformer ๋ฅผ ํตํด mbti๋ฅผ ์ ์ถํด๋ณด๊ฒ ์ต๋๋ค.
In [ ]:
import torch
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("Huffon/sentence-klue-roberta-base")
In [25]:
from collections import OrderedDict
mbti_dict = OrderedDict({
"์ฉ์์ฃผ๋ํ ์ ๋ต๊ฐ" : 'INTJ',
"๋
ผ๋ฆฌ์ ์ธ ์ฌ์๊ฐ" : 'INTP',
"๋๋ดํ ํต์์" : 'ENTJ',
"๋จ๊ฑฐ์ด ๋
ผ์์ ์ฆ๊ธฐ๋ ๋ณ๋ก ๊ฐ" : 'ENTP',
"์ ์์ ์นํธ์" : 'INFJ',
"์ด์ ์ ์ธ ์ค์ฌ์" : 'INFP',
"์ ์๋ก์ด ์ฌํ์ด๋๊ฐ" : 'ENFJ',
"์ฌ๊ธฐ๋ฐ๋ํ ํ๋๊ฐ" : 'ENFP',
"์ฒญ๋ ด๊ฒฐ๋ฐฑํ ๋
ผ๋ฆฌ์ฃผ์์" : 'ISTJ',
"์ฉ๊ฐํ ์ํธ์" : 'ISFJ',
"์๊ฒฉํ ๊ด๋ฆฌ์" : 'ESTJ',
"์ฌ๊ต์ ์ธ ์ธ๊ต๊ด" : 'ESFJ',
"๋ง๋ฅ ์ฌ์ฃผ๊พผ" : 'ISTP',
"ํธ๊ธฐ์ฌ ๋ง์ ์์ ๊ฐ" : 'ISFP',
"๋ชจํ์ ์ฆ๊ธฐ๋ ์ฌ์
๊ฐ" : 'ESTP',
"์์ ๋ก์ด ์ํผ์ ์ฐ์์ธ" : 'ESFP'
})
mbti_keys = list(mbti_dict.keys())
mbti_embeddings = model.encode(mbti_keys)
query = "๋ฐ๊ฐ์ต๋๋ค. ๋ํ์์ ํต๊ณํ์ ์ ๊ณตํ๊ณ ์กธ์
ํ๊ณ ํ์ฌ์ ์
์ฌํด NLP ๊ด๋ จ ์
๋ฌด๋ฅผ ์งํํ์ต๋๋ค. ์ดํ ๋ค์ด๋ฒ AI ๋ถ์คํธ์บ ํ ๊ณผ์ ์ ํฉ๊ฒฉํ์ฌ ์ข์ ๋๋ฃ๋ค๊ณผ ํจ๊ป ๊ณผ์ ์ ์๋ฃํ์์ต๋๋ค. "
query_embedding = model.encode(query)
cos_scores = util.pytorch_cos_sim(query_embedding, mbti_embeddings)[0]
result = torch.argsort(cos_scores, descending = True)
for i, (score, idx) in enumerate(zip(cos_scores, result)):
print(f"{i+1}: {mbti_dict[mbti_keys[idx]]} {'(cosine similarity: {:.4f})'.format(cos_scores[idx])}")
1: ESTP (cosine similarity: 0.1907) 2: INFP (cosine similarity: 0.1557) 3: INTJ (cosine similarity: 0.1465) 4: ESFJ (cosine similarity: 0.1383) 5: ENFP (cosine similarity: 0.1377) 6: ENTP (cosine similarity: 0.1366) 7: ISFP (cosine similarity: 0.1191) 8: ISTJ (cosine similarity: 0.1128) 9: INFJ (cosine similarity: 0.1040) 10: ISTP (cosine similarity: 0.0901) 11: INTP (cosine similarity: 0.0764) 12: ENFJ (cosine similarity: 0.0517) 13: ISFJ (cosine similarity: 0.0492) 14: ENTJ (cosine similarity: 0.0245) 15: ESTJ (cosine similarity: -0.0405) 16: ESFP (cosine similarity: -0.0426)
"""
๋ฐ๊ฐ์ต๋๋ค. ๋ํ์์ ํต๊ณํ์ ์ ๊ณตํ๊ณ ์กธ์
ํ๊ณ ํ์ฌ์ ์
์ฌํด NLP ๊ด๋ จ ์
๋ฌด๋ฅผ ์งํํ์ต๋๋ค. ์ดํ ๋ค์ด๋ฒ AI ๋ถ์คํธ์บ ํ ๊ณผ์ ์ ํฉ๊ฒฉํ์ฌ ์ข์ ๋๋ฃ๋ค๊ณผ ํจ๊ป ๊ณผ์ ์ ์๋ฃํ์์ต๋๋ค.
"""
์ ๋ฌธ์ฅ์ ์ ์ ์ฌ๋์ MBTI ๋ INTPย ์ธ๋ฐ, cosine ์ ์ฌ๋๊ฐ ๋งค์ฐ ๋ฎ์ต๋๋ค. ์๋ง ์๋์ ๊ฐ์ ์ด์ ๋ค๋ก ์ธํด mbti๋ฅผ ๋ถ๋ฅํ๊ธฐ์๋ ํ๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ์ฒซ๋ฒ์งธ๋ก, mbti์ ๋ํด ํ๋ จ์ ์งํํ ๊ฒ์ด ์๋๋์ .
- ๋๋ฒ์งธ๋ก, ์ ํ๋ณ mbti ์ ๋ํ ์ค๋ช
๋ ๋งค์ฐ ์ ๋ค๋์ .
- ์ธ๋ฒ์งธ๋ก, query ๋ํ ์ ํ์ ํด๋นํ๋ ์ฌํญ์ด ๊ฑฐ์ ์๋ ์ .
๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ classification task๋ก ๋ค์ ์๋ํด ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์๋์ ๊ฐ์ด zero-shot classification์ผ๋ก ์๋๋ฅผ ํด๋ณด์์ต๋๋ค.
In [27]:
from transformers import pipeline
classifier = pipeline("zero-shot-classification", device=0)
eng_mbti_dict = OrderedDict({
"A thoughtful strategist" : 'INTJ',
"A logical thinker" : 'INTP',
"Bold leader" : 'ENTJ',
"A lawyer who enjoys a heated debate" : 'ENTP',
"Advocate of good faith" : 'INFJ',
"A passionate mediator" : 'INFP',
"Righteous social activist" : 'ENFJ',
"A cheerful activist." : 'ENFP',
"Integrity, integrity, logicist" : 'ISTJ',
"Brave defender" : 'ISFJ',
"Strict manager" : 'ESTJ',
"Sociable diplomat" : 'ESFJ',
"He's so talented." : 'ISTP',
"A curious artist" : 'ISFP',
"A businessman who enjoys adventures" : 'ESTP',
"A free-spirited celebrity" : 'ESFP'
})
No model was supplied, defaulted to facebook/bart-large-mnli (https://huggingface.co/facebook/bart-large-mnli)
In [30]:
sequences = [
"After graduating from college after majoring in statistics, I happened to encounter the Naver Boost Camp course. After passing the exam, I became a boost camper because I thought this was the time, and I met good team members and am happily spending the boost camp process",
]
eng_mbti_keys = list(eng_mbti_dict.keys())
candidate_labels = eng_mbti_keys
hypothesis_template = "Aforementioned person can be described as {}."
result = classifier(sequences, candidate_labels, hypothesis_template=hypothesis_template)
In [34]:
for i, (score, label) in enumerate(zip(result[0]['scores'], result[0]['labels'])):
print(f"{i+1}: {eng_mbti_dict[label]} {'(zero shot score: {:.4f})'.format(score)}")
1: INFJ (zero shot score: 0.2210) 2: ENTJ (zero shot score: 0.1575) 3: INTJ (zero shot score: 0.1202) 4: ESFJ (zero shot score: 0.0871) 5: INTP (zero shot score: 0.0744) 6: INFP (zero shot score: 0.0594) 7: ESTP (zero shot score: 0.0439) 8: ISTJ (zero shot score: 0.0409) 9: ISFJ (zero shot score: 0.0390) 10: ENFJ (zero shot score: 0.0326) 11: ISFP (zero shot score: 0.0312) 12: ESFP (zero shot score: 0.0287) 13: ESTJ (zero shot score: 0.0220) 14: ENFP (zero shot score: 0.0191) 15: ISTP (zero shot score: 0.0190) 16: ENTP (zero shot score: 0.0040)
hypothesis_template ์ ์ธํ, mbti์ ๋ํ description์ Papago๋ฅผ ํตํด ์์ด๋ก ๋ฒ์ญํ์ต๋๋ค.
zero-shot classification ์ผ๋ก inference ์ sentencetransformer์ cosine score ๋ณด๋ค ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. (11 -> 5)
4. KRWordRankank - PageRank altorithm 를 통한 키워드 추출 keyword extraction (팀위크란 무엇일까?)¶
ํ์ํฌ์ ๋ํ ์ ์ ์๊ฐ์ ์๋์ ๊ฐ์ต๋๋ค.
"""
ํ์ํฌ๋
๋งค์ฐ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ๋ฐ์๋ก์์ ์ต๊ณ ์ ์นญ์ฐฌ์ '์ฝ๋ฉ์ ์ํ๋ ์ฌ๋' ๋ณด๋ค๋ '๋๊ตฌ๋ ๊ฐ์ด ์ผํ๊ณ ์ถ์ ์ฌ๋' ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๋ฌ ์ฌ๋๋ค๊ณผ ํจ๊ป ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฒ๊ทธ๋ฅผ ๊ฐ์ ํ๋ ์คํ์์ค์ ๊ธฐ๋ณธ ์ด๋
์ฒ๋ผ ๋ค์ํ ๋ถ์ผ์ ์ฌ๋๋ค๊ณผ ํ์
์ ํ๋ฉฐ ์ฌ๋ฏธ์๊ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ์ข๊ฒ ์ต๋๋ค!
"""
์ด์ ํ์ํฌ์ ๋ํด ์ค๋ช
ํ document์ ๋ํด ํค์๋ ์ถ์ถ๋ฅผ ํด๋ณด์ใ
๋ธ๋๋ค.
In [3]:
team_work_text = ["""๊ฑด๊ฐํ ํ์ํฌ๋ โ์๋ก๋ฅผ ์ํด ์ผํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก ํจ๊ป ์ผํ๋ ๊ฒโ์ด๋ผ๋ ๋ง์ด ์์ต๋๋ค. ์ด ๋ง์ ํ์๋ค์ด ๊ฐ์ ๋
๋ฆฝ์ ์ธ ์กด์ฌ๋ก ํจ๊ป ์ผํ๋ ๊ฒ์ด ์๋๋๋ค. ์คํ๋ ค ๊ทธ ๋ฐ๋๋ก, ์๋ก๊ฐ ์๋ก๋ฅผ ์ฑ
์์ง๋ ๊ด๊ณ ์์์ ํ ์ ์ฒด์ ๋ชฉํ๋ฅผ ์ด๋ฃจ๊ธฐ ์ํด ํจ๊ป ์ผํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ํ์ํฌ๋ ๊ฒฐ์ฝ ์ด๋ ํ ์ธ์ ์ธ ์กฐ๊ฑด์ ์ํด์ ์ฃผ์ด์ง๋ ๊ฒ์ด ์๋๋๋ค. ์กด ๋งฅ์ค์ฐ์ ์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์์ ๋ค์ฏ ๊ฐ์ง ์์๊ฐ ๋ฐ๋์ ํ์ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
1. ์ธ๊ฒฉ
โ์ ๋ขฐโ๊ฐ ๋ฆฌ๋์ญ์ ๊ธฐ์ด์ด๋ฉฐ, ๋ชจ๋ โ์ ๋ขฐโ๋ ์ธ๊ฒฉ์์๋ถํฐ ๋น๋กฏ๋๋ค๋ ๊ฒ์ ์ด๋ฏธ ์ฃผ์ง์ ์ฌ์ค์
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ฑ
์์ ์ธ๊ฒฉ๊ณผ ํจ๊ป ์์๋๋๋ฐ, ์๋ํ๋ฉด ์ฑ
์์ ๋ชจ๋ ์ธ๊ฐ ๊ด๊ณ์ ๊ธฐ์ด์ธ ์ ๋ขฐ์ ๊ทผ๊ฑฐํ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋น์ ์ด ์ด๋ค ์ฌ๋์ ์ ๋ขฐํ ์ ์๋ค๋ฉด ๋น์ ์ ๊ทธ๋ฅผ ์์กดํ ์ ์๋ฏ์ด, ์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋น์ ์ด ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ํ์ ๊ฐ์ธ์ ์ธ๊ฒฉ์ ์ธ์ฐ๋ ์ผ์
๋๋ค.
2. ๋ฅ๋ ฅ
์ข
์ข
โ์ธ๊ฒฉโ๋ง ํ๋ฅญํ๋ฉด ๋๋ค๊ณ ์ฐฉ๊ฐํ๋ ์ฌ๋๋ค์ด ์์ต๋๋ค. ํ์ง๋ง ๊ณต๋์ ๋ชฉํ๋ฅผ ๊ฐ๊ณ ์๋ ํ์์๋ ๊ฐ๊ฐ์ธ์ ๋ฅ๋ ฅ ๋ํ ๋งค์ฐ ์ค์ํ ์์์
๋๋ค. ์ธ๊ฒฉ์ด ๊ฐ์ฅ ์ค์ํ ์์์์๋ ๋ถ๋ช
ํ์ง๋ง ์ ์ผํ ์์๋ ์๋๋๋ค. ์ธ๊ฒฉ ๋งํผ์ด๋ ๋ฅ๋ ฅ๋ ์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ์ ์ค์ํ ์์์
๋๋ค. ์ด๋ค ์ฌ๋๊ณผ ๊ฐ์ ํ์ด ๋๋ค๋ฉด, ๋น์ ์ ๋ถ๋ช
๊ทธ ์ฌ๋์ ์ธ๊ฒฉ๊ณผ ํจ๊ป ๋ฅ๋ ฅ๋ ๋ณผ ๊ฒ์
๋๋ค.
3. ํ์
์์ ์๊ฒ ์ ๋ฆฌํ ๋๋ง ์ข๊ฒ ๋ํ๋ ์ฌ๋๊ณผ๋ ํ์ ์ด๋ฃจ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋๋ก ํ์ ์ํด ํ์ ํ ์ค ์๋ ํ๋๋ฅผ ๊ฐ์ง ์ฌ๋์ ๋๊ตฌ๋ ๊ทธ์ ํจ๊ป ํ์ ์ด๋ฃจ๊ณ ์ถ์ด ํฉ๋๋ค. โํ์ โ์ ํ๋๋ ์ธ๊ฒฉ์์ ๋น๋กฏ๋๋ ๊ฒ์ผ๋ก, ํ ์ ์ฒด๋ฅผ ๋ณด๋ ๋๊ณผ ๊ทธ๊ฒ์ ์ํด ์์ ์ ๋ฐ์น ์ค ์๋ ์์ธ๋ฅผ ๋งํฉ๋๋ค. ํ์ ์ฑ๊ณต๊ณผ ์คํจ๋ ํ ๋๋ฃ๋ค๊ฐ์ ํ์ ์ ์ ๋์ ๋น๋กํ๋ค๊ณ ๋งํ ์๋ ์์ต๋๋ค.
4. ์ผ๊ด์ฑ
์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ๋ ํ๋์ ์์๋ ๋ฐ๋ก ์ผ๊ด์ฑ ์๋ ํ๋์
๋๋ค. ์ผ๊ด์ฑ์ด๋ ์์ธก ๊ฐ๋ฅํ๋ฉฐ, ์ ๋ขฐํ ์ ์๋ ๊ทผ๊ฑฐ๊ฐ ๋๋ ์์์
๋๋ค. ์ฌ๊ธฐ์ ์ผ๊ด์ฑ์ด๋ ๊ธ์ ์ ์ด๊ณ ํ์ ์ ์ตํ ๋ฐฉํฅ์ ์๋ฏธํ๋ฉฐ, ํ ๋ ๋ฒ์ด ์๋๋ผ ๋ฐ๋ณต์ ์ผ๋ก ๊ทธ ๋ชจ์ต์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์๋ฏธํ๊ณ , ์ด๋ ํ ์์น์ ๋ํ์ฌ ์ํฉ์ ๋ฐ๋ผ ๋ฐ๊พธ์ง ์๋ ํ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
5. ๋จํฉ
๋จํฉ์ ์๋ฌด๋ฆฌ ์ด๋ ค์ด ์ํฉ์ด ๋ฅ์ณ๋ ํจ๊ป ๋ญ์น ์ ์๋ ๋ฅ๋ ฅ์ ๋งํฉ๋๋ค. ๋จํฉ์ ์๋ก ์ข์ํ๊ณ ์๋ก ์ํด ์ฃผ๋ ๊ทธ๋ฐ ๊ฒ์ด ์๋๋๋ค. ์๋ก ์ข์ํ๊ณ ์๋ก์๊ฒ ๋งค๋ ์๊ฒ ์ํด ์ฃผ์ง๋ง ๋จํฉ๋์ง๋ ์๋ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฐ ํ์ ํ์๋ค์ด ๊ทธ์ ์กฐ์ง์์ ๋ถ๊ณผํ ํ์
๋๋ค. ๋จํฉ์ ์๋ก์ ๋ํ ์ ๋ขฐ์ ์ ๋๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๋จํฉ์ด ์๋๋ ํ์ ์ด๋ ํ ์ํฉ์์๋ ํ๋ค๋ฆฌ๊ฑฐ๋ ๋๋์ง ์์ต๋๋ค.
ํ์ํฌ์ ๊ด๋ จํด์ ๋น์ ์ด ๋ฐ์ ์ ์๋ ์ต์์ ์นญ์ฐฌ์ ์ค์ํ ์๊ธฐ์ ๋น์ ์ ํ ๋๋ฃ๋ค๋ก๋ถํฐ โ๋ฏฟ์ ์ ์๋คโ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ฃ๋ ๊ฒ์
๋๋ค. ๋น์ ์ ํ ๋๋ฃ๋ค์ ๋น์ ์ ํ์๋ก ํ ๋์ ๋น์ ์ ๋ฏฟ์ด์ค๋๊น? ์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋น์ ์ ์ธ๊ฒฉ์๋ ๋ฌธ์ ๊ฐ ์๋์ง, ๋น์ ์ ์ฃผ์ด์ง ์
๋ฌด๋ฅผ ์ ๋๋ก ์์ํ๊ณ ์๋์ง, ํ์ ์ฑ๊ณต์ ์ํด ๋น์ ์์ ์ ํ์ ํ๋์ง, ์ด๋ ๋๋ผ๋ ๋ฏฟ์ ์ ์๋ ์ผ๊ด์ฑ์ ๋ณด์ฌ์ฃผ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ์๋ค๊ณผ ํ๋๊ฐ ๋์๋์ง ์ ๊ฒํด๋ณด์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋์ด ์๋, ๋ฐ๋ก ๋น์ ์์ ์ ๋ชจ์ต์์ ๊ณ ์ณ์ผ ํ ๋ถ๋ถ์ด ๋ฌด์์ธ์ง ์ฐพ์ ๋ณด์ญ์์ค. ๊ทธ๊ฒ์ ๊ณ ์น๊ธฐ ์ํด ๋
ธ๋ ฅํ ๋, ๋น์ ์ด ์ํ ํ์ ์๋ก๋ฅผ ์ฑ
์์ง๋ ํ์ํฌ๋ฅผ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์
๋๋ค.
๋ณธ ๊ธ์ ์กด ๋งฅ์ค์ฐ ์ <ํ์ํฌ๋ฅผ ํ์ ํ๋ 17๊ฐ์ง ๋ถ๋ณ์ ๋ฒ์น> ์ค์์ ๋ฐ์ท, ๊ฐ์ํ์์ต๋๋ค
"""]
In [4]:
from krwordrank.word import KRWordRank
min_count = 2 # ๋จ์ด์ ์ต์ ์ถํ ๋น๋์ (๊ทธ๋ํ ์์ฑ ์)
max_length = 10 # ๋จ์ด์ ์ต๋ ๊ธธ์ด
wordrank_extractor = KRWordRank(min_count=min_count, max_length=max_length)
In [5]:
beta = 0.85 # PageRank์ decaying factor beta
max_iter = 10
keywords, rank, graph = wordrank_extractor.extract(team_work_text, beta, max_iter)
In [6]:
for word, r in sorted(keywords.items(), key=lambda x:x[1], reverse=True)[:30]:
print('%8s:\t%.4f' % (word, r))
์๋ก: 4.2142 ์ํด: 3.5016 ์ฑ ์์ง๋: 3.2165 ์ธ๊ฒฉ: 2.6769 ํ์ํฌ๋ฅผ: 2.3996 ํจ๊ป: 2.3898 ๊ฒ์ด: 2.3862 ๋น์ : 2.3353 ์๋: 2.3194 ์ค์ํ: 2.0437 ๋ง๋ค๊ธฐ: 1.6864 ๊ทธ๋ฆฌ๊ณ : 1.6589 ๊ฒ์: 1.6488 ํ์: 1.6261 ํ์: 1.5213 ๋ชจ๋ : 1.5137 ๋จํฉ์: 1.4131 ์ด๋ค: 1.3965 ๊ทธ๊ฒ์: 1.3170 ๋ค๋ฅธ: 1.2901 ์ฌ๋: 1.2782 ๋ฅ๋ ฅ: 1.2737 ํ์ด: 1.2684 ์ผ๊ด์ฑ: 1.2285 ํ๋๋ฅผ: 1.2015 ํ์: 1.1817 ์์์ ๋๋ค.: 1.1461 ์ด๋ ํ: 1.1138 ์์ : 1.0092 ๊ทธ๋ฐ: 1.0032
์๋ก, ์ํด, ์ฑ
์์ง๋, ์ธ๊ฒฉ ๋ฑ ๋จ์ด๋ค์ด ์ถ์ถ ๋๋ ๊ฒ์ ๋ณด์ค ์ ์์ต๋๋ค.
๋์ค์๋ ์ฌ์ ์ ๋ง๋ค์ด์ ์ ์๋ ๋จ์ด๋ค์ ์ถ์ถํ๋ฉด ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค์ ์์ ๊ฒ์ด๋ผ ๊ธฐ๋ํฉ๋๋ค.
5. vit 모델을 통한 image classfication (난 어떤 class 일까?)¶
์์์ ๋ณด์ฌ๋๋ฆฐ abstractive summariztion, generation, document search, keyword extraction ๋ฑ๋ฑ์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๊ณ , ์ฝ๋๋ฅผ ์กฐ๊ธ ํ์ฉํ ์ ์์ต๋๋ค.
Vit๋ฅผ ์ฌ์ฉํ์ฌ ๋งจ ์์ ํ๋กํ์ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
In [3]:
from transformers import ViTFeatureExtractor, ViTForImageClassification
from PIL import Image
import requests
import urllib
# ํ๋์ด๋ฏธ์ง ๋ค์ด
# url = 'https://i.imgur.com/Q7TFJNL.jpg?2'
# urllib.request.urlretrieve(url, "./image.jpg")
# image = Image.open("./image.jpg")
# image
Out[3]:
In [ ]:
feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224')
model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224')
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
In [7]:
socre_lst = torch.squeeze(logits, dim = 0).tolist()
predicted_class_lst = torch.squeeze(logits.argsort(descending = True), dim = 0).tolist()
In [8]:
top_k = 5
for idx, predicted_class_idx in enumerate(predicted_class_lst):
print(f'{idx+1} - {model.config.id2label[predicted_class_idx]} - {socre_lst[predicted_class_idx]}')
if idx + 1 == top_k:
break
1 - sunglass - 7.656715393066406 2 - can opener, tin opener - 6.420529365539551 3 - comic book - 6.390258312225342 4 - sunglasses, dark glasses, shades - 5.738419055938721 5 - corkscrew, bottle screw - 5.577491283416748
ํ๋กํ์ Vit๋ก image classification ์ sunglass๋ผ๊ณ inference ํฉ๋๋ค.
image detection ์ผ๋ก ํ๋กํ์ ๋ถ์ํ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
'About > Self-Intro' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Self-Intro (eng ver.) (0) | 2022.09.09 |
---|
๋๊ธ