부스트캠프 week6 추가학습

Dae Hee Lee·2021년 9월 11일
0

BoostCamp_NLP

목록 보기
7/14

Ubuntu Mecab 설치하기

Mac에서는 다소 쉽게 설치가 가능하지만, window나 ubuntu에서는 Jdk를 설치해야하는 번거로움과 추가적인 설정이 필요해 불편함이 있다. 이를 해결하는 깃허브 설명하는 링크를 공유한다.

Ubuntu 18.04 Mecab 설치

코드 리뷰

이 코드에서 나온 여러가지 코드들을 리뷰해보려한다.

RNN을 이용한 언어모델을 만드는 코드이며, RNNModel 코드에서 forward에 해당하는 코드를 살펴보자.

def forward(self, input, hidden):
        emb = self.drop(self.encoder(input))
        output, hidden = self.rnn(emb, hidden)
        output = self.drop(output)
        decoded = self.decoder(output)
        decoded = decoded.view(-1, self.ntoken)
        return F.log_softmax(decoded, dim=1), hidden

RNN에 input과 hidden_state을 넣어준다. 여기서 각각의 Dimension은 다음과 같다.

Input : (Seq_length, Batch)
hidden : (Num_layers×\timesdir, Batch, Hidden_dimension)

이 때, Input은 Encoder를 통과하게 되는데, Encoder는 nn.Embedding을 사용해서 단어 벡터를 embedding dim에 맞게 바꿔준다. 따라서 emb의 dimension은 아래와 같다.

Emb:(Sequence Length,Batch size,Embedding dimension)Emb : (Sequence\ Length, Batch\ size, Embedding\ dimension)

이 때, output은 각 타임스텝의 hidden states가 모여있는 형태로 나오게 된다.

그 다음 언어모델에 맞게 각 타임스텝의 hidden state들을 decoding해주는 과정을 거친다. decoding은 Hidden_dim×\timesntokens nn.Linear 선형 변환 모듈이며, 결과에 대한 Softmax를 통해 특정 단어로 변환해준다. decoded는 결과적으로 (Seq_length, Batch, ntoken)의 형태이고 이를 view 함수를 써서 (-1, ntoken)의 2차원 데이터로 변환해준다.

예를 들어, Seq_len이 35, batch_size가 20, Num_layers×\timesdir가 1, ntoken이 3000이라고 가정하면
Input:(35,20)Decoded(최종):(700,3000)Input : (35, 20)\\ Decoded(최종) : (700, 3000)

즉, 이 모델을 통해 어떠한 Seq_len를 가진 batch_size만큼의 문장 데이터들을 입력으로 받으면, 해당하는 단어들의 다음에 올 단어를 미리 지정해놓은 Corpus의 사이즈(ntoken)에 맞게 예측해주게 되는 것이다.

NSMC 적용 모델

  1. NSMC EDA
  2. dataset, main, model파일 분리
profile
Today is the day

0개의 댓글