Natural Language Processing(10)
-
[NLP] 단어 임베딩을 이용한 기사 분류 신경망
먼저 단어 임베딩(word embedding)이란 무엇인가? What is word embedding? Word embedding or word vector is an approach with which we represent documents and words. It is defined as a numeric vector input that allows words with similar meanings to have the same representation. It can approximate meaning and represent a word in a lower dimensional space. These can be trained much faster than the hand-built models..
2023.03.28 -
[NLP] Attention
이전 장에서는 하나의 시계열을 입력받아 다른 시계열을 출력하는 Seq2seq 모델에 대해서 살펴보았다. 이번 장에서는 NLP에서 가장 중요한 개념 중 하나인 Attention이 무엇인지 알아보고 구현해보도록 하겠다. 간단한 seq2seq 모델에서는 Encoder로부터 마지막 시점의 은닉 상태(h)만을 이어 받아 Decoder가 이 은닉상태(h)에만 의존한 채 학습을 해나갔다. 마지막 은닉상태 말고 전체 은닉상태를 활용하는 방법이 있다면 더 좋은 학습이 이루어질 수 있다. Encoder에서 생성하는 각 시점의 은닉상태들(hs)의 정보를 Decoder에게 전달하는 방법이 Attention이다. Attention은 말그대로 '주목' 이므로 Decoder가 Encoder의 어떤 시점의 은닉상태에 주목해야할지를 ..
2023.02.26 -
[NLP] Seq2seq
저번 장에서는 LSTM과 같은 모델을 통해서 게이트가 추가된 RNN 모델이 어떻게 장기 기억을 가져가는지 알아볼 수 있었다. 이번 장에서는 이 LSTM 모델을 Encoder와 Decoder라는 2가지 형태로 구현하여 하나의 시퀀스(시계열)를 다른 시퀀스로 변환하는 방법을 알아보도록 하자. seq2seq 모델은 하나의 순환 신경망(Encoder)에서 입력을 통과시켜 출력된 마지막 은닉 상태(h)를 다른 신경망(Decoder) 에 전달한다. 이 은닉 상태(h)는 입력(x)에 대한 정보를 하나로 응축시킨 데이터라고 할 수 있다. Decoder는 이 마지막 은닉 상태만을 가지고 입력에 대한 시계열을 출력한다. Encoder부터 구현해보자. class Encoder: def __init__(self, vocab_..
2023.02.26 -
[NLP] LSTM(Long Short-Term Memory)
지난 장에서는 RNN이 무엇인지 살펴보고, RNN을 통해서 어떻게 모델이 장기 기억을 가져가는지 알아보았다. 하지만 RNN은 Time이 늘어짐에 따라 역전파 과정에서 기울기 소실/폭발이 일어날 수 있다는 문제점이 있다. 이번 장에서는 이러한 문제점을 극복할 수 있는 LSTM을 알아보고 구현하도록 해보자. LSTM은 Long Short-Term Memory의 약자로 '기억 셀'이라는 요소를 통해서 시계열에서 어떤 지점을 기억하고, 잊을지에 대해서도 학습하는 더 발전된 형태의 순환신경망이다. 기존 RNN에서는 이전 타임(t-1)에서 은닉 상태(h_t-1)를 전달받아서 현재(t)의 은닉 상태(h_t)를 계산해냈다. LSTM에서는 이 중간 계산 과정에 여러가지 게이트들(f, g, i, o)을 추가해서 어떤 시점..
2023.02.25 -
[NLP] RNN(순환 신경망)
저번 장에서는 word2vec에 대해서 살펴보았다. word2vec은 타깃 단어에 대해서 주변 문맥 단어(정보)를 입력하고 이를 단서로 활용하여 타깃을 예측하는 모델이었다. word2vec의 단점은, 주변 문맥 단어를 특정 크기(ex) 2)의 윈도우로 한정 짓기 때문에 큰 맥락 관점에서 문장을 이해하지 못할 수 있다. 반면에 RNN(순환 신경망)은 각 시점(time)에 따라서 은닉 상태(hidden state)를 다음 시점(time)으로 전파함으로써 전체 문맥 정보를 기억한다는 장점을 가진 모델이다. 이제부터 순환신경망을 구현해보자. import numpy as np class RNN: def __init__(self, Wx, Wh, b): self.params = [Wx, Wh, b] self.grad..
2023.02.22 -
[NLP] word2vec 개선 - 임베딩, 네거티브 샘플링
저번 장에서 구현한 word2vec에는 문제점이 있다. 원핫 인코딩된 단어 벡터와 가중치 행렬을 곱했을 때 결국은 가중치 행렬에서 특정 행만 추출된다. 원핫 인코딩 벡터들의 모음은 결국에 대부분의 원소가 0으로 이루어진 희소행렬이기 때문에 forward 과정에서 불필요한 행렬 계산이 이루어진다. 따라서 우리는 Embedding이란 기법을 알아보고 구현에 적용해본다. 위 그림은 원 핫 인코딩된 벡터와 가중치 행렬과의 행렬 곱 과정을 보여준다. 원핫 벡터는 특정 열만 1을 가지고 있기 때문에 행렬 곱에서 결국 가중치 행렬의 특정 행만 추출하기 때문에 굳이 행렬 곱을 하지 않더라도 행만 추출하면 행렬 곱을 한 것과 같은 효과를 얻을 수 있다. class Embedding: def __init__(self, W..
2023.02.19