머신러닝

이번 포스팅은 자연어 처리와 머신러닝이 어떻게 결합되는지에 대해 간단히 알아볼 예정이다.

작년부터 Sung Kim 교수님의 강좌 Tensorflow를 이용한 Linear-regression,

Multi-variable-regression, Logistic-regression이나

Microsoft Cortana에서 소개되는 API도 각각의 상황에서 머신러닝으로 잘 활용되고 있지만,

자연어 처리에 높은 효율을 보여주는 알고리즘 중에 대표적인 것은 Recurrent Neural Network이다.

RNN

RNN에 앞서, Neural Network는 사람의 신경계와 같이 다양한 정보 처리를 위한 다중 계층 방식이며

XOR 문제를 해결하기 위해 등장했다. (자세한 소개는 다음 기회에 작성하겠다)

여기서 포인트는 다중 계층 방식이며, RNN은 이에 더해서 앞의 계층의 파라미터가

다음 계층이 영향을 미친다는 개념에서 Recurrent가 추가되었다.

그림

기존 신경망 구조는 각 계층이 독립적이라고 가정하지만, RNN은 앞 계층이 뒤 계층에 영향을 미친다는 전제로 시작한다.

그림에서 볼 수 있듯,

X(t-1)과 X(t), X(t+1)은 각각 recurrent한 연결을 가지고 있으며 parameter로 weight를 전달한다.

예를 들어, ‘캘리는 일정을 분석하여 데이터를 추천하는 서비스입니다.’라는 문장에서

‘일정을’은 ‘분석하여’와, ‘데이터를’은 ‘추천하는’과 연관이 있기 때문이다.

이러한 시간 스텝이 반영된다는 점은 언어 모델링을 통해 뉴스 리딩과 같은 문장에 대해 더 높은 효율을 기대할 수 있다.

하지만 이 알고리즘은 Backpropgation Through Time (BPTT)라는 이슈도 가지고 있으며,

그 외에도 우리 캘리 서비스에는 맞지 않을 것으로 예상된다.

각각에 대한 조금 더 자세한 내용은 다음 포스팅에서 서술 하겠다.