You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gensim Word2Vec的most_similar结果中筛选#前缀词

实现方法讲解

没问题,要实现只返回以#开头的相似词,我们可以通过先获取所有目标前缀词,再筛选或直接计算相似度这两种方式来搞定,下面分别说明:

方法一:先获取候选结果再过滤

这是最直接的方式,先调用most_similar拿到足够多的候选,再从中筛选出带#的词:

# 第一步:提前提取所有以#开头的词,存在集合里方便快速查找
hashtag_words = {word for word in word_vectors.key_to_index if word.startswith('#')}

# 第二步:调用most_similar获取候选(把topn设大一点,避免过滤后没结果)
candidates = word_vectors.most_similar(positive=['woman', 'king'], negative=['man'], topn=100)

# 第三步:过滤出以#开头的词
filtered_results = [(word, score) for word, score in candidates if word in hashtag_words]

# 打印结果
for word, score in filtered_results:
    print(f"{word}: {score:.4f}")

为什么要设大topn?

默认topn=10,可能前10个候选里没有带#的词,所以可以根据你的需求调大(比如100、500),确保有足够的候选供筛选。

方法二:直接计算目标向量与所有#词的相似度

如果你的模型里#开头的词数量不算特别多,这种方式效率更高——直接计算目标向量和所有#词的相似度,再排序取topN:

# 第一步:计算目标向量(woman + king - man)
target_vector = word_vectors['woman'] + word_vectors['king'] - word_vectors['man']

# 第二步:提取所有#开头的词及其向量
hashtag_words = [word for word in word_vectors.key_to_index if word.startswith('#')]
hashtag_vectors = [word_vectors[word] for word in hashtag_words]

# 第三步:计算余弦相似度
similarities = word_vectors.cosine_similarities(target_vector, hashtag_vectors)

# 第四步:配对、排序,取前10个
sorted_results = sorted(zip(hashtag_words, similarities), key=lambda x: -x[1])[:10]

# 打印结果
for word, score in sorted_results:
    print(f"{word}: {score:.4f}")

两种方式怎么选?

  • 如果#词很多(比如上万级),方法一更高效,因为most_similar内部是用优化的算法找相似词,比遍历所有#词更快;
  • 如果#词数量少,方法二更直接,不用依赖topn的设置,能确保覆盖所有可能的#候选。

内容的提问来源于stack exchange,提问作者physicsmajor1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:32:00