임베딩이란
자연어처리 분야에서 임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체를 의미한다. 단어나 문장을 각각 벡터로 변환해서 벡터공간으로 끼워 넣는다. 이 "끼워넣는다"라는 의미에서 임베딩이라는 이름이 붙었다.
임베딩의 예시로는 단어의 빈도를 벡터로 사용한 경우이다.
아래 표는 특히 단어-문서 행렬[Term-Document-Matrix] 이라고 한다
메밀꽃 필 무렵 | 운수 좋은 날 | 사랑 손님과 어머니 | 삼포 가는 길 | |
기차 | 0 | 1 | 9 | 8 |
막걸리 | 1 | 2 | 3 | 5 |
선술집 | 2 | 8 | 0 | 3 |
위의 표에서 [운수 좋은 날]의 임베딩은 [ 1, 2, 8 ] 이다. [막걸리]라는 단어의 임베딩은 [ 1, 2 , 3, 5] 이다
임베딩의 역할
임베딩은 단어/문장간 관련도 계산, 의미적/문법적 정보 함축, 전이 학습등의 역할을 할 수 있다
단어/문장 간 관련도 계산
앞서 본 단어-문서 행렬은 가장 단순한 형태의 임베딩이고 실제로 많이 쓰이는 단어 임베딩은 Word2Vec 이라는 임베딩 기법이다. 예를 들어 한국어 위키 백과 등을 "은전한닢"으로 형태소 분석을 한 뒤 100차원으로 학습했을때 "희망"이라는 단어는 [ -0.00209, -0.03918, 0.02419 ..... 0.01715, -0.04975, 0.09300 ] 와 같은 벡터로 임베딩이 된다고 한다.
이러한 100차원의 벡터는 사람이 봤을때는 그 의미를 당연히 이해할 수 없다. 컴퓨터가 계산하기 좋도록 "희망"이라는 단어를 벡터로 바꾸어 놓았을 뿐이다. 단어가 벡터로 바뀌는 순간 벡터들 사이의 유사도 측정 기법의 일종인 코사인 유사도를 구할 수 있고 결국은 코사인 유사도를 기반을 단어의 유사도를 판단할 수 있다.
또한 100차원 벡터들이지만 t-SNE 차원 축소 기법을 이용하여 보기 좋은 2차원으로 시각화 할 수도 있다. 이 경우 관련성이 높은 단어들이 주변에 몰려 있음을 확인할 수 있다.
의미/문법 정보 함축
벡터들은 당연히 덧셈/뺄셈에 대해서 닫혀있다. 따라서 단어를 임베딩을 하면 사칙연산이 가능하게 되는데
이때 ["아들"의 임베딩 벡터 - "딸"의 임베딩 벡터 + "소녀"의 임베딩 벡터 의 결과 벡터]와 ["소년"의 임베딩 벡터]의 "코사인 유사도" 가 높다면 품질이 좋은 임베딩이라고 할 수 있다. 이러한 방법을 단어 유추 평가(word analogy test)라고 한다
전이학습(Transfer Learning)
전이학습이란, 임베딩을 다른 딥러닝 모델의 입력값으로 쓰는 기법을 말한다. 이때 단어 임베딩이 잘 되어 있을 수록 문서 분류 정확도나 학습 속도가 올라간다.
사람이 학습을 "무"에서 시작하지 않듯, 전이 학습 모델 또한 대규모 말뭉치를 이용해서 임베딩을 미리 만들어 놓는다. 이 임베딩에는 의미적, 문법적 정보 등이 녹아 있다. 이 임베딩을 입력값으로 쓰는 전이 학습 모델은 문서 분류를 잘 할 수 있게 된다.
단어 임베딩의 품질이 좋으면 학습된 모델의 성능이 우월해지고 학습 손실도 적어진다.
임베딩의 기법의 역사와 종류
통계 기반에서 뉴럴 네트워크 기반으로
뉴럴 네트워크 기반의 임베딩이 사용되기 이전에는 통계 기반의 임베딩 기법(통계량을 표현한 행렬)이 사용되었다.
통계 기반의 임베딩을 그대로 사용하면 행렬의 행의 개수가 매우 많을 뿐 아니라 희소행렬인 경우도 많기 때문에 메모리의 낭비가 많아진다. 따라서 대표적으로 잠재 의미 분석이라는 기법을 사용한다.
잠재 의미 분석이란 방대한량의 통계량이 들어있는 행렬(위에서 예를 들었던 단어-문서 행렬을 생각해보자)을 특이값 분해 등의 수학적인 기법을 활용해서 행렬에 속한 벡터들의 차원을 축소하는 방법이다.
즉 잠재의미분석을 이용하면 행렬의 크기가 축소된다. 그 방법으로는 크게 단어 수준 임베딩과 문서 수준 임베딩으로 나누어진다.
문서1 | 문서2 | 문서3 | 문서4 | |
단어1 | 2 | 0 | 0 | 0 |
단어2 | 0 | 1 | 0 | 1 |
단어3 | 0 | 0 | 0 | 3 |
단어4 | 1 | 0 | 1 | 2 |
이러한 행렬이 있다고 하자. 행렬을 축소시키는 방법에 따라 단어수준임베딩과 문서수준임베딩으로 나누어진다고 했는데 먼저 단어수준임베딩은 단어를 기준으로 축소 시키는 방식이다. 따라서 단어수준임베딩을 할 경우 임베딩의 차원수가 단어의 개수가 될 것이다. 단어수준임베딩의 결과는 아래와 같다.
주제1 | 주제2 | |
단어1 | 0.42 | 1.92 |
단어2 | 1.03 | -0.29 |
단어3 | 2.88 | -0.69 |
단어4 | 2.29 | 0.64 |
그렇다면 문서수준의임베딩은 당연히 문서를 기준으로 행렬을 축소시키는 방식일 것이며 문서수준임베딩의 결과 벡터의 차원수는 문서의 개수가 될 것이다. 문서수준임베딩의 결과는 아래와 같다.
문서1 | 문서2 | 문서3 | 문서4 | |
주제1 | 0.81 | 0.27 | 0.59 | 3.70 |
주제2 | 2.08 | -0.13 | 0.30 | -0.49 |
결과적으로 잠재의미분석 임베딩의 결과 벡터의 차원수가 단어의 수와 같다면 단어수준임베딩, 문서의수와 같다면 문서수준임베딩이 된다. 또한 이러한 잠재의미분석을 통해서 벡터의 차원이 줄어든것을 확인할 수 있다.
잠재의미분석의 수행 대상 행렬은 TF-IDF행렬, 단어-문맥행렬 등이 있다.
또한 최근에는 뉴럴네트워크 기반의 임베딩이 이루어진다. 학습은 이전 단어들이 주어졌을 때 다음 단어가 무엇이 될지 예측하거나 문장 내 일부에 구멍을 뚫어 놓고 단어가 무엇일지 맞추는 과정을 통해 이루어진다.
단어 수준에서 문장 수준으로
2017년 이전의 임베딩 기법들은 대게 단어 수준 모델이였다고한다. Word2Vec도 단어 수준의 임베딩이다. 단어 수준 임베딩은 임베딩벡터에 해당 단어의 문맥적인 의미를 함축한다. 이러한 단어수준 임베딩기법의 단점은 동음이의어를 분간하기 어렵다는 점이다. 따라서 최근에는 ELmo 나 BERT같은 문장 수준 임베딩 기법들이 등장했다.
문장수준임베딩은 단어 시퀀스 전체의 문맥적 의미를 함축하기 때문에 단어 임베딩 기법보다 전이 학습 효과가 좋다고 한다.
Rule, EndToEnd, Pretrain/ Fine tuning
[Rule]
한국어에서 명사 앞에 관형사가 온다거나 명사 뒤에 조사가 오는 경향성의 규칙을 자연어 처리 모델에게 알려주는 방식
[EndToEnd]
딥러닝이 적용되면서 그러한 규칙을 사람이 직접 알려주지 않고 데이터를 모델에 통째로 넣고 모델이 스스로 처음부터 끝까지 이해하도록 유도하는 모델
[Pretrain/Fine Tuning]
2018년 Elmo,BERT,GPT 이후 자연어 처리 모델은 end to end에서 벗어나 pre training/fine tuning 방식으로 발전하고 있다. 그 절차를 간단하게 나타내면 아래와 같다.
1. pre training
대규모의 말뭉치로 임베딩을 만드는 pre training을 거친다. pre training을 거친 임베딩은 말뭉치의 의미적/문법적 맥락을 포함하고 있다.
2. fine tuning / transfer learning(전이학습)
1의 임베딩을 입력으로 하는 새로운 딥러닝 모델을 만들고 우리가 풀고 싶은 구체적 문제에 맞는 소규모 데이터에 맞게 임베딩을 업데이트(fine tuning)하고 모델 전체를 업데이트(transfer learning) 한다.
우리가 풀고 싶은 자연어 처리의 구체적 문제들을 다운스트림 태스크(downstream task)라고 한다. 예를 들면 품사판별, 개체명 인식 등이 있다. 이러한 문제들에 앞서 해결해야할 문제들을 업스트림 태스크라고 하고 예를 들면 단어/문장 임베딩을 pretrain하는 작업이 업스트림 태스크(upstream task)에 해당한다.
"윗물이 맑아야 아랫물이 맑다"
"upstream task가 잘되야 downstream task가 잘된다"
"임베딩 품질이 좋아야 문제해결을 잘 할 수 있다"
임베딩의 종류
[행렬 분해 기반] : 단어-문서 행렬
원래의 방대한 행렬을 두개 이상의 작은 행렬로 쪼개어서 쪼개진 행렬들 중 하나만 사용하거나 더하거나 concatenate해서 사용한다.
[예측 기반] : Word2Vec, FastText, BERT, ELmo, GPT
어떤 단어 주변에 특정 단어가 나타날지 예측하거나 문장 내 일부 단어를 지우고 해당 단어가 무엇일지 맞추거나 등등의 방식을 통해 학습하는 방법
[토픽 기반]
주어진 문서에 잠재된 주제를 추론하는 방식으로 학습하는 방식으로 임베딩을 수행
'자연어처리' 카테고리의 다른 글
자연어처리(5) - Word2Vec (0) | 2020.02.19 |
---|---|
자연어처리 스터디기록(3)-딥러닝 정리 (0) | 2020.02.08 |
자연어처리 스터디(4)- neural language model (0) | 2020.02.05 |
자연어처리 스터디 기록(2)-임베딩의 의미 (0) | 2020.01.27 |