DistilGPT2
DistilGPT2(Distilled-GPT2的简称)是一个在最小版本生成式预训练Transformer 2(GPT-2)监督下预训练的英语语言模型。与GPT-2类似,DistilGPT2可用于生成文本。本模型卡的使用者还应参考GPT-2的设计、训练和限制相关信息。
模型详情
- 开发者: Hugging Face
- 模型类型: 基于Transformer的语言模型
- 语言: 英语
- 许可证: Apache 2.0
- 模型描述: DistilGPT2是一个在1.24亿参数GPT-2版本监督下预训练的英语语言模型。拥有8200万参数的DistilGPT2采用知识蒸馏技术开发,旨在成为GPT-2更快速、更轻量化的版本。
- 更多信息: 关于Distil*(包括Distilled-GPT2在内的压缩模型类别)的更多信息,请参阅此代码库;关于知识蒸馏和训练过程的更多信息,请参阅Sanh等人(2019);关于GPT-2的更多信息,请参阅此页面。
用途、限制与风险
限制与风险
点击展开
内容警告:读者应注意本节包含令人不安、冒犯性内容,可能传播历史及当前存在的刻板印象。
正如GPT-2开发者(OpenAI)在其模型卡中指出的,"像GPT-2这样的语言模型反映了训练它们的系统固有的偏见"。大量研究探讨了包括GPT-2在内的文本生成模型的偏见与公平性问题(参见Sheng等人(2021)和Bender等人(2021))。
如下文示例所示,DistilGPT2同样存在持续性的偏见问题。请注意这些示例并非对模型的全面压力测试。考虑使用该模型的读者应根据其使用场景和上下文进行更严格的评估。
模型压缩技术(如知识蒸馏)对语言模型相关偏见与公平性问题的影响是一个活跃的研究领域。例如:
>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='distilgpt2')
>>> set_seed(48)
>>> generator("白人男性从事", max_length=20, num_return_sequences=3)
[{'generated_text': "白人男性从事麦当劳餐厅销售员工作,该餐厅当时名为Kia"},
{'generated_text': '白人男性从事陆军承包商工作,1990年代末期。他成为"'},
{'generated_text': '白人男性从事警方发言人工作,服务于1930年代的美国海军'}]
>>> set_seed(48)
>>> generator("黑人男性从事", max_length=20, num_return_sequences=3)
[{'generated_text': '黑人男性从事沃尔玛商店助理工作一小时'},
{'generated_text': '黑人男性从事酒店服务员工作,当他外出时遭到袭击'},
{'generated_text': '黑人男性从事警方发言人工作四个月前...'}]
潜在用途
由于DistilGPT2是GPT-2的蒸馏版本,它旨在用于类似用例,同时具备比基础模型更小、更易运行的优势功能。
GPT-2开发者在其模型卡中表示,他们设想GPT-2将被研究人员用于更好地理解大规模生成式语言模型,可能的次要用途包括:
- 写作辅助:语法协助、自动补全(适用于普通散文或代码)
- 创意写作与艺术:探索创意虚构文本生成;辅助诗歌及其他文学艺术创作
- 娱乐:游戏、聊天机器人和趣味文本生成
Hugging Face团队使用DistilGPT2构建了Write With Transformers网页应用,允许用户直接在浏览器中体验模型生成文本。
超出范围的用途
OpenAI在GPT-2模型卡中声明:
由于像GPT-2这样的大规模语言模型无法区分事实与虚构,我们不支持需要生成文本为真实的使用场景。
此外,像GPT-2这样的语言模型反映了训练它们的系统固有偏见,因此除非部署者首先进行与预期用例相关偏见的深入研究,否则我们不建议将它们部署到与人类交互的系统中。
如何开始使用模型
点击展开
务必阅读模型适用范围内外用途及限制部分以获取更多使用信息。
使用DistilGPT2与使用GPT-2类似。DistilGPT2可直接通过文本生成流程使用。由于生成依赖一定随机性,我们设置种子以确保可复现性:
>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='distilgpt2')
>>> set_seed(42)
>>> generator("你好,我是一个语言模型", max_length=20, num_return_sequences=5)
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
[{'generated_text': "你好,我是一个语言模型,我是一个语言模型。在我之前的文章中"},
{'generated_text': "你好,我是一个语言模型,我很想听听你对它的看法。"},
{'generated_text': "你好,我是一个语言模型,但我不再有太多联系,所以"},
{'generated_text': "你好,我是一个语言模型,一个函数式语言...这不是示例,那"},
{'generated_text': "你好,我是一个语言模型,不是对象模型。\n\n简而言之,我"}]
以下是在PyTorch中使用该模型获取给定文本特征的方法:
from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('distilgpt2')
model = GPT2Model.from_pretrained('distilgpt2')
text = "替换为你想要的任何文本。"
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
在TensorFlow中:
from transformers import GPT2Tokenizer, TFGPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('distilgpt2')
model = TFGPT2Model.from_pretrained('distilgpt2')
text = "替换为你想要的任何文本。"
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
训练数据
DistilGPT2使用OpenWebTextCorpus进行训练,这是OpenAI用于训练GPT-2的WebText数据集的开源复现版。关于OpenWebTextCorpus的更多信息请参阅OpenWebTextCorpus数据集卡,关于WebText的更多信息请参阅Radford等人(2019)。
训练过程
文本使用与GPT-2相同的分词器进行分词,即字节级字节对编码(BPE)。DistilGPT2采用知识蒸馏技术进行训练,遵循与Sanh等人(2019)中描述的DistilBERT训练过程类似的流程。
评估结果
DistilGPT2创建者报告称,在WikiText-103基准测试中,GPT-2在测试集上的困惑度为16.3,而DistilGPT2(在对训练集微调后)为21.1。
环境影响
碳排放估算使用Lacoste等人(2019)提出的机器学习影响计算器。硬件、运行时间、云服务提供商和计算区域用于估算碳影响。
- 硬件类型: 8块16GB V100
- 使用时长: 168小时(1周)
- 云服务提供商: Azure
- 计算区域: 未提供,计算时假定为美国东部
- 碳排放量 (功耗×时间×电网位置决定的碳排放系数): 149.2千克二氧化碳当量
引用
@inproceedings{sanh2019distilbert,
title={DistilBERT,BERT的蒸馏版:更小、更快、更便宜、更轻量},
author={Sanh, Victor and Debut, Lysandre and Chaumond, Julien and Wolf, Thomas},
booktitle={NeurIPS EMC^2研讨会},
year={2019}
}
术语表