텍스트 데이터 전처리 과정

불필요한 문자 제거

  • 특수문자 및 불용어 제거
  • 목적에 부합하지 않는 데이터 제거

토큰화

단어 / 형태소 / 문자로 분리

  • 언어별로 다 다른 형태소를 가지기때문에 모든 언어에 동일하게 적용가능한 형태소 분리 로직을 만드는 것은 불가능에 가까움

바이트페어

  • 데이터 기반 접근법을 사용하여 일반적으로 형태소나 단어 크기의 단위가 되면서도, 때로는 문자처럼 작은 단위도 활용하는 토큰을 정의하는 것
  • 단어보다 작은 단위인 서브워드(subwords)를 포함하는 토큰 집합을 자동으로 유도
  • 미등록어 문제도 해결 가능
  • 정의하는 토큰 개수가 적을수록 빈도가 높은 글자만 가져오는데 이는 글자가 짧은 단어를 우선으로 가져오는 현상을 야기함
  • 정의하는 토큰 개수가 너무 많으면 반대로 비슷한 의미의 살짝 다른 단어가 다 따로 토큰화가 되어 효율이 떨어짐

룩업 테이블

  • 위의 토큰화는 텍스트를 적절하게 잘라서 이를 정수화하기까지임
  • 학습에 사용하기 위해서는 이를 가중치 행렬화 시켜야 함
  • [전체 사전 크기 * 원하는 벡터 차원] 크기의 무작위 가중치 행렬 (Weight Matrix) 를 만든 후 서로 뜻이 비슷한 단어들은 룩업 테이블 안에서 비슷한 소수점 형태 값을 가지도록 학습됨

FastText vs Word2Vec

비교 항목Word2VecFastText
단어 처리 단위단어 전체 (개별 토큰)서브워드 (Character n-gram)
OOV 문제 대응대응 불가 (학습 데이터에 없으면 벡터 추출 불가)대응 가능 (처음 본 단어도 subword를 조합해 벡터 생성)
희귀 단어/오타 처리학습이 제대로 되지 않아 임베딩 정확도 낮음유사한 subword를 공유하므로 높은 정확도 유지
연산량 및 메모리상대적으로 적음Subword 개수만큼 연산량과 메모리 요구량 증가
적합한 언어 특성영어와 같이 굴절이 적은 언어한국어(조사/어미 변화), 복합어가 많은 언어
추천 데이터이미 editing 이 들어간 정제된 글 (뉴스, 책, 논문 등)정제되지 않은 글 (채팅, social media 포스팅 글 등)
장점임베딩 모델 용량이 작고 가벼움오타/신조어 등 정제되지 않은 글 역시 테이블화 가능
단점오타 및 신조어의 경우 테이블에서 찾을 수 없기때문에 단어를 밀집 벡터 공간에 위치시키는 임베딩 불가모델 용량이 커서 메모리가 많이 필요함

Seq2Seq

  • 토큰 길이가 길어져 RNN 내부 레이어가 많아졌을 때 실제로 서로 관계있는 토큰간 거리가 멀어지면서 관계성이 희석됨
  • Context Vector 와 멀리 떨어진 인코더의 앞부분 의미는 Context Vector 에서 희석됨과 동시에 역전파 시 가중치를 효과적으로 업데이트하지 못함 (정보 표현의 병목)

Attention mechanism

  • 어텐션 구조의 도입으로 디코더에서 도출되는 각 시점의 값(output N)은 인코더 각 시점의 은닉 상태(hidden state N)을 현재 문맥에 필요한 연관성 확률과 함께 직접 사용하기 때문에 정보 표현의 병목이 해결됨 -> 성능 증가
  • 그러나 여전히 학습 속도 병목현상은 개선하지 못함 (RNN 의 구조적 한계)

Transformer

Self-Attention mechanism

  • 기존 seq2seq 에서 RNN의 구조적 한계를 타파하기위해 RNN 을 완전 제거 -> 인코더에서는 모든 토큰이 서로를 참조할 수 있는 룩업테이블같은 행렬(Query-Key Lookup, Attention Map)을 가짐
  • 위의 어텐션 맵은 입력값이 들어올때마다 실시간으로 토큰끼리 곱해서 만들어지는 행렬. 학습으로 업데이트되는 고정된 가중치 행렬과는 다름.
  • 정답 문장을 통해 만들어진 어텐션 맵은 디코더에서 해당 시점 토큰의 앞에있는 토큰만 볼수있도록 마스킹하여 다음 토큰을 예측함
  • 기존 RNN 의 sequential 한 구조를 모든 토큰간의 완전 연결로 변경함으로써 병렬 학습이 가능해지고 학습 속도 병목이 사라졌지만 어텐션 맵을 만들기 위한 연산 수가 기하적으로 증가하여 GPU 의 필요성이 더욱 대두됨

Multi-head Attention

  • 기존 어텐션 구조에서 임베딩 행렬을 다수의 임베딩 방향으로 잘라 각각 FC layer 를 거치도록 하여 같은 입력을 서로 다른 레이어를 통해 묘사하도록하는 방법
  • 기존 하나의 레이어를 거치는 것 보다 더 다양하게 결과를 묘사할 수 있기때문에 성능 향상을 꾀할 수 있으나 (각 헤드의 차원수 고정 시)헤드 숫자에 비례하여 scale-up 되는 구조이기때문에 더 많은 학습 시간과 RAM 이 필요함.
  • 헤드 숫자를 늘리는 만큼 Embeding dimension 을 늘리지 않으면 한 종류의 레이어가 묘사하는 범위가 좁아지기때문에 오히려 기존 싱글헤드보다 못하는 상황이 발생할 수 있음.

Positional Encoding

  • 기존 RNN 구조와 다르게 어텐션 구조는 각 토큰간의 순서 정보가 없기때문에 순서를 유추할 수 있는 벡터를 더해줌으로써(Element-wise Add) 토큰화된 벡터에 순서 정보를 부여함
  • 0 ~ 최대 토큰 길이 인덱스를 각 차원마다 고유한 주기(뒤로 갈수록 점점 늘어나는 주기)를 가진 sin/cos 함수의 입력으로 사용하며, 이 값을 텐서의 짝수/홀수 번째 인덱스에 나누어 배치함으로써 모든 토큰이 고유한 위치 정보를 갖도록 보장함.

Reference

  • Jurafsky, D., & Martin, J. H. (2026). Speech and Language Processing (3rd ed. draft). stanford.edu

0개의 댓글