본문 바로가기
Study/NLP

자연어 처리의 꽃! - 워드 투 벡터(Word2Vec)

by GodKim 2020. 8. 10.

워드 투 벡터 (Word2vec)


1. 배경

 

 기존의 단어 임베딩 방식은 원핫 인코딩(One-hot encoding)을 사용해왔다. 원핫 인코딩에 대한 설명은 아래의 게시글을 읽어보길 바란다.

https://godcode.tistory.com/9?category=908926

 

01. 텍스트 전처리 - 원-핫 인코딩

www.wikidocs.net/book/2155 의 [딥 러닝을 이용한 자연어 처리 입문]을 공부하고 정리한 글입니다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net 단어 집합(vocabulary)  단어 집합은 앞으

godcode.tistory.com

 하지만 위와 같은 방식은 단어 사전이 무한대로 길어진다는 단점이 존재한다. 또한 단어 간의 의미론적 차이와 연관 관계를 이해할 수 없다는 문제점이 있다. 이를 해결하기 위해 단어를 다차원 공간에 벡터화 시키며 비슷한 분포를 가진 단어들은 비슷한 의미를 가진다는 사실을 발견하게 된 것이다.

 

2. 발상

 워드 투 벡은 "단어의 주변을 보면 그 단어를 안다." - J.R.Firth(1957)의 주장을 바탕으로 그 아이디어가 나왔다. 정확히는 단어 임베딩에 대한 아이디어가 이를 바탕을 두고 있다. 예를 들어 보자. "나는 오늘 저녁에 OO 음식이 땡겨"라는 문장이 주어 졌을 때 OO에 올수 있는 단어를 우리는 "매운", "맛있는" 등으로 어느 정도 예측할 수 있다. 이 자리에 "두려운", "지구" 와 같은 단어는 어울리지 않는다. 

 단어의 주변만 확인해도 어떤 단어가 적합하고 부적합한지 알 수 있는 것이다. 이때, 이 OO 자리에 올 수 있는 단어들은 서로 간에 비슷한 맥락을 지닌 단어라 볼 수 있다. 이 비슷한 맥락을 갖는 단어끼리 비슷한 벡터를 주기 위해선 특정한 모델들을 사용해 지도 학습처럼 예측을 하는 predictive method라는 방식을 사용한다. 워드 투 벡은 위와 같은 이유로 인해 지도 학습처럼 보이지만 사실은 정답지가 필요없는 비지도 학습에 속한다. 

 

3. CBOW (Continuous Bag of Words) 모델

 

CBOW 모델은 맥락(주변 단어)으로부터 타깃(중심 단어)을 추측하는 용도의 모델이다. 예컨데, "나는 점심에 파스타를 먹었고, 너는 점심에 피자를 먹었어" 라는 문장이 있다고 하자. 여기서 "점심에" 를 타깃으로 설정하고 앞 뒤 단어인 "나는""파스타"를 통해 타깃인 "점심에"를 예측하는 것이다. 여기서 문맥으로 살펴볼 앞 뒤 단어의 수는 설정할 수 있으며, 이를 윈도우(window)라고 한다. 만약, 윈도우를 1로 설정하였다면, 앞 뒤 한 단어씩 확인하는 것이므로, 실제 입력으로 들어오는 데이터는 두 개인 것이다.

 이런식으로 윈도우의 크기를 설정하였으면, 워드 투 벡은 타깃을 바꿔가면서 학습 데이터셋을 형성하는데 이를 슬라이딩 윈도우(sliding window)라고 한다. 이러한 방식으로 신경망을 학습시켜 타깃을 예측하는 것이다. 이 과정에서 모델의 파라미터를 학습하고, 학습된 파라미터가 단어들의 벡터가 되는 것이다. CBOW 모델의 입력은 주변 단어베이기에, 입력이 비슷하면 자연스레 출력인 타깃의 벡터 또한 비슷하게 나오는 것이다. 즉, 벡터 간의 거리가 짧다는 뜻이다.

 

4. Skip-gram 모델

 

 Skip-gram은 CBOW 모델의 역이라 생각하면 된다. 즉, 주변 단어를 통해 타깃(중심 단어)를 예측한 것이 CBOW였다면, Skip-gram은 중심 단어에서 주변 단어를 예측한다. 이 모델에서는 입력에 중심 단어가 들어가고 투사층을 지나 주변 단어들을 예측한다. 해당 모델의 성능은 여러 논문에서 CBOW보다 좋다고 알려져 있다. 

 

5. 결과

 

 위의 알고리즘을 바탕으로 모델을 학습시키면 학습시킨 코퍼스의 각 단어에 벡터 값들이 부여된다. 이 벡터 값들을 바탕으로 단어간 의미가 연관된 단어들을 찾을 수 있다. 주로 직접 코딩을 할때에는 파이썬의 gensim 라이브러리를 이용하는 경우가 많다. 혹은, 아래의 사이트에서 워드 투 벡을 체험해 볼 수도 있다.

 

http://w.elnn.kr/search/

 

 한국어 워드 투 벡 사이트로, 단어간 덧셈 뺼셈이 가능하다. 예컨대, 워드 투 벡의 가장 유명한 예시인

"왕 - 남자 = 여왕"이 가능하다.  즉, 단어 벡터간 사칙 연산을 통해 단어의 의미를 파악하고 있는것 처럼 보이는 것이다. 

반응형

댓글