一、NLP

(一)bert中一些标记

1、[SEP]

用于断句,其真实效果,有待考究,因为有segment embedding

2、[CLS]

生成一个向量,用来进行文本分类
G1D30-NLP(Tokenizer)&DP(交叠子问题)-LMLPHP

(二)AutoTokenizer

关于tokenizer更加详细内容,可参考:https://zhuanlan.zhihu.com/p/390821442

这个是Transformer中的一个类,可以使用from_pretrained方法,进行实例化
G1D30-NLP(Tokenizer)&DP(交叠子问题)-LMLPHP

(三)tokenizer

参考:https://zhuanlan.zhihu.com/p/121787628

1、Encoding

(1)tokenize
(2)convert to ids
--------------Roberta---------------------------------------

from transformers import RobertaTokenizer
sequence1 = "media_common.cataloged_instance award.winning_work"
sequence2 = "media _ common . cataloged _ instance award . winning _ work"

tokenizer = RobertaTokenizer.from_pretrained("roberta-base")
tokens1 = tokenizer.tokenize(sequence1)
ids1 = tokenizer.convert_tokens_to_ids(tokens1)

tokens2 = tokenizer.tokenize(sequence2)
ids2 = tokenizer.convert_tokens_to_ids(tokens2)

print('未替换:')
print(tokens1)
print(ids1)
print('替换:')
print(tokens2)
print(ids2)

运行结果是不一样的~
G1D30-NLP(Tokenizer)&DP(交叠子问题)-LMLPHP

--------------------------deberta-------------------------------

from transformers import AutoModel, AutoModelForSequenceClassification, AutoTokenizer, AutoConfig, DataCollatorWithPadding
from transformers import DebertaTokenizer
sequence1 = "media_common.cataloged_instance award.winning_work"
sequence2 = "media _ common . cataloged _ instance award . winning _ work"
sequence3 = "media_common.cataloged _ instance award . winning _ work"

tokenizer = DebertaTokenizer.from_pretrained("microsoft/deberta-base")
tokens1 = tokenizer.tokenize(sequence1)
ids1 = tokenizer.convert_tokens_to_ids(tokens1)

tokens2 = tokenizer.tokenize(sequence2)
ids2 = tokenizer.convert_tokens_to_ids(tokens2)

tokens3 = tokenizer.tokenize(sequence3)
ids3 = tokenizer.convert_tokens_to_ids(tokens3)
print('未替换:')
print(tokens1)
print(ids1)

print('替换:')
print(tokens2)
print(ids2)

print('替换:')
print(tokens3)
print(ids3)

好玩欸,deberta 的tokenize也变成这样了~加了空格之后,'_‘和’.'会被重新解读
G1D30-NLP(Tokenizer)&DP(交叠子问题)-LMLPHP

2、decode

就是反向查看

3、padding

为了做matrix处理,加入pad,可以指定pad的id

4、mask

可以用mask mask掉上面的pad,这样使运算结果不受影响。

(四)动态masking的好处

每个epoch的训练内容不同,增加了训练的多样性
https://adaning.github.io/posts/24649.html

(五)BPE

参考:https://zhuanlan.zhihu.com/p/424631681
Byte-Pair Encoding
这是一种数据压缩的方式,主要压缩词表,把慈悲压缩为sub-word的形式。

之所以叫byte-pair是因为该算法以byte为编码,作为subword聚合的基本单位——先将单词拆为byte,统计频率;然后不断结合。
参考:https://zhuanlan.zhihu.com/p/170656789
使用bytes-based BPE不会引入位置字符;
原BERT对应vocab大小,3万;
现在:5万

(六)MASK

具体mask是如何作用的呢?源代码中是不去计算了嘛

DP

(一)交叠子问题是什么

很多子问题被一次次求解

12-05 07:46