본문 바로가기

알고리즘/한국어 임베딩 리뷰

한국어 임베딩 : 1장

임베딩이란?

  임베딩(embedding)은 자연어를 벡터로 바꾼 결과물, 혹은 벡터로 바꾸는 일련의 과정을 의미한다. 임베딩만 잘하면 어떤 모델을 써도 성능이 보장되고, 임베딩을 못하면 아무리 좋은 모델을 써도 좋은 결과를 얻기 힘들다고 한다. 그렇다면 좋은 임베딩의 조건은 무엇일까?

 

좋은 임베딩에 대해 이해하려면 임베딩을 하는 이유부터 파악해야 한다. 우리는 자연어를 언어 자체로 이해하지만, 컴퓨터는 숫자를 가지고 계산하는 기계일 뿐이다. 따라서, 자연어를 컴퓨터가 이해할 수 있는 벡터로 바꿀 필요가 있다. 이렇렇게 자연어를 벡터로 전환하는 과정에서, 그 벡터 안에 자연어의 의미를 함축시키는 것이 관건이다.

 

임베딩의 역할을 3가지로 구분할 수 있다.

 

-자연어 간의 유사도 파악

-의미적/문법적 정보 함축

-전이 학습

 

자연어 간의 유사도 파악

  일단 자연어를 벡터로 바꾸고 나면, 벡터 간의 코사인 유사도를 구해 자연어 간의 유사도를 파악할 수 있다. 이를 통해 어떤 단어와 유사한 단어를 찾거나, 아니면 차원을 축소한 후 그래프로 단어들을 시각화 할 수도 있다.

 

단어 임베딩의 시각화

의미적/문법적 정보 함축

  단어를 벡터로 만들고 나면, 더하기/빼기 등의 사칙 연산이 가능해진다. 이를 통해 단어 사이의 의미적/문법적 차이를 계산해 낼 수 있다. 가령, 아들 - 딸 = 소년 - 소녀 가 성립하면 성공적인 임베딩이다. 아들과 딸 사이의, 소년과 소년 사이의 의미 차이를 함축하고 있다는 것이기 때문이다.

 

전이 학습

  임베딩된 단어를 다른 딥러닝 모델의 input으로 사용하는 것을 전이 학습이라고 한다. 당연히 딥러닝의 input이 되려면 벡터여야 한다. 임베딩은 성능에 직접적으로 영향을 끼친다. 임베딩을 잘 해야 수렴도 빠르다.

 

임베딩 방식의 변화

통계 기반 -> 뉴럴넷 기반

  통계 기반 임베딩으로 잠재 기반 분석이라는 방법이 있다. 우선, 각 단어를 행으로 하고 각 문서를 열로 하는 행렬을 만든다. 그 행렬은 각 단어가 각 문서에 등장한 빈도 수를 원소로 한다. 행의 수는 전체 말뭉치에서 사용된 어휘의 수로, 보통 10만에서 20만 사이이다. 문제는 하나의 문서에 모든 단어가 다 등장하지 않는다는 것이다. 따라서 이 행렬은 희소 행렬이므로 차원 축소를 할 수 있다. 문서들을 주제별로 묶어서 합치면 단어 수준 임베딩, 단어들을 주제별로 묶어서 합치면 문서 임베딩이 된다.

 

2003년 Probabilistic Language Model 발표 이후 뉴럴넷 기반 임베딩이 대세가 되었다. 이런 방법들은 문장 사이에 빈 칸을 뚫어놓거나, 다음에 올 단어를 예측하는 식으로 학습한다.

 

단어 수준 -> 문장 수준

  2018년 ELMo가 발표된 후로 단어 수준 임베딩보다 문장 수준 임베딩을 많이 사용하게 되었다. BERT, GPT도 문장 수준 임베딩이다. 단어 수준과 달리 문맥을 고려하기 때문에 다의어를 구분할 수 있다.

 

룰->엔드투엔드->프리 트레인/파인 튜닝

  과거에는 사람이 직접 모델에게 동사 앞에는 부사가 오고 뒤에는 어미가 오는 식의 룰을 알려주었다. 그러나 뉴럴넷이 입력과 출력 사이의 관계를 잘 근사하기 때문에, 통째로 뉴럴넷에 넣는 엔드투엔드 방법이 대세가 되었다. 시퀸스 투 시퀸스가 대표적이다. 그러다 2018년 ELMo가 나오면서 프리 트레인/파인 튜닝 방식으로 옮겨가게 되었다. 대규모 말뭉치로 임베딩을 학습한 후, 실제로 적용할 domain의 데이터로 파인 튜닝 하는 것이다. BERT, GPT도 이런 방식이다. 

 

임베딩 기법들

-행렬 분해 : 말뭉치 행렬을 쪼개서 그 중 하나만 쓰거나 sum, concatenate 해서 쓴다.

 

-예측 : 어떤 단어 주변에 특정 단어가 나타날 지 예측, 다음 단어 예측, 빈칸 예측 등의 과정에서 학습. 뉴럴넷 기반 방법들 Word2Vec, FastText, BERT, ELMo, GPT가 여기에 해당한다.

 

-토픽 기반 방법 : 문서에 잠재된 주제를 추론. 잠재 디리클레 할당이 대표적 기법이다. 각 문서가 어떤 주제 분포를 갖는지 확률 벡터로 반환한다. 대표적으로 LDA 모델이 있다.

 

성능을 보면, ELMo, BERT, GPT같은 문장 임베딩이 단어 임베딩인 GloVe를 압도한다. 이 성능은 영어 기반 다운스트림 태스크에서 측정한 것이고, 한국어는 데이터가 적어서 이런 측정이 불가능하다.

 

 

단위들

  전체 텍스트 dataset을 말뭉치라고 하고, 말뭉치에 속한 각 집합을 컬렉션이라 한다. 책에서 다루는 기본 단위는 문장이고, 마침표나 느낌표 등으로 끊는다. 생각, 감정, 정보를 공유하는 문장 집합을 문서라고 하고, 개행 기준으로 끊는다. 가장 작은 단위는 토큰이다. {실수, 인, 초월수, 는, 모두, 무리수, 이, 다, . .} 처럼 토큰을 나눌 수 있고 나누는 방식은 다양하다. 이런 토큰이 모여서 문장이 되고, 문장을 이런 토큰의 시퀸스로 분석하는 과정을 토크나이즈라고 한다.