μ£Όμ : μ€κ³ λ±νμμ μν νκ³Ό κ΅μλ μΈν°λ·° μ±λ΄
μμ : λν μ§ν μ , μ μ©ν μ 보λ₯Ό μ»μ μ μμ!
결과 미리보기 :
νμ΅μ νμν λ°μ΄ν°μ :
νκ³Όμ κ°μλ μ΄ 320κ°κ° μμΌλ©°, νκ· μ§μμλ΅ κ°μλ 11μ, μ΅λ 19μ κΉμ§ μ΄μ΄μ§λλ€.
λ°μ΄ν°μ μ λν μ§λ¬Έ:
1.κ΅μλκ»μ μ 곡 μ νν λκΈ°μ΄ λ¬΄μμΈκ°μ
2.μ΄λ€ λΆμΌμ κ΄μ¬ κ°λ μ¬λμ΄ μ΄ νκ³Όλ‘ μ€λ©΄ μ’μκΉμ3.μ΄ νκ³Όμμ κ°μ₯ μ€μν 곡λΆλ μ΄λ€ λ΄μ©μΈκ°μ4.μ΄ νκ³Όμμ κ³΅λΆ μν λ €λ©΄ μ€κ³ λ±νμλ μ΄λ€ κ΅κ³Όλͺ©μ 곡λΆνλ©΄ μ’μκ°μ5.μ΄ νκ³Όμ μ₯μ μ λκ°μ6.μ΄ νκ³Όμ νμλ€μ΄ κ²ͺλ μ΄λ €μμ λκ°μ7.νκ³Ό μ‘Έμ μμ΄ κ°μ₯ λ§μ΄ μ§μΆνλ μ§μ λΆμΌλ μ΄λ κ³³μΈκ°μ8.νκ³Όμ μμΌλ‘μ μ λ§μ μ΄λ€κ°μ9.μ§κΈμ μμ§λ§ μμΌλ‘ μλ‘ μκΈ°κ² λ μ§μ μ μ΄λ€κ² μλμ10.μ΄ νκ³Όλ₯Ό μ 곡νλ €λ νμμ΄ μ§ν μ μ 곡λΆν΄μΌ λ κ²μ΄ μλ€λ©΄ μ΄λ€κ±΄κ°μ11.μ΄ νκ³Όλ₯Ό μ§λ§νλ μ€κ³ λ±νμνν λ§μ§λ§ νλ§μ ν΄μ£ΌμΈμ
μΆκ°μ μΈ μμ΄λμ΄
λ±λ±ν λ΅λ³μ΄ μλ, λ¬Έμ₯μ νλμ© λ§νλ―μ΄ λ΄λ±μΌλ©΄μ κ°μ μ λΆμ΄λ©΄ μ’μ λ― νλ€!
μ΄κ±Έ μ΄μΌνλλ
Emotion Recognition in Conversation
λν λ΄μμ λ°νμμ κ°μ μ μΈμνλ Taskκ° μμ. μ΄λ₯Ό ERCλΌκ³ ν¨.
μμ MELD λ°μ΄ν°μ μλ μ΄ 7κ°μ κ°μ μ΄ μλλ°, μμ μ¬μ§κ³Ό κ°μ!!
κ·Έλμ μ΄λ¬ν ERC λͺ¨λΈμ ν©μΉλ©΄ κ°μ νν κ°λ₯.
Overview
1. μΈν°λ·° νμ΅
μΈν°λ·°λ₯Ό μν΄ λ°μ΄ν°μ μ νμ΅ν λͺ¨λΈμ΄ νμν¨. λ³ΈμΈμ KoGPTλ₯Ό μ νν¨!
λ°μ΄ν° μ μ²λ¦¬ν΄μ μ§λ¬Έ-λ΅λ³ μ΄ 2κ°μ columnμΌλ‘ ꡬμ±νκ³ , μ΄ 4,259κ°μ μμ΄ λμ΄.
but,
GPUμ νκ³λ‘ Fine-Tuning λΆκ°νμ.
λ°λΌμ In-context Learningμ μ¬μ©ν΄μ μΆλ‘ νκΈ°λ‘ ν¨.
2. λ²μ
κ°μ μΈμμ νκΈ° μν΄μ λ²μμμ μ΄ νμνμ΅λλ€.
ꡬκΈμ Translate λΌμ΄λΈλ¬λ¦¬ μ¬μ©ν΄μ νκ΅μ΄ > μμ΄λ‘ λ³νν΄μ£Όμμ΅λλ€.
3. κ°μ μΈμ
μ±λ΄μ΄ λ§νλ λ¬Έμ₯μ κ°μ μ μΈμν΄μΌνλ μ΄μ λ§λ λͺ¨λΈμ νμ΅νκ±°λ μ°ΎμμΌμ£ .
μ λ νκΉ νμ΄μ€μμ Emotion English DistilRoBERTa-baseλΌλ λͺ¨λΈμ κ°μ§κ³ μμ΅λλ€!
μλ μΌμͺ½μ 보μ΄λ λ°μ΄ν°μ μΌλ‘ νμ΅νλ€κ³ ν©λλ€.
μ΄ λͺ¨λΈμ μ¬μ©ν κ²°κ³Όλ₯Ό 보면
μμ£Ό μ μΈμ νλ€μ. μμ λ₯Ό λ£μΌλ©΄ λ²μμ ν΅ν΄ κ°κ°μ κ°μ μ λ°λ₯Έ νλ₯ κ°μ 보μ¬μ€λλ€. sadnessκ° κ°μ₯ ν¬λ€μ.
μ΄μ μ΄ κ°μ μ μ΄λͺ¨μ§λ‘ ννν κ±°μμ
νμ΄μ¬μλ μ΄λ° λΌμ΄λΈλ¬λ¦¬κ° μμ΄μ! μ΄λͺ¨μ§λ₯Ό μΆλ ₯ν΄μ€λλ€.
μ°λ¦¬κ° ννν΄μΌνλ κ°μ μ μ΄λͺ¨μ§ μ΄λ¦μ μ°Ύμ보λ μλμ κ°μ΄ λμμ΅λλ€!
μ΄μ μκΉ κ΅¬ν μ΅κ³ νλ₯ κ°κ³Ό μ΄ μ΄λͺ¨μ§λ₯Ό 1λ1 λ§€μΉ ν΄μ£Όλ©΄ μ΄λ κ² λ©λλ€!
μ μ΄λ¬κ³ μ²μμ νκΈλ‘ μΆλ ₯λ κ²°κ³Όκ°κ³Ό μ΄λͺ¨μ§λ₯Ό ν©μ³μ£Όλ©΄ μ 체μ μΈ overview μ€λͺ λ!
μ΄μ κ²°κ³Όλ₯Ό λ€μλ³ΌκΉμ?
μ§μ§ μ λ½μ λ λλκ² μλ½μμ!!
μ΄λ¬κ³ λΈλ‘κ·Έ μ λ‘λλ₯Ό μν΄ κ°κ²°ν μ½λλ₯Ό μ μνμ¬ μ²¨λΆνμμ΅λλ€.
μ΄μ GPTλ₯Ό μ¬μ©νμ¬ λ§λ νκ΅μ΄ νκ³Ό μΈν°λ·° μ±λ΄ μ μκΈ°μμ΅λλ€.
κ°μ¬ν©λλ€.
ꡬνμ μν κ°λ¨ν μ½λ!
100μ€λ μλμ₯¬?
import time
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline
import emoji
import googletrans
classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base", return_all_scores=True)
change = {'anger' : ":face_with_symbols_on_mouth:",
'disgust' : ":nauseated_face:",
'fear' : ":fearful_face:",
'joy' : ":grinning_face:",
'neutral' : ":neutral_face:",
'sadness' : ":loudly_crying_face:",
'surprise' : ":astonished_face:"
}
translator = googletrans.Translator()
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()
def gpt_interview(prompt, max_length: int = 256, ends_interview: bool = False):
with torch.no_grad():
model.eval
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=max_length)
generated = tokenizer.batch_decode(gen_tokens)[0]
generated_answer = generated[len(prompt):]
end_idx = generated_answer.index('Q')
return generated[len(prompt):len(prompt) + end_idx - 1]
try:
major = input("<μ±λ΄μ΄ μ°κ²°λμμ΅λλ€.> \n μ΄λ νκ³Ό κ΅μλκ³Ό μΈν°λ·° ν κΉμ? \n User: ")
time.sleep(2)
first = input(f'{major} κ΅μλκ³Ό μΈν°λ·°λ₯Ό μ§ννκ² μ΅λλ€. μ§λ¬Έμ ν΄μ£ΌμΈμ. \n User:')
prompt = f"""{major} κ΅μλκ³Ό μΈν°λ·°λ₯Ό μ§ννκ² μ΅λλ€.
Q:{first}
A:"""
user = ''
while user!="μ’
λ£":
chatbot = gpt_interview(prompt, max_length=300)
for sentence in chatbot.split('.'):
try:
ko_en = translator.translate(sentence, dest='en', src='ko')
emotion = classifier(ko_en.text)
top_emotion = ""
top_score = 0
for num in range(len(emotion[0])):
if top_score < emotion[0][num]['score']:
top_emotion = emotion[0][num]['label']
top_score = emotion[0][num]['score']
print(f"\n{major}κ΅μλ: {sentence}{emoji.emojize(change[top_emotion])}")
time.sleep(1)
except:
continue
user = input('\nUser: ')
prompt = f"""{major} κ΅μλκ³Ό μΈν°λ·°λ₯Ό μ§ννκ² μ΅λλ€.
Q:{user}
A:"""