Word2Vec #1, (개념, CBOW와 Skip-gram)
- 인공지능 및 데이터과학/자연어처리
- 2021. 5. 10.
Word2Vec를 이해하기 전에 우선 희소 표현과 분산 표현에 대한 이해를 하지 못했다면 아래의 포스팅을 보고 표현들의 개념을 익히길 권장한다.
워드투벡 혹은 워드투벡터는 분산 표현을 만들기 위해서 가장 많이 활용하는 강력하고 범용적인 단어 임베딩(Word Embedding) 모델이다. 구글(Google)에서 2013년에 발표했으며, CBOW(continuous bag-of-words)와 skip-gram 이라는 2가지의 모델로 제안이 되었다.
CBOW(Continuous bag-of-words)
CBOW 모델의 경우 context words라는 주변의 단어들을 이용해서 target word를 예측하는 모델이다.
"나는 대한민국 국민이다"라는 문장이 있다고 가정을 해보자. Input은 "나는", "대한민국", "국민이다"라는 것들이 되며 이 문장들을 학습하여 "나는 ~ 국민이다" 안에 들어갈 단어를 예측해 낼 수 있다.
이때 주변 단어를 몇개 쓸 것인지 학습을 할 때 선택할 수 있는데 이를 윈도우 크기(Window size)라 한다. 예를 들어 윈도우 크기를 2로 할 경우 학습 시 앞뒤 단어 2개를 사용하여 중간에 있는 단어를 예측하게 된다.
Skip-Gram
주변의 단어들의 문맥(context)를 학습하여 단어를 예측하는 CBOW라고 한다면 반대되는 개념을 Skip-Gram이라 한다. 즉 "~ 대한민국 ~"가 있을 경우 대한민국의 주변 단어들을 예측해내는 것이 Skip-Gram이다.
Skip-Gram도 CBOW 처럼 윈도우 개념을 사용하며 하나의 단어를 기반으로 주변의 단어를 몇개까지 예측하는지를 역시 Window로 표현한다. 1일 경우 앞뒤 한개씩, 2일 경우 앞뒤 2개씩을 학습하며 예측한다.
대충 성능은 CBOW가 더 좋을거라 예측할 수 있어서 Skip-Gram은 왜 쓰는 것일까 생각할 수 있지만 분산 표현력은 Skip-Gram이 더 우수하며 CBOW는 학습 속도가 빠른 장단점들을 각각 가지고 있다.
Word2Vec의 강력한 장점
우리가 여자와 남자 혹은 대한민국과 서울이라는 서로간에 연관성이 있는 단어를 찾을 때 Word2Vec을 활용할 경우 매우 강력한 위력을 보여준다.
Word2Vec은 수많은 차원으로 학습을 진행하며 의미별로 위치와 차이값을 두기 때문에 중국의 수도와 베이징을 학습했다면 한국과 수도라는 값을 질의문으로 던졌을 때 서울이라는 값을 리턴해줄 수 있다. 그래서 초창기 Word2Vec을 가장 많이 활용한 곳이 연관 키워드였으며 지금도 많은 활용을 하고 있는 중이다.
Word2Vec의 위 샘플 예제를 보다시피 mother로 부터 boy와 daughter를 유추해 낼 수 있을 정도이고 slow, slower, slowest를 학습하여 fast를 faster와 fastest까지 연계할 수 있게 된다. 물론 위와 같은 고퀄리티를 위해서는 데이터 전처리도 필요하며 매우 이상적인 데이터를 확보하거나 만들어야 될 것이다.
Word2Vec을 구현하는 방법은 많이 있으며 대표적으로 tensorflow와 같은 딥러닝 라이브러리로도 구현할 수 있지만 보통 Gensim이라고 하는 라이브러리를 보편적으로 활용하게 된다. 단지 2줄만으로 word2vec을 구현할 수 있고 성능 역시 나쁘지 않고 사용하기 매우 직관적이기 때문이다.
Word2Vec 실습은 이번 포스팅에서 하지 않고 바로 연속된 다음 포스팅에서 진행하며 모델 생성 및 활용 방법까지 정리하고자 한다.
연관포스팅
#워드투벡터 #Word2Vec #워드임베딩 #임베딩
'인공지능 및 데이터과학 > 자연어처리' 카테고리의 다른 글
Word2Vec #3, 모델 활용(사용)하기 (0) | 2021.05.20 |
---|---|
Word2Vec #2, 기본적인 모델 구현(생성)하기 (0) | 2021.05.18 |
형태소 분석기, Okt(Open Korean Text) (구)트위터 형태소분석기 (2) | 2021.01.16 |
[Java] 자바로 한글 자모(초성,중성,종성) 분리(추출)하기 (+개념) (0) | 2021.01.12 |
[Java] 자바 아스키코드및 유니코드로 문자 변환 (0) | 2021.01.12 |