NEVERTHELESS

텍스트에 대한 기본 모델링

by Ungbae

 

 

  • 텍스트를 모델이 이해할 수 있는 숫자로 바꾸는 기초 작업 프로세스
  • 초기 생성 모델(RNN / Seq2Seq)이 어떻게 작동하는가?
  • 어떤 한계를(길이 제어, 다양성 부족)를 가졌는가?

 

Word Representation - 단어의 표현

텍스트 생성의 첫걸음은 컴퓨터가 이해할 수 있도록 텍스트를 숫자로 바꾸는 것

 

One - hot Encoding(원-핫 인코딩)

세상에 단어가 10,000개 있다면, 10,000개의 차원을 가진 벡터를 만들고 해당 단어 자리에만 1, 나머지는 0을 넣는 방식

 

이렇게 하면 '나' 와 '우리' 가 '나' 와 '우주선' 보다 더 비슷한 단어라는 것을 컴퓨터가 알 수 없다. 모든 단어 간의 거리가 똑같이 때문이다. 그리고 0이 너무 많아 메모리 낭비(Sparse)가 심하다.

 

Word Embedding(Dense Representation)

단어를 고정된 크기(e.g. 128차원, 512차원 etc.)의 실수 벡터로 표현하는 것

 

'나' 와 '우리' 라는 단어가 비슷한 벡터 값을 가지도록 모델이 학습을 통해 스스로 숫자를 채워 넣게 만드는 과정

이를 위해 초기에 랜덤한 값으로 채워진 Embedding Weight Matrix를 만들고 학습시킨다.

 

 

 

UNK & PAD Token

모델 학습 시 발생하는 현실적인 문제를 해결하기 위한 장치

 

UNK (Unknown) Token

학습 데이터에 없던 단어가 테스트 때 등장하며녀 모델은 에러를 낸다. 이를 방지하기 위해 빈도가 낮은 단어나 처음 보는 단어는 [UNK] 라는 특수 토큰으로 처리한다.

 

훈련 데이터에 없는 단어(오타, 신조어 등)가 들어왔을 때 모델이 멈추지 않고 '아 이건 모르는 단어구나!' 하고 넘어가게 해주는 역할을 한다.

 

PAD(Padding) Token

여러 문장을 한꺼번에 처리(Batch Processing)하려면 문장 길이를 맞춰야 한다. 짧은 문장의 빈 공간을 채우는 의미 없는 토큰이다.

 

행렬 연산을 위해 직사각형 모양을 만들어야 하는데, 문장 길이가 들쑥날쑥하니 가장 긴 문장에 맞춰 나머지를 PAD 로 채워서 길이를 맞추는 것

 

 

RNN & Seq2Seq(Encoder-Decoder)

이제 숫자로 바뀐 단어들을 가지고 문장을 생성하는 모델 구조

 

RNN(Recurrent Neural Network)

순차적으로 들어오는 데이터를 처리하기 위해 이전 단계의 정보(Hidden State)를 현재 단계로 넘겨주는 구조

 

Seq2Seq(Encoder-Decoder)

입력 문장을 이해하는 인코더(Encoder)와 문장을 생성하는 디코더(Decoder)로 나뉜다.

 

인코더는 문장을 다 읽고 하나의 압축된 정보(Context Vector)를 만든다. 디코더는 이 정보를 바탕으로 첫 단어부터 끝 단어(EOS)까지 순차적으로 생성해낸다.

 

 


******생성 제어와 해석(Mechanistic Interprertability)******

 

모델이 어떻게 길이를 알고 멈추는걸까?

 

 

 

 

 

 

Problem & Motivation

Seq2Seq 모델은 우리가 "50자로 요약해달라" 라고 해도 길이를 제어할 수 없다. 학습 데이터의 길이 분포를 그대로 따라갈 뿐이다.

 

Linear Proving 연구결과

모델 내부를 뜯어보니(Proving), 특정 뉴런(Unit)들이 지금 몇 번째 단어를 생성 중인지 카운팅 하고 있다는 것을 발견

인코딩할 때는 값이 점점 음수로 변하고, 디코딩할 때는 다시 앙수로 변하면서 0이 될 때 문장 생성(EOS)을 멈추는 패턴이 발견

 

Length Control 길이 제어 방법

이 원리를 이용하여 input에 원하는 길이 라는 숫자 정보를 함께 넣어주거나, 디코더의 초기 상태에 길이 정보를 주입하여 생성 길이를 강제로 조절하는 기법들이 연구되었다.

 

 


디코딩 전략(Decodin Strategy)

모델이 확률값(Logit)을 뱉어냈을 때, 실제로 어떤 단어를 선택할지 결정하는 방법

 

Greedy Search

매 순간 확률이 가장 높은 단어 1개만 선택. 빠르지만, 전체적으로 봤을 때 최적의 문장이 아닐 수 있다.

 

Beam Search

매 순간 상위 K개의 가능성을 살려두고 끝까지 가본 뒤 가장 좋은 문장을 선택

 

Diverse Beam Search

일반 Beam Search는 5개의 후보를 뽑아도 단어 한두 개만 다른 뻔한 문장들만 나온다는 문제점

비슷한 단어 구성이 나오면 패널티를 주어, 강제로 다양성이 높은 문장들이 뽑히도록 유도하는 방법으로 해결

 

 

 

블로그의 정보

그럼에도 불구하고

Ungbae

활동하기