자연어처리 (NLP)

임베딩(Embedding)이 뭐지?

jeongpil 2021. 7. 28. 20:24

*해당 포스팅은 한국어 임베딩(이기창 지음)을 공부하며 작성한 글입니다.

 

 

 

안녕하세요! 오늘은 자연어 처리 분야의 임베딩의 기초적인 부분에 대해 알아보겠습니다.

 

임베딩을 공부하게 된 계기는 "우리가 일상생활에서 쓰는 자연어를 어떻게 컴퓨터가 이해할 수 있는지 궁금해서" 입니다.

 

한국어 임베딩(이기창 지음)이라는 책으로 임베딩 공부를 시작하게 되었고 앞으로 열심히 공부해서 임베딩에 대해 자세히 알아보겠습니다 : )

 

 

1. 임베딩이란?

2. 임베딩의 역할

  2-1. 단어/문장 간 관련도 계산

  2-2. 의미적/문법적 정보 함축

  2-3. 전이 학습

 

 

 

1. 임베딩이란?

 

 

 

 

임베딩이란 위와 같이 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체의미합니다.

 

임베딩의 가장 간단한 형태단어의 빈도를 그대로 벡터로 사용하는 것입니다.

 

문서 A, B, C에 단어 i, j, k가 나타나는 빈도를 표를 통해 알아보겠습니다.

 

이러한 표를 단어-문서 행렬이라고 부릅니다.

 

 

 

 

문서 A의 임베딩은 [0,1,1]T 이고 단어 i의 임베딩은 [0,3,5] 입니다.

 

이 표를 통해 몇 가지를 추정해 볼 수 있습니다.

 

문서 B와 문서 C의 단어 빈도를 살펴봤을 때 매우 유사한 것을 보면 문서 B와 문서 C는 비슷한 내용의 문서라고 추정해 볼 수 있습니다.

 

또한, 단어 j와 단어 k는 같이 등장한 것을 보면 단어 j와 단어 k 간의 의미 차이가 단어 j와 단어 i 간의 의미 차이보다 작을 것이라고 추정해볼 수 있습니다.

 

즉, 이처럼 임베딩이란 단어나 문장, 문서를 벡터로 변환시킨 값이나 그 과정을 말하며

 

이렇게 변환시킨 벡터 값에 의미와 정보를 손실없이 잘 담아낼수록 좋은 임베딩이라 할 수 있고, 임베딩의 방법은 여러 가지가 존재합니다.

 

이에 대해서는 추후에 자세히 알아보도록 하겠습니다.

 

 

2. 임베딩의 역할

 

2-1. 단어/문장 간 관련도 계산

 

위의 단어-문서 행렬은 가장 단순한 형태의 임베딩이며 현업에서는 이보다 복잡한 형태의 임베딩을 사용합니다.

 

대표적인 예시로 구글에서 발표한 Word2Vec 기법이 있습니다.

 

이를 통해 단어들을 벡터로 바꿀 수 있습니다.

 

Word2Vec 임베딩을 통해 단어 벡터는 위의 단어-문서 행렬보다 다양한 숫자를 가집니다.

 

"희망"이라는 단어를 Word2Vec 기법을 통해 임베딩하게 되면

 

 

 

 

위의 벡터 값으로 변환됩니다.

 

열의 개수는 100차원으로 임베딩했을 경우 100개가 됩니다.

 

이렇게 변환된 벡터들을 이용하여 단어 벡터들 사이의 유사도를 계산할 수 있습니다.

 

유사도 측정 기법의 일종인 코사인 유사도를 통해 구해진 쿼리 단어들의 유사도(관련도) 상위 5개를 살펴보겠습니다.

 

 

 

 

"학교"와 가장 코사인 유사도가 높은 것은 "초등"이고 "가족"은 "부모", "희망"은 "소망"이고 이들은 관련성이 높다고 볼 수 있습니다.

 

자연어일 때 불가능했던 유사도 계산이 임베딩 덕분에 가능해졌습니다.

 

 

※ 코사인 유사도 ※

 

코사인 유사도란 두 벡터간의 코사인 값을 이용하여 구할 수 있는 두 벡터의 유사도를 의미합니다.

 

두 벡터의 방향이 완전히 동일한 경우에는 1, 90°를 이루면 0, 정반대의 방향을 가지면 -1 값을 가집니다.

 

즉 코사인 유사도 값이 1에 가까울수록 유사도가 높다고 판단할 수 있습니다.

 

구하는 식은 다음과 같습니다.

 

 

출처 : https://wikidocs.net/24603

 

 

2-2. 의미적/문법적 정보 함축

 

임베딩은 벡터인 만큼 사칙연산이 가능합니다.

 

단어 벡터 간 덧셈/뺄셈을 통해 단어들 사이의 의미적, 문법적 관계를 도출해낼 수 있습니다.

 

구체적으로는 단어 벡터1 - 단어 벡터2 + 단어 벡터3 을 계산해보는 것입니다.

 

예를 들면, "아들" - "딸" + "소년" 을 계산했을 때 "소년" 이 나오면 성공적인 임베딩이라 볼 수 있습니다.

 

아들과 딸사이의 차이는 성별이고 소년과 소녀의 차이도 성별이기 때문에 "아들" - "딸" = "소년" - "소녀" 가 되는 것입니다.

 

이렇게 의미 차이가 임베딩에 잘 함축되어 있으면 품질이 좋은 임베딩이라고 할 수 있습니다.

 

이렇게 단어 임베딩을 평가하는 방법을 단어 유추 평가라고 부릅니다.

 

몇 가지 예시를 더 보여드리겠습니다.

 

 

 

 

단어1 - 단어2 + 단어3 연산을 수행한 벡터와 코사인 유사도가 가장 높은 단어들이 결과 열의 단어입니다.

 

이렇게 임베딩을 통해 생성된 단어 벡터 간의 사칙연산을 통해서 단어들 사이의 의미적/문법적 관계를 도출해낼 수 있습니다.

 

 

2-3. 전이 학습

 

임베딩은 다른 딥러닝 모델의 입력값으로 자주 쓰이고 품질 좋은 임베딩을 쓸수록 모델의 성능이 좋아집니다.

 

이렇게 임베딩을 다른 딥러닝 모델의 입력값으로 쓰는 기법을 전이 학습이라고 합니다.

 

전이 학습은 사람이 학습하는 방식과 비슷합니다.

 

사람은 무언가를 배울 때 살면서 쌓아 온 지식을 바탕으로 새로운 사실을 이해하고 학습합니다.

 

전이 학습 모델도 마찬가지로 0 부터 시작하지 않습니다.

 

대규모 말뭉치를 활용해 임베딩을 미리 만들어 놓고, 이 임베딩을 입력값으로 쓰는 전이 학습 모델은 문서 분류같은 태스크를 빠르게 잘할 수 있게 됩니다.

 

임베딩의 품질이 좋을수록 수행하려는 태스크의 성능이 올라가고 학습 손실도 적고 빠르게 감소하여 모델의 수렴이 빨라집니다.

 

즉, 품질이 좋은 임베딩을 쓰면 원하는 모델을 빠르고 효율적으로 학습할 수 있습니다.

 

임베딩이 중요한 이유입니다.

 

 

 

오늘은 임베딩의 개념과 역할에 대해 알아보았습니다. 앞으로는 벡터에 의미를 담는 방법과 여러 임베딩 방법에 대해 알아보겠습니다 : )