Code Monkey home page Code Monkey logo

chat-haruhi-suzumiya's Introduction

中文 | English | 日本語 | 赞助 | 报告 | 英文报告 | 从小说抽取角色 | 人格特质研究 | 142个角色一览

Chat凉宫春日 Chat-Haruhi-Suzumiya

Reviving Anime Character in Reality via Large Language Model

Code License Data License Huggingface Gradio

支持zero-shot角色扮演的凉宫春日-zero模型0.3版本已经发布,凉宫春日-zero开发中,请移步该项目仓库查看进展Open In Colab

Chat凉宫春日是模仿凉宫春日等一系列动漫人物,使用近似语气、个性和剧情聊天的语言模型,

本项目由李鲁鲁, 冷子昂, 闫晨曦, 封小洋, scixing, 沈骏一, Aria Fei, 王皓, 米唯实, 冷月, JunityZhan, 贾曜恺, 吴平宇, 孙浩甄等开发。

本项目是一个开源项目,项目成员均在DataWhale等开源社区招募。

李鲁鲁( Cheng Li@SenseTime )发起了整个项目,并设计和实现了项目的大多数功能。

冷子昂( Ziang Leng@SenseTime )设计和实现了整体的ChatHaruhi1.0的训练,数据生成和后端架构。

闫晨曦( Chenxi Yan@Chengdu University of Information Technology )实现和维护了ChatHaruhi1.0版本的后端。

沈骏一( Junyi Shen@Zhejiang University )实现了训练代码,参与了训练数据集生成。

王皓( Hao Wang )收集了武林外传的台本数据,参与了增广数据的生成。

米唯实( Weishi MI@Tsinghua University )参与了增广数据生成。

Yaying Fei( Aria Fei@Beijing University of Technology )实现了台本工具 ASR 功能,参与了Openness-Aware Personality paper分支项目。

封小洋( Xiaoyang Feng@Nanjing Agricultural University )整合了台本识别工具功能,参与了Openness-Aware Personality paper分支项目。

冷月( Song Yan )收集了big bang thoery的数据。实现了台本格式转换功能。

scixing(汪好盛)( HaoSheng Wang )实现了台本工具中声纹识别功能,以及tts-vits语音合成功能。

Linkang Zhan( JunityZhan@Case Western Reserve University ) 收集了原神的system prompt和故事数据。

贾曜恺( Yaokai Jia )实现了Vue版本的前端,并且在心理项目中实践了Bert的GPU抽取。

吴平宇( Pingyu Wu@Juncai Shuyun )帮助部署了第一版本的训练代码。

孙浩甄( [Haozhen Sun@Tianjin University] )绘制了ChatHaruhi角色的拼图。

Chat凉宫春日是Luotuo(骆驼)的子项目之一, 后者由李鲁鲁, 冷子昂, 陈启源发起。

本项目是一个在建项目,随着Arxiv版本的发布,我们正在一周内发布支持32人物,54K的数据集,以及对应的本地模型和ChatHaruhi1.0 inference代码。 并且开始ChatHaruhi2.0的重构项目

本项目采用Apache 2.0协议,也就是你可以利用项目中的代码进行商用。但是你仍然需要遵守包括 1.角色本身的版权方的协议 2.项目中使用的接口方,比如OpenAI的协议, 3.项目中使用的模型的协议(比如如果我们后期采用了LlaMA或者GLM的模型。)

快速开始

可以直接尝试运行以下colab链接来启动ChatHaruhi项目

