[파이썬] Gensim에서의 Word Mover's Distance (WMD)

Gensim은 Python의 자연어 처리 라이브러리로, 다양한 텍스트 데이터를 처리하고 분석하는데 사용됩니다. 이 중에서도 Word Mover’s Distance (WMD)는 텍스트 간의 유사성을 측정하는 데에 사용되는 뛰어난 기능 중 하나입니다.

Word Mover’s Distance란?

Word Mover’s Distance는 두 텍스트 문서 사이의 유사성을 측정하기 위한 메트릭스입니다. 이 메트릭스는 각 단어의 의미를 고려하여 두 문서 간의 ‘이동 비용’을 계산합니다. 즉, 두 문서 사이의 단어 이동 비용이 작을수록 문서들 간의 유사성이 크다고 판단됩니다.

예제 코드

아래는 Gensim에서 Word Mover’s Distance를 계산하는 예제 코드입니다. 이 코드를 실행하려면 Gensim 라이브러리가 설치되어 있어야 합니다.

import gensim
from gensim.models import Word2Vec
from gensim.similarities import WmdSimilarity

# 텍스트 문서들을 리스트로 선언합니다.
documents = [
    "I am fascinated by the behavior of ants.",
    "Ants are known for their strong work ethic.",
    "Bees are excellent pollinators."
]

# 단어 벡터 모델을 학습합니다.
w2v_model = Word2Vec([document.split() for document in documents], min_count=1)

# Word Mover's Distance를 계산하기 위한 객체를 생성합니다.
similarity_index = WmdSimilarity(documents, w2v_model, num_best=1)

# 비교하고자 하는 두 문서의 유사도를 계산합니다.
query_document = "Ants are social insects."
sims = similarity_index[query_document]

# 결과를 출력합니다.
for sim in sims:
    print(f"Similarity: {sim[1]:.4f}\nDocument: {documents[sim[0]]}")

위의 코드에서 documents 리스트에는 비교하고자 하는 텍스트 문서들이 포함되어 있습니다. 그리고 w2v_model은 Word2Vec 모델로, 문서들의 단어 벡터를 학습합니다.

WmdSimilarity 객체는 Word Mover’s Distance를 계산하기 위한 인덱스를 생성합니다. 여기서 num_best 매개 변수는 반환되는 유사도 순서쌍의 개수를 조절하는 파라미터입니다.

마지막으로, sims 변수는 비교하고자 하는 문서와 가장 유사한 문서의 인덱스와 해당 유사도를 반환합니다.

결론

Gensim의 Word Mover’s Distance를 사용하면 텍스트 간의 유사성을 측정할 수 있습니다. 이는 문서 분류, 정보 검색 및 문서 군집화 등의 자연어 처리 작업에서 유용하게 사용될 수 있습니다. Gensim과 Word Mover’s Distance를 적절히 활용하여 텍스트 데이터를 분석하고 다양한 응용 분야에서 이를 활용할 수 있습니다.