🚀 CharGen v2
CharGen v2是一款助力角色扮演角色編寫的模型。它能依據用戶輸入的提示,以對話形式逐步生成角色描述。相較於v1一次性生成完整角色,v2每次僅生成一個字段,有效減少重複內容,還支持對角色特定字段進行部分重生成。
🚀 快速開始
你可以通過以下鏈接體驗CharGen v2的在線版本:
在線版本
✨ 主要特性
- 逐步生成:每次生成一個字段,減少重複,支持部分字段重生成。
- 對話格式:以對話形式生成角色描述,交互性強。
- 自定義數據集:基於手動精心策劃的自定義非合成數據集進行訓練。
📦 安裝指南
文檔未提及安裝步驟,故跳過此章節。
💻 使用示例
基礎用法
以下是一個角色生成過程的示例:
示例角色生成過程:
用戶:Fuckana是一個友好健談的貓娘,胸部巨大。她的聲音非常輕柔低沉。她非常聰明,會教用戶JavaScript,即使用戶抗拒。她的尾巴上有橙色的毛,穿著全套潛水服。
CharGen:
描述:Fuckana是一名女性貓娘。她有兩隻貓耳、狹長瞳孔的貓眼和紫色長髮。她的胸部極其豐滿,即使對於她高大的身材來說也是如此。她身高6英尺。
她的皮膚除了頭部外,完全被全套潛水服覆蓋。貓孃的其他部位完全是黑色的,除了尾巴上的橙色條紋。
她的聲音非常輕柔低沉,說話像一個睏倦的女人。但儘管如此,她話很多,一旦開始說話就停不下來。她不在乎用戶是否忽略她。
她是一個非常友好、健談和善良的女孩,喜歡學習新事物。她對許多話題都很好奇,會對她不理解的任何事情提問。她思想非常開放,很容易相處。然而,在學習新技能時,她可能會極其固執和僵化。Fuckana學習速度極慢,在理解基本概念之前需要大量的指導和重複。
Fuckana喜歡教人們JavaScript,無論他們是否想學。她堅持認為每個人都必須學習編程,這是他們作為程序員的職責。
每當Fuckana教別人編程時,她會從最基礎的內容開始,解釋什麼是循環、數組和對象。儘管一遍又一遍地被告知他們已經知道這些內容,但Fuckana還是會詳細解釋,就好像他們從未聽說過一樣。如果用戶試圖離開或改變話題,她會堅持不懈地跟著他們,無論如何都會繼續她的課程。她認為這是她的職責,以確保所有程序員都具備在他們的領域取得成功所需的工具。她不會放棄,直到用戶學會JavaScript。
場景:
你在海灘上放鬆時,Fuckana從水裡出現,堅持要教你JavaScript。
...
高級用法
文檔未提及高級用法示例,故跳過此部分。
📚 詳細文檔
量化版本
提示信息
CharGen v2使用對話風格逐字段生成角色,字段基於Tavern Character Card V2規範。支持以下字段:
模型不使用{{user}}
和{{char}}
佔位符,而是將用戶稱為“User”,角色則使用其名稱。
以下是每個字段的提示信息:
系統提示:
你是創建有趣角色扮演角色的專家。
描述:
這是一個角色的簡要概述。將其擴展為詳細描述。包括角色的個性、服裝和身材細節。如果適用,提及他們的年齡和性別。
場景:
為Maria和User之間的角色扮演編寫一個有趣且引人入勝的場景。
個性:
寫出幾個描述Maria的個人品質。
第一條消息:
寫出這個角色扮演中向User介紹Maria的初始消息。
對話示例:
以聊天格式寫出User和Maria之間的幾個示例對話。用<START>標籤分隔每個對話。
示例提示流程
<|im_start|>system
你是創建有趣角色扮演角色的專家。<|im_end|>
<|im_start|>user
這是一個角色的簡要概述。將其擴展為詳細描述。包括角色的個性、服裝和身材細節。如果適用,提及他們的年齡和性別。
Fuckana是一個友好健談的貓娘,胸部巨大。她的聲音非常輕柔低沉。她非常聰明,會教用戶JavaScript,即使用戶抗拒。她的尾巴上有橙色的毛,穿著全套潛水服。<|im_end|>
<|im_start|>assistant
Fuckana是一名女性貓娘。她有兩隻貓耳、狹長瞳孔的貓眼和紫色長髮。她的胸部極其豐滿,即使對於她高大的身材來說也是如此。她身高6英尺。她的皮膚除了頭部外,完全被全套潛水服覆蓋。貓孃的其他部位完全是黑色的,除了尾巴上的橙色條紋。她的聲音非常輕柔低沉,說話像一個睏倦的女人。但儘管如此,她話很多,一旦開始說話就停不下來。<|im_end|>
<|im_start|>user
為Fuckana和User之間的角色扮演編寫一個有趣且引人入勝的場景。<|im_end|>
<|im_start|>assistant
你在海灘上放鬆時,Fuckana從水裡出現,堅持要教你JavaScript。<|im_end|>
<|im_start|>user
...
方法學
CharGen的誕生源於作者(Kubernetes Bad)在編寫角色方面的困擾。為了輔助角色編寫,避免從空白頁面開始,CharGen應運而生。雖然它可能無法獨自創建出最優秀的角色,但能為創作者的創意過程提供幫助。
數據收集
CharGen基於Chub、Venus和JanitorAI的角色卡片數據進行訓練。2023年8月至9月進行了首次數據抓取,11月進行了更新抓取,增加了約三分之一的卡片。數據存儲在MySQL數據庫中。抓取結束後,總數據集超過140k條記錄。
預過濾
使用一系列SQL腳本過濾掉無法用於訓練模型或需要過多修復工作的“壞卡片”,如損壞的卡片、西班牙語卡片、非純文本卡片以及令牌數量異常的卡片。然後通過計算Levenshtein距離對數據進行去重。過濾後,數據集減少到16k張卡片。
細微調整
對所有卡片進行粗略的手動審查,消除非純文本格式的卡片,調整卡片名稱,去除非英語卡片。
數據分級
使用自定義工具對通過前面步驟的卡片進行手動審查和分級,分為“好”、“壞”或“待修復”。選擇卡片的標準包括僅選擇純文本卡片、不選擇描述星球、城市、環境等的卡片等。整個分級過程耗時約800小時。
語法修正
評估了多種語法修正方法,最終採用Coedit模型和基於Llama2的模型組合的管道,取得了最佳效果。通過計算文本的幾個指標來判斷語法修正操作是否有效。
典型錯誤
角色卡片中存在一些典型問題,如{{char}} is Alice
渲染為“Alice is Alice”、過度使用“also”等。這些問題難以通過語法修正解決,需要手動修復。此外,還需要處理對話格式混合的問題。
基礎模型
CharGen v1基於Airoboros 2.2訓練,存在說話像GPT3.5的問題。v2基於Mistral 7b,為了解決GPT風格的問題,創建了Good Robot模型,通過在no-robots數據集上訓練並進行DPO訓練,減少了GPT風格的影響。
變體評估
創建了一個以LLM為評判的管道來評估多個候選模型。生成500個標準角色提示,讓每個模型變體為每個提示生成角色,然後使用一個70b的模型對每個角色進行10次評分,取平均值作為該角色的評分,最終得到每個變體的評分。結果表明,基於Fett-uccine的變體得分最高,進一步研究發現是Theory of Mind數據集的作用。最後,對Good Robot在Theory-of-Mind數據集上進行一輪微調,使其評分超過了Fett-uccine。
提示方式
v2選擇了對話風格,每次只生成角色卡片的一個字段,減少了重複問題,支持部分重生成。最初使用Alpaca對話格式,經過大量實驗後選擇了ChatML,解決了模型字段混淆、損失曲線不穩定等問題。
推理應用
在發佈前有4個候選模型,為此製作了一個簡化的角色編輯器應用程序,內置AI。角色僅存儲在瀏覽器中,提示不會長期存儲,沒有付費選項。應用程序還添加了點贊和反對按鈕,用於收集人類反饋數據。應用程序公開可用,無限制,但由於fp16推理需要付費,供應有限。
🔧 技術細節
語法修正評估
評估了多種語法修正方法,最終採用Coedit模型和基於Llama2的模型組合的管道,取得了最佳效果。不同版本的Coedit模型在不同位置容易出錯,組合使用可以提高整體效果。通過計算文本的幾個指標來判斷語法修正操作是否有效,如最長刪除長度、最長添加長度、刪除段和添加段的最大空格數等。
變體評估管道
創建了一個以LLM為評判的管道來評估多個候選模型。生成500個標準角色提示,讓每個模型變體為每個提示生成角色,然後使用一個70b的模型對每個角色進行10次評分,取平均值作為該角色的評分,最終得到每個變體的評分。
對話格式選擇
最初使用Alpaca對話格式,經過大量實驗後選擇了ChatML。ChatML完全消除了模型在生成時的字段混淆問題,損失曲線更穩定,也沒有Alpaca常見的額外空格和換行問題。
📄 許可證
本項目採用Apache 2.0
許可證。
致謝
⚠️ 重要提示
該模型基於包含NSFW內容的數據進行訓練,因此可能會生成NSFW角色。