이전에 LSA나 LDiA같은 축소 기법으로 사라진 단어의 희미한 의미를 복구하는 방법이다. 이전 차원 축소 방법은 단어 주변의 문맥을 그냥 무시했다. 단어 모음(bag-of-words) 자료 구조는 그냥 한 문서의 단어들을 통계적 문서에 집어 넣은 것 뿐이다. Word2Vec은 문서나 문장의 모든 단어가 아니라 한 단어의 이웃 단어 몇 개만으로 작은 단어 모음을 만든다. 이떄 그런 단어 모음이 문장들의 경계를 넘지는 않게 한다. 인접한 문장의 단어들로 하나의 단어 모음을 만들지는 않는다. 단어 벡터 훈련 과정이 문서 전체가 아니라 서로 관련된 단어들에 집중하게 된다.
단어 벡터 훈련 과정이 전체가 아니라 서로 관련된 단어들에 집중한다. 이런식으로 만들어낸 새로운 단어 벡터를 이용하면 동의어나 반의어를 식별할 수 있다. LSA도 가능하지만 한 단어에 대한 근처 단어 범위를 좀 더 좁히면 단어 벡터의 정확도가 높아진다. 단어나 n-gram, 문서에 대한 잠재 의미 분석은 한 단어의 명시적인 의미 중 일부를 놓칠 수 있다. 함축되거나 숨겨진 의미는 더욱 많이 놓칠 위험이 있다.(빈도는 적은데 중요한 의미를 담은 단어) LSA의 단어 모음은 너무 크기 때문에, 한 단어의 몇몇 의미가 어느 위치에 존재하는지 알 수 없다.
의미 기반 질의와 비유
의미 기반 질의를 일상에서 많이 사용해보았을 것이다. 검색 단어가 기억나지 않아 단어에 대한 주변 정보를 검색한다.
키 작은 바르셀로나 축구선수
'키 작은 축구선수 정보'라는 블로그 제목이나 '메시'라는 것을 발견하면 검색엔진이 그 사실을 발견하고 다음에 검색할 때 좀 더 나은 결과를 제시한다.
단어 벡터를 이용하면 '키' '작은' '바르셀로나' '축구선수' 같은 단어 들의 의미를 모두 결합한 단어나 이름을 찾을 수 있다. 이는 앞의 질의문으로부터 "Messi"라는 터큰에 더 가까이 접근할 수 있다.
answer_vector = word_vector['키'] + word_vector['작은'] + word_vector['바르셀로나']
+ word_vector['축구선수']
의미 기반 질의를 실제로 이런 벡터 연산의 형태로 수행 할때 원치 않는 편향에 대해 빼서 답을 구할 수도 있다.
answer_vector = word_vector['키'] + word_vector['작은'] + word_vector['바르셀로나']
+ word_vector['축구선수']- 2*word_vector['키 큰']
Word2vec
2012년 마이크로소프트의 수습사원이었던 토마스 미콜로프는 적당한 차원의 벡터로 단어의 의미를 부호화하는 방법을 고안했다. 미콜로프는 어떤 단어가 목표 단어 근처에 출현할 가능성을 예측하도록 신경망을 구축했다. 이후 구글에 입사한 미콜로포트는 2013년 동료들과 함께 word2vec을 공개했다.
word2vec은 분류명이 붙어 있지 않은 문서들로 구성된 큰 말뭉치를처리하는 것만으로단어들의 의미를 학습한다. 사람이 일일이 라벨링 작업을 할 필요가 없다. word2vec은 바르셀로나가 어떤 팀인지 알려줄 필요가 없다. word2vec은 텍스트를 읽어서 스스로 학습한다. 자료가 많고 분류되지 않는 비구조적 자료에 사용하는 것이 제격이다.
word2vec은 단어에 연관된 성질들도 학습한다. 예를 들어 모든 단어에 장소, 감정, 성별이 다양할 정도로 연관된다. 각 성분별로 같은 성질과 연관되어 있다면, 다른 모든 단어의 단어 벡터에도 그 성질들에 관한 일정한 점수들이 부여된다. word2vec이 단어 벡터들을 형성함에 따라, 한 단어의 의미가 이웃 단어들로 번진다.
LSA가 같은 문서에 있기만 하면 아무리 멀어져도 그 의미들이 번져서 단어-주제 벡터에 반영된다면 word2vec은 주제를 구체적으로 하기 위해 단어들이 근쳐에 존재해 번져야 한다.
단어 벡터를 일단의 가중치들 또는 점수들이라고 생각하면 단어 벡터를 이해하는 데 도움이 될 것이다. 각 가중치 또는 점수는 그 단어가 지닌 뜻의 특정 차원과 연관된다. 또한 모형화와 시각화를 통해 정확도와 유용성을 개선할 수 있다.
Word2vec의 단어 표현 계산
주어진 단어를 훈련용 말뭉치의 문맥 안에서의 그 단어의 의미를 말해 주는 수치들로 구성된 단어 벡터로 표현한다. 이러한 방식 덕에 어떠한 연산도 가능하다. 단어 벡터를 계산하는 방법 두가지
- 스킵그램 : 접근 방식은 주어진 목표 단어의 문맥을 이루는 주변 단어들을 예측한다. 한 단어가 입력이고 그 주변 단어들이 출력이다.
- 연속 단어 모음 : 접근 방식은 스킵 그램과 반대이다. 주어진 주변 단어들로부터 하나의 목표 단어를 예측한다.
'Natural Language Processing' 카테고리의 다른 글
[Word2Vec] 연속 단어 모음 (0) | 2021.03.01 |
---|---|
[Word2Vec] 스킵그램 접근 방식 (0) | 2021.02.28 |
의미 기반 검색(semantic search) (0) | 2021.02.23 |
선형 판별 분석 ( LDA ) (0) | 2021.02.23 |
LSA 거리와 유사도 (0) | 2021.02.21 |