python - 将单词的余弦相似度与 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 文件?可能吗?
解决方案
似乎您需要存储词汇表中所有单词的嵌入。之后,您可以使用一些工具来找到最接近目标嵌入的嵌入。例如,您可以使用scikit-learn 中的NearestNeighbors。您可能要考虑的另一个选项是 HNSW,它是专门设计用于执行快速近似最近邻搜索的数据结构。Faiss是 Facebook 对 HNSW 的一个很好的实现。
推荐阅读
- c++ - 按升序排列数组
- terraform - terraform:如何覆盖 AWS RDS 最终快照
- git - 如何撤消 git add* git stash git pull?
- java - Java 变量值在响应请求后保留在内存中
- android - 如何旋转矩阵?
- maven - 带有 Maven 的 JaCoCo - 缺少执行数据文件(命令行)
- scala - 如何找到“a”字母最多的单词?
- java - Intellij 没有打开 Reactor 弹珠
- spring - Spring Cloud Gateway 和 Springdoc OpenAPI 集成
- java - Java AES 128 ECB 到 AES 256 ECB 转换