새소식

인기 검색어

TL

20/08/30 TL. GloVe, LSTM

  • -

오늘 할 일

NLP 실습 강의 코드 분석

매일 태깅

매일 독서 - 더블린 사람들

매일 영단어

 

내일 할 일

NLP 실습 강의 코드 분석

매일 태깅

태깅 피드백

매일 독서 - 더블린 사람들

매일 영단어


academic.naver.com/article.naver?doc_id=605217742

 

네이버 학술정보

은행의 텔레마케팅 성공 여부 예측 모형 구축

academic.naver.com

%%time
def read_data(filename):
    with codecs.open(filename, 'r', 'utf-8') as f:
        data = [line.split(' ') for line in f.read().splitlines()]
    return data
        
data = read_data('/content/gdrive/My Drive/자연어 처리 및 BERT 실습/wiki/wiki.txt')

print(len(data))
print(data[0])

이런식으로 데이터를 읽어오면 우아하게 처리할 수 있다. [~ for i in ~]이런 형식.

%%time 써놓으면 연산시간 이런걸 알려준다.

jaejunyoo.blogspot.com/2017/01/backpropagation.html

 

Backpropagation 설명 예제와 함께 완전히 이해하기

쉽게 설명하는 기계학습(machine learning) 개념, 역전파(backpropagation) 예제와 함께 완전히 이해하기

jaejunyoo.blogspot.com

medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b#.lzeb58ksq

 

Yes you should understand backprop

When we offered CS231n (Deep Learning class) at Stanford, we intentionally designed the programming assignments to include explicit…

medium.com


logp(o|c)
c : 중심단어, o : 주변 단어, v : W의 행벡터, u : W'의 열벡터

GloVe
문서 전체의 통계정보(co-occurrent matrix) 사용
co-occureent matrix : 특정 단어를 기준으로 주변에 단어들이 몇번 나왔는지를 count한 matrix
학습이 빠르고, 작은 말뭉치에도 잘 적용됨.
->근데 사실 word2vec이랑 크게 다를 바 없어서 둘 다 해봄.

pij = P(j|i) : i가 나타났을 때, j가 등장할 확률.
P의 i번째 행 중에서 j index 즉, P의 i행 모두를 더해서 분모로 만들고, Pj를 분자로 만들면 된다.
f(Pij)를 사용하는 이유는, 너무 자주 인접하게 나오는 단어들을 보정해주려고.

지수함수적으로 값 변동이 크므로 log연산을 해준다.

Doc2Vec : 문서를 단어의 벡터 공간에 임베딩하여 벡터화.
1.문서 하나를 벡터로 취급.
->워드임베딩이나 진배없다.
2.paragraph id만 보고 예측해보는 task
->paragraph 자체만으로도 벡터 취급
같은 문장 내의 단어들은 유사성 높아짐.

MLP
문장 단어 수(length)가 고정된 경우에만
->현실적으로 불가능

CNN
hidden representaion이 문장 길이에 비례해서 커지는게 문제

RNN에서
activation function으로 tanh를 주로 이용.
h(t) = tan(h)(W(hh)h(t-1) + W(xh)x(t))

W(hh) : h * h
=> hideen에서 hidden으로 가야 하니까.
W(xh) : h * x
W(hy) : y * h

gradient vanishing : gradient가 너무 작아져서 계산을 해도 차이가 없어지는 경우
->error가 나지 않기 때문에 해결하기가 어려움
gradient exploding : gradient가 너무 커져서 계산할 수가 없어짐.

sigmoid 미분 -> y(1-y) <= 1/4
=> time step을 10번만 해도 1/2^20 => 백만분의 1보다도 작아짐!

gradient vanishing을 해결하기 위해 LSTM이 고안

gradient exploding을 해결하기 위해 clip gradient 이용


LSTM : long term dependencies를 극복
고속도로를 하나 뚫어서, long term memory를 전달하는 길을 만들어줌.

forget gate : cell state로 들어온 long term memory를 잊어버릴건지, 넘겨줄건지 결정. 0 <= f(t) <= 1. 0일수록 잊고 1일수록 기억.
->이전의 정보와 현재의 정보를 비교해서 이전의 정보중 필요 없다고 판단되는 것들을 날리는 듯. 유사도 검사?

input gate : 새로운 input에 대한 정보를 얼마나 전달할지.
0<= i(t) <= 1. 실제 새로운 정보 C(t)
(i(t)는 새로운 정보를 얼마나 반영할지라고 생각)
forget gate와 Cell state를 반영해서 새로운 Cell state를 갱신
C(t) = f(t) * C(t-1) + i(t) * ~C(t)

output gate : cell state의 얼만큼을 output으로 내보낼지 결정. 0 <= o(t) <= 1. 기존 cell state를 update해서 어떤게 올지를 예측할 수 있도록.
h(t) = o(t) * tanh(C(t))

highway network에서는 단순연산만 일어나므로 gradient의 변화가 크게 없다.

 

GRU : RNN cell 중 하나.


attention : 
decoder에서 나온 hidden vector와 encoder에서 나온 출력들로 attention scores를 계산한 후 softmax 취해서 attention 분포를 구한 후 weighted sum하면 attention output구할 수 있다. 이 attention output과 decoder output으로 output을 구한다.

seq2seq에서 attention 활용 가능.
seq2seq trainning 과정
1. encoding 과정에서 src sentence를 읽고, 어떤 context vector를 만들지 판단
2. decoder에서 각 step마다 attention과정을 거쳐, 어떤 토큰을 관심있게 바라보고, 다음에 무엇을 generate할지 본다.
3. decoder에서 다음 타겟 토큰을 생성해내는 걸 반복해서 타겟 sentece를 생성해냄.

처음 나온 token이 잘못 나오면 그것의 영향을 받아 다음 token도 잘못 나올 확률이 크다.
->teacher forcing으로 극복.

seq2seq의 long term dependency 문제 극복하기 위해 attention 적용

pytorch에서 view는 tensor를 reshape하겠다는 뜻.


t1.view(-1,1)에서 -1는 들어올 값에 대해서 파이토치에게 판단해서 넣도록 맡기는 것.

들어온 값이 3 * 4 꼴이면 12 * 1 꼴로 뱉도록 유도한다는 것.

'TL' 카테고리의 다른 글

20/09/02 TL. 컴파일러 Front End - Back End 구성 요소  (1) 2020.09.02
20/09/01 TL.  (0) 2020.09.01
20/08/29 TL.  (0) 2020.08.29
20/08/28 TL.  (0) 2020.08.28
20/08/27 TL. DL 기반 NLP  (0) 2020.08.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.