Coder Social home page Coder Social logo

azuki-miho / chat-haruhi-suzumiya Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lc1332/chat-haruhi-suzumiya

0.0 0.0 0.0 26.07 MB

Chat凉宫春日, Developed by 李鲁鲁, 冷子昂等人。

License: Apache License 2.0

JavaScript 9.81% Python 8.19% HTML 0.03% Vue 1.43% Jupyter Notebook 80.53%

chat-haruhi-suzumiya's Introduction

中文 | English | 日本語 | 赞助

Chat凉宫春日 Chat-Haruhi-Suzumiya

Code License Data License

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

本项目由李鲁鲁,冷子昂,闫晨曦,封小洋,scixing,贾曜恺等开发。

李鲁鲁发起了项目,并完成了最早的版本,在多个微信群实现了测试。完成了GPT自动生成对话部分。

冷子昂参与了早期Gradio的开发,并且参与了后端和前端的选型。debug和最终上线了app.py

闫晨曦将李鲁鲁的notebook重构为app.py

封小洋进行了中文转日文模型的选型,完成了针对台词抽取图片的工具,(将要完成)和haruhi图片分类器

scixing实践了VITS语音,完成了台词对应的语音抽取,(将要完成)特定人物的语音分类器。

贾曜恺开发了一个前端实现方案,待测试。

本项目是一个在建项目,本项目中的代码和工具,也支持其他动漫人物的建立。在初步完成Haruhi预计的功能后,我们会开始尝试其他角色。

本项目的核心**是在prompt构造的时候利用Luotuo-BERT,对经典剧情进行了搜索,作为Fewshot(或者说更接近CoT)的构造标准。

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

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

本项目是DataWhale的5月学习的作业,其中闫晨曦,封小洋等同学都由DataWhale社区招募。

快速开始

名称 colab链接 说明
带图版本 Open In Colab 能够根据台词搜索图片的gradio版本
Chat加藤惠 Open In Colab 根据群友收集的语料实现的Chat加藤惠
万恶之源 Open In Colab 李鲁鲁最早开发的gradio Chat凉宫春日

核心原理

上图解释了整个系统的核心原理。

计划Feature

我们计划最终产生一个多个前端版本的 Chat凉宫春日,具体特征如下

  • Gradio版本

    • 可以在colab启动,方便任何人使用

    • 支持静态图的显示,念白经典台词的时候会同时显示对应的经典画面

    • (opt) 如果Gradio支持语音的话,再做一个合成日文语音的版本

  • 本地版本

    • 支持一个Live2D的老婆,口型与语音同步

    • 支持输出的文本转成日文再用合成语音念出来

    • 争取换成haruhi酱的形象

  • 后端特征

    • 理论上支持角色更换

    • 日语翻译支持本地/gpt3.5 模型的选择,能不花钱就不花钱呗

    • (后期) 支持使用本地模型去替换gpt3.5,能不花钱就不花钱

  • 额外工具

    • 支持从字幕同步的动画片中,抽取特定人物的台词,支持声纹和图片的分类,尽可能抓取到特定人物画面下,这个人的台词。
  • (opt)研究部分

    • 研究聊天空间覆盖程度,看看GPT是否能生成更多的聊天

    • 不论用什么方式,把对话数据补充到接近5万条

    • 争取训练自己的Haruhi模型

    • 构思合理的定量化User Study

    • 争取写一个TechReport挂到arxiv

赞助

因为Chat凉宫春日采用了类似CoT的策略,相比于通常聊天,要贵上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

封小洋进行了中文转日文模型的选型,并且正在尝试从TV动漫中提取图-文对

贾曜恺 @ **科学院北京基因组研究所 正在进行后端对接前端的部分

scixing 正在尝试搭建前端

TODO

持续招人中

https://github.com/LC1332/Prophet-Andrew-Ng/blob/main/Hiring.md


新的后端任务 more general app

合并app_more_general.app中的修改到app.py

