🚀 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角色。