한국어 임베딩(도서) 정리노트

7 minute read


1. 서론

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

가장 간단한 형태의 임베딩은 단어의 빈도를 그대로 벡터로 사용하는 것(p29)

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

-> 단어-문서 행렬에 잠재 의미분석을 적용하나는 경우, 단어-문서 행렬에서 행(단어)의 개수가 매우 많아, 필요없이 0이 많아지는 경향이 발생하기 때문에 차원을 축소해서, 단어수준의 이베딩, 혹은 문서 임베딩을 수행할 수 있음

잠재의미 분석 수행 대상 행렬은 여러 종류가 될 수 있다. 단어-문서 행렬을 빌롯해 TF-IDF행렬, 단어-문맥 행렬, 점별 상호 정보량 행렬 등이 바로 그것이다.(p38)

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

2017년 이전의 임베딩 기법들은 대개 단어 수준의 모델이었다. NPLM, Word2Vec, GloVe, FastText, Swivel 등이 여기에 속한다. 단어 임베딩 기법들은 각각의 벡터에 해당 단어의 문맥적 의미를 함축한다. 하지만 단어 수준 임베딩 기법의 단점은 동음이의어를 분간하기 어렵다는 점이다. (중략) 2018년 초 ELMo가 발표된 이후 문장 수준 임베딩 기법들이 주목을 받았다. BERT나 GPT 등이 바로 여기에 속한다. (P39)

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

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

말뭉치(corpus)란 임베딩 학습이라는 특정한 목적을 가지고 수집된 표본이다. (중략) 물뭉치에 속한 각각의 집합은 컬렉션이라고 부른다. 학국어 위키백과와 네이버 영화 리뷰를 말뭉치로 쓴다면 이들이 각각 컬렉션이 된다.(P53) (중략) 문장은 여러개의 토큰으로 구성된다. 문맥에 따라서는 토큰을 단어, 형태소, 서브워드라고 부를 수 있지만, 같은 뜻으로 서술하는 것이다. 문장을 이처럼 토큰 시퀀스로 분석하는 과정을 토크나이즈라고 한다. 어휘집합(vocabulary)은 말뭉치에 있는 모든 문서를 문장으로 나누고 여기에 토크나이즈를 실시한 후 주복을 제거한 토큰들의 집합이다.


2. 벡터가 어떻게 의미를가지게 되는가

임베딩에 자연어 의미를 어떻게 함축할 수 있을까? 그 비결은 바연어의 통계적 패턴 정보를 통째로 이베딩에 넣는 것이다. 자연어의 의미는 해당 언어 화자들이 실제 사용하는 일상 언어에서 드러나기 때문이다(P58). 임베딩을 만들 때 쓰는 통계 정보는 크게 세가지가 있다. 첫째는 문장에 어떤 단어가 많이 쓰였는지이고, 둘쨰는 단어가 어떤 순서로 등장하는지이며, 마지막으로 문장에 어떤 단어가 같이 나타났는지와 관련된 정보다. (P58)

2.2 어떤 단어가 많이 쓰였는가(백오브워즈 가정)

구분 백오브워즈 가정 언어모델 분포가정
내용 어떤 단어가 (많이)쓰였는가 단어가 어떤 순서로 쓰였는가 어떤 단어가 같이 쓰였는가
대표통계량 TF-IDF - PMI
대표모델 Deep Averaging Network ELMo,GPT Word2Vec

백오브워즈 임베딩은 간단한 아이디어지만 정보검색분야에서 여전히 많이 쓰이고 있다. 사용자의 질의에 가장 적절한 문서를 보여줄 때 질의를 백오브워즈 임베딩으로 변환하고 질릐와 검색 대상 문서 임베딩 간 코사인 유사도를 구해 유사도가 가장 높은 문서를 사용자에게 노출한다(P61).

TF는 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지 빈로를 나타내며, DF는 특정 단어가 나타난 문서의 수를 뜻한다. DF가 클 수록 다수의 문서에 쓰이는 범용적인 단어라고 볼 수 있다. IDF는 전체 문서 수를 해당 단어의 DF로 나눈 뒤 로그를 취한 값이다.(P62)

2.3 단어가 어떤 순서로 쓰였는가

언어모델이란 단어시퀀스에 확률을 부여하는 모델이다.(중략)통계 기반의 언어 모델은 말뭉치에서 해당 단어 시퀀스가 얼마나 자주 등장하는지 빈도를 세어 학습한다. 잘 학습된 언어 모델이 있다면 어떤 무장이 그럴듯한지(확률 값이 높은지), 주어진 단어 시퀀스 다음 단어는 무엇이 오는 게 자연스러운지 알 수 있다.(P64)