使得notebook中的gradio_megumi.ipynb和gradio_with_image.ipynb都是能跑通的

  • 消除所有强制锁定 凉宫春日、春日、Haruhi的字段,都变成可以调节的
  • 如果没有图片的情况下,程序仍然是鲁棒的
  • 现在有一段54-58的文件夹创建我没有明白是什么意思,和save有关是吗 是的话应该重构到类内?
  • 过多的参数设定有一点过于麻烦,如果比较友善的话,支持可选的通过一个config.txt一同设置
  • 抽取embedding的时候增加进度条

已经完成的后端任务 by 闫晨曦, 冷子昂 debuged

基础的python后端

  • 将Notebook移动到一个app.py的文件中 (doing by 闫晨曦)
  • 确认app.py能够修改台词记录folder 这样可以存到本地或者colab启动的时候可以存到google drive
  • system prompt存成txt( characters/haruhi/system_prompt.txt ),支持切换。
  • 确认app.py能够正确调用haruhi的system prompt
  • 冷子昂测试app.py
  • 确认app.py能够启动gradio
  • app.py 支持设定max_len_story 和max_len_history 默认为 1500, 1200
  • 写一个更好的notebook,把外部参数都放在外面,启动gradio;
  • (opt) 前面都完成之后,项目可以转成public,方便从colab去拉取代码,建立一个colab脚本, 直接clone项目,调用app.py进行玩耍

闫晨曦 is working on that

新的后端任务

  • 将text的embedding和字典做预存

我已经在characters/haruhi/images 上传了文件

同时text_image_dict里面存储了文件名和台词之间的关系

  • 待鲁叔初步的图-文数据之后,做一个类,

支持文本embedding抽取、预存、载入、给定文本出(图片、相似度)

  • 在src目录下,建立一个testing子目录, 为文-文 搜索 写一个单元测试

  • 为 文-图搜索写一个单元测试

  • 如果手快的话,再把这个出图片的整合到gradio里面去(新建一个后端任务)

已经完成的后端任务 by 闫晨曦

app.py的测试

建议闫晨曦做一下这个

gradio和app之间的一致性测试

使用同样的query语句

  • 测试在notebook状态下, organize_message_langchain 函数的输出,把messages用pkl存起来
  • 然后在app.py状态下,对于同样的query,也把messages保存出来
  • 对于所有的message in messages, 比较message.content, 如果完全一致,就是对的,如果不一致,就有问题

(当然我原来的system_prompt被我加了两行,以本项目的为准。)

如果两者不一致,就要好好检查一下了


已经完成的后端任务 by 闫晨曦

简单的指令注入防御

def respond(role_name, user_message, chat_history):
  input_message = role_name + ':「' + user_message + '」'

这里的role_name和user_message在合并字符串之前都要做防御,具体方式如下

  • 长度限制role_name 限制在10个字符以内, user_message限制在200个字符以内
  • 特殊符号消除,消除两个字符串中所有的':',':','「' ,'」','\n', 一律替换为空格
  • 主角消除,当role_name中的字符出现'凉宫春日'中的任何一个字时,替换这个字为'阿',或者别的替换规则

带socket(或者其他本地与前端链接方式的后端)

这里前端可以去用https://github.com/Voine/ChatWaifu_Mobile 也可以去用别的

  • 调研ChatWaifu的后端怎么和前端连接

  • 制作一个foo的后端,看看能不能接入

  • 待app.py有个基础版本后,修改为适合ChatWaifu的后端

  • 如果ChatWaifu的前端很难的话,可以先写个前后端分离的gradio或者flask前端,把后端献给做好

贾曜恺 is working on that


中文到日文的训练

在hugging找一下有没有已经能用的中转日翻译 比如 ssmisya/zh-jp_translator K024/mt5-zh-ja-en-trimmed larryvrh/mt5-translation-ja_zh

