我没有足够的数据(也就是说,我没有足够的文本)--在我的字典里只有大约4k个单词。我需要比较给定的单词,然后我需要将它表示为嵌入。
在表示单词之后,我要对其进行聚类,找到相似的向量(即单词)。甚至可能会对给定的类进行分类(在那里没有监督的分类-因为我没有标记的数据来进行培训)。
我知道,几乎任何任务都可以解决“内部”伯特,即使用微调在最后一层。
由于以上所述,我有两个问题:答案/提示/任何值得赞赏的东西,因为我被困在这个问题上:
发布于 2021-04-14 18:08:43
发布于 2021-04-14 19:42:47
关于单词字典,因为BERT嵌入包含了上下文信息(即句子中的周围单词改变了目标单词的嵌入),所以BERT不可能有单一的字典。理论上,您可以通过传递单个单词句子(尽管单个单词可能被分解为多个标记)来为您的单词构建一个字典。
如果您正在寻找一种简单实用的方法来获得预先培训的Bert嵌入,HuggingFace会使它变得简单。
下面我给出了一个简单的代码片段,使用python,特别是py火炬:
from transformers import BertTokenizer, BertModel
import torch
my_sentence = "Whatever your sentence is"
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
input_ids = tokenizer(my_sentence, return_tensors="pt")
output = model(**input_ids)
final_layer = output.last_hidden_statefinal_layer张量现在将保存输入句子中每个令牌的嵌入(768维)。注意,第零令牌是一个开始令牌(CLS),最后一个令牌是一个结束令牌。
如果您有一个句子列表(在您的情况下可能是单个单词,如果您正在制作一本词典),您可以批量使用上面的代码。但是,您需要从令牌程序中提取一个掩码,并将其传递给您的模型(以考虑不同的长句)。
示例:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
encoded_inputs = tokenizer(list_of_sentences, padding=True,
truncation=True, return_tensors="pt")
ids = encoded_inputs['input_ids']
mask = encoded_inputs['attention_mask']
output = model(ids, mask)
final_layer = output.last_hidden_statehttps://datascience.stackexchange.com/questions/93034
复制相似问题