首页 > 解决方案 > 将单词的余弦相似度与 BERT 模型进行比较

问题描述

嗨,我正在寻找使用 BERT 模型为单词生成相似单词的方法,我们在 gensim 中使用相同的方法生成 most_similar 单词,我发现该方法为:

from transformers import BertTokenizer, BertModel

import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

model = BertModel.from_pretrained('bert-base-uncased')

word = "Hello"

inputs = tokenizer(word, return_tensors="pt")

outputs = model(**inputs)

word_vect = outputs.pooler_output.detach().numpy()

好的,现在这给了我用户给出的输入词的嵌入,所以我们可以将此嵌入与完整的 BERT 模型进行余弦相似度比较,以找到与该词最匹配的前 N ​​个嵌入,然后使用模型中的 vocab.txt 文件?可能吗?

标签: pythonnlpgensimbert-language-modelword-embedding

解决方案


似乎您需要存储词汇表中所有单词的嵌入。之后,您可以使用一些工具来找到最接近目标嵌入的嵌入。例如,您可以使用scikit-learn 中的NearestNeighbors。您可能要考虑的另一个选项是 HNSW,它是专门设计用于执行快速近似最近邻搜索的数据结构。Faiss是 Facebook 对 HNSW 的一个很好的实现。


推荐阅读