딥러닝/NLP

한국어 임베딩 - 서론

eunsour 2022. 9. 19.
반응형

임베딩이란

 자연어 처리 분야에서 임베딩이란, 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 일련의 과정 전체를 의미한다. 단어나 문장 각각을 벡터로 변환해 벡터 공간으로 '끼워 넣는다(embed)'는 의미에서 임베딩이라는 이름이 붙었다. 

 

 임베딩이라는 개념은 자연어 처리 분야에서 꽤 오래전부터 사용한 것으로 보인다. 하지만 본격적으로 통용되기 시작한 것은 딥러닝의 대부 요슈아 벤지오 연구 팀이「A Neural Probabilistic Language Model」(Bengio et al., 2003)을 발표하고 나서부터다. 

 

임베딩의 역할

 임베딩은 다음 역할을 수행할 수 있다.

  • 단어 / 문장 간 관련도 계산
  • 의미적 / 문법적 정보 함축
  • 전이 학습

 

단어 / 문장 간 관련도 계산

 2013년 구글 연구 팀이 발표한 Word2Vec이 대표적이다. 이름에서 유추할 수 있듯 단어들을 벡터로 바꾸는 방법이다. 한국어 위키백과, KorQuAD 등을 은전한닢으로 형태소 분석을 한 뒤 100차원으로 학습한 Word2Vec 임베딩을 살펴본다. 희망이라는 단어의 벡터는 다음과 같다.

[-0.00209, -0.03918, 0.02419, ... 0.01715, -0.04975, 0.09300]

 

 위의 리스트는 컴퓨터가 계산하기 좋도록 희망이라는 단어를 벡터로 바꿔 놓았을 뿐이다. 하지만 단어를 벡터로 임베딩하는 순간 단어 벡터들 사이의 유사도(Similarity)를 계산하는 일이 가능해진다. 

 

의미 / 문법 정보 함축

 임베딩은 벡터인 만큼 사칙연산이 가능하다. 단어 벡터 간 덧셈/뺄셈을 통해 단어들 사이의 의미적, 문법적 관계를 도출해낼 수 있다. 구체적으로는 첫 번째 단어 벡터 - 두 번째 단어 벡터 + 세 번째 단어 벡터를 계산해보는 것이다. 예를 들어 아들 - 딸 + 소녀 = 소년이 성립하면 성공적인 임베딩이라고 볼 수 있다. 다시 말해 아들 - 딸 사이의 관계와 소년 - 소녀 사이의 의미 차이가 임베딩에 함축돼 있으면 품질이 좋은 임베딩이라 말할 수 있다는 이야기다. 이렇게 단어 임베딩을 평가하는 방법을 단어 유추 평가(word analogy test)라고 부른다. 

 

전이 학습

 임베딩은 다른 딥러닝 모델의 입력값으로 자주 쓰인다. 문서 분류를 위한 딥러닝 모델을 만들 때, 단어 임베딩은 강력한 힘을 발휘한다. 품질 좋은 임베딩을 쓰면 문서 분류 정확도와 학습 속도가 올라간다. 이렇게 임베딩을 다른 딥러닝 모델의 입력값으로 쓰는 기법을 전이 학습(transfer learning)이라고 한다.  

 

 전이 학습은 사람의 학습과 비슷한 점이 있다. 사람은 무언가를 배울 때 제로에서 시작하지 않는다. 평생 쌓아 온 지식을 바탕으로 새로운 사실을 빠르게 이해한다. 전이 학습 모델 역시 제로(0)부터 시작하지 않는다. 대규모 말뭉치를 활용해 임베딩을 미리 만들어 놓는다. 임베딩에는 의미적, 문법적 정보 등이 녹아 있다. 이 임베딩을 입력값으로 쓰는 전이 학습 모델은 문서 분류라는 태스크를 빠르게 잘할 수 있게 된다. 

 

 

임베딩 기법의 역사와 종류

임베딩 기법의 발전 흐름과 종류를 간단하게 살펴본다.

 

