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

如何使用TF Hub模块查找最相近词?基于Wiki模块的词嵌入匹配问题

嘿,这两个问题都是TF Hub Wiki词嵌入实际使用中很常见的需求,我来一步步给你讲清楚怎么实现!

1. 使用TF Hub Wiki模块查找最相近的词

要实现这个功能,核心思路是先获取目标词和候选词的嵌入向量,再通过相似度计算找到最匹配的结果,具体步骤如下:

  • 加载TF Hub的Wiki词嵌入模块:先调用TF Hub的API加载预训练的Wiki词嵌入模型,获取生成词嵌入的函数。
  • 准备目标词与候选词库:确定你要查询的目标词,同时准备一批候选词(如果需要全局检索,可能需要先获取模块的完整词汇表,但通常我们会根据业务需求自定义候选词库)。
  • 生成词嵌入向量:用加载好的嵌入函数,分别生成目标词和所有候选词的嵌入向量。
  • 计算相似度并排序:因为Wiki模块的词嵌入已经做了归一化处理,直接用内积(np.inner)计算相似度就等价于余弦相似度,最后对相似度值降序排序,取前N个结果即可。

示例代码:

import tensorflow_hub as hub
import numpy as np

# 加载预训练的Wiki词嵌入模块
embed_model = hub.load("https://tfhub.dev/google/Wiki-words-250/2")

# 定义目标词和候选词库
target_word = "computer"
candidate_words = ["laptop", "keyboard", "phone", "monitor", "mouse", "tablet", "server"]

# 生成目标词的嵌入(形状为(250,))
target_embedding = embed_model([target_word]).numpy()[0]
# 生成所有候选词的嵌入(形状为(7, 250))
candidate_embeddings = embed_model(candidate_words).numpy()

# 计算目标词与每个候选词的相似度(内积)
similarity_scores = np.inner(target_embedding, candidate_embeddings)

# 按相似度从高到低排序,获取索引
sorted_indices = np.argsort(similarity_scores)[::-1]

# 取前3个最相近的词
top_3_closest = [(candidate_words[i], similarity_scores[i]) for i in sorted_indices[:3]]

print(f"和'{target_word}'最相近的词:")
for word, score in top_3_closest:
    print(f"- {word}: {score:.4f}")
2. 用np.inner基于单个词嵌入找最相近的词

如果已经有了单个词的嵌入向量,要找到最相近的词,核心就是用np.inner计算该向量与所有候选词嵌入的内积,再排序筛选,具体步骤如下:

  • 准备好嵌入数据:确保你已经有目标词的嵌入向量(一维数组),以及所有候选词的嵌入矩阵(每行对应一个词的嵌入),还有对应的候选词列表。
  • 计算内积相似度:调用np.inner(),传入目标嵌入和候选嵌入矩阵,得到每个候选词的相似度得分。
  • 排序并提取结果:对得分降序排序,取出前N个对应的候选词即可。

注意:如果你的词嵌入没有做归一化处理,建议先对所有嵌入向量做归一化(除以向量的L2范数),这样内积结果才等价于余弦相似度,排序结果会更准确。

示例代码:

import numpy as np

# 假设已经获取到以下数据:
# target_embedding:目标词的嵌入,形状为(250,)
# candidate_embeddings:所有候选词的嵌入矩阵,形状为(n, 250)
# candidate_words:候选词的列表,长度为n

# (可选)如果嵌入未归一化,先做归一化处理
target_embedding = target_embedding / np.linalg.norm(target_embedding)
candidate_embeddings = candidate_embeddings / np.linalg.norm(candidate_embeddings, axis=1, keepdims=True)

# 用np.inner计算目标词与每个候选词的相似度
similarity_scores = np.inner(target_embedding, candidate_embeddings)

# 按相似度降序排序,得到索引
ranked_indices = np.argsort(similarity_scores)[::-1]

# 取前5个最相近的词
top_5_closest = [(candidate_words[idx], similarity_scores[idx]) for idx in ranked_indices[:5]]

print("最相近的5个词:")
for word, score in top_5_closest:
    print(f"{word}: {score:.3f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:35