부스트캠프 9주차
[1강] 인공지능과 자연어 처리
- 인공지능의 탄생과 자연어 처리
- ELIZA 챗봇 : 최초의 대화형(chitchat) 챗봇, 튜링 테스트를 적용할 수 있는 최초의 Human-Like AI
- 컴퓨터의 자연어 처리
- Encoder : 벡터 형태로 자연어를 인코딩
- Decoder : 벡터를 자연어로 디코딩
- 자연어 단어 임베딩
- Word2Vec : 중심 단어의 주변 단어들을 이용해 중심 단어를 추론하는 방식으로 학습
- 장점 : 벡터 연산을 통한 추론이 가능
- 단점 : subword, OOV(Out of vocabulary) 에서 적용 불가능
- FastText : Word2Vec과 유사하지만, n-gram으로 나누어 학습
- 딥러닝 기반의 자연어 처리와 언어모델
- 언어모델 : 자연어의 법칙을 컴퓨터로 모사한 모델, 주어진 단어들로부터 그 다음에 등장할 단어의 확률을 예측하는 방식으로 학습
- 마코트 체인 모델(Markov Chain Model) : 통계와 단어의 n-gram을 기반으로 계산
- RNN 기반의 언어모델 : 최종 출력된 context vector 를 이용하여 분류하는 등의 방식
- Seq2Seq
- RNN 기반의 Seq2Seq : RNN 구조인 Encoder를 통해 얻은 context vector 를 RNN 구조인 Decoder에 넣어 출력
- Seq2Seq + Attention
- RNN 기반의 Seq2Seq with Attention : 긴 입력 시퀀스, 고정된 context vector 등 RNN 구조의 문제점을 해결하기 위해 등장
- Selt-Attention
- Transformer : 다양한 언어모델들이 Transformer를 기반으로 발전하고 있다.
- Further Questions
- Embedding이 잘 되었는지, 안되었는지를 평가할 수 있는 방법은 무엇이 있을까요?
- WordSim353, Spearman’s correlation, Analogy test
- Vanilar Transformer는 어떤 문제가 있고, 이걸 어떻게 극복할 수 있을까요?
- Longformer, Linformer, Reformer
[2강] 자연어의 전처리
- 통계학적 분석
- Token 개수 파악 후 아웃라이어 제거
- 빈도수 확인 후 사전(dictionary) 정의
- 전처리(Preprocessing)
- 기능
- 학습에 사용될 데이터를 수집&가공하는 모든 프로세스
- Task의 성능을 가장 확실하게 올릴 수 있는 방법
- 종류
- 개행문자, 공백 제거 + 띄어쓰기, 문장분리 보정
- 특수문자, 이메일, 링크, 불용어, 조사, 제목, 중복 표현 제거
- 문자열 함수
- 대소문자 변환 :
upper()
, lower()
, capitalize()
, title()
, swapcase()
- 편집, 치환 :
strip()
, rstrip()
, lstrip()
, replace(a, b)
- 분리, 결합 :
split()
, ''.join(list)
, lines.splitlines()
- 구성 문자열 판별 :
isdigit()
, isalpha()
, isalnum()
, islower()
, isupper()
, isspace()
, startswith('hi')
, endswith('hi')
- 검색 :
count('hi')
, find('hi')
, rfind('hi')
, index('hi')
, rindex('hi')
- 토큰화(Tokenizing)
- 기능
- 주어진 데이터를 토큰(Token) 단위로 나누는 작업
- 어절, 단어, 형태소, 음절, 자소, WordPiece 등
- 종류 예시
- 문장 토큰화(Sentene Tokenizing) : 문장 분리
- 단어 토큰화(Word Tokenizing) : 구두점 분리, 단어 분리
- 한국어 토큰화
- 영어와 달리 띄어쓰기만으로는 부족
- 따라서 어절을 의미를 가지는 최소 단위인 형태소로 분리함
[3강] BERT 언어모델 소개
- BERT 언어모델
- BERT 모델 응용 (
BERT Multi-lingual pretrained model
사용)
- 감성 분석 데이터셋 : 네이버 영화 리뷰 코퍼스
- 관계 추출 데이터셋 : KAIST가 구축한 Silver data
- 의미 비교 데이터셋 : 디지털 동반자 패러프레이징 질의 문장 데이터를 이용하여 질문-질문 데이터 생성 및 학습
- 개체명 분석 : ETRI 개체명 인식 데이터
- 기계 독해 : LG CNS가 공개한 한국어 AQ 데이터셋, KorQuAD
- 한국어 BERT 모델
[4강] 한국어 BERT 언어 모델 학습
- BERT 모델 학습 : 도메인 특화 Task의 경우, 도메인 특화 학습 데이터를 사용하여 새로 학습하는 것이 좋다.
- BERT 모델 학습 단계
- Tokenizer 만들기
- 데이터셋 확보
- Next Sentence Prediction (NSP)
- Masked Language Model (MLM)
- 학습을 위한 데이터
input_ids
: for Token Embeddings
token_type_ids
: Segment Embeddings
- BERT 추가 설명
[5강] BERT 기반 단일 문장 분류 모델 학습
- KLUE 데이터셋 소개
- KLUE 데이터셋 : 한국어 자연어 이해 벤치마크 (Korean Language Understanding Evaluation, KLUE)
- 단일 문장 분류 task : 문장 분류, 관계 추출
- 문장 임베딩 벡터의 유사도 : 문장 유사도
- 두 문장 관계 문류 task : 자연어 추론
- 문장 토큰 분류 task : 개체명 인식, 품사 태깅, 질의 응답
- DST : 목적형 대화
- 의존 구문 분석 : 단어들 사이의 관계를 분석하는 task (의존소, 지배소) → 복잡한 자연어 형태를 그래프로 구조화해서 표현 가능
- 단일 문장 분류 task 소개
- 문장 분류 task : 주어진 문장이 어떤 종류의 범주에 속하는지를 구분하는 task
- 감성분석(Sentiment Analysis) : 문장의 긍정 또는 부정 및 중립 등 성향을 분류하는 프로세스 → 혐오 발언 분류, 기업 모니터링 등
- 주제 라벨링(Topic Labeling) : 문장의 내용을 이해하고 적절한 범주를 분류하는 프로세스 → 대용량 문서 분류, VoC(Voice of Customer) 고객의 피드백 주제 분류
- 언어감지(Language Detection) : 문장이 어떤 나라 언어인지를 분류하는 프로세스 → 번역기, 데이터 필터링
- 의도 분류(Intent Classification) : 문장이 가진 의도를 분류하는 프로세스 → 챗봇
- 문장 분류를 위한 데이터
- Kor_hate : 혐오 표현에 대한 데이터
- Kor_sarcasm : 비꼬는/비꼬지 않은 표현의 문장
- Kor_sae : 질문 종류/명령 종류
- Kor_3i4k : 단어 또는 문장 조각
- 단일 문장 분류 모델 학습
- 모델 구조 : BERT의
[CLS]
token의 vector를 classification 하는 Dense layer 사용
- 주요 매개변수
input_ids
: sequence token을 입력
attention_mask
: [0, 1]로 구성된 마스크, 패딩 토큰 구분
token_type_ids
: [0, 1]로 구성되었으며 입력의 첫 문장과 두번째 문장 구분
position_ids
: 각 입력 시퀀스의 임베딩 인덱스
inputs_embeds
: input_ids 대신 직접 임베딩 표현을 할당
labels
: loss 계산을 위한 레이블
next_sentence_label
: 다음 문장 예측 loss 계산을 위한 레이블
- 학습 과정
- 데이터 : Dataset 다운로드, Dataset 전처리 및 토큰화, Dataloader 설계, Train, Test Dataset 준비
- 학습 : TrainingArguments 설정, Pretrained Model import, Trainer 설정, Model 학습
- 추론 : Predict 함수 구현 및 평가
[6강] BERT 기반 두 문장 관계 분류 모델 학습
- 두 문장 관계 분류 task 소개
- 두 문장 관계 분류 task : 주어진 2개의 문장에 대해, 두 문장의 자연어 추론과 의미론적인 유사성을 측정하는 task
- 두 문장 관계 분류를 위한 데이터
- Natural Language Inference (NLI)
- 언어모델이 자연어의 맥락을 이해할 수 있는지 검증하는 task
- 전체문장(Premise), 가설문장(Hypothesis), 함의(Entailment), 모순(Contradiction), 중립(Neutral) 으로 분류
- Semantic text pair : 두 문장의 의미가 서로 같은 문장인지 검증하는 task
- 두 문장 관계 분류 모델 학습
- Information Retrieval Question and Answering (IRQA)
[7강] BERT 언어모델 기반의 문장 토큰 분류
- 문장 토큰 분류 task 소개
- 문장 토큰 분류 task : 주어진 문장의 각 token이 어떤 범주에 속하는지 분류하는 task
- Named Entity Recognition (NER) : 개체명 인식, 문맥을 파악해서 인명, 기관명, 지명 등과 같은 문장 또는 문서에서 특정한 의미를 가지고 있는 단어 또는 어구 등을 인식하는 과정
- Part-of-speech tagging (POS Tagging) : 주어진 문장의 각 성분에 대하여 가장 알맞은 품사를 태깅하는 것
- 문장 토큰 분류를 위한 데이터
- kor_ner : 한국어해양대학교 자연어 처리 연구실에서 공개한 한국어 NER 데이터셋
- 문장 토큰 분류 모델 학습
- NER fine-tuning with BERT : 형태소 단위 토큰을 음절 단위의 토큰으로 분해하고, Entity tag 역시 음절 단위로 매핑시켜 주어야 한다.