| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- #abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업
- #abc 프로젝트 멘토링 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #공부일지 #멘토링일지
- Today
- Total
나른한 코딩 생활
[27일차] ABC 부트캠프 트랜스포머 기반 자연어 처리 애플리케이션 구축 본문
강영묵 한국화학연구원
Machine Learning in NLP
LLM Large Language Model
차원축소
임베딩
word2vec
Rnn / lstm 은 앞에서부터 순차적으로 하기때문에 뒤에는 순차처리를 기다려야 함 ( 직렬처리 )
트랜스포머 모델은 동시에 (병렬처리) 할 수 있게 되었다.
Attention 의 중요성
중요한 단어와 중요하지 않은 단어
토근화 되고 임베딩 되는 과정까지만 알아두면 좋다
벡터로 만들었을때
우리들이 가지고 있는 데이터를 1차원 벡터로 만들 수 만 있다면 어떤 인공지능모델이든지 그것으로 학습시킬 데이터셋을 가질 수 있다
트레이닝 후 최적화 기술 = 정량화
GPT : 학습은 디코더 인코더 다 사용하지만, 우리에게 정보를 제공할때는 디코더만 사용함
Encoder : 이미지를 보고 식별 AI 가 고양이라고 인식함
Decoder : 인코더의 반대
GPT 문장 생성에 강점
BERT 문장의 의미를 추출하는데 강점
GPT -> GPT-2 는 거의 모델만 커짐 : 효과는 좋았다
모델이 클수록 샘플 늘어나며, 학습 시간을 줄여 경제적, 트레이닝 속도가 더 빠름,
확장 법칙 / 가장 중요한 것 =>
'정밀한 아키텍처 하이퍼매개변수가 언어 모델의 전체적인 귭모보다 덜 중요하다는 것을 알게 되었다는 것입니다.'
모델이 크다는 것?
ChatGPT의 인기 비결? -> 웹서비스 제공 = 사용자 접근성 향상
zero-shot / one-shot / few-shot
정보를 주지 않은 상태에서는 정답률이 낮지만 정보를 한 번 주고 나서는 파라미터가 많은 모델일 수록 정답률이 매우 뛰어나다
RAG / Fine-Tunning
RAG - 오픈북 시험 ( 질문과 관련된 정보를 찾아서 답변) : 중요한 정보나 사실을 알려줄때 사용하는게 좋다
Fine-Tunning - 일반적인 시험 ( 순수하게 외운 정보를 바탕으로 답변 )
LoRA - Low Rank Adaptation (of Large Language Models)
1700억개의 데이터를 전부다 학습하고 돌아가서 하나씩 다시 학습하고 하는 과정을 하지 않게 해줌
핸드폰과 핸드폰 케이스와 같은 관계
PCA
Quantization
경량화의 이유는? -> 접근성 과 보급화
ChatGPT에 파일튜닝한 데이터는 약 800기가
이때 로라를 쓰면 800기가 파라매터가 아닌 내가 사용한 20~30메가 정도의 로라로 상대에게 전달 할 수 있게됨.
Qna
Q1. NLP 딥러닝 모델의 맥락에서 "단어 임베딩"은 무엇입니까? (가장 적합한 답변 선택)
A1. 유사한 단어는 유사한 표현을 갖게 되도록 단어의 표현을 인코딩하는 벡터
Q2. 2017년에 "Attention is All You Need!" 논문에서 Transformer 아키텍처가 소개되었습니다. 아키텍처의 중요한 기능은 무엇입니까?
A2.
RNN은 NMT와 같은 작업에서 시퀀스 모델링을 위해 더 이상 필요하지 않음
순차 연산이 적을수록 모델을 처리할 때 병렬화 규모가 커짐
순차적으로 서로 더 멀리 떨어진 단어 사이의 관계를 인코딩할 수 있음
Q3. Transformer 아키텍처에서 "Attention 메커니즘"의 목적은 무엇입니까?
A3. 입력 시퀀스를 살펴보고 각 단계에서 시퀀스의 어떤 부분이 중요한지 결정한 다음 해당 정보를 인코딩함
자연어 처리
# 데이터 준비
import os
import json
import glob
from omegaconf import OmegaConf
def get_latest_model():
nemo_model_paths = glob.glob('nemo_experiments/TextClassification/*/checkpoints/*.nemo')
# Sort newest first
nemo_model_paths.sort(reverse=True)
return nemo_model_paths[0]
DATA_DIR = '/dli/task/data/federalist_papers_HM'
!ls $DATA_DIR
# 데이터 형식
!sed 1d $DATA_DIR/train.tsv > $DATA_DIR/train_nemo_format.tsv
!sed 1d $DATA_DIR/dev.tsv > $DATA_DIR/dev_nemo_format.tsv
print("*****\ntrain_nemo_format.tsv sample\n*****")
!head -n 3 $DATA_DIR/train_nemo_format.tsv
print("\n\n*****\ndev_nemo_format.tsv sample\n*****")
!head -n 3 $DATA_DIR/dev_nemo_format.tsv
import os.path
DATA_DIR = '/dli/task/data/federalist_papers_HM'
step1 = []
try:
with open(os.path.join(DATA_DIR,'train_nemo_format.tsv')) as f:
content = f.readlines()
step1 += content[:2]
with open(os.path.join(DATA_DIR,'dev_nemo_format.tsv')) as f:
content = f.readlines()
step1 += content[:2]
except:
pass
with open("my_assessment/step1.json", "w") as outfile:
json.dump(step1, outfile)
# 모델 Configuration 준비
CONFIG_DIR = "/dli/task/nemo/examples/nlp/text_classification/conf"
CONFIG_FILE = "text_classification_config.yaml"
config = OmegaConf.load(CONFIG_DIR + "/" + CONFIG_FILE)
print(OmegaConf.to_yaml(config.model))
from nemo.collections import nlp as nemo_nlp
nemo_nlp.modules.get_pretrained_lm_models_list()
# 파라미터 설정
NUM_CLASSES = 2
MAX_SEQ_LENGTH = 256
BATCH_SIZE = 32
PATH_TO_TRAIN_FILE = "/dli/task/data/federalist_papers_HM/train_nemo_format.tsv"
PATH_TO_VAL_FILE = "/dli/task/data/federalist_papers_HM/dev_nemo_format.tsv"
PRETRAINED_MODEL_NAME = 'bert-base-uncased' # change as desired
LR = 1e-4 # change as desired
with open("my_assessment/step2.json", "w") as outfile:
json.dump([MAX_SEQ_LENGTH, NUM_CLASSES, BATCH_SIZE], outfile)
# 검토
print(OmegaConf.to_yaml(config.trainer))
print(OmegaConf.to_yaml(config.exp_manager))
# 파라미터 지정
MAX_EPOCHS = 5
AMP_LEVEL = 'O1'
PRECISION = 16
with open("my_assessment/step3.json", "w") as outfile:
json.dump([MAX_EPOCHS, AMP_LEVEL, PRECISION], outfile)
# 트레이닝
%%time
TC_DIR = "/dli/task/nemo/examples/nlp/text_classification"
!python $TC_DIR/text_classification_with_bert.py \
model.dataset.num_classes=$NUM_CLASSES \
model.dataset.max_seq_length=$MAX_SEQ_LENGTH \
model.train_ds.file_path=$PATH_TO_TRAIN_FILE \
model.validation_ds.file_path=$PATH_TO_VAL_FILE \
model.infer_samples=[] \
trainer.max_epochs=$MAX_EPOCHS \
model.language_model.pretrained_model_name=$PRETRAINED_MODEL_NAME \
model.train_ds.batch_size=$BATCH_SIZE \
model.validation_ds.batch_size=$BATCH_SIZE \
trainer.amp_level=$AMP_LEVEL \
trainer.precision=$PRECISION \
model.optim.lr=$LR
cmd_log = os.path.join(os.path.dirname(os.path.dirname(get_latest_model())),'cmd-args.log')
lightning_logs = os.path.join(os.path.dirname(os.path.dirname(get_latest_model())),'lightning_logs.txt')
with open(cmd_log, "r") as f:
cmd = f.read()
cmd_list = cmd.split()
with open("my_assessment/step4.json", "w") as outfile:
json.dump(cmd_list, outfile)
with open(lightning_logs, "r") as f:
log = f.readlines()
with open("my_assessment/step4_lightning.json", "w") as outfile:
json.dump(log, outfile)
# 추론
from nemo.collections import nlp as nemo_nlp
model = nemo_nlp.models.TextClassificationModel.restore_from(get_latest_model())
## 마지막 모델 경로
DATA_DIR = '/dli/task/data/federalist_papers_HM'
test_files = [
'test49.tsv',
'test50.tsv',
'test51.tsv',
'test52.tsv',
'test53.tsv',
'test54.tsv',
'test55.tsv',
'test56.tsv',
'test57.tsv',
'test62.tsv',
]
results = []
for test_file in test_files:
# get as list and remove header row
filepath = os.path.join(DATA_DIR, test_file)
with open(filepath, "r") as f:
lines = f.readlines()
del lines[0]
results.append(model.classifytext(lines, batch_size = 1, max_seq_length = 256))
print(results)
# 세이브
author = []
for result in results:
avg_result = sum(result) / len(result)
if avg_result < 0.5:
author.append("HAMILTON")
print("HAMILTON")
else:
author.append("MADISON")
print("MADISON")
with open("my_assessment/step5.json", "w") as outfile:
json.dump(author, outfile)
'ABC 부트캠프' 카테고리의 다른 글
| [29일차] ABC 부트캠프 ESG포럼&세미나 마지막 시간 (0) | 2024.08.02 |
|---|---|
| [28일차] ABC 부트캠프 데이터 라벨링 (0) | 2024.08.02 |
| [26일차] ABC 부트캠프 딥러닝의 기초 (0) | 2024.07.30 |
| [25일차] ABC 부트캠프 정규화 / YOLO / 얼굴 학습 (0) | 2024.07.28 |
| [24일차] ABC 부트캠프 이미지 필터링 및 학습 (0) | 2024.07.28 |