使用 BERT 通过词嵌入生成相似词或同义词

Dev*_*vPy 6 python nlp gensim word2vec bert-language-model

众所周知,BERT模型的词嵌入能力,它可能比word2vec和任何其他模型都要好。

我想创建一个BERT词嵌入模型来生成同义词或相似的单词。就像我们在Gensim Word2Vec. 我想将 Gensim 的方法创建model.most_similar()到 BERT 词嵌入中。

我对此进行了很多研究,似乎可以做到这一点,但问题是它仅以数字形式显示嵌入,无法从中获取实际的单词。有人可以帮我解决这个问题吗?

Bir*_*mcu 3

  1. Bert 使用标记,它与单词并不完全相同。因此,单个单词可能不仅仅是一个标记。

  2. Bert 为每个标记相对于上下文中的其他标记生成嵌入向量。

  3. 您可以选择一个预训练的 bert 模型并向它们提供单个单词以获得输出并对它们进行平均因此您可以获得单词的单个向量

  4. 获取单词列表,计算每个单词的向量

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()
Run Code Online (Sandbox Code Playgroud)
  1. 计算向量距离,这样你就可以从距离得到相似的单词