brunch

You can make anything
by writing

C.S.Lewis

by 알바트로스 Aug 04. 2023

LLM과 자연어처리의 역사(2)

임베딩(Embedding) 모델이란?

지난 시간(LLM과 자연어처리의 역사(1))에서는 원핫 인코딩(one-hot encoding)과 BoW(Bag-of-Words)라는 개념을 살펴봤다. 이를 통해 컴퓨터가 인간의 언어를 0과 1의 이진수로 변환하여 이해하고 표현하는 방식을 이해할 수 있었다. 또한 여러 문서간 비교를 통해 단어의 출현 빈도를 측정하는 방법으로 단어의 특징과 상대적인 중요도를 파악할 수 있는 DTM(document-term matrix)과 TF-IDF(term frequency-inverse document frequency) 기법에 대해서도 알아보았다.


카운트 기반 단어 표현은 텍스트마이닝이나 텍스트 분석에 많이 활용된다. 이해하기 쉽고 구현도 간단하면서도 준수한 성능을 보여주기 때문이다. 예를 들어, 온라인 쇼핑몰 에서 TF-IDF로 추출된 단어들을 활용함으로써 특정 상품에 대한 고객들의 리뷰를 감정분석(sentiment analysis)하여 해당 제품에 대한 고객들의 평가가 긍정적인지 부정적인지 알 수 있다. 마찬가지로 배달 플랫폼에서는 다양한 음식점의 리뷰 데이터에서 단어의 빈도를 추출하여 고객들이 어떤 상품을 선호하는지 경향성을 분석할 수도 있다.


카운트 기반 단어 표현 방식은 위와같이 많은 장점을 가지고 있지만, 치명적인 문제점을 가지고 있다. NLP(자연어 처리)를 공부할 때에는 현재의 최고 수준인 SoTA(State-of-The-Art) 알고리즘이 나오기까지 과거의 알고리즘들이 가지는 한계점을 명확히 이해하는 것이 중요하다. 왜냐하면 자연어 처리가 과거의 문제점들을 해결하고 보완하는 방식으로 발전해왔기 때문이다.


따라서 이번 시간에는 카운트 기반 단어 표현 방식의 가장 큰 약점 중 하나인 '문맥 파악 능력'을 비롯하여 단어 행렬의 차원이 무한대로 수렴할 수 있는 희소 행렬(sparse matrix) 문제에 대해 살펴보자. 또한, 이러한 한계점들을 극복하기 위해 고안된 분포 기반 단어 표현 방식(distribution-based word representation)에 대해 알아보자.


인코딩(encoding) 기반 단어표현방식의 한계점


1.문맥파악이 불가능하다



단어의 순서를 전혀 고려하지 않는 Bag of Words(출처 : Kaggle)


"Time flies like a bullet"은 문맥에 따라 두 가지 다른 의미로 해석될 수 있다. 첫 번째로 "시간은 총알처럼 빠르게 흐른다"는 의미로 해석될 수 있으며, 두 번째로는 "시간 파리들은 총알을 좋아한다"는 의미로 해석될 수도 있다. 이러한 해석의 차이는 단어 'fly'와 'like'의 다른 의미에 기인한다. 'fly'라는 단어는 '날다'라는 동사와 '파리'라는 명사 두 가지 완전히 다른 의미로 해석될 수 있다. 'like'는 '좋아하다'라는 동사 또는 '~와 같다'라는 형용사로 해석될 수 있는데, 이는 문장의 문맥에 따라 달라진다.


그러나 Bag of Words (BoW) 방식은 단어의 등장 횟수에만 기반하여 단어를 표현하기 때문에, 이러한 자연어의 다의성을 전혀 반영하지 못한다. 따라서 BoW 방식은 문장이 두 가지 완전히 다른 방식으로 해석될 수 있는 자연어(Natural Language)의 특성을 전혀 반영하지 못하는 것이다.

 

2.희소행렬(sparse matrix) 문제


원핫 인코딩에 의존하는 Bag of Words (BoW) 방식은 단어를 0과 1의 이진수로 표현하는 방법임을 배웠다. 예를 들어, 'I like an apple'이라는 문장을 BoW 방식으로 표현하면 'I(1000)', 'like(0100)', 'an(0010)', 'apple(0001)'로 이루어진 행렬로 표현할 수 있다. 'I like an apple'은 4차원 행렬로 표현될 수 있다.


