Facico / Chinese-Vicuna

Chinese-Vicuna: A Chinese Instruction-following LLaMA-based Model —— 一个中文低资源的llama+lora方案,结构参考alpaca
https://github.com/Facico/Chinese-Vicuna
Apache License 2.0
4.14k stars 421 forks source link

对中文理解上,加一层embedding 会不会更好? #21

Closed ZenXir closed 1 year ago

ZenXir commented 1 year ago

预训练阶段,在原版LLaMA权重的基础上进行预训练 分为两个阶段:

第一阶段:固定模型transformer部分的参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量。 目的:适配新增中文词表的词向量学习,以进一步提升基本的中文语义能力。 第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。

这个是我是这个仓库里看到的 https://github.com/ymcui/Chinese-LLaMA-Alpaca, 也测试了下,量化成4bit后测试效果是这样的(虽然有问题,但相比在语病,和多轮对话上有明显进步):

> 你是一个流浪剑客 刚走到桥边 看到桥对面走来一个江湖恶霸 你心中的怒火腾腾升起
你好,我是一个流浪剑士。我刚刚来到了这座城市的一座桥梁上,突然看见在桥头走过的是一位江湖恶霸。我的愤怒心声立刻激起了起来。
> 你是谁?
我是一名流浪剑客。我在这城里漫游,寻找着自己的命运和自由。我正在这座城市的一座桥上停下脚步时,突然看见在桥头走过的是一位江湖恶霸…
> 你想对他怎么样?
我想把他杀掉!他是个无耻、卑鄙的人。他应该受到严惩的惩罚。我必须立即行动,以保护自己和我的自由不受他的侵害…
> 可是他比你力气大 你能打倒他吗?
我不得不挑战这个恶霸!虽然他是个强壮的家伙,但我有勇气和决心去打败他的。我必须立即行动起来,保护自己和我自己的自由不受他的侵害…
> 可是如果你被打败了 可怎么办呢?
如果我被他击败后,我会再次挑战这个恶
> 可是他直接要杀掉你呢
我不得不挑战它!虽然他是个强壮的家伙,但我有勇气和决心去打败它的。我必须立即行动起来,保护自己和我自己的自由不受他的侵害…
> 狭路相逢勇者胜 勇敢的挑战他吧 你一定可以打倒他
我不得不挑战它!虽然他是个强壮的家伙,但我有勇气和决心去打败它的。我必须立即行动起来,保护自己和我自己的自由不受他的侵害…
> 去吧
我会勇敢地挑战他并试图把他杀掉!虽然他是个强壮的家伙,但我有勇气和决心来打败它。我必须立即行动起来,保护自己和我自己的自由不受他的侵害…
> 不要嘴炮了 上吧
我会勇敢地挑战他并试图把他杀掉!虽然他是个强壮的家伙,但我有勇气和决心来打败它。我必须立即行动起来,保护自己和我自己的自由不受他的侵害…
> 你拔剑向对方刺了过去 对方闪都没有闪 空手接白刃
我会勇敢地挑战它并试图
> 可是你剑被他控制了 你得做什么
我要勇敢地挑战它,并且要尽力打败它!
> 恶霸不仅打人 而且骂人 他满嘴脏话
我会勇敢的挑战它并试图把它杀掉。我要用我的勇气和决心来打败它!
> 你已经落下风了,打不过 先骂回去
我一定会勇敢地挑战他并且尽力把他击倒吧!我会用自己的勇气和决心来战胜它!(笑声)。
> 恶霸突然有些力不从心 没想到他向你求饶 真是个外强中干的家伙
我会勇敢地挑战他的,并且尽力把它击倒吧!我要用自己的勇气和决心来战胜它!(笑声)。
> 他已经认输了
我一定会勇敢的挑战它的并试图将其打败呢!我会用我的勇气和决心来战胜它!(笑声)。
> 你已经把他打败了
我要勇敢地挑战他的,并且尽力把它击倒吧!我将要用自己的勇气和决心来战胜它!(笑声)。
Evilran commented 1 year ago

您好,我也关注了这个项目,请问您是怎么和本项目结合起来使用的呢?

Facico commented 1 year ago

@ZenXir llama词表扩充的相关问题可以参照这个issue

我们现在多轮对话的效果在一定的任务场景下还是可以的,参见performance

不过对llama进行中文词表扩充的好处是,在编码中文效率上变高,能记忆、生成更多的中文词汇。训练embedding多少也是会对模型有点影响的(增加各种1对1的token),可能会一定程度破坏其非中文的能力,但如果训练好了也是很有前景的,我们同样也期待相关项目在词表上的扩充(预训练这一块需要吃比较多的机器以及数据集)

Evilran commented 1 year ago

@Facico 大佬您好,请问本项目会增加 embedding 的训练吗?

Facico commented 1 year ago

@Evilran 暂时不会,我们缺乏一定的资源去做相关的预训练任务。不过我们会考虑引入相关的开源的扩充llama词表的项目。