Project Overview
이 프로젝트에서는 Code Translation을 잘 수행하기 위해 모델 선택, 학습 방식에서 다양한 방법론을 코드로 구현해보고, 그 결과를 분석합니다. 모델로는 기본적인 Transformer부터, Seq2Seq 사전학습 모델, 그리고 GPT 계열의 사전학습 모델을 변인으로 삼고, 학습방식에서는 기본적인 MLE방식의 학습과, 더 나은 생성을 위한 추가 학습까지 진행하며 그 결과를 도출합니다. 결과적으로 사전학습 모델을 기본적인 학습방식으로 사용했을때 가장 좋은 성능을 보였으며, 사용자가 원하는 코드 번역 과제에서도 실제 적용가능한 가능성을 확인했습니다.
  1.   Introduction
- Description
- Objective
- 사전학습 인코더 모델을 생성과제에서 사용하기 위한 지식 습득
- 세 가지 방법론의 성능 비교 검증
- 실험 결과를 통해, 이후 자연어 생성을 위한 모델링 다양성 확보
Code Generation이라고 불리기도 하는 Code Translation은 자연어 시퀀스 입력값을 받아, 입력 시퀀스가 의미하는 바를 제대로 구현하는 프로그래밍 언어 시퀀스를 반환하는 과제입니다. 최근 ChatGPT등 딥러닝 모델을 통한 Code Translation은 Code Translation은 사람의 자연어를 컴퓨터의 프로그래밍 언어로 변환하는 작업입니다. 프로그래밍 언어의 진입장벽을 낮추기도 하고, 개발자들 역시, 간편한 작업을 위해 최근 각광받는 Task입니다. 자연어-자연어 번역보다는 생소하기 때문에, Code Translation이라는 Task 자체에 집중해서, 기본 Transformer model에서, 그리고 사전학습 모델에서, 그리고 특정 학습기법을 사용하는 방식에 따라서 어떻게 달라지는지 다양한 면모를 직접 확인해보고 인사이트를 공유하려고 합니다.
  2.   Model
- Standard Transformer
- Evolved Transformer
- Code BERT Fusion
- Code T5
- Code LLaMA
프로젝트의 실험에서는 한국어-영어 번역과제를 선정했습니다. 이를 위한 데이터 셋으로는 Ai Hub의 공개데이터를 사용했습니다. 총 10개의 세부 항목으로 나누어진 데이터 중, 가장 범용적인 언어 표현 도메인으로 이루어진 000 데이터 들을 사용합니다. 총 데이터 개수는 000개이며, 이 중, 학습, 검증, 테스트 데이터 셋으로 각각 000 개씩 사용합니다. 데이터 예시는 아래와 같습니다.
PLE Fused Model은 "Incorporating BERT into Neural Machine Translation" 논문에서 제시한 모델 구조를 사용합니다. 사전학습된 인코더 모델을 그대로 인코더로만 사용하는것이 아니라, 인코딩과 디코딩 과정에 추가적인 정보전달을 위한 모델로 활용합니다.
PLE Fused Model은 "Incorporating BERT into Neural Machine Translation" 논문에서 제시한 모델 구조를 사용합니다. 사전학습된 인코더 모델을 그대로 인코더로만 사용하는것이 아니라, 인코딩과 디코딩 과정에 추가적인 정보전달을 위한 모델로 활용합니다.
PLE Fused Model은 "Incorporating BERT into Neural Machine Translation" 논문에서 제시한 모델 구조를 사용합니다. 사전학습된 인코더 모델을 그대로 인코더로만 사용하는것이 아니라, 인코딩과 디코딩 과정에 추가적인 정보전달을 위한 모델로 활용합니다.
PLE Fused Model은 "Incorporating BERT into Neural Machine Translation" 논문에서 제시한 모델 구조를 사용합니다. 사전학습된 인코더 모델을 그대로 인코더로만 사용하는것이 아니라, 인코딩과 디코딩 과정에 추가적인 정보전달을 위한 모델로 활용합니다.
  3.   Experimental Setup
