模型概述
模型特點
模型能力
使用案例
🚀 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條款許可證。