n-gram이란 n개 단어를 뜻하는 용어로 말뭉치 내 단어들을 n개 묶어서 그 빈도를 학습했다는 뜻이다.

n-gram 모델을 쓰면 직전 n-1개 단어의 등장 확률로 전체 단어 시퀀스 등장 확률을 근사하는 것이다. 이는 한 상태의 확률은 그 직전 상태에만 의존한다는 마르코프가정에 기반한 것이다.(p66)

데이터에 한번도 등장하지 않는 n-gram이 존재할 때 예측 단계에서 문제가 발생할 수 있다(또바기 예시).(중략)이를 위해 백오프, 스무딩 등의 방식이 제안됐다. 백오프란 n-gram등장 빈도를 n보다 작은 범위의 단어 시퀀스 빈도로 근사하는 방식이다. (중략) 스무딩은 등장빈도 표에 모두 k만큼을 더하는 기법이다.스무딩을 시행하면 높은 빈도를 가진 문자열의 등장 확률을일부 깎고 학습 데이터에 전혀 등장하지 않는 케이스들에는 작으나마 일부 확률을 부여하게 된다. (p68)

뉴럴 네트워크 기반 언어 보델은 주어진 단어 시퀀스를 가지고 다은 단어를 맞추는 과정에서 학습한다. 학습이 완료되면 이들 모델의 중간 혹은 말단 계싼 결과물을 단어나 문장의 임베딩으로 활용한다.ELMo, GPT등 모델이 여기에 해당한다.

마스크 언어모델은 언어 모델 기반 기법과 큰 틀에서 유사하지만 디테일에서 차이를 보이는 기법이다. 문장 중간에 마스크를 씌워 놓고 해당 마스크 위치에 어떤 단어가 올지 예측하는 과정에서 학습한다. 언어모델 기반 기법은 단어를 순차적으로 입력받아 다음 단어를 맞춰야 하기 때문에 태생적으로 일방향이다. 하지만 마스크 언어 모델 기반 기법은 문장 전체를 다 보고 중간에 있는 단어를 예측하기 때문에 양방향학습이 가능하다. 이 덕분에 마스크 언어 모델 기반의 방법들은 기존 언어 모델 기법들 대비 임베딩 품질이 좋다.BERT가 이 부류에 속한다.

2.4 어떤 단어가 같이 쓰였는가

자연어 처리에서 분포란 특정범위, 즉 윈도우(window) 내에 동시에 등장하는 이웃 단어 또는 문맥의 집합을 가리킨다. 개별 단어의 분포는 그 단어가 문장 내에서 주로 어느 위치에 나타나는지, 이웃한 위치에 어떤 단어가 자주나타나는지에 따라 달라진다. 어떤 단어 쌍이 비슷한 문맥 환경에서 자주 등장한다면 그 의미 또한 유사할 것이라는 게 분포 가정의 전제이다(p70)

품사 분류에서 가장 중요한 기준은 무엇일까? 언어학자들이 꼽는 결정적인 기준은 바로 ‘기능’이라고 한다. 해당 단어가 문장 내에서 점하는 역할에 초점을 맞춰 품사를 분류한다는 것이다. (중략) 기능은 특정 단어가 문장 내에서 어떤 역할을 하는지, 분포는 그 단어가 어느 자리에 있는지를 나타낸다. (중략) 디 덕분에 임베딩에 분포 정보를 함출하게 되면 해당 벡터에 해당 단어의 의미를 자연스레 내재시킬 수 있게 된다.

점별상호 정보량(PMI) : PMI는 분포 가정에 따른 단어 가중치 할당 기법이다. 두 단어가 얼마나 자주 같이 등장하는지에 관한 정보를 수치화한 것이기 때문이다.

Word2Vec : 분포 가정의 대표적인 모델은 2013년 구글 연구팀이 발표한 Word2Vec이라는 임베딩 기법이다. CBOW모델은 문맥 단어들을 가지고 타깃단어 하나를 맞추는 과정에서 학습니다. Skip-gram 모델은 타깃단어를 가지고 문맥 단어가 무엇일지 예측하는 과정에서 학습된다. 둘 모두 특정 타깃 단어 주변의 문맥, 즉 분포 정보를 임베딩에 함축한다.


3. 한국어 전처리

지도학습 기법은 언어 전문가들이 직접 행태소 경계나 품사 정보를 모델에 가르쳐줘서 학습된 모델들이다. 이와 딜리 비지도 학습 기법들은 데이터의 패턴을 모델 스스로 학습하게 함으로써 형태소를 분석하는 방법이다.데이터에 자주 등장하는 단어들을 형태소로 인식한다(P101).

