[파이썬] Gensim Soft Cosine Similarity

In natural language processing (NLP) applications, measuring the similarity between text documents is a common task. Gensim, a popular Python library for NLP, provides several methods to compute document similarity. One of these methods is the Soft Cosine Similarity.

The Soft Cosine Similarity is a variation of the regular cosine similarity that takes into account the semantic similarity between words in addition to their frequency. It considers the semantic relatedness by incorporating a pre-trained word embeddings model such as Word2Vec or GloVe.

To demonstrate how to use the Soft Cosine Similarity in Gensim, we will go through a simple example. First, make sure you have Gensim installed. You can install it by running pip install gensim in your terminal.

Let’s assume we have two text documents:

document_1 = "Python is a popular programming language."
document_2 = "Python is used for web development."

To compute the Soft Cosine Similarity between these documents, follow these steps:

  1. Prepare the text documents: Convert the documents into a list of words. You can use the nltk library to tokenize the text.
import nltk
nltk.download('punkt')

from nltk.tokenize import word_tokenize

document_1_tokens = word_tokenize(document_1.lower())
document_2_tokens = word_tokenize(document_2.lower())
  1. Create a Dictionary: Create a gensim Dictionary based on the word tokens from both documents. Dictionary maps each unique token to a unique integer ID.
from gensim.corpora import Dictionary

dictionary = Dictionary([document_1_tokens, document_2_tokens])
  1. Convert documents to Bag-of-Words: Convert each document to a bag-of-words representation using the dictionary. Bag-of-Words represents each document as a sparse vector where each element is the frequency of the corresponding token.
document_1_bow = dictionary.doc2bow(document_1_tokens)
document_2_bow = dictionary.doc2bow(document_2_tokens)
  1. Create the Corpus: Create a gensim Corpus object that holds the Bag-of-Words representation of both documents.
from gensim.matutils import corpus2csc

corpus = corpus2csc([document_1_bow, document_2_bow])
  1. Compute the Soft Cosine Similarity: Use Gensim’s SoftCosineSimilarity class to compute the similarity between the two documents.
from gensim import similarities

index = similarities.SoftCosineSimilarity(corpus, num_features=len(dictionary))
similarity = index[document_1_bow, document_2_bow]

Running the above code will give you the Soft Cosine Similarity between the two documents. The value will range between 0 and 1, with 1 indicating perfect similarity.

The Soft Cosine Similarity provides a robust measure of document similarity by considering both the semantic relatedness between words and their frequency of occurrence. It is especially useful when dealing with documents that contain similar concepts but different wording.

Gensim’s Soft Cosine Similarity is a powerful tool for a variety of NLP applications, including document clustering, topic modeling, and recommendation systems.