日文数据 https://huggingface.co/datasets?language=language:zh,language:ja&sort=downloads

  • 检查这个模型是不是直接能用(可以问鲁叔,要一些台词文件)

  • 如果模型很能用,任务就结束了,可以考虑训别的东西(一般不会)

  • 可以研究下日语文本到语音,有没有可能用python+gradio的形式输出

中文到日文模型 日后再说

(暂时选定这个模型)

  • 搜集台词数据、搜集hugging face上所有能用的日文翻译数据
  • 数据最好达到200k级别
  • 问鲁叔要一下沈junyi之前的训练代码
  • 训练中文转日文模型
  • 对接测试

封小洋 is working on that


批量台词抽取

  • 等待鲁叔share数据

注意:大量的图文、视频数据不要上传到git 放少量的测试数据是可以的

更新后的人台词抽取需求

输入:

  • 视频、和视频同步的字幕
  • 一些指定人物的图片,用来确定这个人物(三分类,单独出现,面对面合照中景,和不出现主题人物)
  • 一些指定人物的音频,用来确定这个人物
  • (opt) 升级为多人物音频识别,可以提取完整的台本

输出:

  • 一个jsonl,包含所有视频中这个人的连续对话文本
  • 大量的截图,和一个{截图,对话}的jsonl, 多张截图可以对应同一段对话
    • 如果一段对话的多句中有这个人物出现,则截取这个人物
    • 如果完全没有这个人物出现,则不截取图片,只在第一个连续对话文本中有
    • 如果一段对话中没有主题人物单独出现,但是有合照,也可以截取(备用,这种情况应该很罕见)

封小洋 is working on 图片分类

scixing is working on 声纹识别

之前的图文截取需求(以上面新的为准)

注意是基于srt文件的,

实现一个视觉分类器,可以判断srt中的每一句是不是春日说的 (我看了分镜,很有可能要做三分类,是春日,是其他人,不确定)

春日的连续几句话合并成同一句

形如

春日-不确定-不确定-春日-不确定-春日

图片尽可能截取春日的。

把数据存下来给李鲁鲁核验

  • 实现台词和视频的对齐,确认台词和视频是良好对齐的,取视频前中后都试试看
  • 实现台词对应的照片抽取,抽取台词发生时间剧中的照片。
  • 使用swin-transformer或者好一点的一个ViT模型,抽取特征,准备少部分数据,制作一个凉宫的三分类器
  • 把形如 春日-不确定-不确定-春日-不确定-春日 这样春日起始,春日结尾的段落截取出来,这里可以保留三张图片
  • 图片到文本的映射可以是多对一的
  • 图片保存为高度为480的jpg,这样小一点,容易存
  • 图片统一给鲁叔,可以人工筛一下,把不好看的去掉
  • 鲁叔会整理一个jsonl文件,把haruhi在之前测试时候输出的话总结一下
  • 然后我们根据ChatHaruhi输出的台词去retrive Haruhi剧中的台词,争取找一些高频出现的台词
  • 我们只保留高频台词和对应的台本,形成text-image数据集,作为补充包 这个大的数据不要上传到github

李鲁鲁的self driving

我说一下我今天上午要做的事儿,

  • 有个哥们给我发了“加藤惠”的语料, 在app.py之外,启一个app_more_general.py, 去除掉凉宫春日的依赖
  • 有一些人格的英文数据,搜一下,然后找群友开始批量运行GPT翻译

另外 贾曜恺的前端我来不及测了,自己录一个视频吧(多录一些不同聊天的,有趣一些)

  • 构建台词-关键词-新台词的增广系统
  • 构建项目页
  • 招人
  • 整理田野测试时候ChatHaruhi输出的台词
  • 去下载Haruhi的动画片视频,想办法先搞几张台词和图片的匹配
  • (这个冷子昂今天上午会做)一个增强的gradio系统,支持根据台词显示haruhi的图片
  • 去二次元社区找更熟悉凉宫春日的同学众测

当前模型结果

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

blairleng avatar fengyunzaidushi avatar kaijiabrother avatar lc1332 avatar ssccinng avatar todochenxi avatar

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.