부스트캠프 week6 day4,5 RNN nn.module로 구현하기

Dae Hee Lee·2021년 9월 10일
0

BoostCamp_NLP

목록 보기
6/14

피어세션 일정으로 4,5일 차 동안 RNN을 nn.module을 활용해 언어 모델을 구현하고, NSMC(Naver Sentiment Movie Corpus)를 활용한 Sentiment Classifier를 구현하기로 했다.

그 전에, 언어 모델이라는 것이 구체적으로 무엇을 의미하는지 알아보고 가도록 하겠다.

딥러닝을 이용한 자연어처리 입문 中
언어 모델(Language Model, LM)은 언어라는 현상을 모델링하고자 단어 시퀀스(또는 문장)에 확률을 할당(assign)하는 모델입니다.

언어 모델을 만드는 방법은 크게는 통계를 이용한 방법과 인공 신경망을 이용한 방법으로 구분할 수 있습니다. 최근에는 통계를 이용한 방법보다는 인공 신경망을 이용한 방법이 더 좋은 성능을 보여주고 있습니다. 최근 핫한 자연어 처리의 신기술인 GPT나 BERT 또한 인공 신경망 언어 모델의 개념을 사용하여 만들어졌습니다.

정리하자면 어떠한 문서가 있을 때, 각 단어 또는 문장 시퀀스에 확률값을 부여하여 '언어'를 모델링하는 것을 의미한다. 이를 조금 더 자세히 풀어서 이야기해보자면 언어 모델은 가장 자연스러운 단어 시퀀스를 찾아내는 모델이다. 단어 시퀀스에 확률을 할당하게 하기 위해서 가장 보편적으로 사용되는 방법은 언어 모델이 이전 단어들이 주어졌을 때 다음 단어를 예측하도록 하는 것이다.

언어 모델에 -ing를 붙인 언어 모델링(Language Modeling)은 주어진 단어들로부터 아직 모르는 단어를 예측하는 작업을 말한다. 즉, 언어 모델이 이전 단어들로부터 다음 단어를 예측하는 일은 언어 모델링이다.

자연어 처리로 유명한 스탠포드 대학교에서는 언어 모델을 문법(grammar)이라고 비유하기도 한다. 언어 모델이 단어들의 조합이 얼마나 적절한지, 또는 해당 문장이 얼마나 적합한지를 알려주는 일을 하는 것이 마치 문법이 하는 일 같기 때문이다.

그렇다면 자연어 처리에서 단어 시퀀스에 확률을 할당하는 일이 왜 필요할까? 다음의 예를 살펴보자.

  • 기계 번역(Machine Translation):
    P(나는 버스를 탔다)>P(나는 버스를 태운다)P(나는\ 버스를\ 탔다) > P(\text{나는 버스를 태운다})
    : 우리가 위의 문장 중 좌측의 문장이 더 자연스럽다고 생각하는 것처럼, 언어 모델은 두 문장을 비교하여 좌측의 문장의 확률이 더 높다고 판단한다.

  • 오타 교정(Spell Correction)
    선생님이 교실로 부리나케 P(달려갔다)>P(잘려갔다)\text{선생님이 교실로 부리나케 } P(달려갔다)>P(잘려갔다)
    : 언어 모델은 두 문장을 비교하여 좌측의 문장의 확률이 더 높다고 판단한다.

  • 음성 인식(Speech Recognition)

    P(나는 메롱을 먹는다)<P(나는 메론을 먹는다)P(나는\ 메롱을\ 먹는다) < P(나는\ 메론을\ 먹는다)

    : 언어 모델은 두 문장을 비교하여 우측의 문장의 확률이 더 높다고 판단한다.

위와 같이 확률을 통해 보다 적절한 문장을 판단할 수 있기 때문에 우리는 언어 모델이라는 것을 활용하게 되는 것이다.

RNN 구현

기본적인 RNN의 구조는 다음과 같다.

각 셀에서 input data와 이전 시점의 hidden state 정보를 받아 선형 변환시킨다. 그 다음 이를 활성화함수를 취해 나온 값을 새로운 Hidden state로 갱신하면서, 타임 스텝이 끝나면 Recurrent한 구조가 끝나는 구조이다.

이 때 각 시점마다 yty_t를 출력할 수 있는데 이는 각 시점의 Hidden state에 우리가 원하는 Dimension을 가진 가중치 행렬 WhyW_{hy}를 취해서 내보낼 수 있다.
RNN의 최종 결과로 마지막 시점의 Hidden state와 output을 출력하는데, 여기서 output은 매 타임 스텝의 Hidden state를 모아놓은 리스트로 볼 수 있고, 위에서 이야기한 것과 마찬가지로 용도에 맞게 원하는 형태의 변환을 통해 나타낼 수 있다.

profile
Today is the day

0개의 댓글