본문 바로가기

분류 전체보기

(155)
언어 모델의 평가 방법 - Perplexity, BLEU Score(Bilingual Evaluation Understudy Score) 1. Perplexity(PPL)■ 시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (2)에서 언어 모델(Language Model)인 Decoder가 얼마나 정확하게 번역했는지 평가하는 번역 성능 지표로 Perplexity(PPL)를 사용했다.1.1 Perplexity 의미■ 입력 데이터가 여러 개인 경우 Perplexity(PPL)의 공식은 다음과 같다. ■ 계산된 perplexity 값의 해석은 '과거 단어 다음에 출현할 수 있는 단어의 후보 수'이다. 그러므로 값이 낮을수록 모델의 예측 성능이 좋은 것으로 간주할 수 있다.- 만약 perplexity 값이 10이라면, 이는 과거 단어의 다음 단어로 출현할 수 있는 단어의 후보가 10개임을 의미한다.- perplexity 값이 ..
시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (4) 1. Seq2Seq 응용 - 이미지 캡셔닝(Image Captioning) ■ Seq2Seq는 '어떤 하나의 시계열 데이터'를 '다른 시계열 데이터'로 '변환'하는 프레임워크라고 할 수 있다.■ 시계열 데이터를 변환하는 프레임워크를 이용하여 영어-프랑스어 번역처럼 '한 언어의 문장(입력 시퀀스)'을 '다른 언어의 문장(출력 시퀀스)'으로 변환하는 "기계 번역", '긴 문장(입력 시퀀스)'을 '짧은 요약문(출력 시퀀스)'으로 변환하는 "문장 요약", '질문(입력 시퀀스)'에 대한 '응답(출력 시퀀스)'을 생성하는 "질의-응답" 등에 이용할 수 있다. ■ Seq2Seq는 2개가 짝을 이루는 시계열 데이터를 다루는 문제에도, 자연어 외에도 음성이나 영상 등에도 이용할 수 있다. 음성과 영상에도 어떤 '순서(s..
시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (3) 1. Seq2Seq 개선 ■ Seq2Seq 모델의 학습 진행 속도와 정확도를 개선할 수 있는 방법으로 입력 데이터를 반전(reverse)하는 것과 Peeky Decoder를 사용하는 방법이 있다. 1.1 Encoder에 들어가는 입력 시퀀스 반전(reverse)■ 첫 번째 방법은 Encoder에 입력되는 입력 시퀀스 데이터의 순서를 반전시켜 Encoder 모델어 입력하는 것이다. 이 기법은 단순하지만 성능을 개선시킬 수 있다.■ 입력 시퀀스 반전 기법이란, 예를 들어 '나', '는', '고양이', '로소', '이다.'라는 순서를 가지는 시퀀싀의 순서를 반전시켜 '이다', '로소', '고양이', '는', '나'와 같이 역순으로 Encoder 모델에 입력하는 것이다.■ 단순히 입력 시퀀스의 순서를 바꾸는 ..
시퀀스투시퀀스(Sequence‑to‑Sequence, seq2seq) (2) 1. Seq2Seq를 이용한 번역기 구현■ seq2seq 모델을 사용하여 기계 번역기를 구현한다. 예제로 사용한 데이터는 영어-프랑스어 텍스트 파일이다. 해당 파일은 영어와 프랑스어가 대응되는 병렬 말뭉치(parallel corpus)이다.- 병렬 말뭉치는 두 개 이상의 언어가 상호 대응되는 형태로 연결된 말뭉치이다.■ 목표는 이 병렬 말뭉치를 사용하여 입력 시퀀스인 영어를 입력하면 출력 시퀀스인 프랑스어를 출력하는 seq2seq 모델을 구현하는 것이다. 이때, 입력 시퀀스와 출력 시퀀스의 길이는 서로 다를 수 있다.1.1 전처리■ 이 텍스트 데이터는 Run!    Prenez vos jambes à vos cous !와 같이 \t(tab)을 기준으로 영어와 프랑스어로 연결되어 있으며, 악센트와 구두점이..
LSTM, GRU (2) 1. nn.LSTM( ), nn.GRU( )1.1 (일반적인) LSTM/GRU■ 파이토치에서 LSTM/GRU 셀을 사용하는 방법은 RNN 셀을 사용하려고 했을 때와 유사하다.torch.nn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, proj_size=0, device=None, dtype=None) torch.nn.GRU(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=..
LSTM, GRU (1) 1. LSTM 등장 배경■ LSTM 모델은 기존의 바닐라 RNN 모델에서 정보를 저장하는 과정을 발전시켜 바닐라 RNN의 큰 단점이었던 단기 기억만 가능하다는 부분(장기 의존성 문제)을 개선했다. ■ 이 과정에는 새로운 '기억 셀(memory cell)'인 'cell state' 구조를 제안하고 '게이트(gate)'라는 개념을 사용하여 단기 기억과 장기 기억뿐만 아니라 '망각' 개념까지 담겨 있어 인간의 기억 관리와 비슷한 부분이 있다.1.1 RNN 문제점■ 가장 단순한 형태의 RNN을 바닐라 RNN(Vanilla RNN) 또는 Simple RNN이라고 부른다. 바닐라 RNN은 다음과 같은 순환 경로를 통해 과거 시점의 정보를 계승할 수 있어 시퀀스 데이터를 다루기에 적합하다. - 바닐라 RNN은 위와 ..
RNN (2) 3. 파이토치 nn.RNN( )■ 파이토치의 torch.nn.RNN( )을 통해서 RNN 셀을 구현할 수 있으며, torch.nn.RNN( )의 파라미터를 통해 깊은 RNN과 양방향 RNN도 구현할 수 있다. 파라미터는 다음과 같다.torch.nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity='tanh', bias=True, batch_first=False, dropout=0.0, bidirectional=False, device=None, dtype=None)- input_size: 입력할 특성(feature)의 개수이다. - hidden_size: 은닉 상태 벡터의 차원이다.- num_layers:  RNN 레이어를 입력-출력 방향으로 쌓아 ..
가변 길이 인수 1. 가변 길이의 입출력 변수■ 함수에 따라 여러 개의 변수를 입력으로 받거나, 여러 개의 변수를 출력할 수 있다. 이러한 가변 길이 입출력에 대응할 수 있어야 한다. 1.1 순전파 과정에서 가변 길이 인수 처리를 위한 Function 클래스 수정1,1,1 반복 가능한(iterable) 객체 이용■ 가변 길이의 입출력에 대응하기 위해서는 다음과 같이 하나의 인수만 입력으로 받아 하나의 값만 처리하는 Function 클래스를 수정해야 한다.class Function: def __call__(self, input): x = input.data y = self.forward(x) output = Variable(as_array(y)) output.s..