BERT 词嵌入预处理是如何工作的
Posted
技术标签:
【中文标题】BERT 词嵌入预处理是如何工作的【英文标题】:How does BERT word embedding preprocess work 【发布时间】:2021-11-24 10:55:44 【问题描述】:我试图弄清楚 BERT
预处理的作用。我的意思是,它是如何完成的。但我找不到很好的解释。如果有人知道,我将不胜感激,提供一个更好和深入解释的解决方案的链接。
另一方面,如果有人想在这里解决它,我也将非常感谢!
我的问题是,BERT
如何在数学上将字符串输入转换为具有固定大小的数字向量?接下来的逻辑步骤是什么?
【问题讨论】:
【参考方案1】:BERT 提供了自己的分词器。由于 BERT 是一个预训练模型,它需要特定格式的输入数据,因此需要以下内容:
一个特殊的标记,[SEP]
,用于标记句子的结尾,或者
两个句子之间的分隔
一个特殊的令牌,[CLS]
,在
我们文本的开头。该令牌用于分类任务,
但无论您的应用程序是什么,BERT 都期望它。
符合 BERT 中使用的固定词汇的标记
令牌的令牌 ID,来自 BERT 的令牌生成器
掩码 ID 指示序列中的哪些元素是标记,哪些是填充元素
用于区分不同句子的句段 ID
用于在序列中显示标记位置的位置嵌入
.
from transformers import BertTokenizer
# Load pre-trained model tokenizer (vocabulary)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# An example sentence
text = "Sentence to embed"
# Add the special tokens.
marked_text = "[CLS] " + text + " [SEP]"
# Split the sentence into tokens.
tokenized_text = tokenizer.tokenize(marked_text)
# Map the token strings to their vocabulary indices.
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
查看这个出色的tutorial 了解更多详情。
【讨论】:
以上是关于BERT 词嵌入预处理是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章
BERT实战:使用DistilBERT作为词嵌入进行文本情感分类,与其它词向量(FastText,Word2vec,Glove)进行对比