該存儲庫包含源代碼和經過訓練的模型,用於大規模的對話響應生成模型。人類評估結果表明,在單彎對話測試下,對話產生的響應與人類反應質量相當。
該存儲庫基於HuggingFace Pytorch-Transformer和OpenAI GPT-2,其中包含數據提取腳本,型號訓練代碼以及預處理的小型(117m)培養基(345m)和大型(762m)模型檢查點。
該模型經過Reddit討論線程的1.47億多轉向對話的培訓。最大的型號可以在幾個小時內使用8 V100機器進行培訓(但這不是必需的),並具有分佈式培訓和FP16選項。
包含腳本可用於重現DSTC-7接地對話生成挑戰的結果,以及從Reddit數據創建的6K多參考數據集。
項目網頁:https://www.microsoft.com/en-us/research/project/large-scale-pretraining-for-response-generation/
arxiv紙:https://arxiv.org/abs/1911.00536
(更新07/09/2022)更改files.pushshift.io/reddit服務器導致我們的數據生成管道破裂。這些問題現在已經解決,以下數據準備小節中解釋的步驟應再次起作用。數據在大約10個小時內使用8個過程( -j 8 )生成,並且需要800GB的臨時磁盤空間。
(更新06/23/2021)我們發布了Dialogpt(retgen)的檢索效果/接地版本,請查看Retgen Repo和Retgen Paper
(更新05/20/2021)Prakhar Mishra在YouTube上進行對話的很棒的視頻演練
(更新03/31/2021)AK391使用Gradio Web演示試驗的第三方演示
(更新09/15/2020)已發布了一組大型對話框排名模型!
通過與我們的最新對話排名模型集成,對話的生成得到了改善
(更新07/08/2020)已發布6K多REF測試集!
為了生成數據,請求運行demo.py並將數據選項設置為“完整”,生成的6k多REF測試集將位於
./data/test.refs.txt
(更新03/10/2020)HuggingFace Transformers中可用的型號卡!
請在HuggingFace Transformers存儲庫中查看我們的型號卡。有了幾行代碼,與對話進行交互式播放應該非常直截了當。
小型型號:https://huggingface.co/microsoft/dialogpt-small
中型型號:https://huggingface.co/microsoft/dialogpt-medium
大型型號:https://huggingface.co/microsoft/dialogpt-large
(新)排名模型:https://huggingface.co/microsoft/dialogrpt-updown
(更新01/06/2020)一些第三方解碼腳本實現:
Dialogpt完全是在Ubuntu 16.04上開發的,並且 - 取決於我們的可用性 - 如果您在同一配置上運行代碼的困難,我們會嘗試提供支持。但是,我們無法為其他分佈或操作系統提供支持。代碼的部分可能會在其他UNIX口味(MACOS,Windows子系統,linux,Cygwin等)上運行,但建議將Ubuntu用於主培訓代碼。
訓練代碼可以在CPU上運行,但可能會很慢。我們建議使用GPU訓練和Finetune所有型號。 GPU的數量沒有最小的限制。但是,如果使用分佈式列車進行多種GPU配置,則加速與GPU的數量大致是亞線性的。要在使用較少的GPU時模擬相同的批次化,請在模型培訓中使用較大的gradient_accumulation_steps 。
1,17m和345m的模型可以加載在具有12G內存的單個GPU中。 762m的模型將需要一個大於16G內存的GPU才能進行有效的訓練。具有50m培訓實例和V100 GPU的基準數據的訓練速度:
| n_gpu | 時期時間(h) | 令牌/秒 |
|---|---|---|
| 1 | 118 | 10847 |
| 2 | 62 | 20645 |
| 4 | 34 | 37647 |
| 8 | 18 | 71356 |
我們在新數據集上進行的驗證模型進行微調通常需要1-2個時代。
我們創建了一個演示腳本demo.py ,以減輕該系統部署的困難。 demo.py包含一個模型下載,數據提取,數據預處理和模型培訓的管道,對一個命令行中的虛擬數據集進行了培訓。
請使用以下命令來克隆,安裝要求並加載Conda環境(請注意,需要NVIDIA CUDA 10.0開發人員工具包):
sudo apt-get install -y make wget gzip bzip2 xz-utils zstd sedgit clone https://github.com/microsoft/DialoGPT.git
cd DialoGPT
conda env create -f LSP-linux.yml -n LSP
conda activate LSP如果您在Linux以外的其他架構上運行此操作,請使用LSP-generic.yml代替LSP-linux.yml ,但請注意,通用型號並未在所有平台中測試,因此無法穩定性。要使用FP16培訓,請通過以下命令安裝APEX
conda activate LSP
git clone https://github.com/NVIDIA/apex
cd apex
git reset --hard 3d01e4a0a188cc8df54bc6e44cf5eb40ff6b4cc5
pip install -v --no-cache-dir --global-option= " --cpp_ext " --global-option= " --cuda_ext " .
python3.6 demo.py首先,首先從他們的官方存儲店中安裝Docker和Nvidia-Docker。運行代碼的圖像環境可以如下加載:
Nvidia-Docker V2。 *
$ docker run --gpus all --ipc=host --rm -it -v $PWD :/workspace --network=host icaruszyz/large-scale-training:dialogpt bashNvidia-Docker V1。 *
$ nvidia-docker --rm -it -v $PWD :/workspace --network=host icaruszyz/large-scale-training:dialogpt bash在Docker容器中,運行
python demo.py本節解釋了demo.py中的所有組件。
在運行demo.py之前,您可以在demo.py中設置data_folder (默認值./models ),作為要下載所有數據和預審計/微調模型的位置。然後簡單地運行
python demo.py到
請注意,默認情況下, demo.py將使用虛擬數據,請使用選項--data指定REDDIT培訓數據。提供三個選項: dummy , small而full 。
python demo.py --data small
python demo.py --data full小的REDDIT數據約為140MB,完整的REDDIT數據大於27GB。使用完整的Reddit數據處理時,您可以準備一杯咖啡,因為這需要很長時間!
為了生成6K多REF測試集數據,請求運行demo.py並將數據選項設置為“完整”,該一代將位於
./data/test.refs.txt
預處理和微調的模型可在Azure Blobstorage上使用。有關如何下載/使用這些型號的更多詳細信息,請運行/查看demo.py或者,您可以使用demo_utils.py中的鏈接直接下載。
首先,使用prepare4db.sh將TSV數據文件轉換為以下腳本可以識別的正確格式。然後需要將Trainig數據處理到數據庫文件中,並使用下面的命令行:
python prepro.py --corpus $DATA_PATH 該培訓腳本可用於單個GPU或多個GPU設置(單個節點中的多個GPU的分佈式培訓):
python ./LSP_train.py # Single GPU training
python -m torch.distributed.launch --nproc_per_node=8 ./LSP_train.py # Training on 8 GPUs培訓腳本接受幾個論點來調整培訓:
| 爭論 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| max_seq_length | int | 128 | 每個培訓實例的最大令牌數量。 |
| train_input_file | str | "" | 以.db格式的培訓數據集的路徑 |
| eval_input_file | str | "" | 以TSV格式設置驗證的路徑 |
| 繼續_從 | int | 0 | 在指定數量的步驟後恢復培訓 |
| FP16 | boolean | True | 是否使用16位浮點進行模型訓練。 |
| train_batch_size | int | 4 | 培訓的批量尺寸 |
| 有效_batch_size | int | 4 | 驗證批量尺寸 |
| gradient_accumulation_steps | int | 2 | 在幾個步驟上積累梯度 |
| Learning_rate | float | 1e-5 | 學習率 |
| lr_schedule | str | noam | 可以從[ noam , noamwd , BERT , None ]中選擇學習率的時間表 |
| num_optim_steps | int | 1000000 | 訓練優化步驟數量 |
| no_token_id | boolean | True | 如果設置為true,則使用全零令牌式嵌入。 |
在培訓期間,將更新兩個日誌文件。 train_log.txt和eval_log.txt包含培訓和開發設置的模型丟失,困惑和訓練速度(令牌/秒)統計。
可以在./models/output_model中找到日誌文件和保存的模型檢查點
我們注意到,即使使用正確過濾的Reddit數據集,有時我們的模型仍然可以產生中等有毒/不適當的響應。由於這個原因,我們目前無法提供解碼腳本(實時演示和解碼腳本訪問僅受邀請才)。目前,我們仍在研究一種受控的解碼方法,以防止該系統脫離有毒產生。請繼續關注。
有關第三方解碼方法的一些討論,請參見第3期和Reddit討論。
有關一些第三方解碼方法,請參見下文:
我們發布了6個微調模型,可以在低資源用戶注定的數據集中進行進一步的微調。與OpenAI GPT-2模型大小一致,這些模型中的總參數範圍為1.17億至762m。
| 模型 | 從GPT-2進行微調 | 從頭開始訓練 |
|---|---|---|
| Dialogpt 762M型號 | [鏈接] [Huggingface型號卡] | [關聯] |
| 對話345m型號 | [鏈接] [Huggingface型號卡] | [關聯] |
| Dialogpt 1.17億型號 | [鏈接] [Huggingface型號卡] | [關聯] |
| 對話345m型號(反向,用於MMI) | 關聯 | - |
| 撥號(新排名模型) | 關聯 | - |
可以將模型文件完全加載為GPT-2模型檢查點,從HuggingFace的變壓器中加載。您可以在Dialogpt的repo in ./configs/*中找到相應的配置文件( merges.txt , config.json , vocab.json )。
反向模型正在從目標中預測源。該模型用於MMI重新療程。
我們最近提出的排名模型用於預測響應的人類反饋(upvots,答复)。這些模型可用於提高對話生成質量(有關詳細信息,請參見我們的EMNLP論文)。
重新訓練完整模型的第一步是生成上述27GB REDDIT數據集。這涉及從https://files.pushshift.io/reddit下載完整的reddit提交和註釋轉儲並創建中間文件,總體上需要700GB的本地磁盤空間。下載和處理完整數據需要大約1-2天,具體取決於您的(CPU)計算(例如,在最近的計算機上使用8個內核〜24小時)。假設您運行了上述設置和安裝步驟(Conda激活LSP等),則可以通過運行以下來創建完整的數據集:
python demo.py --data full
或者
cd reddit_extractor; SIZE=full make -j 8; cd ..
前命令稱之為後者,因此兩種方法是等效的。我們建議前者,因為後者遇到任何問題或想自定義任何參數(例如, make Command允許您僅構建數據的一個子集),因此最有用。請注意,下載階段可能是錯誤的,例如基於您的地理位置(防火牆等)。如果以上命令無法生成data/train.tsv ,或者該文件不接近27GB,則意味著出現問題。在這種情況下,您可能需要檢查reddit_extractor/wget-log和reddit_extractor/logs/*.log是否有任何明顯的錯誤(例如,wget無法從pusphshift.io下載)。如果錯誤消息對您沒有意義,請隨時與我們聯繫。如果是這樣,請確保包括從這些日誌文件收集的任何錯誤消息。
培訓數據統計信息:生成的培訓TSV文件應大約26.8 GB未壓縮,具有146.80萬的培訓實例,3.87b源代幣和2.14B目標令牌(包括Tusterance-level 0/1重量)。最終的train.tsv文件應包含146,846,215行。
我們建議使用demo.py --data full生成上述數據,因為它(1)生成數據,(2)將其轉換為DB格式,並且(3)使用python LSP_train.py訓練模型。如果要自定義任何超參數,請直接編輯demo.py
我們的模型實現了DSTC-7挑戰響應生成任務的最新結果。
| 實驗 | NIST2 | NIST4 | bleu2 | bleu4 | 流星 | ENT-4 | DIST-1 | DIST-2 | avg。倫 |
|---|---|---|---|---|---|---|---|---|---|
| 人類反應 | 2.62 | 2.65 | 12.35% | 3.13% | 8.31% | 10.45 | 16.66% | 67.01% | 18.8 |
| DSTC-7獲獎者 | 2.51 | 2.52 | 14.35% | 1.83% | 8.07% | 9.03 | 10.89% | 32.49% | 15.1 |
| 對話345m | 2.80 | 2.82 | 14.16% | 2.31% | 8.51% | 10.08 | 9.13% | 39.73% | 16.9 |
| 對話345m(BS) | 2.92 | 2.97 | 19.18% | 6.05% | 9.29% | 9.57 | 15.73% | 51.03% | 14.2 |
ent表示熵分數,而DIST表示獨特的分數。對於除平均長度以外的所有指標,更大的時間更好。
請注意,與人類反應相比,上級自動評估並不是必需的,這意味著我們的模型實現了人類的平價。請查看我們的論文以進行更多詳細的分析。
要微調DSTC-7挑戰數據上的345M對話框模型,該數據具有8 V100 GPU的服務器,請運行以下命令行(可以在DSTC-7 Repo上找到DSTC數據):
python3 -m torch.distributed.launch --nproc_per_node=8 train_LSP.py --init_checkpoint ./models/medium/medium_ft.pkl --train_input_file ./data/DSTC_train.db --eval_input_file ./data/DSTC_valid.tsv --model_name_or_path ./model/medium/ --learning_rate 1e-4 --train_batch_size 64 --eval_batch_size 64 --no_token_id訓練有素的模型可以在DSTC培養基模型上找到
請下載以下第三方軟件包,然後保存到空文件夾3rdparty :
cpan install ):XML:twig,stort:sort:自然和字符串:util。請關注DSTC-7官方存儲庫以提取數據,並將data-official-test/test.refs.txt放入./dstc/data/文件夾中。
在下面運行提取腳本以產生人類響應假設文件human.resp.txt :
python extract_human.py最後,為了重現DSTC數據集上人類假設的結果,請在repo文件夾下運行以下命令:
python batch_eval.py評估結果將在文件夾中生成./dstc/eval/
我們從Reddit上測試了6K多REF數據集。結果總結在下面
| 實驗 | NIST2 | NIST4 | bleu2 | bleu4 | 流星 | ENT-4 | DIST-1 | DIST-2 | avg。倫 |
|---|---|---|---|---|---|---|---|---|---|
| 人類反應 | 3.41 | 4.25 | 17.90% | 7.48% | 10.64% | 11 | 14.50% | 63.00% | 13.1 |
| 對話1.17億 | 2.39 | 2.41 | 10.54% | 1.55% | 7.53% | 10.78 | 8.60% | 39.90% | 12.8 |
| 對話345m | 3 | 3.06 | 16.96% | 4.56% | 9.81% | 9.13 | 6.80% | 26.30% | 12.2 |
| 對話762m | 2.84 | 2.9 | 18.66% | 5.25% | 9.66% | 9.72 | 7.76% | 29.93% | 11.2 |
| 對話345m(BS) | 3.4 | 3.5 | 21.76% | 7.92% | 10.74% | 10.48 | 12.38% | 48.74% | 11.3 |
| 對話345m(w/mmi) | 3.28 | 3.33 | 15.68% | 3.94% | 11.23% | 11.25 | 9.39% | 45.55% | 17.2 |
我們進一步進行人類評估(每種方法的6K示例,每個示例均由3名人類法官評估)。結果表明,在這種非相互作用的圖靈測試下,我們的一代質量是要接近實際人類反應的質量:
相關性:A和B,這與源提示更相關。
| 系統 | 勝利(%) | 領帶(%) | B贏(%) | 系統b |
|---|---|---|---|---|
| 對話345m | 2671(45%) | 513(9%) | 2816(47%) | 人類的反應 |
| 對話345m | 3281(72%) | 394(9%) | 882(19%) | 人格chat |
| 對話345m w/ mmi | 2871 (48%) | 522(9%) | 2607(43%) | 人類的反應 |
信息性:A和B,這更滿足和信息豐富。
| 系統 | 勝利(%) | 領帶(%) | B贏(%) | 系統b |
|---|---|---|---|---|
| 對話345m | 2722(45%) | 234(4%) | 3044(51%) | 人類的反應 |
| 對話345m | 3490(77%) | 206(5%) | 861(19%) | 人格chat |
| 對話345m w/ mmi | 3011 (50%) | 234(4%) | 2755(46%) | 人類的反應 |
類似人:A和B,您認為這更可能是由人類產生的。
| 系統 | 勝利(%) | 領帶(%) | B贏(%) | 系統b |
|---|---|---|---|---|
| 對話345m | 2716(45%) | 263(4%) | 3021(50%) | 人類的反應 |
| 對話345m | 3462(76%) | 196(4%) | 899(20%) | 人格chat |
| 對話345m w/ mmi | 2978 (50%) | 241(4%) | 2781(46%) | 人類的反應 |
請在我們的Arxiv論文中查看全部詳細信息。
| 角色 | 回覆 |
|---|---|
| 用戶 | 金錢會買幸福嗎? |
| 機器人 | 取決於您花多少錢。 |
| 用戶 | 購買幸福的最佳方法是什麼? |
| 機器人 | 您只需要在20多歲之前成為百萬富翁,然後您就可以開心。 |
| 用戶 | 這是如此困難! |
| 機器人 | 您不知道成為百萬富翁和快樂有多困難。有錢有很多錢是有原因的 |
| 角色 | 回覆 |
|---|---|
| 用戶 | 生活的意義是什麼? |
| 機器人 | 意思是與您的家人和朋友在一起。 |
| 機器人 | 我要猜測:這意味著您的父母和朋友愛您。我相信這就是意思。 |
| 機器人 | 我認為意思是確保您死後還活著。因此,您將與家人,朋友和您自己在一起。 |
| 機器人 | 不是,但感謝您的幫助。 |
| 用戶 | 機器人 |
|---|---|
| 誰是美國第一任總統 | 喬治華盛頓 |
| 水的沸點是什麼? | 我認為大約是212F。 |
| 哪一個更大,太陽還是月亮? | 太陽。 |
| 哪種動物有黑白條紋? | 黑白條紋貓。 |
| 用戶 | 機器人 |
|---|---|
| 中國與美國之間的貿易戰爭仍在發生。 | 我確定中國政府和U。 s。只要他們將手臂放在桌子上和錢流動,就可以了。 |
| 誰在2018年贏得了世界杯? | 我相信德國。 |
| NVIDIA的Titan RTX真的很好。 | 我有這張卡,我喜歡它。沒有投訴。 |
| 保時捷可以用新的Taycan EV擊敗特斯拉嗎? | 我不這麼認為。特斯拉比保時捷更強大。 |
| 用戶 | 機器人 |
|---|---|
| 美好生活的意義是什麼? | 我認為這是我們所有人都與我們的前世聯繫,生活的意義就是按照您想要的方式和想要的方式生活。 |
| 哪個更重要 - 成功還是快樂? | 成功是無盡的。快樂是唯一重要的事情。 |
| 和平是製止戰爭的唯一方法嗎? | 如果世界不願意與您合作。和平是最終目標,但和平不僅需要這一目標。 |
| 人們應該有多少自由? | 只要您不傷害人或財產,適當的自由就是隨意做的自由。 |
| 用戶 | 機器人 |
|---|---|
| 您如何看待對話回購? | 很好,但是很容易找到錯誤。 |
如果您發現任何問題,請開始問題:)
實時演示和解碼腳本訪問才受邀請。請關注完整版本。
retgen:https://github.com/dreasysnail/retgen。檢索儀式/接地對話及其他。 RETGEN是一個聯合培訓框架,同時以端到端的方式優化了密集的通道檢索器和知識接地的文本生成器。
Microsoft Icecaps:https://github.com/microsoft/icecaps。
作為該項目的正交存儲庫,Microsoft Icecaps是用於構建神經對話系統的開源工具包(在TensorFlow中)。 ICECAPS在靈活的範式中提供了最新的對話建模和一般NLP文獻的一系列工具,該範式可以實現複雜的多任務學習設置。
預處理的Unilm:https://github.com/microsoft/unilm
MT-DNN:https://github.com/namisan/mt-dnn
中國對話的揚jianxin1。 https://github.com/yangjianxin1/gpt2-chitchat。我們很高興看到我們在Dialogpt中使用的MMI策略也改善了該項目的性能!
如果您有任何疑問/建議,請聯繫[email protected]。但是,響應將是零星的。請期待延遲。
該項目歡迎貢獻和建議。大多數捐款要求您同意撰寫貢獻者許可協議(CLA),宣布您有權並實際上授予我們使用您的貢獻的權利。有關詳細信息,請訪問https://cla.opensource.microsoft.com。
當您提交拉動請求時,CLA機器人將自動確定您是否需要提供CLA並適當裝飾PR(例如狀態檢查,評論)。只需按照機器人提供的說明即可。您只需要使用我們的CLA在所有存儲庫中進行一次。
該項目採用了Microsoft開源的行為代碼。有關更多信息,請參見《行為守則常見問題守則》或與其他問題或評論聯繫[email protected]。
該存儲庫旨在促進對會話數據進行大規模預處理的研究。該工具包僅包含在運行對話框中實際生成模型權重文件所需的建模機械。該模型本身僅提供有關各種文本跨度的權重的信息;為了使研究人員實際使用它,他們將需要自行攜帶對話數據並從驗證的系統中解碼響應生成。微軟對驗證系統的第三方利用率中的任何一代都不承擔任何責任。
如果您在研究中使用此代碼,則可以引用我們的Arxiv論文:
@inproceedings{zhang2019dialogpt,
title={DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation},
author={Yizhe Zhang and Siqi Sun and Michel Galley and Yen-Chun Chen and Chris Brockett and Xiang Gao and Jianfeng Gao and Jingjing Liu and Bill Dolan},
year={2020},
booktitle={ACL, system demonstration}
}