Tech for good

한국어 임베딩 - 1. 서론 본문

IT/Data Science

한국어 임베딩 - 1. 서론

Diana Kang 2021. 4. 13. 16:41

  한국어 임베딩(Sentence Embeddings Using Korean Corpora) - 이기창 지음 / NAVER Chatbot Model 감수

 

목차

1. 서론

     1.1. 임베딩이란

     1.2. 임베딩의 역할

            1.2.1. 단어 / 문장 간 관련도 계산

            1.2.2. 의미적 / 문법적 정보 함축

            1.2.3. 전이 학습

     1.3. 임베딩 기법의 역사와 종류

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

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

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

            1.3.4. 임베딩의 종류와 성능


1. 서론

1.1. 임베딩이란

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

 

1.2. 임베딩의 역할

임베딩은 크게 다음과 같은 역할을 수행할 수 있다.

 

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

1.2.1. 단어/문장 간 관련도 계산

2013년 구글 연구 팀이 발표한 Word2Vec이라는 기법을 살펴보자. 이름에서 유추할 수 있듯 단어들을 벡터로 바꾸는 방법이다. 이를 이용하여 단어를 벡터로 임베딩하는 순간 단어 벡터들 사이의 유사도(similarity)를 계산하는 일이 가능해진다. 아래의 그림은 동일한 Word2Vec 임베딩을 가지고 단어 쌍 간 코사인 유사도를 시각화한 것이다. 색이 진할 수록 코사인 유사도가 높다.

 

Word2Vec 단어 벡터 사이의 코사인 유사도 시각화 (출처: 이미지 클릭시 이동)

임베딩을 수행하면 아래의 그림처럼 벡터 공간을 기하학적으로 나타낸 시각화 역시 가능하다.

Word2Vec 단어 벡터들의 2차원 시각화 (출처: 이미지 클릭시 이동)

1.2.2. 의미/문법 정보 함축

임베딩은 벡터인만큼 사칙연산이 가능하다. 단어 벡터 간 덧셈/뺄셈을 통해 단어들 사이의 의미적, 문법적 관계를 도출해낼 수 있다. 아래의 그림처럼 아들 - 딸 사이의 관계와 소년 - 소녀 사이의 의미 차이가 임베딩에 함축돼 있으면 품질이 좋은 임베딩이라 말할 수 있다. 이렇게 단어 임베딩을 평가하는 방법을 단어 유추 평가(word analogy)라고 부른다.

단어 유추 평가 (출처: 이미지 클릭시 이동)

 

아래의 표는 한국어 위키백과, KorQuAD, 네이버 영화 리뷰 말뭉치 등으로 학습한 Word2Vec 임베딩에 단어 유추 평가를 수행한 결과이다. 표를 읽는 방법은 단어1 + 단어2 - 단어3 연산을 수행한 벡터와 코사인 유사도가 가장 높은 단어들이 네 번째 열의 단어들이다. 

단어1 단어2 단어3 결과
아들 소년 소녀
아들 아빠 엄마
아들 남성 여성
여동생 남동생 소년 소녀
여동생 남동생 아빠 엄마
여동생 남동생 남성 여성
신부 신랑 여왕
신부 신랑 손자 손녀
신부 신랑 아빠 엄마

1.2.3. 전이 학습

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

 

전이 학습 모델은 대규모 말뭉치를 활용해 임베딩을 미리 만들어 놓는다. 임베딩에는 의미적, 문법적 정보 등이 있기 때문에 이 임베딩을 입력값으로 쓰는 전이 학습 모델은 문서 분류라는 태스크를 빠르게 잘 할 수 있게 된다.

 

이해를 돕기 위해 문장의 극성을 예측하는 모델을 시험 삼아 만들어봤다. 이 모델에는 양방향( bidirectional) LSTM(Long Short-Term Memory)에 어텐션(attention) 메커니즘을 적용했다. 입력값은 단어 임베딩 기법의 일종인 FastText 임베딩(100차원)을 사용했다. FastText는 Word2Vec의 개선된 버전이며, 59만 건에 이르는 한국어 문서를 미리 학습했다. 

 

다음과 같은 학습 데이터가 있다고 해보자.

  • 이 영화 꿀잼 + 긍정(positive)
  • 이 영화 노잼 + 부정(negative)

이 전이 학습 모델은 문장을 입력받으면 해당 문장이 긍정인지 부정인지를 출력한다. 문장을 형태소 분석한 뒤 각각의 형태소에 해당하는 FastText 단어 임베딩이 이 모델의 입력값이 된다. 첫 번째 문장의 경우 '이', '영화', '꿈잼' 임베딩 세개가 순차적으로 입력된다. 두 번째 문장은 '이', '영화', '노잼' 임베딩 세 개가 차례로 들어간다. 이후 모델은 벡터들을 계산해 문장의 극성을 예측한다. 

 

 

