pytorch: Transformers入门(一)

transformer,bert等预训练语言模型火了这么久,GPT3都出来了,不能再等了,赶紧用上!

我重点关注Bert。模型,论文啥都不多说,必须先看懂了,源码还没时间进行阅读,因为目前急需使用,所以希望抓紧时间用上。

于是乎,我找到了Transformers这个集合了目前所有先进预训练语言模型的包,开始学习吧!

之前是看了一些博客,写仿着写了一些代码,但是觉得有些函数,参数都是一知半解,还是得跟着官方文档从零学起哇。

安装就不讲了,很简单,直接从术语开始。

1. input_id:是模型的输入之一,表示token(可以理解为输入文本中的最小单位,如中文的单字)在vocab中的索引。

给定一句话:sequence="A Titan RTX has 24GB of VRAM"

将这句token化(就是分词):tokenized_sequence=tokenizer.tokenize(sequence) 

得到:['A', 'Titan', 'R', '##T', '##X', 'has', '24', '##GB', 'of', 'V', '##RA', '##M']

获取input_id:encoded_sequence=tokenizer(sequence)["input_ids"] 或者使用tokenizer.encode(sequence)

得到每个token在词表中的索引值:[101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]

2. Attention mask:用于区分句子中参与attention和不参与attention的位置,因为要统一长度,有些句子需要padding 0,那么这些padding的位置是不需要参与attention计算的,如何让模型区分,这正是attention mask的任务。

sequence_a="This is a short sequence."

sequence_b="This is a rather long sequence. It is at least longer than the sequence A."

假设让句子a补充到b的长度:padded_sequences=tokenizer([sequence_a,sequence_b],padding=True)

查看其input_id:padded_sequences["input_ids"]

[[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 

[101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]]

再看看其attention_mask:padded_sequences["attention_mask"]

[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

可以看到padding部分的attention_mask是0,就不会参与到attention计算中。

3. Token Type IDs:用于区分当前token是属于哪个句子的

给出两个句子:[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]

它们的token_type_ids是:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]

4. Position IDs:因为transformer中attention计算方式与每个参与计算的token位置无关,而语序是包含信息的,所以加了position ids来明确每个token是在什么位置上,从0到最后依次编号。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容