이와 같이 단어 수가 상대적으로 적을 때는 BoW 표현 방식이 문제가 되지 않겠지만, 예를 들어 100만 개의 문장을 포함하는 단어가 있다면 어떨까? 그 단어를 표현하기 위해서는 100만 차원의 행렬을 생성해야 하는데, 사실상 불가능한 일이다.


이렇게 대부분이 '0'으로 구성되고, 저장 공간은 크지만 내포된 정보는 적은 문제를 희소 행렬 (Sparse Matrix) 문제라고 하는데, 이는 BoW 방식의 가장 치명적인 한계점으로 볼 수 있다. 이러한 문제를 해결하기 위해 밀집 행렬 (Dense Matrix)이라는 개념이 소개되었다. 이에 대해 뒷부분에서 자세히 다루도록 하겠다.

 

희소행렬(Sparse Matrix)은 공간의 낭비가 심하다 (출처 : Tensorflow)

  

분포 기반 단어표현(Distribution-based Word Representation)

 

위와 같은 치명적인 한계를 극복하기 위해 등장한 해결사가 분포 기반 단어 표현이다. 분포 기반 단어 표현은 분포 가설(distribution hypothesis)에 기반을 두고 있으며, 앞뒤의 단어를 알면 그 사이의 단어도 확률적으로 유추할 수 있다는 개념이다. 이 방법론은 단순히 등장 단어의 빈도수를 고려하는 카운트 기반 단어 표현 방식에 비해 인간의 언어를 더욱 정확하게 표현할 수 있다. 예를 들어, '학생이 책을 읽고 있습니다'라는 문장에서 각 위치에 어떤 단어가 올지 유추하고자 한다고 가정해보자. '학생이'와 '책을'이라는 단어만으로도 우리는 그 사이에 위치하는 단어가 '읽고'가 될 확률이 높다는 사실을 알 수 있다.


즉, 분포 기반 단어 표현은 '대체로 자연어의 문장은 비슷한 분포를 가지기 때문에, 확률적으로 어떤 단어가 올지 예측할 수 있다'는 아이디어에서 출발했다. 이러한 분포 가설을 구현한 핵심 알고리즘은 단어를 벡터로 변환하는 Word2Vec이다. Word2Vec은 주변 단어들을 통해 가운데에 들어갈 단어를 예측하는 CBOW(Continuous Bag-of-Words)와 반대로 한 단어를 보고 그 주변에 들어갈 단어들을 예측하는 Skip-gram 방식으로 나뉜다.


Word2Vec 알고리즘을 업그레이드하여 성능을 개선한 알고리즘들도 등장했는데, 그 중에는 FastText와 Glove가 있다. FastText는 Word2Vec에 철자 방식의 임베딩을 추가한 방법이며, Glove는 카운트 기반 단어 표현과 분포 기반 단어 표현을 모두 활용하는 방법이다.


1.워드 임베딩(Word Embedding)과 임베딩 모델(Embedding Model)


본격적으로 Word2Vec을 학습하기 전에, Word2Vec의 기반이 되는 워드 임베딩(Word Embedding)을 알아보자. 이전에 우리는 컴퓨터가 단어를 표현하는 방식으로 원핫 인코딩을 배웠다. 그러나 원핫 인코딩은 단어의 수가 증가함에 따라 벡터의 차원이 무한히 커질 수 있는 치명적인 한계인 희소행렬(Sparse Matrix) 문제를 가지고 있었다. 이러한 한계점을 극복하기 위해 워드 임베딩(Word Embedding) 방식이 등장하였다.


워드 임베딩으로 표현한 단어들은 Dense하며, 유사도를 측정할 수 있다 (출처 : Tensorflow)


