如何将BERT词嵌入保存为.vec,类似于word2vec

时间:2019-07-07 21:00:38

标签: vector word-embedding torchtext

我想使用嵌入的BERT词作为矢量来构建Torchtext中的vocab 我可以加载矢量,例如GloVe或word2vec 但我不知道如何将BERT中嵌入的单词保存为Torchtext vocab可接受的格式

当我尝试此代码时

txt_field.build_vocab(火车,vectors = bertVec)

我收到此错误

ValueError:得到了类型为,预期str或Vectors对象的输入向量

1 个答案:

答案 0 :(得分:0)

没有直接的方法可以为BERT嵌入创建Vocab。

原因如下:

  1. 如果您查看Mikolv或GLOVE的嵌入,则仅是在庞大的数据集上计算出的单词嵌入。对于Mikolov的嵌入,您大约需要3M个单词及其嵌入。 但是,伯特使用词片嵌入,词汇表中大约有3万个词片。
  2. 现在您可能会想到计算单词嵌入。是的,从技术上讲,您必须能够做到。但是,对于BERT,您不能。这是因为,在Mikolov或Glove的案例中,嵌入向量仅基于单词,并取决于在计算嵌入值时会产生影响的上下文。但是,对于bert来说,嵌入是基于3个因素进行的:WORD(片断)嵌入,位置嵌入和分段嵌入。因此,相同的单词“ Hello”可能会根据句子出现在哪个位置而具有不同的嵌入,这是受位置嵌入的影响。

因此,使用BERT构建单词的词汇表可能是不可能的,因为相同的单词可能采用不同的嵌入方式。