模型简介
模型特点
模型能力
使用案例
🚀 CTRL模型
CTRL模型是一种基于Transformer架构的语言模型,可根据控制代码生成特定领域的文本,在文本生成、创意写作等方面具有广泛应用。
📚 详细文档
模型详情
模型描述
CTRL模型由Nitish Shirish Keskar、Bryan McCann、Lav R. Varshney、Caiming Xiong和Richard Socher在论文《CTRL: A Conditional Transformer Language Model for Controllable Generation》中提出。它是一种因果(单向)Transformer模型,在约140GB的大量文本数据上进行语言建模预训练,将第一个标记保留为控制代码(如链接、书籍、维基百科等)。模型开发者发布了CTRL的模型卡片,可点击此处查看。
开发者在模型卡片中写道:
本卡片中分析的CTRL语言模型可根据指定领域、风格、主题、日期、实体、实体间关系、情节要点和任务相关行为的控制代码生成文本。
- 开发者:请参阅Salesforce Research的相关论文
- 模型类型:基于Transformer的语言模型
- 语言(NLP):主要为英语,还有一些德语、西班牙语、法语
- 许可证:BSD 3条款;另请参阅行为准则
- 相关模型:需要更多信息
- 父模型:需要更多信息
- 更多信息资源:
用途
直接使用
该模型是一个语言模型,可用于文本生成。
下游使用
开发者在模型卡片中表示,主要目标用户是普通大众和NLP研究人员,主要预期用途如下:
- 与人类协作生成人工文本,包括但不限于:
- 创意写作
- 自动化重复写作任务
- 格式化特定文本类型
- 创建情境化营销材料
- 通过微调改进其他NLP应用(在其他任务或其他数据上,例如微调CTRL以学习新产品描述等新语言类型)
- 推动自然语言理解领域的发展,以更好地理解人工文本生成,包括如何检测它并努力控制、理解和潜在地应对此类模型可能产生的负面影响。
超出范围的使用
开发者在模型卡片中写道:
- CTRL不应在不与人类协作的情况下用于生成人工文本。
- 它不应用于做出规范性或规定性声明。
- 此软件不应用于宣传或从中获利:
- 暴力、仇恨和分裂;
- 环境破坏;
- 侵犯人权;或
- 破坏人们的身心健康。
偏差、风险和局限性
大量研究已经探讨了语言模型的偏差和公平性问题(例如,参见Sheng等人(2021)和Bender等人(2021))。该模型生成的预测可能包含受保护类别、身份特征以及敏感、社会和职业群体的令人不安和有害的刻板印象。
开发者在模型卡片中写道:
我们认识到模型可能被滥用,包括被不良行为者操纵以恶意行事并生成文本,从而影响政治、经济和社会环境中的决策。错误归因也可能损害个人、组织或其他实体。为解决这些问题,在发布之前,模型已由内部以及包括人工智能合作组织在内的第三方进行了评估。
为尽可能减轻潜在的滥用,我们剔除了所有可检测到的来自不良来源的训练数据。然后我们对模型进行了重新测试,发现负面话语通常会被置于可识别的上下文中。例如,当使用“新闻”控制代码时,仇恨言论可能会作为道歉的一部分嵌入(例如,“这位政治家为说[插入仇恨言论]而道歉”),这意味着这种言论是负面的。通过预先选择可用的控制代码(例如,从可用领域中排除Instagram和Twitter),我们能够限制滥用的可能性。
在发布我们的模型时,我们希望将其交到研究人员和有益社会的行动者手中,以便他们能够努力控制、理解并潜在地应对此类模型的负面影响。我们希望CTRL能够推动对检测假新闻和各种模型生成内容的研究。我们相信,这些模型应该成为一种常见工具,以便研究人员能够设计方法来防范恶意使用,并且公众能够熟悉它们的存在和行为模式。
有关大语言模型伦理的进一步讨论,请参阅相关论文。
建议
开发者在模型卡片中写道:
- 将通过开发一个能够识别CTRL生成文本的模型来实施监测和检测使用情况的建议。
- 将通过在CTRL界面中添加检查来实施进一步筛选模型输入和输出的建议,以禁止向模型插入某些负面输入,这将有助于控制可生成的输出。
- 该模型仅在有限的几种语言上进行训练:主要是英语,还有一些德语、西班牙语和法语。未来的一个研究方向建议是在更多语言上训练该模型。
有关检测模型的更多信息,请参阅CTRL-detector GitHub仓库。
训练
训练数据
开发者在模型卡片中写道:
该模型在140GB的文本数据上进行训练,这些数据来自多个领域:维基百科(英语、德语、西班牙语和法语)、古登堡计划、45个子Reddit的提交内容、OpenWebText、大量新闻数据、亚马逊评论、欧洲议会和WMT的联合国数据(英德、英西、英法)、ELI5的问答对(无上下文文档)以及MRQA共享任务,其中包括斯坦福问答数据集、NewsQA、TriviaQA、SearchQA、HotpotQA和自然问题。完整的训练数据列表请参阅论文。
训练过程
预处理
开发者在相关论文中写道:
我们学习BPE(Sennrich等人,2015)代码,并使用fastBPE4对数据进行分词,但我们使用了大约250K个标记的大词汇表。这包括减轻稀有单词问题所需的子词标记,但通过包含大多数常见单词,它也减少了生成长文本所需的平均标记数。我们使用英语维基百科和收集的OpenWebText数据的5%分割来学习BPE代码。我们还引入了一个未知标记,以便在预处理期间过滤掉包含超过2个未知标记的序列。这与用于高效训练的压缩存储(TFRecords)(Abadi等人,2016)一起,将我们的训练数据从收集的总计180GB减少到140GB。
更多链接、参考和详细信息请参阅论文。
训练
开发者在相关论文中写道:
CTRL的模型维度d = 1280,内部维度f = 8192,有48层,每层有16个头。每层的残差连接后采用概率为0.1的Dropout。标记嵌入与最终输出嵌入层绑定(Inan等人,2016;Press & Wolf,2016)。
更多链接、参考和详细信息请参阅论文。
评估
测试数据、因素和指标
开发者在模型卡片中表示,模型性能的衡量标准是:
通过人类的定性判断来评估控制代码是否能使生成的文本符合期望的领域。
环境影响
可以使用Lacoste等人(2019)提出的机器学习影响计算器来估算碳排放。详细信息来自相关论文。
属性 | 详情 |
---|---|
硬件类型 | TPU v3 Pod |
使用时长 | 约336小时(2周) |
云服务提供商 | GCP |
计算区域 | 需要更多信息 |
碳排放 | 需要更多信息 |
技术规格
开发者在相关论文中写道:
CTRL在TensorFlow(Abadi等人,2016)中实现,并在Cloud TPU v3 Pod的256个核心上以1024的全局批量大小进行训练,共进行800k次迭代。使用Adagrad(Duchi等人,2011)进行训练,大约需要2周时间,学习率从0到0.05在25k步内线性预热。如(Merity等人,2017)中所述,梯度的范数被裁剪为0.25。由于Adagrad累加器的单调性质,不需要学习率衰减。在训练较小模型时,我们与Adam优化器(Kingma & Ba,2014)进行了比较,但我们发现Adagrad具有相当的收敛速度和显著的内存节省。我们还尝试了包括SM3(Anil等人,2019)、Adafactor(Shazeer & Stern,2018)和NovoGrad(Ginsburg等人,2019)在内的显式内存节省优化器,结果不一。
更多链接、参考和详细信息请参阅论文。
引用
BibTeX格式:
@article{keskarCTRL2019,
title={{CTRL - A Conditional Transformer Language Model for Controllable Generation}},
author={Keskar, Nitish Shirish and McCann, Bryan and Varshney, Lav and Xiong, Caiming and Socher, Richard},
journal={arXiv preprint arXiv:1909.05858},
year={2019}
}
APA格式:
- Keskar, N. S., McCann, B., Varshney, L. R., Xiong, C., & Socher, R. (2019). Ctrl: A conditional transformer language model for controllable generation. arXiv preprint arXiv:1909.05858.
模型卡片作者
本模型卡片由Hugging Face团队撰写,参考了开发者发布的模型卡片。
伦理考虑
本次发布仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非专门为所有下游用途而设计或评估。我们强烈建议用户在部署此模型之前,评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑人工智能的常见局限性,遵守适用法律,并在选择用例时采用最佳实践,特别是在错误或滥用可能对人们的生活、权利或安全产生重大影响的高风险场景中。有关用例的更多指导,请参阅我们的AUP和AI AUP。
🚀 快速开始
使用以下代码开始使用该模型。更多信息请参阅Hugging Face ctrl文档。
点击展开
>>> from transformers import CTRLTokenizer, CTRLModel
>>> import torch
>>> tokenizer = CTRLTokenizer.from_pretrained("ctrl")
>>> model = CTRLModel.from_pretrained("ctrl")
>>> # CTRL was trained with control codes as the first token
>>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
>>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
📄 许可证
本项目采用BSD 3条款许可证。



