Giter Club home page Giter Club logo

chat-haruhi-suzumiya's People

Contributors

ariafyy avatar bdl-1989 avatar blairleng avatar eltociear avatar fengyunzaidushi avatar glide-the 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

chat-haruhi-suzumiya's Issues

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

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

如何使用流式输出 ?

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

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

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

# 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. 本地模型能够使用流式输出

如何本地部署启动

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

Arxiv Code and Data Release

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

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

大模型创业项目

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

# 关于语言模型的调用

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

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

请教一个关于使用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里面吗?

感激~

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

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

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

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

ChatGLM2版的本地部署

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

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).

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

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

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

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

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

关于训练的疑问

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

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

主要是两个不解的地方:

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

关于训练数据使用问题

Hi,请问一下,

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

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.

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: 类似多种数据组织方式对于训练的影响大吗?

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

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

百川HF Demo

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

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

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

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.

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, ...
    ]
}

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.

novel_collecting项目的一些疑问

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

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

完成了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团就是最好的证明,我们一起完成了许多不平凡的事情。所以,我的男朋友也必须是这样的人。」

可以将数据传huggingface吗?

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

关于几个训练细节的问题

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

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

谢谢。

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'

训练、数据问题请教

关于模型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几个英文人物~

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.