일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Transformer
- Conversation System
- BLEU Score
- BoostCamp
- pytorch
- layer normalization
- multi-head attention
- bert
- huggingface
- GPT-1
- fine-tuning
- text classification
- KLUE
- NLP
- beam search
- Transformers
- 취업
- 백준
- Relation Extraction
- Chatbot
- Dialogue System
- Eliza
- MT-DNN
- KLUE-RE
- scaled dot-product attention
- ai-tech
- FSML
- Prompt Tuning with Rules for Text Classification
- boj
- BELU
- Today
- Total
dukim's blog
[WK06-Day027][21.09.08.Wed] Seq2seq with Attention, Beam Search and BLEU Score 본문
[WK06-Day027][21.09.08.Wed] Seq2seq with Attention, Beam Search and BLEU Score
eliza.dukim 2021. 9. 9. 15:48Intro
- Beam Search와 BLEU는 취약 파트라 집중해서 학습
학습 내용
1. Seq2Seq with Attention
Seq2Seq Model
- Many to Many RNN: 단어의 시퀀스를 입력받아 단어의 시퀀스를 출력하는 구조
- 인코더와 디코더로 구성됨
- 출처
Seq2Seq Model with Attention
Seq2Seq model의 문제점
- 인코더의 입력 시퀀스 전체 정보를 하나의 hidden state vector에 압축하여 디코더에 전달해야함
- LSTM에서 Long-term dependency를 해결했어도, 초반 타임 스텝의 정보는 변질되거나 소실될 수 있다.
- 따라서 이에 대한 차선책으로 입력 문장의 순서를 뒤집어 인코더에 넣는 테크닉도 제안된 바 있다.
위 문제를 해결하기 위해 Attention 기법 제안
- 인코더의 입력 문장에서 주어졌던 각각의 타임 스텝의 hidden state 벡터 $h_1, ..., h_m$ 을 전체적으로 디코더에 제공해주고, 디코더는 현재 스텝의 단어 생성에 필요한 인코더 hidden state vector를 선별적으로 가져와 예측에 도움을 주는 형태로 활용
- 출처
- 인코더의 입력 문장에서 주어졌던 각각의 타임 스텝의 hidden state 벡터 $h_1, ..., h_m$ 을 전체적으로 디코더에 제공해주고, 디코더는 현재 스텝의 단어 생성에 필요한 인코더 hidden state vector를 선별적으로 가져와 예측에 도움을 주는 형태로 활용
Seq2Seq with Attention
디코더의 hidden state vector는 output layer의 입력으로 사용됨과 동시에 인코더 입력 시퀀스의 각 단어 벡터 중 어떤 단어를 중점적으로 가져와야할지를 가중치를 결정하는 역할
출처:
학습 방식
- Training time 땐 디코더의 입력으로 Ground Truth를 넣어주는 Teacher Forcing 방식으로 학습(빠른 학습. 실상황과 괴리)
- Test time 땐 매 스텝에서 예측한 값을 다음 스텝의 입력으로 사용
- 초반엔 Teacher Forcing으로 학습, 후반엔 모델의 예측값을 입력으로 사용하는 식으로 점점 변화시켜주는 방식도 존재함
Notation
- $h_t$ : timestep $t$에서의 디코더의 hidden state vector
- $\overline{h_s}$ : 인코더의 각 단어의 hidden state vector(다른 곳에서는 $s_1, ..., s_m$로 표현하기도 함, 여기서 m은 인코더 시퀀스의 최대 길이)
- $e$ : Attention score
- $c$ : Context vector, $\overline{h_s}$에 $e$를 적용해 가중합한 벡터
Attention score를 구하는 다양한 방식
Basic dot-product attention
- attention score를 구하는 것에 대한 parameter 없이 단순 내적
Multiplicative attention(Luong et al., 2015)
- 두 벡터간의 내적 중간에 학습 가능한 parameter를 두어 내적되는 두 벡터의 각 원소 조합별 가중치를 학습하는 방식
- 일반화된 dot product, attention module의 유사도를 설정해주는 학습 가능한 parameter
Additive attention(Bahdanau et al., 2015)
- 2 layer NN으로 attention score 계산
- $W_a$: 첫번째 레이어의 선형변환
- $v_a$ : 두번째 레이어의 선형변환, 이 때 벡터에서 스칼라로 만들어야하기 때문에 이 레이어는 벡터
출처:
Attention의 장점
- NMT(Neural Machine Translation) 성능을 비약적으로 향상 시킴
- 인코더의 정보 가운데 중점적으로 사용할 정보를 선택할 수 있게 함
- Seq2Seq의 bottleneck 문제를 해결함
- 인코더의 마지막 hidden state를 사용하지 않고, 매 time step에서 인코더의 모든 time step에 대해 직접 접근 가능
- 긴 문장에 대한 번역 성능도 향상됨(Long-term dependency 문제도 해결)
- Gradient Vanishing 문제 해결
- 기존 Seq2Seq은 Back propagation시 붉은색 라인으로만 gradient가 흐르기 때문에 timestep이 길어지면서 인코더까지 gradient가 전달되기 어려움
- 그러나 Attention을 이용할 경우 초록색 라인의 gradient가 흐르는 경로가 더 생겨서 timestep과는 상관없이 인코더까지 gradient가 흐르므로 gradient가 크게 소실되지 않고 전달될 수 있음
- 해석의 용이성
- Attention의 패턴을 조사하여 모델이 디코더에서 각 단어 예측시 인코더의 어떤 단어를 집중했는지 파악할 수 있음
- Attention의 패턴을 조사하여 모델이 디코더에서 각 단어 예측시 인코더의 어떤 단어를 집중했는지 파악할 수 있음
2. Beam Search
- 생성모델에서 test time에서 보다 더 좋은 생성 결과를 얻도록 하는 기법
Greedy Decoding & Exhaustive Search
- test time에서 매 time step마다 가장 높은 확률을 지니는 단어를 선택
- 그러나 중간에 생성이 잘못된 경우엔 이후에 생성되는 문장을 되돌릴 수 없음
- 또한 매 순간에서의 확률이 최대인 단어를 선택하는 것이 전체 문장의 확률이 최대가 됨을 보장할 수 없음
- 따라서 최적해(문장의 발생확률 $P(y|x)$가 최대가 되는 문장 $y$)를 얻기 위해서는 가능한 모든 문장의 경우를 계산해 보아야하나 전체 vocab size를 $V$, 문장 길이를 $t$라 할 때 $O(V^t)$의 복잡도가 소요되어 현실적으로 이는 불가능함
Beam Search
위 두 방법의 중간지점
핵심 아이디어: 디코더의 매 스텝마다 생성확률이 가장 높은 $k$개의 가능한 후보 문장을 유지하면서 마지막 스텝에서 이 중 최대 확률을 갖는 후보를 선택
hypothesis $y$ : k개 경우에 해당하는 문장 후보
Beam size : k(보통 5 ~ 10)
전역 최적해를 보장하지는 않지만 exhaustive search보다는 효율적인 방법
Beam Search: Example
아래 링크의 p32-44 참고
https://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture08-nmt.pdf
Beam Search: Stopping Criterion
- Greedy Decoding에서는
토큰을 만나면 종료 - Beam Search Decoding에서는 각 hypothesis에서
토큰을 만나는 timestep이 다 다르기 때문에, 토큰을 만난 hypothesis는 별도의 저장공간에 저장하고, 나머지 hypothesis에 대해서 계속해서 탐색을 수행 - 미리 정한 최대 timestep $T$까지만 탐색을 수행하거나,
- 미리 정한 $n$개의 완료된 hyphothesis의 개수에 도달했을 때 탐색을 종료함
Beam Search: Finishing Up
- 완료된 hyphothesis의 목록 가운데 가장 높은 스코어를 가진 것을 선택할 때, 긴 문장일 수록 스코어가 작아지는 문제점 발생(단어가 순차적으로 생성되면서 점점 더 많은 사건들의 동시사건확률로 표현되는데 이를 표현하는 확률값은 계속 작아지게됨)
- 따라서 위 문제를 보정하기 위해서 최종 스코어를 각각의 timestep의 길이로 나누어 normalize함
3. BLEU Score
- 생성 모델의 품질 및 결과의 정확도를 평가하는 척도
Precision & Recall
NLG를 통해 target 문장을 생성하는 경우에 모델을 test할 때, 각 timestep별 모델의 softmax loss를 계산하거나 아니면 각 단어의 분류 정확도를 계산할 수 있다.
그러나 이 경우에는 특정 timestep에서 특정 ground truth가 나와야하는 가정에서 평가를 진행하게 되면 생성 단어가 하나씩 밀리는 등의 문제가 발생할 때 모델의 성능을 제대로 평가할 수 없다.
e.g.
생성한 문장 : I love you
Ground Truth : Oh I love you -> score : 0따라서 생성한 문장을 평가할 적절한 방법이 필요하기 위해 2가지의 평가방법을 생각해볼 수 있다.
Precision : 예측된 결과가 노출되었을 때 실질적으로 느끼는 정확도(e.g. 검색의 결과 중에 의도에 맞는 결과가 얼마나 포함되어있는지)
Recall : 검색 시스템에서 사용자의 요청에 해당하는 전체 정보 가운데 실제로 사용제시된 것의 비율
F-measure : 서로 다른 기준으로 계산된 두 가지의 정확도의 값을 종합해 하나의 값으로 표현
- 기하평균: 두 수의 곱에 루트를 취한 값
- 조화평균: 역수의 산술 평균의 역수
- 산술 >= 기하 >= 조화 평균 순
- 조화평균은 보다 작은 값에 가중치를 부여하는 형태로 평균을 구함
- F-measure는 조화평균을 사용
문제점: 그러나 순서가 바뀌어도 GT의 모든 단어를 포함하면 높은 점수를 냄
BLEU Score
- 위 단점을 보완하기 위해 사용되는 평가방법
- BiLingual Evaluation Understudy
- 개별 단어 수준에서 GT와 overlap 수준을 따지는 것에서 더 나아가 연속된 N개 단어에 대해서 얼마나 겹치는지를 평가
- 기본적으로 Precision만을 고려함
- Recall을 제외한 이유
- G.T.를 빠짐없이 생성하는 것을 중시하기보단 번역된 결과를 보고 체감할 수 있는 정확도만을 고려해도 되기 때문
- 생성된 문장 가운데 틀린 부분이 있으면 의미가 확연히 달라지므로
- e.g. 영어 -> 한글 번역 모델에서
- I love this movie very much -> 나는 이 영화를 (정말) 많이 사랑한다.
- very에 해당하는 (정말)을 생성하지 않아도 문제 없음
- I love this movie very much -> 나는 이 노래를 정말 많이 사랑한다.
- 영화 가 아닌 노래로 잘못 번역한 경우 의미 자체가 달라져 잘못된 번역이 됨
- I love this movie very much -> 나는 이 영화를 (정말) 많이 사랑한다.
- Recall을 제외한 이유
- 1 ~ 4 - gram 각각의 Precision을 계산한 후, 이 넷의 기하평균을 구함
- 이때 Brevity Penalty를 주어 레퍼런스 문장(GT)보다 짧은 문장을 생성한 경우에는 짧아진 길이만큼 Precision 값을 낮춰줌
- 또한 이 값은 Recall의 최대값을 말함. GT와 같거나 긴 길이의 문장이 생성된 경우 100%의 recall을 기대할 수 있는 상황이므로, 값이 1이 됨
피어세션
- 멘토링때 읽을 논문 수정, Transformer 계열의 기본 논문들(Transformer, BERT, MT-DNN, BART, 등)을 읽기로 함
- RNN, LSTM, GRU에 대한 학습 내용 공유
- Further Questions에 대한 토론
학습 회고
- 어느정도 안다고 생각했는데, 다시 돌아보니 모르는 내용이 투성이다. 명훈님이 말씀해주신 RNN/LSTM/GRU 구조를 변형시키지 않고 Vanishing Gradient를 완화시키는 방법들은 처음 들어봐서 시간 날 때 해당 파트를 읽어볼 필요가 있다.
'Boostcamp AI Tech 2th' 카테고리의 다른 글
[WK06-Day029][21.09.10.Fri] 멘토링(NLP 분야 논문 읽기 팁), 오피스 아워 (0) | 2021.09.12 |
---|---|
[WK06-Day028][21.09.09.Thu] 팀 결성, BLEU Score 추가 학습, Beam Search HF 구현체 뜯기 (0) | 2021.09.12 |
[WK06-Day026][21.09.07.Tue] RNN, LSTM, GRU, 필수과제 1, 2, 3 (0) | 2021.09.09 |
[WK06-Day025][21.09.06.Mon] Level-2 NLP U-Stage 시작, Intro to NLP, BoW, W2V (2) | 2021.09.06 |
[WK05] P-Stage level 1 마스크 이미지 분류 대회 도전기 (0) | 2021.09.06 |