인공지능을 이용해 영어 단어의 연관성을 분석하고, 그 분석 정보를 바탕으로 영어 단어를 입력했을 때 함께 공부하면 도움이 될 영어단어를 추천해주는 앱을 개발하려고 한다. 그 과정에서 인공지능 부분을 맡게 되면서 인공지능을 이용해 영어 단어의 연관성을 찾는 방법에 대해 공부를 하고 있다.
단어의 연관성 탐색을 하는 인공지능 알고리즘 중에 Word2Vec라는 알고리즘이 있기에 깊이 공부해보려 한다.
▶ Word2Vec란?
- 신경망을 기반으로 한 비지도 학습 알고리즘
- 자동으로 단어 사이의 관계를 학습한다.
- Word2Vec 아이디어: 비슷한 의미를 가진 단어를 비슷한 클러스터*로 모으는 것
- Word2Vec에서 만든 벡터 공간을 이용하면 간단한 벡터 연산으로 단어를 생성할 수 있다.
예) king - man + waman = queen
클러스터*: 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해, 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장하는 방법
+) word2vec 알고리즘은 BoW 모델을 대체할 수 있는 방법이다. (Bow 모델도 이후에 공부해보기)
<작동 원리>
- text 언어 자료를 받아 단어 벡터를 생성한다.
- 먼저 훈련 텍스트 데이터에서 어휘를 구성한 다음, 단어의 벡터 표현을 학습한다.
- 학습된 표현을 조사하는 간단한 방법: 사용자가 지정한 단어에 가장 가까운 단어를 찾는 것. (입력한 단어에 대해 가장 유사한 단어와 해당 단어까지의 거리를 표시함)
→ 그렇다면 거리는 어떻게 계산하는 걸까?
- word2vec에는 두 가지 주요 학습 알고리즘이 있다.
1) continuous bag-of-words
2) continuous skip-gram
- 두 알고리즘 모두 문장의 다른 단어를 예측하는 데에 유용한 단어 표현을 학습한다.
→ 해당 알고리즘 찾아보고 공부하기 (아래에 간단히 설명)
- 단어 벡터의 속성?
: 벡터가 단어의 많은 언어적 규칙성을 포착함
vector('Paris') - vector('France') + vector('Italy') = vector('Rome ')
vector('king') - vector('man') + vector('woman') = vector('queen')
- 단어 벡터의 품질에 영향을 미치는 요소
- amount and quality of the training data (훈련 데이터의 양과 품질)
- size of the vectors (벡터의 크기)
- training algorithm (훈련 알고리즘)
<원핫 인코딩(one-hot encoding)>
- 단어에 번호를 매기고, 그 번호에 해당하는 요소만 1, 나머지는 0을 갖는 벡터로 바꿈.
- N개의 단어가 있다면, 각 단어는 한 개의 요소만 1인 N차원의 벡터로 표현됨.
- 단점: 벡터 표현에 단어와 단어의 관계가 전혀 드러나지 않는다는 것
예) '강아지'와 '멍멍이'라는 단어가 있을 때 의미가 비슷한데도 불구하고 전혀 다른 벡터로 표현이 됨.
→ 벡터에 단어의 의미를 담을 수 있다면? 비슷한 단어들을 비슷한 벡터로 표현할 수 있다면? 단어와 단어 같의 관계가 벡터를 통해 나타날 수 있다면?
- 단어 임베딩(word embedding)
: 단어를 벡터로 바꾸는 모델
→ word2vec는 단어 임베딩 모델들 중 대표적인 모델임
- 벡터 간에는 덧셈 뺄셈이 가능 → 벡터 간의 덧셈 뺄셈이 해당하는 단어 간의 의미의 합과 의미의 차로 반영됨,
- 어떻게 이런 벡터 연산으로 단어 간의 관계를 파악할 수 있을까? 단어의 의미가 벡터에 잘 담겨있기 때문.
- 어떻게 벡터에 단어의 의미를 담을 수 있을까?
< feature representation >
: 대상의 속성을 표현하는 방식
- 데이터: 대상의 속성을 표현해놓은 자료
- 자연어 처리의 경우: 대상은 텍스트이고, 데이터는 해당 텍스트의 속성을 표현해놓은 것이다.
- feature representation: 그 단어가 '강아지'라는 것 자체, 단어의 품사, 앞 단어가 무엇인지, 문장에서 몇 번째 단어인지, 단어가 긴지 짧은지 등의 언어적 정보를 추출해서 표현하는 것
- 대상의 속성을 표현 하는 방법
1) sparse representation (=one-hot encoding)
2) dense representation (=word2vec)
1) Sparse representation (예: one-hot encoding)
- 해당 속성이 가질 수 있는 경우의 수를 각각 독립적인 차원으로 표현
- sparse vector(희소 벡터): 벡터의 값 중 대부분이 0이고, 몇 개만 값을 갖고 있는 벡터
2) Dense representation (예: word2vec)
- 각 속성을 독립적인 차원으로 나타내지 않고, 정해둔 개수의 차원으로 대상을 대응시켜서 표현
- 속성을 N차원으로 표현하는 경우, 그 속성을 N차원 벡터에 대응시키는 것 (=임베딩 embedding)
+) 임베딩하는 방식은 머신러닝을 통해 학습하게 된다.
- 원핫 인코딩처럼 희소 벡터가 아니라, 모든 차원이 값을 가지고 있는 벡터로 표현아 됨.
- dense representation = distributed representation
- 하나의 정보가 여러 차원에 분산되어 표현됨.
= 하나의 차원이 하나의 속성을 명시적으로 표현하지 않고, 여러 차원이 조합되어 속성을 표현함.
→ 각각의 차원이 어떤 의미를 갖는지는 알 수 없지만, 각 단어가 얼마나 비슷하고 다른지는 벡터 간의 거리를 통해 알 수 있음.
- 단어 벡터의 값들을 머신 러닝을 통해 학습되며, word2vec가 그 학습 방법론 중 하나임.
+) dense representation이 sparse representation에 비해 가지는 장점
1. 적은 차원으로 대상을 표현할 수 있다.
- 입력 데이터의 차원이 높으면 차원의 저주라는 문제가 생김
- 입력 데이터에 0이 많으면 데이터에서 정보를 뽑아내기 어렵기 때문에 sparse representation을 쓰면 모델의 학습이 어렵고 성능이 떨어지기 쉬움.
- dense representation으로 단어를 표현할 때는 보통 20~200차원 정도를 사용.(sparse는 몇 천 자원이 필요)
- 각각의 차원이 모두 정보를 들고 있어 모델이 더 작동하기 쉬워짐
2. 더 큰 일반화 능력을 가지고 있다.
예) '강아지'와 '멍멍이'가 서로 비슷한 벡터로 표현이 된다면 '강아지'에 대한 정보가 '멍멍이'에도 일반화될 수 있음.
'강아지'를 입력으로 받고, '애완동물'이라는 출력을 하도록 모델이 학습된다면, '멍멍이'도 비슷한 출력이 나올 가능성이 높음. '강아지'라는 단어에 대해 배운 지식을 '멍멍이'라는 단어에도 적용가능.
<word2vec>
- 단어 임베딩을 학습하는 알고리즘 중 하나(가장 자주 쓰임)
- 단어의 주변을 보면 그 단어를 알 수 있으므로, 단어의 주변이 비슷하면 비슷한 단어이다.
- 문장의 빈 칸에 들어갈 수 있는 단어들은 어느 정도 비슷한 맥락을 가진다고 볼 수 있다.
- 비슷한 맥락을 갖는 단어에 비슷한 벡터를 주는 방법
→ word2vec는 predictive method라는 방식에 속함
- predictive method
: 맥락으로 단어를 예측하거나, 단어로 맥락을 예측하는 문제를 마치 지도학습처럼 푸는 것
- 이 예측 모델을 학습하면서, 단어를 어덯게 표현할지를배우게 되고 비슷한 단어가 비슷한 벡터로 표현된다.
- word2vec는 지도 학습을 닮았지만, 비지도 학습 알고리즘임.
- 어떤 단어끼리 비슷한지 사람이 알려주지 않아도 비슷한 단어들을 찾아낼 수 있음.
- 모든 텍스트들을 학습 데이터로 사용할 수 있다.
<word2vec의 방식>
1) CBOW(continuous bag-of-words)
: 맥락으로 단어를 예측
- CBOW 모델은 맥락(주변 단어)로 타겟 단어를 예측하는 문제를 푼다.
- 주변 단어: 보통 타겟 단어 직전 몇 단어와 직후 몇 단어
- 주변 단어의 범위: window
- 앞뒤로 몇 단어까지 볼지는 지정 가능. (window size)
- word2vec는 데이터셋을 만들 때, sliding window라는 방법을 사용.
- sliding window: window를 점차 옆으로 밀면서 타겟 단어를 계속 바꾸는 방식
- 이렇게 만들어진 window 하나하나가 학습데이터가 됨.
- CBOW는 맥락으로 단어를 예측하는 문자를 풀기 때문에, '주위에 있는 단어가 입력이 되고 타겟 단어가 예측해야 할 출력값이 되는' 문제를 푼다.
- 이 과정에서 모델의 파라미터를 학습하고, 학습된 파라미터가 단어들의 벡터 표현이 된다.
- 처음 파라미터는 랜덤으로 초기화된 상태로 시작해서, 이 파라미터로 예측을 하고 실제 값과 차이가 생기면 오차를 조정해나간다. 이 과정을 학습 데이터셋을 돌아가며 반복한다. (=backpropagation) cost funstion(비용 함수)가 최소화되는 쪽으로 파라미터를 업데이트해 가는 것.
- 입력이 비슷하면 출력도 비슷한데, CBOW에서 모델의 입력은 주변 단어이므로 주위에 있는 단어가 비슷하면 그 단어의 벡터 표현도 비슷해진다. (벡터가 비슷하다 = 벡터 간의 거리가 짧다) → 이런 방식으로 비슷한 맥락의 단어에 비슷한 벡터를 주는 것.
2) continuous skip-gram
: 단어로 맥락을 예측
- CBOW 모델을 반대로 뒤집으면 skip-gram 모델이 됨.
+) 참고 링크
'MI Lab > Word2Vec - 2021.11~2022.01' 카테고리의 다른 글
[단어 연관도 - Lab meeting] Skip-gram 활용 사례 - 2021.11.29.월 (0) | 2021.12.27 |
---|---|
[단어 연관도 - Lab meeting] Word2Vec - 2021.11.22.월 (0) | 2021.12.27 |
[단어 연관도 - Lab meeting] 영단어 추천 사례 - 2021.11.08.월 (0) | 2021.12.27 |
[단어 연관도 - Lab meeting] 연구 과제 변경 - 2021.11.01.월 (0) | 2021.12.27 |
[단어 연관도 분석] Word2Vec > skip-gram (0) | 2021.12.05 |