Rally 로 Natural Language Inference 문제 풀기
시작하기 전에 파이썬 3.6 이상이 설치되어 있는지 확인하고, 다음 명령을 실행해서 Tensor2Tensor 를 설치해주세요.
S NLI
SNLI 는 약 50 만 개의 자연어 추론 (NLI) 문제 데이터셋입니다. 각 instance 는 한 쌍의 문장 (premise 와 hypothesis)과 label (entailment, contradiction, neutral) 로 구성되어 있습니다.
Name | Value |
---|---|
Premise | A man inspects the uniform of a figure in some East Asian country. |
Hypothesis | The man is sleeping. |
Label | contradiction |
이 자습서는 SNLI 문제를 풀기 위해 Decomposable Attention Model (Parikh et al, 2017) 을 사용합니다.
디렉토리 설정
tmp_dir
: SNLI 데이터셋을 다운로드할 위치data_dir
: SNLI 데이터셋과 vocab 을 저장할 위치train_dir
: Decomposable Attention 모델을 저장할 위치
데이터셋 준비
먼저 데이터셋을 가져와서 변환하는 Problem
를 정의해야 합니다. 여기서는 Rally 에 구현되어 있는 SNLI
를 사용합니다.
훈련 데이터셋의 토큰 ID 를 문자열로 변환해서 내용을 확인해봅니다.
연습 1
Problem.feature_encoders
는 <feature name, TextEncoder
> 의 Dict
를 반환하는 함수입니다. 여기서 TextEncoder
는 입력/출력을 encode
/decode
하는 클래스입니다.
예를 들어 Rally 의 SentencePairClassificationProblem
는 feature_encoders
를 다음과 같이 구현합니다.
get_or_create_vocab
의 기본 구현은 vocab_type == SUBWORD
일 경우 SubwordTextEncoder
를 만듭니다. 그리고 SubwordTextEncoder
는 wordpiece 를 사용해서 입력/출력을 encode
/decode
합니다.
만약 다른 TextEncoder
를 사용하고 싶다면 get_or_create_vocab
을 오버라이드하면 됩니다.
질문: 문자(character) 수준의 모델을 위한 Problem
을 만들고 싶다면 어떻게 해야 할까요? (아래 빈 칸을 채우십시오.)
모델
모델은 T2TModel
를 상속받아서 구현해야 합니다. 대부분의 경우 body
만 구현하면 됩니다. SNLI 문제를 위해 우리는 Decomposable Attention 모델을 사용할 것입니다.
연습 2
다음은 LSTM encoder 를 사용하지 않는 Decomposable Attention 의 모델 클래스입니다. 여기에 Bidirectional LSTM encoder 를 추가해보세요.
사전 훈련된 모델과 동일한 hyperparameter 를 정의합니다.
사전 훈련된 모델의 checkpoint 는 train_dir
에 있어야 합니다.
사전 훈련된 모델로 예측해봅니다.