아래의 그림은 모델의 학습 과정별 단순 정확도(accuracy)를 나타낸 것이다. 학습 데이터는 네이버 영화 리뷰(github.com/e9t/nsmc)를 사용했다. 이 데이터는 문장과 극성이 쌍으로 정리돼 있어 문서 극성 분류 모델의 학습 데이터로 안성맞춤이다. 

임베딩 종류별 긍정/부정 문서 분류 정확도 (출처: 이미지 클릭시 이동)

파란색 선으로 나타난  FastText는 모델 입력값으로 FastText 임베딩을 사용한 것이다. Random은 입력 벡터를 랜덤 초기화한 뒤 모델을 학습한 방식이다. 

 

임베딩 종류별 학습 손실 (출처: 이미지 클릭시 이동)

위의 그림은 문서 극성 분류 모델의 학습 과정별 학습 손실(Training loss)을 그래프로 나타낸 것이다. 

 

1.3. 임베딩 기법의 역사와 종류

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

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

 

잠재 의미 분석

 

단어-문서 행렬에 잠재 의미 분석을 적용했다고 가정해보자. 그런데 단어-문서 행렬은 보통 행의 개수가 매우 많다. 말뭉치 전제 어휘 수와 같기 때문이다. 따라서 원래 행렬의 차원을 축소해야한다. 

 

1처럼 단어를 기준으로, 2처럼 문서를 기준으로 줄일 수 있다. 이전에는 각각의 단어가 4개의 문서, 각각의 문서가 4개의 단어로 표현됐던 것이 모두 두 개의 주제만으로 표현이 가능해졌다. 결과적으로 전자는 단어 수준 임베딩, 후자는 문서 임베딩이 된다. 

 

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

 

 

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

 

뉴럴 네트워크 기반 방법의 대략의 얼개는 아래 그림과 같다. 이는 구조가 유연하고 표현력이 풍부하기 때문에 자연어의 무한한 문맥을 상당 부분 학습할 수 있다. 

 

뉴럴 네트워크 기반의 임베딩 기법

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

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

 

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

 

 

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

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

 

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

 

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

 

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

 

자연어 처리 분야에서 업스트림과 다운스트림 태스크 사이의 관게는 '윗물이 맑아야 아랫물이 맑을'수 있는 것과 같다. 다시 말해 임베딩 품질이 좋아햐 문제를 제대로 풀 수 있다는 이야기다. 다운스트림 태스크를 예시와 함께 살펴보면 다음과 같다.

 

  • 품사 판별: 나는 네가 지난 여름에 한 [일]을 알고 있다. -> 일: 명사(noun)
  • 문장 성분 분석: 나는 [네가 지난 여름에 한 일]을 알고 있다. -> 네가 지난 여름에 한 일 : 명사구(noun phrase)
  • 의존 관계 분석: [자연어 처리는] 늘 그렇듯이 [재미있다.] -> 자연어 처리는, 재미있다 : 주격명사구(nsubj)
  • 의미역 분석: 나는 [네가 지난 여름에 한 일]을 알고 있다. -> 네가 지난 여름에 한 일 : 피행위주역(patient)
  • 상호 참조 해결: 나는 어제 [성빈이]를 만났다. [그]는 스웨터를 입고 있었다 -> 그 = 성빈이

 

1.3.4. 임베딩의 종류와 성능

이 책에서 다루는 임베딩 기법을 크게 3가지로 나뉜다. 행렬 분해, 예측, 토픽 기반 방법이 그것이다.

 

- 행렬 분해 기반 방법

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

행렬 분해 기반 방법

 

- 예측 기반 방법

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

 

 

- 토픽 기반 방법

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

 

- 임베딩 성능 평가

영어 기반 다운스트림 태스크에 대한 임베딩 종류별 성능을 분석한 결과이다. 파인 튜닝 모델의 구조를 고정한 뒤 각각의 임베딩을 전이 학습 시키는 형태로 정확도를 측정한 결과, 문장 임베딩 기법인 ELMo, GPT, BERT가 단어 임베딩 기법인 GloVe를 크게 앞서고 있다. 아울러 BERT-large 모델이 가장 좋은 성능을 보여준다. 임베딩 품질이 각종 다운스트림 태스크 성능에 크게 영향을 주고 있음을 다시 한 번 확인할 수 있다.