据我了解,BERT 是一个词嵌入,可以微调也可以直接使用。
对于较旧的词嵌入(word2vec、Glove),每个词在嵌入中仅表示一次(每个词一个向量)。这是一个问题,因为它没有考虑同音异义词。据我了解,BERT 通过考虑上下文来解决这个问题。
这对词嵌入本身意味着什么?每个词标记是否还有一个向量?如果是这样,如何考虑上下文?如果不是,嵌入的格式是什么?
据我了解,BERT 是一个词嵌入,可以微调也可以直接使用。
对于较旧的词嵌入(word2vec、Glove),每个词在嵌入中仅表示一次(每个词一个向量)。这是一个问题,因为它没有考虑同音异义词。据我了解,BERT 通过考虑上下文来解决这个问题。
这对词嵌入本身意味着什么?每个词标记是否还有一个向量?如果是这样,如何考虑上下文?如果不是,嵌入的格式是什么?
先说几点:
关于问题:
与经典嵌入相比,有趣的是您现在可以对令牌的句子相关语义进行编码!意味着在 word2vec(在像维基百科这样的通用语料库文本上训练)中,你有 1 个单词apple的向量,如果你检查它,你可能会发现它与iphone和fruit都有关系(从未尝试过。只是举了一个例子为你说明我的观点。让我知道你是否尝试过并且出现了其他东西!)但是使用 BERT,你可以对包含不同上下文中相似单词的句子进行编码,并检查这些单词在句子中的编码。您惊讶地看到它是如何捕捉语义的!
最后但并非最不重要的是这篇博文,它是我回答的基础。
希望它有所帮助!
当您运行 BERT 时,每个输入标记都会得到一个向量 + 1 个称为特殊标记的特殊标记[CLS]+ 1 个称为 的特殊标记[SEP]。也许比将 BERT 嵌入称为嵌入更精确,将它们称为 BERT 的隐藏状态。上下文信息通过 12 层自注意力神经网络进入嵌入。
但是,使用 BERT 进行标记化很棘手,标记不是单词。它使用所谓的 WordPieces 来表示输入,即将频率较低的单词拆分成更小的单元,因此最后没有 OOV 标记。
使用 BERT Base Cased 模型,标记化如下所示:
'I am the walrus.'→
['I', 'am', 'the', 'wa', '##l', '##rus', '.']
'What are the elements in a BERT word embedding?'→
['What', 'are', 'the', elements', 'in', 'a', 'B', '##ER', '##T', 'word', 'em', '##bed', '##ding', '?']
训练BERT时,总是有两个句子,由[SEP]token隔开。的嵌入[CLS]用于预测两个句子是否在连贯的文本中相互跟随。在句子分类任务中,token 的嵌入[CLS]被用作分类器的输入。