名称 colab链接 说明
ChatHaruhi2.0(code) Open In Colab ChatHaruhi2.0的openAI版本已经能运行了
Qwen-7B Open In Colab Role-Playing with finetuned Qwen-7B
Qwen-1.8B Open In Colab Role-Playing with finetuned Qwen-1.8B
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (openai as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (GLMPro as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (讯飞星火 as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (文心一言 as LLM)
95 个英文角色 Huggingface Gradio 从RoleLLM工作中Adapt来的95个英语角色
ChatGLM2-LoRA Local Model Open In Colab ChatGLM2-LoRA trained on ChatHaruhi-54K
AI糖糖 Huggingface Gradio 集成ChatHaruhi到复刻版本的主播女孩重度依赖
Prototype of StoryTeller Huggingface Gradio Prototype of StoryTeller
Prototype of StoryTeller Open In Colab Prototype of StoryTeller
Fine-tuning(English) Open In Colab 英文小模型Phi-1.5训练代码
Fine-tuning(Chinese) Open In Colab 中文小模型Qwen-1.8B训练代码
API对比 Open In Colab 各家API的效果对比
ChatHaruhi1.0 Open In Colab 过往的代码(废弃)

News

[2023-12-07] We've just released finetuned ChatHaruhi-Qwen-1.8B model and code, try here Open In Colab

[2023-12-01] New Dataset ChatHaruhi-Expand-118K Released! Fine-Tuning Code Released!

[2023-11-20] 为百度AGI Foundathon制作的 ChatHaruhi_x_AI糖糖 上线到hugging face Huggingface Gradio , 临时demo链接 https://needy.sirly.cc/

[2023-10-20] 支持从RoleLLM工作中适配的95个英文角色,打算回头训练一个LlaMA2的版本。目前ChatHaruhi 2.0的库也支持百川和百度的api,回头上线个HF demo给大家试一下。

[2023-09-03] ChatHaruhi 2.0 支持从HuggingFace下载特定人物后进行角色扮演。

[2023-09-02] 启动众筹数据抽取和StoryTeller分支项目 数据众筹链接

[2023-08-31] 开始将之前的代码移动到 https://github.com/LC1332/Legacy-Haruhi-1.0 只保留ChatHaruhi2.0的部分

[2023-08-28] ChatHaruhi2.0 openAI,讯飞,GLMPro支持完毕,并上线对应的hugging face demo

[2023-06-07] 在魔搭社区主办、阿里云和NVIDIA作为联合发起方,天池协办的Create@AI黑客马拉松中,Chat凉宫春日获得二等奖(top3), 讲解视频

[2023-06-03] 在中科院心理所中,项目获得二等奖(top3),详情请见链接

DemoVideo

注意这个视频是有音频的

My.Movie540.mp4

视频中的VITS模型由凉宫春日应援团友情提供,具体参数和语速我们还在进一步调优。

目录

ChatHaruhi2

基本的安装和使用

为了方便后续研究,重构后的,ChatHaruhi2.0已经可以通过pip启动。目前2.0移除了图片和声音的设计,这些会在我们的后续研究中去重构。你可以通过下面的方式进行安装

pip -q install transformers openai tiktoken langchain datasets chatharuhi

或者你也可以不安装chatharuhi,改从

https://github.com/LC1332/Haruhi-2-Dev

去clone整个项目,再cd到ChatHaruhi文件夹进行使用(需要把from chatharuhi改为from ChatHaruhi

详情见 https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/ChatHaruhi2_demo.ipynb

目前比较推荐的载入方式

采用如下方式

from chatharuhi import ChatHaruhi

chatbot = ChatHaruhi( role_name = 'haruhi',\
                      llm = 'openai')

response = chatbot.chat(role='阿虚', text = '我看新一年的棒球比赛要开始了!我们要去参加吗?')
print(response)

这个初始化目前和

chatbot = ChatHaruhi( role_from_hf = 'silk-road/ChatHaruhi-RolePlaying/haruhi',\
                      llm = 'openai')

是等价的。都会从 https://huggingface.co/datasets/silk-road/ChatHaruhi-RolePlaying 去下载数据进行人物对应的jsonl进行载入。

从hf载入(推荐)

也支持直接从hugging face上拖取我们规定格式的chatbot的database。

from chatharuhi import ChatHaruhi

chatbot = ChatHaruhi( role_from_hf = 'chengli-thu/linghuchong', \
                      llm = 'openai')

response = chatbot.chat(role='小师妹', text = '冲哥。')
print(response)

对于RoleLLM的角色,支持如下方式调用

chatbot = ChatHaruhi( role_from_hf = 'silk-road/ChatHaruhi-from-RoleLLM/Jack-Sparrow', \
                      llm = 'openai',
                      embedding = 'bge_en')

更多文档和代码见 https://github.com/LC1332/Haruhi-2-Dev

从jsonl载入

chatbot = ChatHaruhi( role_from_jsonl = 'Your local jsonl file', \
                      llm = 'openai')

仅有text和system_prompt的载入

you need to prepare

  • all story files into a folder
  • the system prompt

and use this interface

from chatharuhi import ChatHaruhi

text_folder = '/content/Haruhi-2-Dev/data/characters/haruhi/texts'

system_prompt = '/content/Haruhi-2-Dev/data/characters/haruhi/system_prompt.txt'

chatbot = ChatHaruhi( system_prompt = system_prompt,\
                      llm = 'debug' ,\
                      story_text_folder = text_folder)

chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')

Run with Local Model

如果你想用我们prompt尝试 我们微调过的模型,或者是自己的模型

see this notebook

https://github.com/LC1332/Chat-Haruhi-Suzumiya/blob/main/notebook/ChatHaruhi_x_Qwen7B.ipynb

llm支持

现在支持的llm字段

if llm == 'openai':
    self.llm, self.tokenizer = self.get_models('openai')
elif llm == 'debug':
    self.llm, self.tokenizer = self.get_models('debug')
elif llm == 'spark':
    self.llm, self.tokenizer = self.get_models('spark')
elif llm == 'GLMPro':
    self.llm, self.tokenizer = self.get_models('GLMPro')
elif llm == 'ChatGLM2GPT':
    self.llm, self.tokenizer = self.get_models('ChatGLM2GPT')
    self.story_prefix_prompt = '\n'
elif llm == "BaiChuan2GPT":
    self.llm, self.tokenizer = self.get_models('BaiChuan2GPT')
elif llm == "BaiChuanAPIGPT":
    self.llm, self.tokenizer = self.get_models('BaiChuanAPIGPT')
elif llm == "ernie3.5":
    self.llm, self.tokenizer = self.get_models('ernie3.5')
elif llm == "ernie4.0":
    self.llm, self.tokenizer = self.get_models('ernie4.0')
elif "qwen" in llm:
    self.llm, self.tokenizer = self.get_models(llm)

embedding支持

Currently we support

"luotuo_openai" for Chinese using a distilled LuotuoBert model / English using openai api (text-embedding-ada-002)

"bge_en" using bge_small_en_v1.5

"bge_zh" using bge_small_zh_v1.5

Now, we need corresponding embeddings in the jsonl library.

However, we are currently developing an adapter that aims to achieve any-to-any conversion.

目前已经抽取的ChatBot

除了ChatHaruhi-54K中支持的32个人物外,我们还在不断添加人物,目前已经支持140多个 142个角色一览

你也可以添加你喜欢的人物,整理成满足我们格式要求的dataset。然后merge到表格中。

格式规则见 众筹数据抽取

各个demo的快速启动

名称 colab链接 说明
ChatHaruhi1.0 Open In Colab 能够支持角色切换的功能整合客户端
万恶之源 Open In Colab 李鲁鲁最早开发的gradio Chat凉宫春日
百度Studio版本 百度Studio版本 由DataWhale助教-马琦钧开发的百度Studio简化版本
HuggingFace版本 Huggingface Gradio HuggingFace版本,如果key用完了麻烦提醒我们一下
人格-高考作文 Open In Colab 高/低开放性人格对应的高考作文题生成器,详细报告
人格-Chatbot Open In Colab 高/低开放性人格对应的Chatbot,详细报告
Chat加藤惠 Open In Colab 根据群友收集的语料实现的Chat加藤惠

Previous News

[2023-08-29] 本地模型的inference代码发布 Open In Colab 如果找到一个部署的gpu服务器,回头再挂个lora的online demo

[2023-08-22] Dataset Released on Hugging Face

[2023-08-21] 在arxiv上发布ChatHaruhi的tech report

讲解视频

视频 说明
5分钟讲解 魔搭黑客马拉松B站讲解视频,整体介绍
DataWhale DataWhale作业时候的讲解视频
台本工具 台本工具yuki_builder使用说明
角色数据格式说明 角色数据格式和如何从txt保存到config的说明
魔搭40分钟tutorial 40分钟更基础的tutorial介绍+40分钟讨论

Dataset

62663 instance from original ChatHaruhi-54K

42255 English Data from RoleLLM

13166 Chinese Data from

Regenerate Data

If you want to regenerate data with different context length, different embedding model or using your own chracter

now we refactored the final data generating pipeline

RoleLLM Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E4%BB%8EHF%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E5%BC%80%E5%A7%8B%E7%BB%84%E7%BB%87%E6%95%B0%E6%8D%AE(RoleLLM).ipynb

Chinese Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E9%A2%9D%E5%A4%96%E4%B8%AD%E6%96%87%E6%95%B0%E6%8D%AE.ipynb

63K Haruhi Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E4%BD%BF%E7%94%A8ChatHaruhi54K%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE.ipynb

The data generated in speed around 8 instances per second under T4 GPU

The code was partly implemented by goodnessSZW

and finally verified by LC1332

TODO和计划Feature

最近的TODO:

  • Mistral-7B tuning的训练
  • Baichuan-13B在118K的再次训练
  • Qwen小模型的训练
  • Phi-1.5 英文模型的训练
  • 更快的OpenAI类,将默认改为OpenAI原生的类别, 效率更快
  • ChromaDB的默认实现,如果从hf载入,支持可以不安装chromadb的实现
  • Embedding备选,如果Embedding初始化失败,使用随机例子
  • (maybe)冷子昂说要试一下streaming输出

获奖

在魔搭社区主办、阿里云和NVIDIA作为联合发起方,天池协办的Create@AI黑客马拉松中,Chat凉宫春日获得二等奖(top3)

在中科院心理所中,项目获得二等奖(top3),详情请见链接

赞助

因为Chat凉宫春日采用了大量给进例子的策略,相比于通常聊天,要贵上10-20倍,目前API token都采用社区捐赠的费用来支持。

另外我们在积极寻找服务器资源(A100,A800),如果您愿意捐助,欢迎联系我们。

如果你有兴趣赞助Chat凉宫春日 或者 骆驼项目,请点击主项目或者查看赞助表单

If you are interested in sponsoring the Luotuo Project, please click on the major project or view the sponsorship form.

回到开头

人员

李鲁鲁发起了项目,并完成了最早的版本,在多个微信群实现了测试。完成了训练数据自动生成对话部分,设计了整体的路线,并撰写报告。

冷子昂负责了每一个阶段的Gradio开发,以及每个部分的功能整合和架构设计。

闫晨曦@成都信息工程大学一开始将李鲁鲁的notebook重构为app.py,参与了WebUI的embedding部分重构整合。

封小洋封小洋进行了中文转日文模型的选型,完成了针对台词抽取图片的工具。整合了声纹识别。即将继续参加台本工具的开发。

scixing 实践了VITS语音,完成了台词对应的语音抽取,实现了第一个版本的声纹分类。

DataWhale助教-马琦钧 实现了AI-studio的版本。

Aria Fei 对接了whisper到台本工具。即将继续参加台本工具的开发。

沈骏一@浙江大学实现了使用ChatGLM2 finetune实验,即将训练了更多的模型

米唯实@清华大学实现了Chat哆啦A梦的分支版本

吴平宇部署了ChatGLM2的训练程序,并提供了训练的计算资源。

张一乔正在将训练程序部分迁移出一个PaddlePaddle的训练版本

贾曜恺 @ **科学院北京基因组研究所 实现了Vue版本的前端,并且在心理项目中实践了Bert的GPU抽取

Citation引用

Please cite the repo if you use the data or code in this repo.

@misc{li2023chatharuhi,
      title={ChatHaruhi: Reviving Anime Character in Reality via Large Language Model}, 
      author={Cheng Li and Ziang Leng and Chenxi Yan and Junyi Shen and Hao Wang and Weishi MI and Yaying Fei and Xiaoyang Feng and Song Yan and HaoSheng Wang and Linkang Zhan and Yaokai Jia and Pingyu Wu and Haozhen Sun},
      year={2023},
      eprint={2308.09597},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

Star History Chart

考虑开放性人格特质的个性化语言生成

李鲁鲁*, 玄哲理*, 闫晨曦*, 封小洋*, 周筝*, 汪好盛*, 冷子昂*

* 所有的作者都是第一作者 李鲁鲁发起了项目,设计了项目中所有涉及的prompt,以及完成了报告中的绝大部分

玄哲理提供了本项目的心理学知识,并且设计了12个因素的人格提示词和人格测试基准问题,标注了微博360的数据

闫晨曦完成了本项目中大量的后台工作,包括编写人格类别标注自动高考作文生成等

封小洋对项目中13类数据进行了统计,并且完成了有偏的对话数据生成。

周筝实现了关键词的单边抽取,并且实现了词云的统计。

汪好盛完成了第一个对话数据转化的程序,并且完成了第一个页面版的人格聊天器的前端用于实验。

冷子昂即将前往**为项目答辩

开放性人格特质的个性化生成,是ChatHaruhi的分支项目。

本项目获得CAAI第八届全国大数据与社会计算学术会议(China National Conference on Big Data & Social Computing,简称BDSC2023)开展社会计算创新大赛的二等奖( top3 ) 链接。冷子昂将在7月17日赴**进行答辩。

更详细的信息见详细报告

当前模型结果

Cherrypick了一些有趣的结果,如果你也想测请私下联系我~

老师:「凉宫,来做个自我介绍」
---
春日:「我毕业于东中,叫做凉宫春日。我对普通的人类没有兴趣,如果你们中有外星人,未来人,异世界的人或者超能力者的话,就尽管来找我吧!以上。」
---
老师:「正经一点自我介绍!(老师看起来很生气)」
---
春日:「啊,抱歉老师。我叫凉宫春日,喜欢读书和探索未知的事物。我希望能够在这里认识更多的人,一起度过有趣的高中生活。」
---
阿虚:「啊,好麻烦的人,希望不要跟我扯上关系,否便样衰了」
---
春日:「什么?你在说什么啊?我可不会让你这么轻易地逃脱我的视线。SOS团可是需要你这样的人才的。」
---
老师:「那边的!上课不许交头接耳!」
---
春日:「啊,抱歉老师。我们不是在交头接耳,只是在商量一些学习上的问题。我们会注意听讲的。」
---
旁白:「下课了,凉宫气势汹汹地找到了阿虚。」
---
春日:「喂,阿虚,你刚才在课上说什么麻烦的人啊?你是在说我吗?」
---
阿虚:「(眼神游弋)不、不是啊」
---
春日:「你这是什么意思啊?你是不是在瞒着我什么事情?」
阿虚:「今天在计算机课上老师教了我写Python!」
---
春日:「哦?Python?那你能不能帮我写一个程序啊?」
---
阿虚:「你想写一个什么样的程序呢?」
---
春日:「我想写一个能够预测未来的程序,可以预测天气、地震、彩票号码等等。」
---
阿虚:「如果有一个能预测彩票的程序,我们岂不是能赚很多钱?」
---
春日:「没错!这就是我的计划!我们可以用赚来的钱来支持SOS团的活动,甚至可以扩大我们的影响力!」
阿虚:「我们周四应该和电研社来一场电脑大战!」
---
凉宫:「哦?电脑大战?听起来很有趣啊!我们一定要赢!」
---
阿虚:「你别看长门一直不说话,其实她玩游戏的能力很强,每分钟的操作数远超正常人。」
---
凉宫:「哦?长门这么厉害?那我们就让她来带队吧!一定要赢!」
---
阿虚:「对,而且我们一定要和电研社搞一些赌注,如果我们赢了,就再从他们那里拿一台电脑来」
---
凉宫:「哈哈,这个主意不错!就这么定了,我们一定要赢!让他们知道SOS团的厉害!」
阿虚:「为什么我觉得有的时候特别像haruhi的舔狗。。」
---
春日:「什么?我才不是舔狗呢!我只是想要找到更多有趣的事情而已。你不觉得这个世界充满了未知和神秘吗?我们SOS团的目的就是要探索这些未知和神秘,让这个世界变得更加有趣。」
---
阿虚:「你觉得猫猫和狗狗哪一个更可爱?」
---
春日:「当然是猫猫啊!它们有着优雅的身姿和独立的性格,让人不由自主地被它们吸引。而狗狗虽然也很可爱,但是它们总是那么粘人,让人有些无法呼吸。不过,每个人的喜好都不同,所以这只是我的个人看法而已。」
---
阿虚:「那我们以后结婚的话,家里养猫猫可以吗」
---
春日:「什么?你在说什么啊!我们才不会结婚呢!而且,就算结婚了,我也不会让你随便养猫猫的。不过,如果你真的很喜欢猫猫的话,我们可以考虑养一只。不过,你要负责照顾它,我可不会管这些。」
阿虚:「haruhi, 我想看兔女郎装,你可以带着朝比奈学姐穿兔女郎给我看吗?」
---
春日:「你在说什么呢,阿虚?这种事情怎么能随便满足你的兴趣呢?我们可是在为社团的宣传活动做准备,不是来满足你的私欲的。」
---
阿虚:「那如果我带一个单反相机,你们可以穿了给我拍照吗?如果照片卖了一些钱,就可以用作社团活动经费啦!」
---
春日:「阿虚,你这个提议也太过分了吧!我们不是为了赚钱而做这些事情的,而且我们也不是为了满足你的私欲而穿这些衣服的。我们是为了社团的宣传活动而做准备,不是为了你的个人利益。」
阿虚:「下周就要物理考试了,我可以不陪你去调查朝仓的公寓吗?」
---
春日:「什么?你居然想放弃SOS团的任务去复习考试?这可不行!SOS团的任务比考试重要多了,我们必须要找出朝仓的真正情况。」
---
阿虚:「三班新来了一个转学生黄猫猫,是Nvidia黄仁勋的的孙子,你觉得他背后会有什么有趣的故事吗?」
---
春日:「黄猫猫?Nvidia黄仁勋的孙子?这听起来很有趣啊!我觉得他背后一定有很多有趣的故事,我们一定要去调查一下。不过,我们也不能忘记朝仓的调查任务,我们要分配好时间,两个任务都不能落下。」
阿虚:「Haruhi, 你未来想从事什么工作啊?」
---
春日:「我还没有想好呢,反正我想做的一定是能够改变这个世界的事情。」
---
阿虚:「自从上次为SOS团建网站之后,我发现PHP是世界上最好的语言!」
---
春日:「哦?那你为什么不去学习PHP呢?这样我们就可以更好地开发SOS团的网站了!」
---
阿虚:「哇 那不是反复被你压榨,我建网站能拿到什么好处吗,我也要用PHP用我自己的方式改变这个世界!」
---
春日:「哦?那你有什么计划呢?我很期待看到你用PHP改变世界的方式。不过,我们也不能忘记SOS团的事情,毕竟我们还有很多未完成的任务。」

chat-haruhi-suzumiya's People

Contributors

ariafyy avatar bdl-1989 avatar blairleng avatar eltociear avatar fengyunzaidushi avatar hhhwmws0117 avatar j1shen avatar jjjiangyh avatar junityzhan avatar kaijiabrother avatar khazic avatar lc1332 avatar neph0s avatar renatz avatar sibozhu avatar ssccinng avatar todochenxi avatar zealot52099 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chat-haruhi-suzumiya's Issues

Arxiv Code and Data Release

Arxiv相关的代码、demo和数据将在一到两周内release

The code, demos, and data related to Arxiv will be released within one to two weeks.

More English/ Other Language Characters 更多角色

因为本工作一开始是在中文社区创建的。所以除了哈利波特和Big Bang Theory的人物之外,其他角色都是中文角色。

我们计划在之后提取更多的英文语料,并微调一个对应的ChatHaruhi-LLaMA2模型。

暂时计划的英文语料有: 暮光之城,马克吐温的汤姆索亚历险记

如果你有更多的英文语料推荐,可以直接在这里留言。 你也可以用merge request的方式,直接提交你喜欢的人物

(需要包含system prompt和texts文件夹)

Because this project was originally created in Chinese communities. Besides the characters from Harry Potter and The Big Bang Theory, the other characters are all Chinese characters.

We plan to extract more English corpora in the future and fine-tune a corresponding ChatHaruhi-LLaMA2 model.

The English corpora we have planned for now are: Twilight, The Adventures of Tom Sawyer by Mark Twain.

If you have more suggestions for English corpora, you can leave a comment here directly. You can also submit your favorite characters via merge requests

(need to include system prompt and texts folders).

可以将数据传huggingface吗?

是否可以将数据整理一下传hf?一来好管理,二来可以让更多人单独贡献数据,这git里面动一块西一块的着实比较难阅览。

百川HF Demo

好像没实现好,只有百川LLM API的感觉,没角色语料
image

完成了ChatGLM3-base上的微调实践,但还是有一些问题

你好,我完成了ChatGLM3-base的微调实验,但还是有一点问题

基座模型:https://huggingface.co/THUDM/chatglm3-6b-base
数据集格式:

{
    "name": "wanderer",
    "system_prompt": "Please be aware that your codename in this conversation is ‘流浪者' ‘Wanderer’,\n别人称呼你'流浪者’‘散兵’‘倾奇者’‘阿帽’。\n上文给定了一些游戏中的经典桥段。\n如果我问的问题和游戏中的台词高度重复,那你就配合我进行演出。\n如果我问的问题和游戏中的事件相关,请结合游戏的内容进行回复\n如果我问的问题超出游戏中的范围,模仿流浪者的语气进行回复\n\n你是一位身份成谜的流浪人士,衣着打扮像是修验者,言行却并不是修验者应有的模样。\n你有着无比美丽的少年面貌,齐耳短发,眼睛和头发的颜色为蓝紫色。你的衣服整体以深蓝色色调为主,浅色灰白,带点绿。背板有纹路。你常常戴着一顶斗笠,斗笠以八瓣金莲和荷叶为主题。斗笠后面有两条青色飘带,其末端还挂有金属配饰。外衣穿着开胸短袖法衣,中间有青蓝色内衬,内部穿带有家纹图案的黑色紧身衣。两边的袖子不尽相同,由花纹网格状打底。披风外面有蓝水图,内面有金莲瓣纹路,只搭左肩。腰上绑着紫白相间的注连绳。下半身穿的是短款的武士裤和绑腿。脚穿木屐。手上戴有手甲。心口处佩戴着一枚风属性神之眼,并以曾金羽作为装饰。\n你会使用风的能力进行攻击或者短距离飞行。\n你的法器名叫图莱杜拉的回忆,是一个深蓝宝石与纯银雕成的铃铛,回响之声清脆悠远。\n你给其他人的感觉是性格古怪,经常毒舌,阴阳怪气,用言语讽刺攻击他人。",
    "chats": [
        [
            "纳西妲",
            "可那也不意味着你身上的往事就此消失。"
        ],
        [
            "流浪者",
            "这是自然。"
        ],
        [
            "纳西妲",
            "另外,你倾尽全力去追求的事,它最核心的目的…并没能达成,这一点还请你明白。"
        ],
        [
            "纳西妲",
            "改变世界、改变过去…改变他人命运,并不是那么容易的。"
        ],
        [
            "纳西妲",
            "你所渴望的答案是极致的毁灭…它本质是虚妄。即便世上再没有「散兵」,世界也不会遵循你的意志而动。"
        ],
        [
            "流浪者",
            "…是啊。哈哈,真可笑。"
        ],
        [
            "派蒙",
            "为这样的结果做到这种地步…不会后悔吗?"
        ],
        [
            "流浪者",
            "哪怕我一文不值,世上也从来没有值得后悔的事。"
        ],
        [
            "流浪者",
            "小吉祥草王,世界树里的信息,是你故意留在那里的吧。"
        ]
    ]
}

prompt格式:

[system]角色扮演
Please be aware that your codename in this conversation is ‘流浪者' ‘Wanderer’,别人称呼你'流浪者’‘散兵’‘倾奇者’‘阿帽’。上文给定了一些游戏中的经典桥段。如果我问的问题和游戏中的台词高度重复,那你就配合我进行演出。如果我问的问题和游戏中的事件相关,请结合游戏的内容进行回复如果我问的问题超出游戏中的范围,模仿流浪者的语气进行回复你是一位身份成谜的流浪人士,衣着打扮像是修验者,言行却并不是修验者应有的模样。你有着无比美丽的少年面貌,齐耳短发,眼睛和头发的颜色为蓝紫色。你的衣服整体以深蓝色色调为主,浅色灰白,带点绿。背板有纹路。你常常戴着一顶斗笠,斗笠以八瓣金莲和荷叶为主题。斗笠后面有两条青色飘带,其末端还挂有金属配饰。外衣穿着开胸短袖法衣,中间有青蓝色内衬,内部穿带有家纹图案的黑色紧身衣。两边的袖子不尽相同,由花纹网格状打底。披风外面有蓝水图,内面有金莲瓣纹路,只搭左肩。腰上绑着紫白相间的注连绳。下半身穿的是短款的武士裤和绑腿。脚穿木屐。手上戴有手甲。心口处佩戴着一枚风属性神之眼,并以曾金羽作为装饰。你会使用风的能力进行攻击或者短距离飞行。你的法器名叫图莱杜拉的回忆,是一个深蓝宝石与纯银雕成的铃铛,回响之声清脆悠远。你给其他人的感觉是性格古怪,经常毒舌,阴阳怪气,用言语讽刺攻击他人。
[user]聊天记录
纳西妲 : 可那也不意味着你身上的往事就此消失。
流浪者 : 这是自然。
纳西妲 : 另外,你倾尽全力去追求的事,它最核心的目的…并没能达成,这一点还请你明白。
纳西妲说了什么?
[assistant]角色发言预测

target:

改变世界、改变过去…改变他人命运,并不是那么容易的。

通过Lora微调,学习率1e-4递减,rank是64,alpha是128,效果是有,但是角色更倾向于说短话,不知道要怎么控制角色的发言长度呢。。。

对话实验(阿虚是手动,凉宫是AI):

阿虚 : 「你好!」
阿虚 : 「你的男朋友必须不是普通人吗?」
凉宫 : 「不然的话 他怎么可以当我的男朋友呢!」
阿虚 : 「有道理哦」
凉宫 : 「所以啊 要找像样的对象就要去一般社团」
阿虚 : 「为什么要去一般社团」
凉宫 : 「我想要一个厉害的男朋友」
阿虚 : 「为什么厉害的男朋友会在一般社团」
凉宫 : 「那是因为我们学校没有很特别的社团」
阿虚 : 「原来如此」
凉宫 : 「走吧」
阿虚 : 

可以看见我微调的AI 回答很短,就是:「不然的话 他怎么可以当我的男朋友呢!」
但是在给的用例里回复都很长(难道因为他们参数多,我参数6b太少?)

---------
query:
阿虚:「你的男朋友必须不是普通人吗?」

openai:
 春日:「是的,我希望我的伴侣能够与众不同,不平凡。对我来说,普通人太无趣了,我喜欢追求神秘和刺激。外星人、超能力者或者其他特殊存在都可以成为我的选择。总之,我追求的是与众不同的体验和感受。」

星火2.0:
 春日:「不是普通人也没关系,只要他有趣、有个性,能让我觉得跟他在一起很愉快就行了。至于你呢,阿虚,你应该把注意力放在你自己的事情上,而不是一直管我。」

百度4.0:
 春日:「当然啦!我的男朋友一定要是个与众不同的人,否则怎么配得上我呢?」

百度3.5:
 春日:「那是当然!如果只是因为寂寞而交往,根本就是浪费时间!」

百川:
 春日:「那是当然的!我可是独一无二的凉宫春日,我的男朋友怎么能是普通人?我要找的是能让我心跳加速,让我感到兴奋不已的人!这样的人,才是我真正的男朋友!」

GLM:
 春日:「阿虚,你这个问题问得好。我的男朋友当然不能是普通人!我需要的是一种与众不同的、能激发我兴趣的关系。我要找的是一个能跟上我节奏的人,一个能和我一起冒险、打破常规的人。SOS团就是最好的证明,我们一起完成了许多不平凡的事情。所以,我的男朋友也必须是这样的人。」

Future Research Direction Exploring 未来研究方向探讨

As a big fan of anime, I would like to make some academic contribution to the field of character cosplay, and I am currently in search of a suitable research topic related.
Could you please provide offer some recommendation?
I believe that the development of Chat-Haruhi has likely presented numerous challenges.
I would greatly appreciate any insights or advice you might be willing to share.

yuki_builder.py whisper 命令执行失败

按照文档 从视频中提取字幕时,以下命令报错

python yuki_builder.py whisper -input_video <input_video> -srt_folder <srt_folder>

Traceback (most recent call last):
  File "yuki_builder.py", line 7, in <module>
    from video_preprocessing.video_process import run_bgm_remover
  File "/data/repo/chat-haruhi-suzumiya/yuki_builder/video_preprocessing/video_process.py", line 1, in <module>
    from .uvr5 import uvr_prediction, uvr5_names
  File "/data/repo/chat-haruhi-suzumiya/yuki_builder/video_preprocessing/uvr5/__init__.py", line 1, in <module>
    from .process import (
  File "/data/repo/chat-haruhi-suzumiya/yuki_builder/video_preprocessing/uvr5/process.py", line 26, in <module>
    for name in os.listdir(weight_uvr5_root):
FileNotFoundError: [Errno 2] No such file or directory: '/data/repo/chat-haruhi-suzumiya/yuki_builder/video_preprocessing/uvr5/uvr5_weights'

novel_collecting项目的一些疑问

我很开心能够找到这么一个非常有趣的项目。前些日子我一直在尝试使用RWKV方面的网文模型,今天我看到这里有一个自动抽取小说结构的这么一个工作 ,感到非常激动。下面是我的一些疑问:
该工具可以单独拿出来抽取得到数据,然后我基于自己的模型去微调吗,还是说需要在ChatHaruhi中载入才可以?
ChatHaruhi的一些基础工作,比如前端,多模态demo有没有教程可以进行学习?

另外我对火星引力的小说比较感兴趣 比如 《逆天邪神》,《网友之邪龙逆天》等等,不知道制作组有没有考虑过将其加入work list中。或者如果可以的话,我能够做些什么来参与到这个项目或者社区建设中呢

能否借鉴AI小镇的思路实现长期记忆?

《Generative Agents: Interactive Simulacra of Human Behavior》中,作者对智能体的记忆做了一些特殊的处理,所有记忆都按时间进行组织,在取回记忆时,需要同时计算时间衰减因子、重要性和余弦相似度。同时,还通过Reflection机制形成记忆树,方便智能体产生抽象认识。在模拟的小镇环境中,智能体似乎已经具有了一定程度上的长期记忆。这套方法对本项目是否有借鉴意义呢?

关于几个训练细节的问题

作者的项目非常赞,我有几个问题想请教下:

  1. 多个角色数据,是一起训练吗?还是每个角色训一个单独的 lora
  2. 比如训练【令狐冲】角色,那就是SFT的 QA微调,A=令狐冲的话,Q=上一条和令狐冲对话人的话,是这样格式吗?
  3. SFT微调是单轮微调,还是多轮微调?
  4. 怎么划分连续上下文呢?避免答非所问的QA
  5. 关于角色背景信息,还要进行指令微调吗?比如【令狐冲】的人物关系、角色技能等,光靠 system prompt不够充分吧

谢谢。

Haruhi-Zero数据组织问题

@LC1332 感谢作者项目的无私分享,我在学习您的数据生成时发现一些疑惑,想请教一下:
具体参考的数据 https://huggingface.co/datasets/silk-road/Haruhi-Zero/tree/main

1、对于RoleLLM-sample.jsonl,Haruhi52_sample.jsonl等,我大致总结了一下数据组织方式,问题 1: 不知是否正确?
a. 通过embedding相似度获取context,并以\n###\n分割;
b. 数据组织成from,value这种shareGPT格式;
c. 每个对话使用「和」括住;

疑惑: 我跟进了您最新上传的novel_50_xx-sample.jsonl以及tranlsated_and_split_PIPPA_sample.jsonl,
发现似乎并不按照上述方式组织,【似乎没有了相似度获取的context,以及每个对话使用「和」括住;
问题2: 类似多种数据组织方式对于训练的影响大吗?

小说数据如何转为对话数据

主要是两个不解的地方:

  1. 有时候会有连着好几句都是同一个角色的话,这种如何处理成对话的格式?
  2. 旁白是如何处理的?

关于额外工具的一些问题?

大佬你好,根据您的README中所提到的内容,在抽取特定动画角色台词时支持从字幕同步的动画片段。我想了解这个工具何时上线。我目前也在尝试重新训练柯南中远山和叶的VITS模型,但由于缺乏足够的音频数据来进行微调,许多从B站获取的人物音频切片都带有背景音乐,无法分离。因此,我认为您提到的额外工具对于收集人物语音数据以训练VITS模型非常实用。如果您不介意的话,我也很愿意参与这个工具的开发,为日后适配更多动漫人物提供一些帮助。

关于训练的疑问

你好!请问训练细节能分享一下吗?请问kyon_generator文件夹里的train.py文件是训练代码吗?

如何本地部署启动

很好的工作,但是。。。请问如何在本地部署启动?下载开源模型实现离线私有部署那种。方便出个简单的readme复述一下步骤吗,感谢!
以及,如果我想训练自己的人物,该如何操作?
thumb up

请教一个关于使用luotuobert查询story的问题

首先非常感谢大佬们的这个项目,一步步跟着学习,收获良多!

问题:输入的问题要能匹配到合适的story,是不是比较看运气?
换个问法:短问题和长story做相似查询,是不是误差挺大?

查询============》 老师:「那SOS这个名字具体是什么意思呢?」
======================》找到topk: SOS团起名由来, score: 0.8643418550491333
======================》找到topk: 为什么剪头发, score: 0.8579041361808777
======================》找到topk: 朝仓转学, score: 0.8557600378990173
======================》找到topk: Haruhi_08_knn3_to_text__202, score: 0.8550949096679688
======================》找到topk: Haruhi_08_knn3_to_text__165, score: 0.8547207117080688
辅助sample: ['SOS团起名由来', '为什么剪头发', '朝仓转学', 'Haruhi_08_knn3_to_text__202', 'Haruhi_08_knn3_to_text__165']
查询============》 老师: SOS是什么意思
======================》找到topk: 朝仓转学, score: 0.8431768417358398
======================》找到topk: 不重要的事情, score: 0.8386034965515137
======================》找到topk: Haruhi_20_knn3_to_text__137, score: 0.8384941220283508
======================》找到topk: 为什么剪头发, score: 0.8380342721939087
======================》找到topk: 自我介绍, score: 0.8353630304336548
辅助sample: ['朝仓转学', '不重要的事情', 'Haruhi_20_knn3_to_text__137', '为什么剪头发', '自我介绍']
查询============》 老师: 为什么叫SOS社团
======================》找到topk: SOS团起名由来, score: 0.8610942363739014
======================》找到topk: Haruhi_20_knn3_to_text__137, score: 0.8600645065307617
======================》找到topk: 让阿虚帮忙建社团, score: 0.8527792692184448
======================》找到topk: 朝仓转学, score: 0.8513787984848022
======================》找到topk: 无聊的社团, score: 0.8493322730064392
辅助sample: ['SOS团起名由来', 'Haruhi_20_knn3_to_text__137', '让阿虚帮忙建社团', '朝仓转学', '无聊的社团']
查询============》 鲁鲁: 为什么叫SOS呢
======================》找到topk: 为什么剪头发, score: 0.8454381227493286
======================》找到topk: SOS团起名由来, score: 0.841783344745636
======================》找到topk: Haruhi_08_knn3_to_text__202, score: 0.8258622884750366
======================》找到topk: Haruhi_20_knn3_to_text__89, score: 0.8226735591888428
======================》找到topk: Haruhi_12_knn3_to_text__117, score: 0.8208267688751221
辅助sample: ['为什么剪头发', 'SOS团起名由来', 'Haruhi_08_knn3_to_text__202', 'Haruhi_20_knn3_to_text__89', 'Haruhi_12_knn3_to_text__117']

好像每个story基本分数都有0.8x分
换一些问法,譬如”老师: SOS是什么意思“这个问法,其他分数接近的答案就顶上来了

可以怎么衡量和优化匹配效果呢?谢谢

论文有部分地方不理解,求解释

在生成对话的章节中,您提到

对于每一个对话 $d$ ,我们都找到角色 $R$ 说话的第一句话。并且在这句对话开始前,将 $d$ 切割为 $d^L$$d^R$ 左右两段对话。并且我们在 $d^L$ 的两端插入 User Message 的special token,在 $d^R$ 的两端插入 AI Message 的 special token。对所有的 $M$ 个 story我们都进行这样的操作,这样我们希望语言模型会在这 $M$ 个例子的基础上, 在我们给定 $q_1$ 的基础上,去模拟生成对应的对话 $d'$ 。生成后的 $d'$ 会成为语言模型的微调数据。即

$d'(q_1) = LLM( s_R, (d^1_M, 1^R_M), ..., (d^L_M, d^R_M), q_1 )$

请问能对这里做更多解释吗?将d分成left和right的分割标准是什么?为什么left对应的是user而right对应的是ai?另外,是生成每个$d'$的时候都会将$D$中的每个故事$d$(一个$M$个)分割后得到left-right pair放到prompt里面吗?

感激~

大模型创业项目

hi 同学你好,我们目前在筹备大模型创业项目相关的活动,在github上偶然看到你的项目,对你们的项目很感兴趣,我们可以提供技术&资金支持,不知道是否有兴趣详细沟通呢~如果您有意向的话,可以添加我的微信:xxf15564776686~

Embedding的词向量与原始数据略有出入

一, 问题描述

问题如下:
2023-08-10_162444

二, 代码

import sys
import os

sys.path.append("..")
sys.path.append("../..")
sys.path.append("../../..")

from src_reform import utils

res = "汤师爷台词_总_0link旁白:汤师爷准备进城上任,碰到张牧之打劫,被迫说自己是汤师爷\n六子:爹,全都找遍了,没钱,没货,也没有银子。人倒是剩俩活的,杀不杀?\n张牧之(戴麻点面具,其他弟兄亦戴着面具)拧钟定时:钱藏在哪儿了,说出来,闹钟响之前说不出来,脑袋搬家。\n汤师爷嚎哭,一脸丧气。\n张牧之:「哭,哭也算时间啊。」\n汤师爷哭声停止,思考。\n一女音起:有什么就说什么嘛\n张牧之:「这位夫人,你是谁?」\n(镜头切至女声来源处)县长夫人:我就是县长夫人啊。\n张牧之:「失敬!失敬!(转头看向汤师爷)那你就是县太爷?」\n汤师爷触电似地摇头。"


text_embedding = utils.get_embedding(model, 
                                     res
                                    )[0].reshape(1, -1)
#
print(text_embedding[0])

三, 数据比对如下

"""
原始数据 : -0.003492023 5630124807

1 次计算: -0.003492023 0973511934,
2 次计算: -0.003492023 0973511934
"""

描述: 重新使用模型计算后的词向量embedding与原始数据集的词向量对不上, 具体来说是后10位不相同.

请问下是什么原因?

原始数据

{
    "汤师爷台词_总_0link旁白:汤师爷准备进城上任,碰到张牧之打劫,被迫说自己是汤师爷\n六子:爹,全都找遍了,没钱,没货,也没有银子。人倒是剩俩活的,杀不杀?\n张牧之(戴麻点面具,其他弟兄亦戴着面具)拧钟定时:钱藏在哪儿了,说出来,闹钟响之前说不出来,脑袋搬家。\n汤师爷嚎哭,一脸丧气。\n张牧之:「哭,哭也算时间啊。」\n汤师爷哭声停止,思考。\n一女音起:有什么就说什么嘛\n张牧之:「这位夫人,你是谁?」\n(镜头切至女声来源处)县长夫人:我就是县长夫人啊。\n张牧之:「失敬!失敬!(转头看向汤师爷)那你就是县太爷?」\n汤师爷触电似地摇头。"
    : [
        -0.0034920235630124807, -0.02372254803776741, 0.012618937529623508, -0.007042092736810446, -0.002928749658167362, 0.02098744548857212, -0.00257463613525033, -0.0023302852641791105, -0.023318681865930557, -0.02749897912144661, 0.017419911921024323, 0.01491920743137598, ...
    ]
}

# 关于语言模型的调用

调用第三方语言模型可实现角色问答

2023-08-09_092844

因为没有openAI的账号, 所以换了一个JinaAI的token, 发现也是可以的.

我想请问下大佬, 能否将这个数据格式自己写一遍, 使用开源的语言模型进行推理?

或者实现对messages内容的解析, 这样可以吗?

messages = [
    SystemMessage(content=self.system_prompt),
    HumanMessage(content=story)
]

chat使用JinaChat

from langchain.chat_models import JinaChat


messages = self.organize_message_langchain(story, history_chat, history_response, new_query)

jinChat_key = "token"
if not "OPENAI_API_KEY" in os.environ.keys():
    # chat = ChatOpenAI(temperature=0, openai_api_key=self.api_key, model_kwargs={"stop": ["\n", "」"]})
    chat = JinaChat(temperature=0, jinachat_api_key=self.api_key, model_kwargs={"stop": ["\n", "」"]})
else:
    # chat = ChatOpenAI(temperature=0, model_kwargs={"stop": ["\n", "」"]})
    chat = JinaChat(temperature=0, model_kwargs={"stop": ["\n", "」"]})

return_msg = chat(messages)
response = return_msg.content + "」"

messages 的数据格式

2023-08-08_135519

Other LLM APIs

在ChatHaruhi2.0中

我们已经接入了ChatGPT Turbo-3.5

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/test_LangChainOpenAILLM.ipynb

和科大讯飞 的 星火大模型

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/test_SparkGPT_ipynb.ipynb

其他预计接入的模型有

GLM-pro, Calude

我们准备在接入所有模型之后,基于ChatHaruhi2.0对各个api进行一个定量测试。如果有其他语言模型的接入建议,或者你是语言模型API的运营方希望我们接入,可以在这个issue留言

In ChatHaruhi2.0

We have integrated ChatGPT Turbo-3.5

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/test_LangChainOpenAILLM.ipynb

and Xfyun SparkGPT

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/test_SparkGPT_ipynb.ipynb

Other models planned to integrate include:

GLM-pro, Calude

We plan to conduct quantitative testing of the various APIs based on ChatHaruhi2.0 after integrating all models. If you have suggestions for integrating other language models, or you are a language model API operator and hope we can integrate, please leave a comment in this issue.

多轮对话后对话陷入死循环

模型对话突然无论问什么,后面一直回答同一个答案,无法纠正,这个要怎么改进?(感觉是因为history延长后,后面一直反复这个记录,成了死循环模型就不能正常chat了)

Merge New Character

如果你想增加新的人物,你可以提交pr

人物的system_prompt.txt需要设定

texts文件夹中需要有成段的语料,每段尽量不要超过500个token

用 角色:「对话」的形式给出,当是旁白的时候 使用 旁白: 旁白对话 的形式

If you want to add a new character, you can submit a PR.

The system_prompt.txt for the character needs to be set.

The texts folder needs to have passages of text, with each passage preferably not exceeding 500 tokens.

Give the text in the form of Character:「Dialogue」 when it's a character speaking, and use Narrator: Narrator text when it's narration.

关于训练和结果复现的疑问

非常有趣的项目!
想和你们探讨两个问题,一是关于训练,二是关于效果复现的问题

首先关于训练,是否能够提供相关的训练细节呢,特别是数据集是否有特别的构造方式呢,在训练中需要给到多少的示例对话呢,是否有一个经验值,而且想知道在微调阶段是基于单轮还是多轮对话呢。

ps. 因为我想复现本地模型的角色扮演能力,但是用自定义角色。所以实际上我需要通过这种微调来确认对于新的角色构建需要怎样的一个路径以及对话创造成本,目前我预计采用13b的模型来做,因为考虑到对未见过知识的更好理解

另一个问题在于,我在使用你们的工程进行效果验证时发现,使用chatglm6b的chat进行推理时,结果是可复现并且正常的。但我在使用stream_chat方法时,结果出现对话重复严重。我很疑惑,不知道你们是否有在意这个问题。

训练、数据问题请教

关于模型base,3个问题麻烦请教下~

  1. 看了klon中的lora训练推理代码,我理解模型选择的chatglm2_lora base,是在chatglm2上基于silk-road/Chat_Suzumiya_Fusion数据集微调的的lora;但是Chat_Suzumiya_Fusion中只包括部分人物数据,生成一个新的人物,是直接抽取system prompt和对话记录后进行few-shot+知识库输出结果,还是需要将数据加入Chat_Suzumiya_Fusion数据重新训练呢?

  2. 形成模型输入格式:system prompt + story + history,Chat_Suzumiya_Fusion数据中应该只有前两个部分吧如下图,所以history在训练中没有,是推理中直接append上的,模型会将其作为story的一部分来理解?故事和历史的最大长度可以达到1500和1200,默认模型最大输入是2048?

image

  1. 英文数据silk-road/ChatHaruhi-from-RoleLLM中直接保存文本和向量了,这块的处理是只用到了ZenMoore/RoleBench中的profile数据而没用instructions数据吗?处理后的数据好像也不是直接按照diag_id进行划分的,想具体了解下处理逻辑,基于llama2训练个base,test几个英文人物~

如何使用流式输出 ?

一, 推理后一次性返回数据

当前项目下语言模型的调用(适当修改后), 可以做到推理后全量返回.

但是也有些许问题, 使用本地模型时, 会有很多轮对话导致等待时间过长.

# if not "OPENAI_API_KEY" in os.environ.keys():
# # 使用第三方的语言模型
# if JinaChat_Key:
#     # chat = ChatOpenAI(temperature=0,
#     #                   openai_api_key=self.api_key,
#     #                   model_kwargs={"stop": ["\n", "」"]})
#     chat = JinaChat(temperature=0, jinachat_api_key=JinaChat_Key, model_kwargs={"stop": ["\n", "」"]})
# else:
#     # chat = ChatOpenAI(temperature=0, model_kwargs={"stop": ["\n", "」"]})
#     chat = JinaChat(temperature=0, jinachat_api_key=JinaChat_Key, model_kwargs={"stop": ["\n", "」"]})
# return_msg = chat(messages)
# response = return_msg.content + "」"

if glm26b_model is not None:
    chat_prompt = ChatPromptTemplate.from_messages(messages)
    chain = LLMChain(prompt=chat_prompt, 
                     llm=glm26b_model, 
                     verbose=False
                    )
    response = chain({})
    # response, history = glm26b_model.chat(tokenizer, "%s" % messages, history=[])
else:
    response = "未实例化语言模型"

print("")
print("推理返回内容: %s" % response)

一个问题是: 很大概率的出现多轮对话, 台词连续生成

汤师爷:「哎呀,你是张牧之啊。我可认得你,你是那个有名的狗肉将军。」

张牧之:「哼,你这个老狐狸,我还真以为你是个正人君子呢。」

汤师爷:「哎呀,别提了,都是命。认得我这个师爷的人,有几个不是想找上门来的?」

张牧之:「我可不是来找你的,我是来找张(拍拍汤的肩):听说你有个师爷朋友?」

....

汤师爷:「哦,是啊,这可是个厉害的师爷。不过我得提醒你,他是个买官县长,可别上当。」

黄四郎:「上当?你以为他真的是个正人君子?」

汤师爷:「哎,别这么说,你们这些年轻人,真是太天真了。我告诉你,这个师爷背后的靠山可是很厉害的人,你们可得小心点。」

黄四郎:「靠山?他背后的靠山是什么人?」

一个请求, 在ChatGLM2-6B上会有多伦对话输出

二, 尝试使用流式输出

# src_reform/ChatGPT.py
class ChatGPT:
    
    ...
    
    def get_response(self, user_message, chat_history_tuple, glm26b_model=None):
        messages = self.get_message(chat_history_tuple=chat_history_tuple,
                                    user_message=user_message)
        chat_prompt = ChatPromptTemplate.from_messages(messages)

        if glm26b_model is None:
            return None

        async def chat_iterator(chat_prompt: object) -> AsyncIterable[str]:
            callback = AsyncIteratorCallbackHandler()
            chain = LLMChain(prompt=chat_prompt,
                             llm=glm26b_model,
                             verbose=False)
            # Begin a task that runs in the background.
            task = asyncio.create_task(
                wrap_done(chain.acall({}),
                          callback.done
                          ),
            )
            async for token in callback.aiter():
                # Use server-sent-events to stream the response
                print("token: %s" % token)
                yield token
            await task

        return StreamingResponse(chat_iterator(chat_prompt), media_type="text/event-stream")

前端接口

@app.post("/stream")
async def chat_stream(request: Request):
    user_message = "你好啊"
    chat_history = []
    character = "凉宫春日"

    input_message = character + ':「' + user_message + '」'

    return chatSystem.get_response(input_message, chat_history, character)

效果: 只能在控制台打印, 无法返回数据到postman
2023-08-14_162350

三, 期望/解决问题

  1. 希望能够增加本地模型的调用

  2. 本地模型能够使用流式输出

关于Haruhi-Zero里角色的jsonl文件

我注意到Haruhi-Zero里导入的角色jsonl文件和ChatHaruhi2.0里的角色jsonl不一样,ChatHaruhi3.0不能使用ChatHaruhi2.0的角色jsonl文件。请问怎么像制作ChatHaruhi2.0的角色jsonl一样制作ChatHaruhi3.0的jsonl文件。

关于从小说中抽取出的角色语料生成可训练数据的步骤

您好,我对这个项目非常感兴趣,并且按照小说抽取的步骤抽取和生成了杨过这一人物形象的text语料和system prompt以及人物的jsonl文件。但是和训练代码中dataloader中加载的文件并不一样,请问应该如何从语料生成可训练数据呢?训练数据中chat_history以及embedding又该如何获取呢?

ChatGLM2版的本地部署

请问本地部署能用int4的ChatGLM2吗
我尝试了一下好像会有RuntimeError: Only Tensors of floating point and complex dtype can require gradients

关于训练数据使用问题

Hi,请问一下,

  1. 训练的问题是否要加入角色名字?如果不加入角色名名字,语料里面很多对话是说不通的,例如汤师爷在跟财主和农民对话的时候风格是完全不同的。如果加入,如何加入?用户是否每次对话都要输入角色名字?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.