【发布时间】:2023-11-01 08:48:01
【问题描述】:
您好,我正在寻找使用 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 文件的单词?有可能吗?
【问题讨论】:
-
BERT 不像 Gensim 使用的 Word2Vec 模型那样是词袋模型,因此您不能只从模型本身中检索相似的词。您可以检索多个单词的向量表示,并通过余弦相似度或欧几里得距离建立接近度。
-
哦,好吧,你的意思是我只能从 bert 模型中获取单词的向量,然后我可以比较它来找到相似的单词。所以要找到类似的东西,我必须得到一个数据集和保存从bert生成的word和embeddings的索引,然后应用余弦相似度??
-
没错!但鉴于您的目的,我建议您只使用 Gensim。 BERT 是一个上下文感知模型,即它处理一个单词的语义上下文(在一个句子中)。由于您只会处理单个单词,因此 Gensim 就足够了。
-
好的,是的,我目前正在使用带有 glove-wiki 模型的 gensim,结果有时并不好,因此探索其他选项也无法重新训练预训练模型。你知道任何替代的 gensim 模型,它涵盖了各种各样的词或具有良好相似词的词,可以帮助我吗??
标签: python nlp gensim bert-language-model word-embedding