자연어처리(7)
-
Attention(어텐션)
이번 포스팅은 seq2seq의 개선에 이어 Decoder위주로 설명을 할 것이다. 이번 장에서 완성되는 어텐션은 seq2seq처리에서 아주 강력한 기능을 보이고 있으며 그 구조도 상당히 직관적이다. 어텐션을 짧게 표현하자면 넘어오는 데이터중 필요한 정보만 "주목"시키는 기술이다. 이 말을 이해하기 위해서 천천히 구조를 파악해보도록 하자. Encoder개선 Encoder부분 Attention은 전 포스팅에 글을 올려놨지만 이번 글이 어텐션이 주제인 만큼 간단하게 짚고 넘어 가겠다. Encoder파트 attention의 주된역할은 고정길이 벡터 개선이였다. 시계열 데이터가 커지면 커질 수록 고정길이 벡터는 입력데이터를 표현하기 점점 어려워 지기 때문이다. 그렇기에 입력데이터에 따른 크기의 유동적인 조절이 필..
2021.08.17 -
Seq2Seq 개선 (Reverse, Peeky, Attention-어텐션)
이번 장에서는 앞에서 설명한 seq2seq의 구조를 살짝 변경해 성능을 올리는 기술을 설명 하겠다. 구조자체는 간단한 기술이라서 설명할 것이 많지 않기에 가볍게 봐주었으면 좋겠다. 하지만 이장 마지막에 나올 어텐션 기술을 위한 고정길이 벡터 개선 부분은 매우 중요한 기술이니 정확이 이해하는 것을 추천한다. 입력 데이터 반전(Reverse) 제목그대로 우리가 시계열 데이터 xs를 모델에 입력을 할 때 그 입력데이터의 순서를 반전 시켜 주는 것이 하나의 방법이 될 수 있다. 반전의 형식은 모든 행마다 열부분을 반전 시켜주는 것인데 예를들어 "나는 밥을 먹는다."가 입력이 되면 ".먹는다 밥을 나는" 가 입력값이 되는 것이다. 아이디어 자체는 어려운게 없어서 구현부는 설명을 패스 하겠지만 왜 이 기술이 효과 ..
2021.08.14 -
seq2seq(Sequence to Sequence)
지금까지 우리는 단어의 분산표현과 언어모델들을 공부하였다. 특히 전 장에서 LSTM의 구조를 배웠다. 이제 이 언어모델을 실제 활용 하여 AI에게 새로운 문장을 만들게 할 수 있게되었다. 그리고 언어모델의 구조를 응용하여 챗봇이나 번역시스템등 여러가지 활용이 가능하다는 것을 이번에 알게 되었다. 이번 장에서 포스팅 할 내용은 Encoder와 Decoder의 구조와 그 2개를 결합해 seq2seq 즉 시계열 데이터를 시계열 데이터로 변환하는 작업을 진행 해 볼 것이다. seq2seq의 전체모습 위 사진이 seq2seq의 전체적인 모습이다. 현재 모델의 목적은 번역이다. 구조안에 들어있는 요소들은 다 저번에 포스팅 했던 것들이라 충분히 알고있으리라 생각한다. 그렇다면 문제는 이러한 결합구조가 어떤 의미를 띄..
2021.08.04 -
LSTM(Long Short-Term Memory)
오늘은 드디어 언어모델에서 가장 중요하다면 할 수있는 LSTM을 설명하는 날이다. 현재 많은 언어모델에서 채용 되고 있으며 성능또한 우수한 기술이니 이 챕터를 시작하는 날만 손꼽아 기다렸다. LSTM의 내부구조는 그렇게 간단한 내용이 아니라 이 기술을 일반 텐서플로 책이나 간단하게 인터넷에서 모델설명만 본사람들은 당연히 블랙박스에 빠질 수 밖에 없다. 그렇기에 LSTM은 꼭 그 내부구조를 완벽하게 파악하는 것은 앞으로도 나 자신의 강력한 무기가 될 것이라고 생각한다. RNN의 한계 LSTM의 기술을 모르기 전까지 우리는 RNN을 사용해서 언어모델을 구축했었다. 하지만 RNN은 엄청나게 큰 문제가 한가지 존재한다. 바로 기울기 소실과 기울기 폭발의 문제다. 인공지능의 학습 과정은 기울기가 제일 큰 부분을 ..
2021.07.30 -
RNNLM(RNN Language Model)
이번에는 저번에 했던 RNN과 TimeRNN에 이어 TimeEmbedding,TimeAffine,TimeSoftmaxWithLoss를 만들고 이 모든걸 합쳐 RNNLM을 공부했다. 기본적으로 Time이붙으면 시계열 데이터를 처리하는 계층이라고 보면되는데 TimeRNN의 순차적인 forward로직의 포인트만 알고있으면 나머지 TimeEmbedding,TimeAffine,TimeSoftmaxWithLoss은 이미 저번에 배웠던 것에서 크게 변하는 것없이 구현가능하다. TimeEmbedding Embedding은 저번포스팅에 word2vec로직에서 나왔던 계층이다. 그 때는 단어의 분산표현을 저장할 가중치 행렬에서 단어의 인덱스를 받아 원하는 행을 뽑아오는 로직이였다. 이 TimeEmbedding또한 그 역할..
2021.07.28 -
RNN, Truncated BPTT, Time RNN
이번에는 자연어 처리에서 자주 사용되는 RNN들을 깊게 탐구했다. RNN이란 쉽게말해 순환되는 신경망, 시계열 데이처를 처리하는 신경망등이라고 할 수 있겠다. RNN은 같은 모델을 순환반복하면서 시계열 데이터를 처리하는 모델인 것이다. 이 RNN의 역전파를 끊어서 학습한 것이 Truncated BPTT이고 시계열 데이터를 학습하기 편하게하며 동시에 Truncate BPTT도 같이 이용할 수있도록 RNN을 여러개를 묶어 모델화한 것이 TimeRNN이다. RNN 위에서도 말했듯 RNN은 시계열 데이터를 처리하는 신경망이라고 할 수 있다. 시계열 데이터란 순서,순차가 있는 데이터라고 봐도 무방할 것 같다. 예를 들어 문장 "i eat apple"은 3개의 단어가 순차적으로 연결되어야 그 의미가 성립하는 시계열..
2021.07.27