2024. 2. 20. 17:26ㆍTIL
임베딩이란
임베딩(Embedding)은 텍스트 데이터를 벡터로 변환하는 기술이다. 이는 텍스트 마이닝을 비롯해 자연어 처리에서 매우 기본적인 과정이다. 글에서 유용한 정보를 추출해 분석하는 과정에서 컴퓨터가 이를 처리할 수 있도록 한다. 단어 임베딩은 하나의 단어를 벡터로 변환하고 문장 임베딩은 문장 자체를 벡터로 변환한다. 임베딩의 결과는 벡터이므로 벡터가 존재하는 벡터 공간에 표현이 가능하다. 만약 단어들을 2차원 벡터로 표현하게 되면 단어들을 평면 위에 표시할 수 있다. 좋은 임베딩이 이루어지면 비슷한 의미의 단어는 비슷한 공간에 존재한다. 하지만 다양한 종류의 단어를 포괄하고, 단어의 의미를 담은 벡터를 만들기 위해 일반적으로 단어는 고차원으로 표현된다.
원핫 인코딩(One-hot encoding)은 임베딩의 한 방법으로 0과 1을 통해 단어를 정의한다. 특정 단어를 표현하는 위치만 1이고 나머지의 위치는 0으로 구성된다. 그래서 단어의 수만큼의 크기를 갖는 벡터를 생성하고 각 단어의 위치(1이 표현되는 위치)는 설정하기에 따라 달라진다. 직관적으로 쉽게 단어를 벡터로 변환 가능하다. 하지만 하나의 단어를 표현하는 벡터의 크기는 전체 단어 수와 같으므로 매우 큰 차원을 가질 수 있어 효율성이 떨어지고 계산 복잡도가 증가하게 된다. 원핫 인코딩의 다른 한계는 의미적으로 비슷한 단어끼리 비슷한 공간에 존재하지 않고 특정 단어의 위치만 1이므로 중요한 정보가 매우 희소하다는 점이 있다.
인코딩과 임베딩 모두 데이터를 새로운 형태로 변환하는 과정을 의미한다.
- 인코딩
- 데이터를 표준화된 형식으로 변환 목적
- 이미 변환 과정은 정의가 되어있고, 그 정의에 맞춰 변환 진행
- 본질적으로 의미가 변하지 않음
- 압축과 비슷한 과정으로 저장과 데이터 전송에 용이
- 데이터의 형식을 변환하는데 중점
- 임베딩
- 머신 러닝 모델이 처리하기 쉬운 형태로 변환 목적
- 데이터의 의미적, 문맥적 특성을 모델이 이해할 수 있는 형태로 변환
- 이를 이용해 머신 러닝 모델은 데이터를 더욱 쉽게 분석하고 처리
분산 표현은 원핫 인코딩의 한계를 극복하기 위해 제안된 개념이다. 분산 표현이란 정수가 아닌 실수(연속적인 값)로 이루어진 벡터로 임베딩 진행한 것이다. 연속적인 실수의 값으로 단어를 변경하면서 데이터의 의미를 여러 특성에 걸쳐 분산시켜 표현한다. 단어나 개체의 의미가 하나의 차원 혹은 공간에 집중되어 표현되는 것이 아니라, 여러 요소에 걸쳐 분산되어 표현됨으로써 다양한 의미와 문맥적 특성을 풍부하게 포착 가능하다. 분산 표현으로 특정 단어가 잘 임베딩이 된다면, 비슷한 의미를 갖는 단어들은 비슷한 분포를 갖게 된다. 즉, 이를 벡터 공간에 표현하면 비슷한 공간에 표현될 수 있다. 또한, 임베딩 벡터도 수의 집합이므로 의미 차원에서 연산이 가능하다.
단어 임베딩 이론 및 실습
원핫 인코딩을 적용하기 위해 문장을 단어의 형태로 분해한다. 이를 tokenize(토크나이즈)라고 한다. 다음으로 고유한 단어 집합을 생성하고 고유 단어에 독립된 인덱스를 부여한다. 각 단어의 인덱스에 1을 부여하고 나머지 자리에 0을 채워 백터를 생성한다.
분포 가설은 분포 표현의 이론적 기반으로 "단어의 의미는 그 단어가 나타나는 문맥에 의해서 결정된다"는 아이디어를 중심으로 하는 언어학 이론이다. 최신 임베딩 기법은 이러한 분포 가설을 기반으로 특정 단어의 의미를 숫자 벡터로 표현하기 위해 문맥과 주변 단어의 이용해 학습 진행하여 연구되고 있다.
Word2Vec는 2013년 구글 연구진에 의해 개발된 알고리즘이다. 문장 위를 움직이는 슬라이딩 윈도우 만들고 해당 윈도우는 이동하면서 동일한 개수의 단어를 포함한다. 그리고 포함된 단어들 사이의 연산을 진행해 각 단어들을 임베딩한다. 두 가지 방법으로 단어를 벡터로 변환하는데 CBOW는 이웃한 단어들로 가운데 단어가 무엇인지 예측하는 과정에서 임베딩을 진행하는 방법이고 Skip-gram는 가운데 단어로 이웃한 단어들을 예측하는 과정으로 임베딩 진행하는 방법이다.
GloVe는 2014년 스탠포드 대학교 연구진에 의해 연구된 알고리즘이다. 전체 글에 단어 간 공동 출현 통계를 이용해 각 단어의 의미를 벡터로 표현하고 각 단어 쌍이 얼마나 자주 같이 나타나는지를 기록한다. 이를 ʻ공동출현행렬’이라고 한다. 공동으로 자주 출현하는 단어들을 벡터 공간 내 비슷한 위치에 존재하도록 임베딩한다.
그 외에도 딥러닝을 활용한 학습 기반 단어 임베딩으로 2018년 구글에서 연구한 단어 별 중요도 기반의 모듈을 활용해 문장 내적과 외적 관계를 바탕으로 임베딩을 진행하는 BERT, 2021년 OpenAI에서 연구한 이미지를 설명하는 글에서 이미지와 텍스트의 공동 의미를 임베딩에 활용한 CLIP이 있다.
문장 임베딩 이론 및 실습
문장 임베딩은 단어 임베딩과 마찬가지로 문장 자체를 숫자의 형태로 변환한다. 단어를 넘어 문장 자체가 갖고 있는 의미를 벡터로 표현하고 이를 이용해 전반적인 글의 이해, 문맥 파악, 글 생성 등 다양한 자연어 처리 작업 진행한다. 문장 임베딩과 단어 임베딩은 서로 다른 목적과 사용 사례를 기반으로 개발되었다.
- 단어 임베딩
- 단어의 의미, 문맥적 유사성, 동의어 등과 같이 단어 수준에서 의미를 활용하는 경우에 사용
- 전체적인 문장의 의미를 한번에 포착하기는 어려움
- 문장 임베딩
- 전반적인 글의 이해, 문맥 파악, 글 생성 등과 같이 문장 혹은 그 이상의 단위에서 정보를 포착하는 경우에 사용
- 글의 전반적인 이해가 쉽게 가능하지만 보다 많은 자원과 계산이 필요
- 단어 수준의 미묘한 변화를 잡아내기가 어려운 단점이 있음
문장에 원핫 인코딩 적용하는 것은 사용하는 전체 단어의 고유 집합을 확보하여 각 단어에 독립된 인덱싱을 진행한다. 문장에 소속된 각 단어를 해당 단어의 인덱스 위치에 1을 부여하고 나머지 부분을 0으로 채운다. 문장은 단어를 기반으로 만들어지는 개념이므로 각 단어들의 임베딩을 이용해 문장의 임베딩을 생성한다. 가장 직관적인 방법으로 각 단어의 임베딩의 평균을 활용할 수 있으나 다른 의미의 문장이 서로 비슷한 임베딩 값일 수 있다. 이를 극복하기 위해 TF-IDF(문장 내 단어의 중요도를 나타내는 척도)를 활용한 단어 가중치를 적용해 문장 임베딩을 생성한다. 이 값을 이용해 각 단어 임베딩에 가중된 값들로 평균값을 활용한다.
문장 임베딩은 단어 임베딩보다 고차원적인 연산이 필요해서 딥러닝 기법을 활용하는 과정에서 많이 발전되었다. 딥러닝 모델이 단어를 임베딩하는 과정에서 전체 문장의 의미를 담는 벡터를 생성하고 문장을 구성하는 각 단어에서 정보를 공급받아 임베딩 벡터를 생성한다.
'TIL' 카테고리의 다른 글
| 토픽 모델링과 워드 클라우드 (0) | 2024.02.21 |
|---|---|
| 감정 분석 (0) | 2024.02.20 |
| 텍스트 마이닝 개요 (0) | 2024.02.19 |
| SageMaker 사용해보기 (1) | 2024.02.11 |
| Regression 모델 만들기 (0) | 2024.02.09 |