You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
생성 요약 태스크에서 단일 모델 기준 성능이 좋은 Bart를 decoder와,
최대 문서 길이가 약 2000정도인 입력 정보를 받기 위한 longformer의 encoder를 결합한 모델을 생성
longformer의 sliding window attention과 global attention을 통하여 input에 대한 local 및 global 정보를 학습
또한, 입력 문서가 논문/뉴스/사설잡지로 나뉘므로, 문서 타입에 따른 문체 및 제목 유형을 학습하기 위해 document embedding을 추가
2. Model 흐름
LongformerBartWithDoctypeForConditionalGeneration class/
├──LongformerBartEncoderWithDocType class
│ ├── doc_type_shared(=document type embedding) class
│ ├── LongformerBartEncoderLayer class
├──BartDecoder class
│ ├── BartDecoderLayer class
3. modeling_longformerbart.py 구조
LongformerBartConfig
기존 BartConfig에 Longformer Attention을 위한 요소들을 추가 기입하였습니다.
encoder는 longformer의 encoder로, sliding window 방식의 local attention과 기존에 알던 (global) attention을 사용합니다. 단, global attention은 local attention에 비해 매우 작은, 예를 들어 특정 special token 들을 지정하여 사용합니다. 하지만 코드 상에서 따로 global attention을 지정하지 않을 경우, padding idx가 아닌 모든 tokens을 선택하므로 이 부분을 지정해줘야 합니다.
저희는 이 부분을, text의 시작과 끝인 bos_token/eos_token을 global attention으로 지정하기로 하여 저희가 만든 get_is_index_global_attn() 함수를 통해 해당 special token이 위치한 index 위치 정보를 생성합니다. 이후 이 값을 encoder의 self-attention에 전달하여 global attention을 수행합니다.
기본적으로 ***ModelForConditionalGeneration은 Model class를 init에서 생성하지만, 저희 모델은 encoder와 decoder를 받습니다.
Scheduled Sampling for Transformers 논문에 설명한 transformer 계열의 teacher forcing 방법은 2-stage decoder가 있는데, feater forcing을 사용할 경우 첫 번째 stage는 동작하지 않고 두 번째 stage만 동작합니다. 반면 이전 time step의 output을 현재 time step의 input으로 넣는 경우, 첫 번째 stage의 decoder output을 이전 step의 output으로 보고 해당 값을 두 번째 stage의 decoder input으로 사용합니다.
다만, 이 경우 학습 step과 무관하게 teacher forcing이 랜덤하게 적용되므로, 저희는 teacher forcing scheduler를 개발하였으며, 전체 학습 step을 기준으로 현재 타임step과 비교하여 선형적으로 teacher forcing 적용 확률을 1->0까지 낮췄습니다.
추가적으로, teacher forcing을 선택적으로 적용할 수 있도록, 만약 모델 config에 전체 학습 step을 입력해주지 않았을 경우 미적용하도록 구현하였습니다.
LongformerBartWithDoctypeForConditionalGeneration의 forward()를 참고 부탁드리며, 세미나 때 따로 설명드리도록 하겠습니다.
4. processor.py 구조
추가 요소
gogamza/kobart-base-v1 에서는 tokenizer에서 자동으로 bos, eos 를 붙여주지 않기 때문에 bos, eos를 따로 구해서 tokenized된 input_ids에 붙여주었습니다.
1. 개요
최대 문서 길이가 약 2000정도인 입력 정보를 받기 위한 longformer의 encoder를 결합한 모델을 생성
2. Model 흐름
LongformerBartWithDoctypeForConditionalGeneration class/
├──LongformerBartEncoderWithDocType class
│ ├── doc_type_shared(=document type embedding) class
│ ├── LongformerBartEncoderLayer class
├──BartDecoder class
│ ├── BartDecoderLayer class
3. modeling_longformerbart.py 구조
LongformerBartConfig
LongformerSelfAttentionForBart
LongformerBartEncoderLayer
입력 인자
동작 과정
LongformerBartEncoderWithDocType
global attention으로 사용할 token ids 지정
hidden states with doc_type_ids
LongformerBartWithDoctypeForConditionalGeneration
기본적으로 ***ModelForConditionalGeneration은 Model class를 init에서 생성하지만, 저희 모델은 encoder와 decoder를 받습니다.
Scheduled Sampling for Transformers 논문에 설명한 transformer 계열의 teacher forcing 방법은 2-stage decoder가 있는데, feater forcing을 사용할 경우 첫 번째 stage는 동작하지 않고 두 번째 stage만 동작합니다. 반면 이전 time step의 output을 현재 time step의 input으로 넣는 경우, 첫 번째 stage의 decoder output을 이전 step의 output으로 보고 해당 값을 두 번째 stage의 decoder input으로 사용합니다.
다만, 이 경우 학습 step과 무관하게 teacher forcing이 랜덤하게 적용되므로, 저희는 teacher forcing scheduler를 개발하였으며, 전체 학습 step을 기준으로 현재 타임step과 비교하여 선형적으로 teacher forcing 적용 확률을 1->0까지 낮췄습니다.
추가적으로, teacher forcing을 선택적으로 적용할 수 있도록, 만약 모델 config에 전체 학습 step을 입력해주지 않았을 경우 미적용하도록 구현하였습니다.
LongformerBartWithDoctypeForConditionalGeneration의 forward()를 참고 부탁드리며, 세미나 때 따로 설명드리도록 하겠습니다.
4. processor.py 구조
추가 요소
5. data_collator.py
개요
Mask Infilling 알고리즘
6 trainer with Noam scheduler
7. pretrain.py
train.py와 다른 점
8. Shell Script
pretrain.py
train.py
The text was updated successfully, but these errors were encountered: