본문 바로가기

boostcamp AI tech/boostcamp AI

Introduction to NLP task

728x90

Sequence to Sequence 구조를 여러 목적에 맞게 활용할 수 있다.

N21 - topic, 긍/부정 등의 classification

N2N - 품사 태깅처럼 각 토큰별 판단

N2M - 대화, 번역, encoder-decoder가 동시에 활용된다.

1. N21

https://swatimeena989.medium.com/bert-text-classification-using-keras-903671e0207d

Classification의 모습이다. 문장의 긍/부정을 판단한다던지 혹은 이 문장(혹은 문단)이 어떤 주제의 글인지 topic classification을 수행할 수 있다. 

https://luv-bansal.medium.com/fine-tuning-bert-for-text-classification-in-pytorch-503d97342db2

SEP 토큰을 활용하면 다수 문장간의 Semantic Textual Similarity(두 문장이 유사한가?)를 판단할 수 있다.

혹은 A->B 처럼 방향이 있는 관계를 예측하는 Text Entailment 를 수행할 수 있다. 예를 들면 A->B 의 논리 관계가 참/거짓 인지 판단할 수 있다.

 

나는 돈까스를 좋아한다. 내가 선호하는 음식은 돈까스다.

이 두 문장이 서로 '4:5로 비슷하다'는 선형적 판단을 하는 task를 STS(Semantic Text Similarity)라고 한다.

정보 추출, 질문-답변 및 요약, 데이터 증강, 챗봇의 질문 제안, 혹은 중복 문장 탐지 등에 활용된다.

반면 사과 -> 과일(True), 과일 -> 사과(False) 처럼 방향성이 존재하는 관계를 예측하는 문제를 Textual Entailment(TE)라고 한다.


1) input data tokenization

보통은 pretrained model을 불러올때 함께 딸려오는 tokenization을 활용한다.

실제 transformer에서 어떻게 이 과정이 처리되어 embedding을 수행하는지 알아보자.

[What is tokenization?] 
-> [[CLS], What, is, to, ##ke, ##n, ization, ?, [SEP]] 

-> input_ids : [2, 28868, 11376, 8977, 2145, 14925, 35, 3]
-> token_type_ids : [0, 0, 0, 0, 0, 0, 0, 0, 0]
-> attention_mask : [1, 1, 1, 1, 1, 1, 1, 1, 1]

batch단위로 묶을 때 padding이 들어가면 attention_mask에 뒷부분이 0으로 채워질 것이다.

 

2) Forward

input이 준비되면 transformer로 들어간다. 지금 우리는 N21문제를 풀고 있기 때문에 맨 마지막 층의 output 중에서 [CLS] 토큰에 해당하는 embedding vector만 가져온다. [1, 768]

여기에 우리가 추가로 layer를 통과하도록해서 목적에 맞는 개수의 class 분류를 수행할 수 있다.

[1,768] -> fully_connected_layer -> [1,7] logit값 -> softmax -> [1,7] 확률값

 

3) Loss

loss를 어떻게 설계하냐에 따라 학습이 달라질 수 있다.

- Mean Squared Error(MSE) : MRC문제에서 정답 위치를 찾을 때 position의 숫자를 예측

- Semantic Text Similarity : 두 문장의 유사도를 나타내는 숫자를 예측

- 추천 : 추천의 정도를 나타내는 숫자를 예측

- cross entropy : 대부분의 분류 문제에는 CE가 잘 먹힌다. 두 확률 분포의 거리를 가깝게 하는 방향으로 학습된다.


2. N2N

문장, 문단 등의 corpus에서 사람, 위치, SSN, 개인정보 등을 분류하는 Named Entity Recognition(NER)을 수행할 수 있다. 문장의 품사(형태소) 분석도 가능하다.


1) loss

input sequence의 길이가 N이라면 N번의 classification을 수행한다.

역시 이때도 cross_entropy_loss를 많이 사용 한다. 그럼 총 N개의 CE값이 나온다. 이를 평균내서(reduction 방식을 다르게 설정도 가능하다) 하나의 scalar가 loss로 전달된다.

