WMD(Word Mover's Distance)是一种用于衡量两个文本之间相似度的方法。要高效地迭代字符串列表以获得成对的WMD距离矩阵,可以使用Python中的gensim
库来计算WMD距离,并利用NumPy来构建距离矩阵。以下是一个示例代码:
首先,确保安装了gensim
和numpy
库:
pip install gensim numpy
然后,使用以下代码计算字符串列表中成对的WMD距离矩阵:
import numpy as np
from gensim.models import Word2Vec
from gensim.models.keyedvectors import KeyedVectors
from nltk.tokenize import word_tokenize
from scipy.spatial.distance import cosine
# 假设你已经有了一个预训练的Word2Vec模型或者词向量文件
# model = Word2Vec.load("your_pretrained_model")
# 或者加载词向量文件
model = KeyedVectors.load_word2vec_format('path_to_word2vec_file', binary=True)
# 示例字符串列表
string_list = [
"This is a sample sentence.",
"Another example sentence.",
"Yet another sentence for testing."
]
def preprocess(text):
return [word for word in word_tokenize(text.lower()) if word in model.wv]
def wmd_distance(s1, s2):
s1 = preprocess(s1)
s2 = preprocess(s2)
distance = model.wmdistance(s1, s2)
return distance
n = len(string_list)
distance_matrix = np.zeros((n, n))
for i in range(n):
for j in range(i + 1, n):
distance_matrix[i, j] = wmd_distance(string_list[i], string_list[j])
distance_matrix[j, i] = distance_matrix[i, j] # WMD距离是对称的
print(distance_matrix)
这段代码首先加载了一个预训练的Word2Vec模型,然后定义了一个预处理函数preprocess
来分词并将单词转换为小写,同时过滤掉不在模型词汇表中的词。wmd_distance
函数计算两个预处理后的句子之间的WMD距离。最后,使用两个嵌套循环迭代字符串列表中的所有字符串对,并计算它们之间的WMD距离,将结果存储在一个NumPy数组中。
请注意,这个示例假设你已经有了一个预训练的Word2Vec模型或者词向量文件。如果没有,你需要先训练一个模型或者下载一个预训练的模型。此外,WMD计算可能非常耗时,特别是在处理大型数据集时,因此可能需要考虑并行化或其他优化策略。
领取专属 10元无门槛券
手把手带您无忧上云