- Data Setup
- Dataset: Conala
- Dialogue Task: Daily Dialogue
- Summarization Task: CNN Daily
- Tokenizer: AlBERT Tokenizer
- Train Data Volumn: 50,000
- Valid Data Volumn: 5,000
- Test Data Volumn: 100
- Vocab Size: 10,000
- Model Setup
- PLE Architecture: AlBERT
- PLE Name: albert-v2
- Input Dim: 10,000
- Output Dim: 10,000
- Embedding Dim: 512
- Hidden Dim: 512
- Model Params: 000
- Model Size: 000
- Training Setup
- Num Epochs: 10
- Batch Size: 32
- Learning Rate: 5e-4
- LR Scheduler: pleature
- Optimizer: AdamW
- Gradient Accumulation Steps: 4
- Teacher Forcing Ratio: 0.5
  5.   Result
- Machine Translation
- Result Analysis
Model Type | Eval Score | Epoch Time | Avg GPU | Max GPU |
---|---|---|---|---|
RNN Model | 2.12 | 3m 58s | 0.22GB | 0.82GB |
LSTM Model | 8.35 | 4m 16s | 0.27GB | 1.30GB |
GRU Model | 9.75 | 4m 6s | 0.26GB | 1.16GB |
RNN은 다양한 정보를 함유하기에 지나치게 단순하고, LSTM은 GATE구조가 복잡하기에, 그만큼 영향을 받은 요소가 많아 학습 수렴이 어렵습니다. 때문에 모든 학습 결과에서는 GATE를 사용하면서도 단순화된 연산으로 학습의 이점이 큰 GRU가 가장 뛰어난 성능을 보임을 알 수 있습니다.
  5.   Conclusion
- RNN, LSTM, GRU 을 활용한 seq2seq 모델링 방식의 이해
- 세 가지 순환 신경망의 성능 비교 검증
- 가설 검증
- LSTM, GRU, RNN 순으로 높은 성능
- RNN, GRU, LSTM 순으로 빠른 학습
LSTM의 연산과정이 가장 복잡하고, 다양한 GATE를 사용하기 떄문에, 좋은 성능을 낼 것이라고 예측했으나, 되려 복잡한 연산으로 인해, 학습 시 수렴에 어려움이 생겼습니다. 오히려 GATE를 사용하면서도, 연산의 단순화를 도모한 GRU의 학습 성능이 가장 좋은 것을 확인했습니다
학습 속도 및 GPU 사용량으로 확인해본 효율성은 가설과 마찬가지로 RNN, GRU, LSTM 순으로 나타났습니다.
- 최소 기준치 확립
토큰의 벡터 변환을 위한 Embedding Layer와 실제 연산을 위한 순환 신경망 레이어만으로 구성된 단순산 Encoder, Decoder 구조로 이루어져 있으며,
LSTM은 게이트 메커니즘을 통해 장기 의존성 문제를 해결하는 데 강점을 보입니다. 복잡한 문맥을 학습하고 기억하는 데 탁월하며, 긴 시퀀스 데이터에서 뛰어난 성능을 발휘할 수 있습니다. 하지만 LSTM은 더 많은 파라미터를 가지고 있어서 더 많은 데이터와 계산 리소스가 필요할 수 있습니다.
앞서 언급했듯이 순환 신경망을 사용한 Seq2Seq모델은 앞으로 다루게 될 다양한 Seq2Seq 모델들의 시작점입니다. 고도화 된 모델일지라도 하이퍼 파라미터 설정이나, 훈련 방식 등의 이유에서 잘못된 성능이 나올수도 있습니다. 이때, 최소한의 동작은 하는 구나 하는 판단의 근거로 다음과 같은 스코어를 활용할 수 있습니다.
기계번역 BLEU Score: 00.00, 대화 생성 Rouge Score: 00.00, 문서 요약 Rouge Score: 00.00 이하의 성능ㅇ