Data/자연어처리

임베딩 (1) / 임베딩 개념

빛날희- 2021. 7. 28. 17:55

파이토치로 배우는 자연어처리 책을 참고하여 작성했습니다. 

참고 강의- 단어 임베딩


▶ 임베딩(embedding)의 정의와 필요성

컴퓨터가 텍스트를 인식 처리할 수 있도록 단어나 문장을 벡터로 바꾼 것 혹은 그 과정을 임베딩이라고 한다.

임베딩 방식에는 전통적으로 사용해오던 원핫벡터, 카운트 기반의 TF-idf방식 등이 있다.

 

카운트 기반의 방식은 중요 내용이나 의미가 벡터의 여러차원에 표현되기 때문에 분산적 표현이라고도 부른다.  분산표현은 문서에 존재하는 단어들 보다 낮은 차원의 밀집벡터로 나타내지만 그럼에도 여러 차원에 비슷한 정보를 중복해 인코딩한 벡터를 만들기 때문에 통계적 장점을 공유하지 못한다. 또한 카운트 기반 표현은 차원이 수백만개로 늘어날 경우 상당히 고차원의 입력값 생성될 수 있는데, 이는 머신러닝과 최적화에서 문제 될 수 있으며 계산을 비효율적으로 만든다.

 

따라서 원핫벡터나 카운트기반 표현보다 계산을 효율적으로 수행할 수 있고 모델을 최적화하는데 유리할 수 있도록 저차원의 임베딩을 적용하는 것이 중요하다. 

 

 

 

 사전학습된 단어임베딩

우리가 텍스트 데이터를 이해할때 사전지식이 있으면 내용을 더 잘 이해할 수 있는 것처럼 임베딩을 구축할 때 또한 해당 텍스트 데이터만을 가지고 임베딩을 구축하는 것 보단 이미 대용량의 텍스트 데이터로 사전학습된 임베딩을 조정하여 사용하는 것이 단어들을 더 잘 표현할 수 있을 것이다. 

 

위키피디아, 구글 뉴스 등 대용량 데이터를 대상으로 사전학습된 단어 임베딩은 GloVe, FastText등 무료로 제공받아 사용할 수 있다.

사전학습된 임베딩은 일반적으로 각 줄은 임베딩된 단어를 시작으로 하여 그 뒤부터는 단어에 해당하는 벡터표현이 나열되어 있다. 벡터표현의 길이는 임베딩 차원으로 보통 수백개 정도의 길이를 가진다. 

 

 

 

 임베딩의 전이학습

전이학습은 임베딩을 딥러닝 모델의 입력값으로 사용하는 학습을 말한다. 만일 딥러닝 입력값으로 잘만들어진 임베딩을 넣게되면 품질이 낮거나 고차원의 입력값을 넣어 학습한 모델보다 모델의 수렴과 속도가 빨라진다. 

즉 사전학습된 단어 임베딩을 활용하여 단어를 잘 나타내는 벡터로 변환한 후 딥러닝 모델에 넣으면 더 좋은 성능을 얻을 수 있기 때문에 모델의 성능을 높이기 위해 흔히 사용되는 방식이다. 

 

 

 

 단어 수준 임베딩

단어 임베딩의 핵심 기능은 규칙적으로 나타나는 구문과 의미 관계를 인코딩 하는데에 있다. 다시 말해 말뭉치에는 자주 함께 사용되는 단어들에 대한 통계적 정보가 있고 통계적 기반의 문맥정보를 단어 임베딩에 반영함으로써 문서의 의미관계를 파악할 수 있다. 

 

 

그렇단면 단어 수준 임베딩으로 어떻게 문서를 표현할까?

그림 1. 단어 임베딩과 문서 표현

위와 같이 '영화 꿀잼'이라는 문서가 있고 영화와 꿀잼을 나타내는 단어임베딩이 있다고 해보자. 해당 문서의 벡터는 영화와 꿀잼 단어임베딩의 합으로 표현할 수 있다. 즉 단어임베딩의 합으로 문서벡터를 나타낼 수 있기 때문에 이렇게 만들어진 문서벡터를 가지고 문서 분류 등의 태스크를 수행할 수 있는 것이다. 

 

그러나 단어 임베딩은 함께 나타나는 단어의 정보를 기반으로 구축되기에 다음과 같은 단점들이 존재할 수 있다.

 

첫번째,

함께 자주 나타나는 단어들에 대한 정보를 바탕으로 임베딩을 구축하기에 의미가 제대로 반영되지 않은 잘못된 관계를 생성할 수 있다.

 

두번째, 학습 대상이 되는 텍스트에 담겨있는 오랜 문화적 편견이 인코딩에 영향을 주어 편향적인 단어 임베딩이 만들어질 수 있다는 단점이 있다.

 

세번째,

별도의 정보를 주지 않는 한 단어 임베딩은 동음이의어를 구분할 수 없다. 

 

 

 

 문장 수준 임베딩

ElMO와 BERT와 같은 문장 수준 임베딩은 문장 전체를 대상으로 임베딩을 수행하기 때문에 단어임베딩에 비해 문장의 문맥적 의미를 벡터화할 수 있을 뿐만 아니라 단어임베딩의 단점 중 하나였던 동음이의어 인식 문제도 해결할 수 있다. 

문장 수준의 임베딩 기법들을 사용함으로써 자연어 처리 모델의 성능을 상당히 높일 수 있었기에 해당 기법에 대해 공부하고 구현할 줄 안다면 모델 성능 향상에 많은 기여를 할 수 있을 것이다.