통계 기반에서 뉴럴 네트워크 기반으로

 초기 임베딩 기법은 대부분 말뭉치의 통계량을 직접적으로 활용하는 경향이 있었다. 대표적인 기법이 잠재 의미 분석(Latent Semantic Analysis)이다. 잠재 의미 분석이란 단어 사용 빈도 등 말뭉치의 통계량 정보가 들어 있는 커다란 행렬에 특이값 분해(Sigular Value Decomposition) 등 수학적 기법을 적용해 행렬에 속한 벡터들의 차원을 축소하는 방법을 말한다.

 

 단어-문서 행렬에 잠재 의미 분석을 적용했다고 가정해보자. 그런데 단어-문서 행렬은 보통 행의 개수가 매우 많다. 말뭉치 전체의 어휘 수와 같기 때문이다. 어휘 수는 대개 10~20만 개 내외에 달한다. 게다가 행렬 대부분의 요소 값은 0이다. 문서 하나에 모든 어휘가 쓰이는 경우는 매우 드물기 때문이다. 이렇게 대부분의 요소 값이 0인 행렬을 희소 행렬(sparse matrix)이라고 한다.

 

 문제는 이러한 희소 행렬을 다른 모델의 입력값으로 쓰게 되면 계산량도 메모리 소비량도 쓸데없이 커진다는 데 있다. 따라서 원래 행렬의 차원을 단어를 기준으로, 혹은 문서를 기준으로 축소해 사용한다. 전자를 단어 수준 임베딩, 후자를 문서 수준 임베딩이라고 한다. 

 

 잠재 의미 분석 수행 대상 행렬은 여러 종류가 될 수 있다. 단어-문서 행렬을 비롯해 TF-IDF 행렬(Term Frequency-Inverse Document Frequency), 단어-문맥 행렬(Word-Context Matrix), 점별 상호 정보량 행렬(Pointwise Mutual Information Matrix) 등이 바로 그것이다. 

 

 최근에는 뉴럴 네트워크 기반의 임베딩 기법들이 주목받고 있다. Neural Probabilistic Language Model(Bengio et al., 2003)이 발표된 이후부터다. 뉴럴 네트워크 기반 모델들은 이전 단어들이 주어졌을 때 다음 단어가 뭐가 될지 예측하거나, 문장 내 일부분에 구멍을 뚫어 놓고(masking) 해당 단어가 무엇일지 맞추는 과정에서 학습된다. 

 

 

반응형

 

단어 수준에서 문장 수준으로

 2017년 이전의 임베딩 기법들은 대개 단어 수준 모델이었다. NPLM, Word2Vec, GloVe, FastText, Swivel 등이 여기에 속한다. 단어 임베딩 기법들은 각각의 벡터에 해당 단어의 문맥적 의미를 함축한다. 하지만 단어 수준 임베딩 기법의 단점은 동음이의어(homonym)를 분간하기 어렵다는 점이다. 단어의 형태가 같다면 동일한 단어로 보고, 모든 문맥 정보를 해당 단어 벡터에 투영하기 때문이다.

 

 2018년 초에 ELMo(Embeddings from Language Models)가 발표된 이후 문장 수준 임베딩 기법들이 주목을 받았다. BERT(Bidirectional Encoder Representations from Transformer)나 GPT(Generative Pre-Training) 등이 바로 여기에 속한다. 문장 수준 임베딩 기법은 개별 단어가 아닌 단어 시퀀스 전체의 문맥적 의미를 함축하기 때문에 단어 임베딩 기법보다 전이 학습 효과가 좋은 것으로 알려져 있다. 

 

 에컨대 한국어에서 ''는 먹는 배(pear), 신체 부위인 배(belly), 교통수단의 배(ship) 등 다양한 의미를 지닌 동음이의어다. 단어 임베딩 기법을 썼다면 이 모든 의미가 뭉뚱그려져 하나로 표현됐겠지만, 문장 수준 임베딩 기법을 사용하면 이들을 분리해 이해할 수 있다. 

 

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

 1990년대까지의 자연어 처리 모델 대부분은 사람이 피처(feature)를 직접 뽑았다. 피처란 모델의 입력값을 가리킨다. 한국어 문장을 구문 분석(parsing)하는 모델을 만든다고 할 때, 피처 추출은 언어학적인 지식을 활용한다. 한국어에서는 명사 앞에 관형사가 올 수 있고 조사가 명사 뒤에 오는 경향이 있으므로 이러한 규칙을 모델에 알려준다. 아울러 동사(어간)는 부사가 그 앞에 오고 어미가 그 뒤에 나타나므로 이 또한 규칙으로 정의한다. 

 

 2000년대 중반 이후 자연어 처리 분야에서도 딥러닝 모델이 주목받기 시작했다. 딥러닝 모델은 입력과 출력 사이의 관계를 잘 근사하기 때문에 사람이 모델에 규칙을 굳이 직접 알려주지 않아도 된다. 데이터를 통째로 모델에 넣고 입출력 사이의 관계를 사람의 개입 없이 모델 스스로 처음부터 끝까지 이해하도록 유도한다. 이런 기법을 엔드투엔드 모델(end-to-end model)이라고 부른다. 기계 번역에 널리 쓰였던 시퀀스 투 시퀀스(sequence-to-sequence) 모델이 엔드투엔드의 대표 사례다. 

 

 2018년 ELMo 모델이 제안된 이후 자연어 처리 모델은 엔드투엔드 방식에서 벗어나 프리트레인(pretrain)과 파인 튜닝(fine-tuning) 방식으로 발전하고 있다. 우선 대규모 말뭉치로 임베딩을 만든다(프리트레인). 이 임베딩에는 말뭉치의 의미적, 문법적 맥락이 포함돼 있다. 이후 임베딩을 입력으로 하는 새로운 딥러닝 모델을 만들고 우리가 풀고 싶은 구체적 문제에 맞는 소규모 데이터에 맞게 임베딩을 포함한 모델 전체를 업데이트한다(파인 튜닝, 전이 학습). ELMo, GPT, BERT 등이 이 방식에 해당한다. 

 

 우리가 풀고 싶은 자연어 처리의 구체적 문제들을 다운스트림 태스크(downstream task)라고 한다. 품사 판별(Part-Of-Speech tagging), 개체명 인식(Named Entity Recognition), 의미역 분석(Semantic Role Labeling) 등이 있다. 이에 대비되는 개념이 업스트림 태스크(upstream task)이다. 다운스트림 태스크에 앞서 해결해야 할 과제라는 뜻이다. 단어/문장 임베딩을 프리트레인하는 작업이 업스트림 태스크에 해당한다. 

 