원래 임베딩이라는 영어 단어는 무언가를 '단단하게 박아넣다'라는 의미를 가지고있다고 한다. 자연어처리에 사용되는 임베딩이라는 용어 역시 같은 맥락에서 실수(real number)속에 여러 단어의 의미를 단단히 응축하여 박아넣는다고 생각할 수 있다. 워드 임베딩은 이진수 대신 실수값을 사용하여 훨씬 적은 차원의 행렬로 많은 정보를 표현할 수 있다. 워드 임베딩을 거친 단어 표현 벡터는 많은 정보가 담겨있어서 밀집 벡터(dense vector)라고도 부른다. 즉, 기존의 원핫 인코딩으로 표현하면 1000개의 차원이 필요했던 문장을 워드 임베딩을 사용하면 10분의 1 수준으로 차원을 줄일 수 있다. 이러한 차원 축소(dimension reduction) 개념이 적용된다.


이처럼 임베딩 기법을 사용하는 언어모델을 임베딩 모델이라고 한다. 임베딩 모델은 인코딩 기반 단어표현 방식과는 다르게 예측이 가능하다. 또한 0과1의 이진수로 구성된 원핫 인코딩에서는 단어 간의 관계를 계산하는 것이 불가능했지만, 실수값으로 구성된 워드 임베딩을 거치면 단어 간의 유사도(similarity) 계산도 가능해진다. 이러한 원리로 위에서 언급한 통계학의 분포 가설을 통한 단어 예측(prediction)이 가능해지는 것이다.

 

2. 컴퓨터도 빈칸 채우기로 언어를 배운다! : Word2Vec


Word2Vec은 2013년에 개발된 인공신경망(Artificial Neural Network, ANN) 기반 모델이다. 이 모델은 문장 속 단어를 유추하는 비지도학습(unsupervised learning) 방식을 사용하므로, 사람이 일일이 단어의 유사성을 지정해주지 않아도, 분포 가설을 통해 스스로 단어 간의 유사성을 예측하여 문장 속 단어를 맞추는 방식으로 작동한다. Word2Vec의 작동 방식은 크게 CBOW와 Skip-gram 두 가지로 나뉜다.


CBOW(Continuous Bag-of-Words)


CBOW는 주변의 여러 단어를 보고, 그 사이에 들어갈 단어를 예측하는 방식이다. 이는 어학 시험에서 자주 등장하는 빈칸 채우기와 유사한 개념으로 직관적으로 이해할 수 있다.


CBOW 예시(출처 : DIVE INTO DEEP LEARNING)


Skip-gram


Skip-gram은 한 가지 단어를 보고 그 주변에 올 단어들을 예측하는 방식이다. 한 가지 단어만 보고 앞뒤의 단어를 예측해내야 한다는 개념은 우리 인간에게는 낯설 수 있지만, 오히려 CBOW보다 더 좋은 성능을 보이는 것으로 알려져 있다.


Skip-gram 예시(출처 : DIVE INTO DEEP LEARNING)



3. 그밖의 다양한 임베딩 모델


Word2Vec라는 임베딩을 활용한 가장 기초적인 모델을 통해 임베딩 모델의 작동방식에 대해 알아보았다. 그러나 이는 기초를 다지기 위한 것일 뿐 GloVe (Global Vectors for Word Representation), FastText, ELMO (Embeddings from Language Models) 등 실로 다양하고 성능도 좋은 임베딩 모델들이 존재한다. 임베딩 모델의 발전과정에 대해 추가적인 지식을 얻고싶다면 아래 논문들의 일독을 권한다.


[임베딩 모델 관련 논문 리스트]


Efficient Estimation of Word Representations in Vector Space

Distributed Representations of Words and Phrases and their Compositionality

GloVe: Global Vectors for Word Representation

Supervised Learning of Universal Sentence Representations from Natural Language Inference Data


이번 시간에는 분포 기반 단어 표현 방식 알고리즘인 Word2Vec에 대해 살펴보았다. 컴퓨터는 워드 임베딩(Word Embedding) 과정을 통해 단어를 표현함으로써 카운트 기반 단어 표현 방식이 가진 희소행렬 문제와 단어 간의 관계 파악 문제를 해결하였다. 또한, 분포 가설(Distribution Hypothesis)을 도입함으로써 예측(Prediction)이라는 개념을 구현할 수 있게 되었다. 그러나 분포 기반 단어 표현 방식 역시 완벽하지는 않다. 다음 시간에는 분포 기반 단어 표현 방식의 한계점을 알아보고, 이를 보완하기 위한 새로운 NLP 기법에 대해 알아보도록 하겠다.

매거진의 이전글 LLM과 자연어처리의 역사(1)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari