[파이썬] Gensim 임베딩 공간에서의 아날로기 계산

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은 이러한 임베딩과 관련된 다양한 기능을 제공하므로, 텍스트 분석과 자연어 처리에 관심이 있는 개발자들에게 유용한 도구입니다.