임베딩의 종류와 성능

- 행렬 분해 기반 방법

행렬 분해(factorization) 기반 방법은 말뭉치 정보가 들어 있는 원래 행렬을 두 개 이상의 작은 행렬로 쪼개는 방식의 임베딩 기법을 가리킨다. 분해한 이후엔 둘 중 하나의 행렬만 쓰거나 둘을 더하거나(sum), 이어 붙여(concatenate) 임베딩으로 사용한다. GloVe, Swivel 등이 바로 여기에 속한다. 

 

- 예측 기반 방법

 어떤 단어 주변에 특정 단어가 나타날지 예측하거나, 이전 단어들이 주어졌을 때 다음 단어가 무엇일지 예측하거나, 문장 내 일부 단어를 지우고 해당 단어가 무엇일지 맞추는 과정에서 학습하는 방법이다. Word2Vec, FastText, BERT, ELMo, GPT 등이 예측 기반 임베딩 기법들이다. 

 

- 토픽 기반 방법

 주어진 문서에 잠재된 주제(latent topic)를 추론(inference)하는 방식으로 임베딩을 수행하는 기법도 있다. 잠재 디리클레 할당(Latent Dirichlet Allocation)이 대표적인 기법이다. LDA 같은 모델은 학습이 완료되면 각 문서가 어떤 주제 분포(topic distribution)를 갖는지 확률 벡터 형태로 반환하기 때문에 임베딩 기법의 일종으로 이해할 수 있다. 

 

- 임베딩 성능 평가 

 Tenney et al. (2019)은 영어 기반 다운스트림 태스크에 대한 임베딩 종류별 성능을 분석했다. 성능 측정 대상 다운스트림 태스크는 형태소 분석, 문장 성분 분석, 의존 관계 분석, 의미역 분석, 상호 참조 해결 등이다. 파인 튜닝 모델의 구조를 고정한 뒤 각각의 임베딩을 전이 학습시키는 형태로 정확도를 측정했다. 해당 논문의 실험 결과를 재해석해 정리한 결과는 문장 임베딩 기법인 ELMo, GPT, BERT가 단어 임베딩 기법인 GLoVE를 크게 앞서도 있다. 임베딩 품질이 각종 다운스트림 태스크 성능에 크게 영향을 주고 있음을 다시 한 번 확인할 수 있다.

 

 

Reference

 
한국어 임베딩
저자 : 이기창
감수 : NAVER Chatbot Model
출판 : 에이콘출판사
발매 : 2019.09.26

 

반응형

댓글