Gensim은 Python에서 자연어 처리를 위한 인기있는 라이브러리로, 텍스트 문서를 임베딩 공간으로 표현하는 기능을 제공합니다. 임베딩은 텍스트의 의미를 수치화하여 벡터로 표현하는 방법입니다. 이러한 임베딩 공간에서는 다양한 아날로기 계산을 수행할 수 있습니다. 이번 블로그 포스트에서는 Gensim을 사용하여 임베딩 공간에서의 아날로기 계산을 실습해보겠습니다.
데이터 준비
먼저, 임베딩 공간을 생성하기 위해서 데이터를 준비해야 합니다. 여기서는 영화 리뷰 데이터셋을 사용할 것입니다. 데이터셋은 텍스트 문서의 집합으로 구성되며, 각 문서는 영화 리뷰 하나를 나타냅니다. 데이터셋은 텍스트 파일로 준비되어 있다고 가정합니다.
Gensim을 이용한 임베딩 공간 생성
Gensim을 사용하여 임베딩 공간을 생성하는 코드는 다음과 같습니다.
import gensim
from gensim.models import Word2Vec
# 데이터셋 로드
dataset = open('reviews.txt').readlines()
sentences = [doc.split() for doc in dataset]
# Word2Vec 모델 학습
model = Word2Vec(sentences, size=100, window=5, min_count=1)
# 모델 저장
model.save('embedding_model.bin')
위 코드에서는 Word2Vec 모델을 사용하여 임베딩 공간을 생성합니다. 모델의 핵심 파라미터로는 size
, window
, min_count
가 있습니다. size
는 임베딩 벡터의 차원을 나타내며, 일반적으로 수백에서 수천의 차원을 가집니다. window
는 주변 단어의 범위를 나타내며, 해당 단어와 주변 단어 간의 관계를 학습합니다. min_count
는 단어의 최소 등장 횟수를 설정하여, 빈번하지 않은 단어는 무시합니다.
유사도 계산
임베딩 공간에서 유사도를 계산하는 방법은 다양하게 있습니다. 대표적인 방법은 코사인 유사도를 사용하는 것입니다. 코사인 유사도는 두 벡터 간의 각도를 계산하여 유사도를 측정하는 방식입니다.
Gensim을 이용하여 코사인 유사도를 계산하는 코드는 다음과 같습니다.
# 모델 로드
model = gensim.models.KeyedVectors.load('embedding_model.bin')
# 두 단어 간 유사도 계산
similarity = model.wv.similarity('good', 'great')
print(f"Similarity between 'good' and 'great': {similarity}")
위 코드에서는 먼저 모델을 로드한 후, similarity
함수를 사용하여 두 단어 간의 유사도를 계산합니다. 위 예시에서는 ‘good’와 ‘great’ 사이의 유사도를 계산하고 출력합니다.
단어 간 유사도 비교
임베딩 공간에서는 다양한 단어 간의 유사도를 비교할 수 있습니다. 이를 통해 단어 간의 의미적 관계를 파악하거나, 유사한 단어를 찾을 수 있습니다.
Gensim을 사용하여 단어 간의 유사도를 비교하는 코드는 다음과 같습니다.
# 모델 로드
model = gensim.models.KeyedVectors.load('embedding_model.bin')
# 단어 간 유사도 비교
similar_words = model.wv.similar_by_word('good', topn=5)
print("Words similar to 'good':")
for word, similarity in similar_words:
print(f"{word}: {similarity}")
위 코드에서는 모델을 로드한 후, similar_by_word
함수를 사용하여 ‘good’와 유사한 단어들을 찾습니다. topn
파라미터를 사용하여 반환할 유사한 단어의 개수를 설정할 수 있습니다. 이후 결과를 출력하여 유사한 단어와 그에 대한 유사도를 확인합니다.
마무리
이번 포스트에서는 Gensim을 사용하여 임베딩 공간에서의 아날로기 계산을 실습해보았습니다. 임베딩을 사용하면 문서나 단어를 벡터 공간으로 표현할 수 있고, 이를 바탕으로 다양한 아날로기 계산을 수행할 수 있습니다.
Gensim은 이러한 임베딩과 관련된 다양한 기능을 제공하므로, 텍스트 분석과 자연어 처리에 관심이 있는 개발자들에게 유용한 도구입니다.