(weight) label이 0, 1이 있을 때 두 label에 대해 서로 다른 가중치를 부여해서 Loss를 계산할 수 있다. 데이터가 편향되어있을 때 유용할 수 있다.

(ignore_index) 공식 문서를 잘 보면 ignore_index=-100이 보인다. cross_entroy는 값이 -100인 index에 대해서는 계산에서 제외한다. label을 넣어줄 때 padding에 해당하는 위치는 -100으로 채워주면 crossentropy가 무시한다.

 

2) label

품사를 tagging할 때 BIO방식이 가장 유명하다. B(개체명의 시작), I(개체명 있음), O(없음) 이 예시는 character 단위로 한글을 encoding했을 때 BIO방식으로 tagging을 한 결과이다.

만약 내가 문장을 subword 방식으로 tokenization을 했다면 tagging label도 거기에 맞춰서 동일한 개수로 준비해야 할 것이다.

 

3) evaluation

명사, 동사, 부사 각 class에 대해서 confusion matrix를 구하고 나면 precision, recall, f1-score를 구할 수 있다.

카테고리 별 F1을 평균내거나 샘플 수 비중을 고려한 weight를 주어서 평균내는 방식을 Macro 라고 한다.

반면 카테고리 구분 없이 TP, TN, FP, FN를 다 더해서 하나의 f1을 도출하는 방식을 Micro라고 한다.

https://data-minggeul.tistory.com/11

 

f1-score 종류와 의미 (macro, weighted, micro)

scikit-learn 의 classification_report 는 분류 모델의 예측 성능을 평가하기 위해 널리 활용된다. 이진 분류일 때는 주로 소수의 클래스에 해당하는 precision, recall, f1-score 를 중요하게 본다. 그래서 함께

data-minggeul.tistory.com


3. N2M

사실상 N2M 모델 하나로 N21, N2N이 모두 커버 가능하다. 출력 결과에서 첫번째만 활용한다고 하면 N21으로 확장할 수 있을 것이고 N개만 선택해서 활용하면 N2N으로 확장이 가능하다.

참고로 decoder를 활용하는 Seq2Seq, Transformer를 auto regressive model이라고 한다.

https://lilianweng.github.io/posts/2019-01-31-lm/

 

이런 N2M task의 예로 번역, 대화, summarization가 있다.

N2M 문제를 풀기 위해 항상 encoder-decoder 구조를 채택해야 하는 것은 아니다.

Encoder only (BERT, ALBERT, ELECTRA, RoBERTa) 모델들 같은 경우 bidirection을 활용하는 경우가 많다. 주로 classification에 많이 쓰인다. Masked language Model, Next Sentence Prediction 방식으로 모델이 학습된다.

Decoder only (GPT-1, GPT-2, GPT-3)는 단방향으로 정보를 취합한다. 그래서 전체 문장을 요약하는 정보는 주로 제일 끝단의 결과이다. 생성 문제에 주로 활용된다. 입력 단어가 들어오면 다음 단어를 예측하도록(auto-regression) 학습된다. A 이후에 robot이 나왔다면 A robot을 넣어서 다음 단어 may를 예측하고 다시 A robot may를 넣어서 다음 단어를 예측한다.

 

Encoder-decoder를 활용한 모델에는 T5, BART 등이 있다.

 

decoding시에 다양한 decoding strategy를 적용할 수 있다. decoder가 내뱉는 확률값들 중에 누굴 선택할지를 선택하는 전략이다. greedy, beam, brute force 외에도 여러가지 방법이 있다.

- N-gram penalty : 동일한 단어가 반복적으로 N번 이상 반복되지 않도록 제한

- sampling : 단어 선택시 창의성을 부여하기 위해 랜덤성 부여

 

4. Multi Modal

텍스트 이외의 다른 도메인과의 응용 분야이다. encoder-decoder 구조를 조금만 바꾸면 image captioning과 같은 Multi modal training도 가능하다. 

 

 

* 요즘 연구와 현업의 트렌드는 대규모 신경망(ex transformer)을 어떤 데이터를 이용하여 어떤 문제를 위해 훈련시키는가 그래서 얼마나 잘 해결하는가이다. 이를 표현학습(Representation Learning)이라고 한다.

728x90
반응형