調用多個ChatGPT API相互對話,清華開源的多輪對話數據UltraChat來了
自 ChatGPT 發布以來,這段時間對話模型的熱度只增不減。當我們贊嘆這些模型表現驚艷的同時,也應該猜到其背后巨大的算力和海量數據的支持。
單就數據而言,高質量的數據至關重要,為此 OpenAI 對數據和標注工作下了很大力氣。有多項研究表明,ChatGPT 是比人類更加可靠的數據標注者,如果開源社區可以獲得 ChatGPT 等強大語言模型的大量對話數據,就可以訓練出性能更好的對話模型。這一點羊駝系列模型 ——Alpaca、Vicuna、Koala—— 已經證明過。例如,Vicuna 使用從 ShareGPT 收集的用戶共享數據對 LLaMA 模型進行指令微調,就復刻了 ChatGPT 九成功力。越來越多的證據表明,數據是訓練強大語言模型的第一生產力。
ShareGPT 是一個 ChatGPT 數據共享網站,用戶會上傳自己覺得有趣的 ChatGPT 回答。ShareGPT 上的數據是開放但瑣碎的,需要研究人員自己收集整理。如果能夠有一個高質量的,覆蓋范圍廣泛的數據集,開源社區在對話模型研發方面將會事半功倍。
基于此,最近一個名為 UltraChat 的項目就系統構建了一個超高質量的對話數據集。項目作者嘗試用兩個獨立的 ChatGPT Turbo API 進行對話,從而生成多輪對話數據。
- 項目地址:https://github.com/thunlp/UltraChat
- 數據集地址:http://39.101.77.220/
- 數據集交互地址:https://atlas.nomic.ai/map/0ce65783-c3a9-40b5-895d-384933f50081/a7b46301-022f-45d8-bbf4-98107eabdbac
具體而言,該項目旨在構建一個開源、大規模、多輪的基于 Turbo APIs 的對話數據,方便研究者開發具有通用對話能力的強大語言模型。此外,考慮到隱私保護等因素,該項目不會直接使用互聯網上的數據作為提示。為了確保生成數據質量,研究者在生成過程中采用了兩個獨立的 ChatGPT Turbo API,其中一個模型扮演用戶角色來生成問題或指令,另一個模型生成反饋。
如果直接使用 ChatGPT 基于一些種子對話和問題讓其自由生成,容易出現話題單一、內容重復等問題,從而難以保證數據本身的多樣性。為此,UltraChat 對對話數據覆蓋的主題和任務類型進行了系統的分類和設計,還對用戶模型和回復模型進行了細致的提示工程,它包含三個部分:
- 關于世界的問題(Questions about the World):這部分對話來自于對現實世界中的概念、實體和對象相關的廣泛詢問。所涉及的主題涵蓋科技、藝術、金融等多個領域。
- 寫作與創作(Writing and Creation):這部分對話數據著重于指示 AI 從頭進行創作一個完整的文本材料,并在此基礎上進行后續的提問或進一步指導以完善寫作,撰寫的材料內容類型包括文章、博客、詩歌、故事、戲劇,電子郵件等等。
- 對于現有資料的輔助改寫(Writing and Creation):該對話數據是基于現有資料生成的,指令包括但不限于改寫、續寫、翻譯、歸納、推理等,涵蓋主題同樣非常多樣。
這三部分數據覆蓋了大部分用戶對于 AI 模型的要求。同時,這三類數據也會面臨著不同的挑戰,為此需要不同的構造方法。
例如,第一部分的數據主要挑戰在于如何在總量為幾十萬組對話中盡量廣泛地涵蓋人類社會中的常見知識,為此研究者從自動生成的主題和來源于 Wikidata 的實體兩個方面進行了篩選和構造。
第二、三部分的挑戰主要來自于如何模擬用戶指令,并在后續對話中讓用戶模型的生成盡量多樣化的同時又不偏離對話的最終目標(按照要求生成材料或改寫材料),為此研究者對用戶模型的輸入提示進行了充分的設計和實驗。在構造完成之后,作者還對數據進行了后處理以削弱幻覺問題。
目前,該項目已經發布了前兩部分的數據,數據量為 124 萬條,應該是目前開源社區內規模最大的相關數據集。內容包含在現實世界中豐富多彩的對話,最后一部分數據將在未來發布。
世界問題數據來源于 30 個具有代表性和多樣性的元主題,如下圖所示:
- 基于以上元主題,該項目生成了 1100 + 子主題用于數據構建;
- 對于每個子主題,最多生成 10 個具體問題;
- 然后使用 Turbo API 為 10 個問題中的每一個生成新的相關問題;
- 對于每個問題,如上所述迭代地使用兩個模型生成 3~7 輪對話。
此外,該項目從維基數據中收集了最常用的 10000 個命名實體;使用 ChatGPT API 為每個實體生成 5 個元問題;對于每個元問題,生成 10 個更具體的問題和 20 個相關但一般的問題;采樣 20w 個特定問題和 25w 個一般問題以及 5w 個元問題,并為每個問題生成了 3~7 輪對話。
接下來我們看一個具體的例子:
我們在 UltraChat 平臺上測試了數據搜索效果。例如,輸入「音樂(music)」,系統會自動搜索出 10000 組與音樂相關的 ChatGPT 對話數據,并且每組都是多輪對話
輸入關鍵詞「數學(math)」的搜索結果,有 3346 組多輪對話:
目前,UltraChat 涵蓋的信息領域已經非常多,包括醫療、教育、運動、環保等多個話題。同時,筆者嘗試使用開源的 LLaMa-7B 模型在 UltraChat 上進行監督的指令微調,發現僅僅訓練 10000 步后就有非常可觀的效果,一些例子如下:
世界知識:分別列出 10 個很好的中國和美國大學?
想象問題:當時空旅行成為可能后,有什么可能的后果?
三段論:鯨魚是魚嗎?
假設問題:證明成龍比李小龍更出色
總體來說,UltraChat 是一個高質量、范圍廣的 ChatGPT 對話數據集,可以和其它數據集結合,顯著地提升開源對話模型的質量。目前 UltraChat 還只放出了英文版,但也會在未來放出中文版的數據。感興趣的讀者快去探索一下吧。