soynlp 형태소 분석기 : soynlp 패키지에 포함된 형태소 분석기는 데이터의 통계량을 확인해 만든 단어 점수 표로 작동한다. 단어 점수는 크게 응집 확률과 브랜칭 엔트로피를 활용한다. 조금 더 구체적으로 말하면 주어진 문자열이 유기적으로 연결돼 함께 자주 나타나고(응집 확률이 높을 때), 그 단어 앞뒤로 다양한 조사, 어미 혹은 다른 단어가 등장하는 경우(브랜칭 엔트로피가 높을 때) 해당 문자열을 형태소로 취급한다. (중략) soynlp의 형태소 분석기는 우리가 가지고 있는 말뭉치의 통계량을 바탕으로 하기 때문에 지도학습 기반 방법과 달리 별도의 학습 과정을 거쳐야 한다. 말뭉치의 분포가 어떻게 돼 있는지 확인하고 단어별로 응집 확률과 브랜칭 엔트로피 점수표를 만드는 절차가 필요하다는 이야기다.(P102)

구글 센텐스피스 :바이트 페어 인코딩(BPE) 기법등을 지원하며 pip 설치를 통해 파이썬 콘솔에서 사용할 수 있다. BPE의 기본 원리는 말뭉치에서 가장 많이 등장한 문자열을 병합해 문자열을 압축하는 것이다. aaabdaaabac -> (aa를 Z로) ZabdZabac

자연어 처리에서 BPE가 처음 쓰인 것은 기계번역 분야다. 우선 원하는 어위집합 크기가 될때까지 반복적으로 고빈도 문자열들을 병합해 어위집합에 추가한다(p105).

BERT 모델은 BPE로 학습한 어휘집합을 쓴다. BPE는 문자열 기반의 비지도 학습 기법이기 때문에 데이터만 확보할 수 있다면, 어떤 언어에든 적용이 가능하다. 센텐스피스 패키지 학습 결과를 BERT에 사용할 수 있는 어휘 집합으로 쓸 수 있게 하기 위해서는 일부 후처리가 필요하다. 언더바(_) 문자를 ##로 바꾸고 [PAD],[UNK],[CLS],[MASK],[SEP] 등의 스페셜 토큰을 추가한다.(P106)

띄어쓰기 교정 : soynlp에서는 띄어쓰기 교정 모듈도 제공한다. 이 모듈은 말뭉치에서 띄어쓰기 패턴을 학습한 뒤 해당 패턴대로 교정을 수행한다.


4. 단어 수준의 임베딩

NPLM, Word2Vec, FastText 등은 예측기반 모델, LSA, GloVe, Swivel 등은 행렬분해 기반의 기법들이다. 가중 임베딩은 단어 임베딩을 문장 수준으로 확장하는 방법이다(P111).

NPLM(Neural Probabilistic Language Model)

자연어 처리 분야에 임베딩 개념을 널리 퍼뜨리는 데 일조한 선구자적 모델이다.

NPLM은 단어 시퀀스가 주어졌을 때 다음 단어가 무엇인지 맞추는 과정에서 학습된다. NPLM은 직전까지 등장한 n-1개 단어들로 다음 단어를 맞추는 n-gram언어 모델이다. 발엇븐 말이 처니간다는 말이 있을 떄, w1=발, w2=없는, w3=말이 이렇게 세개 단어를 입력받았을 때 w4=천리를 잘 맞춘다는 이야기다. 아울러 w2=없는, w3=말이, w4=천리 이렇게 세개 단어를 입력받았을 때 w5=간다를 잘 맞춘다는 이야기이기도 하다.(p114)

NPLM은 확률벡터에서 가장 높은 요소의 인덱스에 해당하는 단어가 실제 정답 단어와 일치하도록 학습한다(P115)

Word2Vec

Mikolov(2013a)에서는 Skip-Gram과 CROW라는 모델이 제안됐고, Mikolov(2013b)은 이 두 모델의 근간으로 하되 네거티브 샘프링 등 학습 최적화 기법을 제안한 내용이 핵심 골자다. (중략) CBOW는 주변에 있는 문맥단어들을 가지고 타깃단어 하나를 맞추는 과정에서 학습된다. Skip-gram 모델은 타깃 단어를 가지고 주변 문맥 단어가 무엇일지 예측하는 과정에서 학습된다.(P119)

Skip-gram 모델에서 포지티브 샘플이란 타깃 단어(t)와 그 주변에 실제로 등장한 문맥 단어(c) 쌍을 가리킨다. 네거티브 샘플은 타깃단어와 그 주변에 등장하지 않은 단어 쌍을 의미한다. Mikolov(2013b)에 따르면 작은 데이터에는 k(네거티브 샘플)를 5~20, 큰 말뭉치에는 k를 2~5로 하는 것이 성능이 좋았다고 한다. (p122)



Leave a comment