Git Product home page Git Product logo

gpt2-chitchat's Introduction

GPT2 for Chinese chitchat

News

公众号【YeungNLP】

  • 2023.04.05:发布Firefly(流萤): 中文对话式大语言模型 ,开源1.1M中文多任务指令数据集,以及模型权重。详情见文章
  • 2023.04.02:发布LLMPruner: 大语言模型裁剪工具 ,分享裁剪方法及其裁剪后的模型权重。详情见文章
  • 2023.02.13:发布OFA-Chinese ,中文多模态统一预训练模型OFA在Image Caption任务上的应用。详情见文章
  • 2022.12.04: 发布CLIP-Chinese ,中文CLIP预训练模型。使用140万中文图文对数据进行预训练,在图文相似度、文本相似度、图片相似度任务上有不错的表现。详情见文章
  • 2022.03.30:发布ClipCap-Chinese ,一种基于CLIP模型的Image Caption模型。详情见文章
  • 2021.06.16:发布CPM中文文本生成项目 。可用于作文、小说、新闻、古诗等中文生成任务。详情见文章
  • 2021.05.26:新增50w、100w的多轮对话的原始数据与预处理数据。

项目描述

  • 本项目是基于GPT2的中文闲聊机器人,模型实现基于HuggingFace的transformers 。文章:
  • 本项目受 GPT2-Chinese 的启发,精读作者的代码,获益匪浅。
  • 在生成阶段,使用了Temperature、Top-k Sampling和Nucleus Sampling等,可参考论文The Curious Case of Neural Text Degeneration
  • 代码中给出了许多详细的中文注释,方便大家更好地理解代码
  • 本项目被微软的DialoGPT项目 引用 (为了简化生成方法,加快生成速度,删除了MMI的生成方法)

运行环境

python3.6、 transformers==4.2.0、pytorch==1.7.0

项目结构

  • data
    • train.txt:默认的原始训练集文件,存放闲聊语料
    • train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象,list的每条数据表示一个多轮对话,表示一条训练数据
  • model:存放对话生成的模型
    • epoch40:经过40轮训练之后得到的模型
      • config.json:模型参数的配置文件
      • pytorch_model.bin:模型文件
  • vocab
    • vocab.txt:字典文件。默认的字典大小为13317,若需要使用自定义字典,需要将confog.json文件中的vocab_size字段设为相应的大小。
  • sample:存放人机闲聊生成的历史聊天记录
  • train.py:训练代码
  • interact.py:人机交互代码
  • preprocess.py:数据预处理代码

模型简介

模型结构

avatar

模型参数简介(详见模型的config.json文件)

  • initializer_range: 0.02
  • layer_norm_epsilon: 1e-05
  • n_ctx: 1024
  • n_embd: 768
  • n_head: 12
  • n_layer: 12
  • n_positions: 1024
  • vocab_size: 21128

训练思路

对每条训练数据进行拼接,然后将其输入到模型中,进行训练。

对于如下多轮闲聊训练数据,在训练模型时,将训练数据进行如下拼接:"[CLS]想看你的美照[SEP]亲我一口就给你看[SEP]我亲两口[SEP]讨厌人家拿小拳拳捶你胸口[SEP]"。然后将上述拼接结果作为模型的输入,让模型进行自回归训练。

想看你的美照
亲我一口就给你看
我亲两口
讨厌人家拿小拳拳捶你胸口

使用方法

Quick Start

模型分享中下载模型,将模型文件夹model_epoch40_50w放到model目录下,执行如下命令,进行对话

python interact.py --no_cuda --model_path model_epoch40_50w (使用cpu生成,速度相对较慢)
或
python interact.py --model_path model_epoch40_50w --device 0 (指定0号GPU进行生成,速度相对较快)

数据预处理

在项目根目录下创建data文件夹,将原始训练语料命名为train.txt,存放在该目录下。train.txt的格式如下,每段闲聊之间间隔一行,格式如下:

真想找你一起去看电影
突然很想你
我也很想你

想看你的美照
亲我一口就给你看
我亲两口
讨厌人家拿小拳拳捶你胸口

美女约嘛
开好房等你了
我来啦

运行preprocess.py,对data/train.txt对话语料进行tokenize,然后进行序列化保存到data/train.pkl。train.pkl中序列化的对象的类型为List[List],记录对话列表中,每个对话包含的token。

python preprocess.py --train_path data/train.txt --save_path data/train.pkl

训练模型

运行train.py,使用预处理后的数据,对模型进行自回归训练,模型保存在根目录下的model文件夹中。

在训练时,可以通过指定patience参数进行early stop。当patience=n时,若连续n个epoch,模型在验证集上的loss均没有下降,则进行early stop,停止训练。当patience=0时,不进行early stop。

代码中默认关闭了early stop,因为在实践中,early stop得到的模型的生成效果不一定会更好。

python train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl

更多的训练参数介绍,可直接看train.py中的set_args()函数中的参数说明

人机交互

运行interact.py,使用训练好的模型,进行人机交互,输入Ctrl+Z结束对话之后,聊天记录将保存到sample目录下的sample.txt文件中。

python interact.py --no_cuda --model_path path_to_your_model --max_history_len 3(由于闲聊对话生成的内容长度不是很长,因此生成部分在CPU上跑速度也挺快的)

执行interact.py时,可以尝试通过调整topk、topp、repetition_penalty、max_history_len等参数,调整生成的效果。更多的参数介绍,可直接看interact.py的set_args()函数中的参数说明 如果要使用GPU进行生成,则不要调用--no_cuda参数,并且通过--device gpu_id来指定使用哪块GPU。

闲聊语料分享

中文闲聊语料 数据集地址 语料描述
常见中文闲聊 chinese_chatbot_corpus 包含小黄鸡语料、豆瓣语料、电视剧对白语料、贴吧论坛回帖语料、微博语料、PTT八卦语料、青云语料等
50w中文闲聊语料 百度网盘【提取码:4g5e】GoogleDrive 包含50w个多轮对话的原始语料、预处理数据
100w中文闲聊语料 百度网盘【提取码:s908】GoogleDrive 包含100w个多轮对话的原始语料、预处理数据

中文闲聊语料的内容样例如下:

谢谢你所做的一切
你开心就好
开心
嗯因为你的心里只有学习
某某某,还有你
这个某某某用的好

你们宿舍都是这么厉害的人吗
眼睛特别搞笑这土也不好捏但就是觉得挺可爱
特别可爱啊

今天好点了吗?
一天比一天严重
吃药不管用,去打一针。别拖着

模型分享

模型 共享地址 模型描述
model_epoch40_50w 百度网盘【提取码:ju6m】GoogleDrive 使用50w多轮对话语料训练了40个epoch,loss降到2.0左右。

关注我们

生成样例

Sample 1:

  user :你好啊
chatbot:你好,请问您是?
  user :我是你的主人啊 
chatbot:你是狗吗?
  user :你才是狗
chatbot:你不是狗我是你的小主人
  user :你这个大笨蛋
chatbot:你大笨蛋,你是想挨打了
  user :你全家都是大笨蛋
chatbot:我是你爸爸
  user :算了,不跟你吵了,你在干嘛呢
chatbot:我在上班啊,你还没下班呢啊你
  user :我周末要做作业啊
chatbot:不是才交了吗,早晚做完啊
  user :好多作业啊,还没做完呢
chatbot:我在抄,我妈让我周五交,还有事
  user :你就不怕被**妈骂吗
chatbot:不怕
  user :你周末有去哪里玩吗
chatbot:没时间啊,忙得很啊
  user :忙着干嘛呢
chatbot:不知道啊,我周末没有作业,我想睡觉,然后还得找人

Sample 2:

  user :你好啊
chatbot:你好我好大家好
  user :你在干嘛呢
chatbot:你不上课啊
  user :今天是周末啊,笨蛋
chatbot:我在学校呢
  user :我也是,周末还要做作业
chatbot:我还没写呢我们都还没写
  user :周末你有去哪里玩吗
chatbot:没有去南京
  user :南京有什么好玩的啊
chatbot:我们没去南京
  user :你刚刚又说你去了南京,你是不是耍我啊
chatbot:我刚刚才到南京
  user :你好笨啊
chatbot:我没有
  user :你是大笨蛋
chatbot:你才是大笨蛋
  user :你全家都是大笨蛋
chatbot:你个傻冒
  user :你个智障
chatbot:哈哈哈

Sample 3:

  user :在干嘛
chatbot:睡觉
  user :这么早就睡觉啦
chatbot:嗯啊你也早点睡啊
  user :我再玩一会儿手机
chatbot:早点休息晚安
  user :拜拜啦
chatbot:晚安晚安
  user :多喝热水
chatbot:哈哈哈
  user :多喝热水
chatbot:好的咯

Sample 4:

  user :在吗
chatbot:在
  user :我不开心
chatbot:怎么啦
  user :最近好累啊
chatbot:是挺累的
  user :作业好多啊
chatbot:还好还好
  user :我觉得我快要挂科了
chatbot:我也是啊,但是我觉得我快熬出头了
  user :不说了,我还有好多作业没写
chatbot:我也是啊好多啊
  user :那先这样,下次再聊,再见了
chatbot:好哒

Sample 5:

  user :你去过广州吗
chatbot:去过呀,但是没有找到工作呢
  user :那你去过北京吗
chatbot:没有啊
  user :北京有什么好玩的
chatbot:没有你想象的那么好
  user :是吗,我还没过北京
chatbot:那里我也不怎么熟,我去过北京
  user :北京***呢
chatbot:没去过,不过可以去玩玩

Sample 6:

  user :你好
chatbot:你好
  user :在干嘛呢
chatbot:在想你呢
  user :好害羞啊
chatbot:害羞什么啊
  user :你这样夸我,我觉得不好意思呀
chatbot:我夸你你还不好意思呢
  user :是啊,哈哈哈
chatbot:你是不是在考验我
  user :你怎么会这样想呢
chatbot:我说我在夸你,这么客气,
  user :你有睡午觉吗
chatbot:有啊
  user :我现在有点困呢
chatbot:我也是
  user :等下还要去上课,好烦啊
chatbot:我们不用上课的呀

TODO

  • 多卡并行训练负载不均衡的问题

Reference

gpt2-chitchat's People

Contributors

yangjianxin1 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  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

gpt2-chitchat's Issues

UNK请教

对于模型来说,出现UNK应该是比较罕见的情况,https://github.com/yangjianxin1/GPT2-chitchat/blob/master/interact_mmi.py#L171 不应该在此处理,也没有必要处理,如果一个模型很容易就产生UNK,那表明模型在训练的时候,数据分词后存在许多UNK,这是不合理的,根本原因是分词采用的分词表设计得不好或词汇太少。
如中文,可以添加单字到词表,以保证所有句子可以正确分割成最基本的单字,而不会产生UNK
而英文,就是单字母了。
当然这样可以完全避免UNK吗?
视情况而定,语料如果参杂太多的字词,词表又太少,那UNK就无法避免,所以训练前,数据预处理非常重要,可以根据要求去除无关词,如只要中文,那其它的就不应该被放进模型,如英文,日文等,而繁写的在预处理数据时,就要转成简体。另外,生成时的一些敏感词或不想生成的东西,就不应该放到模型中,在数据预处理时,就应该过滤掉。
如果你有什么不同的见解,请指教。

数据预处理过慢

作者您好,我找到一个您提到的50W对话数据集的完整版,包含500W个轮对论对话,但是使用preprocess_raw_data处理成token的时候速度非常慢,一晚上才处理了十万条,请问有什么解决方法么
Snipaste_2020-04-04_09-44-00

如何提升Tokenize的速度

准备了500w raw语料,发现tokenize过程 2.37条数据一秒,整个处理需要580多个小时,如何提升Tokenize速度?

关于网盘

你好,请问有数据和模型的Google drive链接嘛?因为网络限制,不能打开百度云,非常感谢~

tokenizer输入问题

history.append(tokenizer.encode(text))

请问这里为什么使用tokenizer.encode(text)而不是像train过程中一样循环使用convert_tokens_to_ids(word)呢?这样history中的每一句都变成了[CLS] u [SEP],最终生成的时候输入不就是变成了[CLS][CLS]u1[SEP][CLS]u2[SEP]...[SEP]吗?

Adding alternative download link

Could you please add an extra download link apart from baidu? That will be really convenient for people not from Mainland China. Thanks!

请问temperature的作用

作者你好,我在代码中看到下一个logits会除以temperature,但是它是整体都除以这个temperature,不知道这一步骤有什么作用,希望回答,感谢~
(然后还有一个小问题在采样的时候除了multinomial,不知道其他的你试过没有,或者有没有什么建议)

RuntimeError: CUDA error: out of memory

作者您好,我在服务器上运行训练代码
python3 train.py --epochs 30 --batch_size 1 --device 0 --raw

Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM2... On | 00000000:00:08.0 Off | 0 |
| N/A 54C P0 246W / 300W | 15514MiB / 16130MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla V100-SXM2... On | 00000000:00:09.0 Off | 0 |
| N/A 38C P0 39W / 300W | 0MiB / 16130MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla V100-SXM2... On | 00000000:00:0A.0 Off | 0 |
| N/A 29C P0 39W / 300W | 0MiB / 16130MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla V100-SXM2... On | 00000000:00:0B.0 Off | 0 |
| N/A 30C P0 38W / 300W | 0MiB / 16130MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

gpu 0 是tf 在跑的代码,
我运行就出错
RuntimeError: CUDA error: out of memory
向您请教

单机多卡问题

当batch_size % 卡数 != 0 时会报错,需要在代码里面调整一下batch_size = batch_size//卡数 * 卡数 , 并且将DataLoader 中的 drop_last 设成True

使用transformers新Linear Schedule

在之前的GPT2-Chinese项目中transformer版本定在2.1.1中,在本项目中是否可以考虑升级?
其实应该就是263行的:
scheduler = transformers.WarmupLinearSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=total_steps)
改为
scheduler = transformers.get_linear_schedule_with_warmup(optimizer, num_warmup_steps=args.warmup_steps, num_training_steps=total_steps)

改一下几个参数的传入名称即可。

详细文档可以参考如下

  1. 2.1.1使用的线性schedule

class WarmupLinearSchedule(LambdaLR): """ Linear warmup and then linear decay. Linearly increases learning rate from 0 to 1 over warmup_stepstraining steps. Linearly decreases learning rate from 1. to 0. over remainingt_total - warmup_steps` steps.
"""
def init(self, optimizer, warmup_steps, t_total, last_epoch=-1):
self.warmup_steps = warmup_steps
self.t_total = t_total
super(WarmupLinearSchedule, self).init(optimizer, self.lr_lambda, last_epoch=last_epoch)

def lr_lambda(self, step):
    if step < self.warmup_steps:
        return float(step) / float(max(1, self.warmup_steps))
    return max(0.0, float(self.t_total - step) / float(max(1.0, self.t_total - self.warmup_steps)))`
  1. 最新版的线性schedule
def get_linear_schedule_with_warmup(optimizer, num_warmup_steps, num_training_steps, last_epoch=-1):
    """ Create a schedule with a learning rate that decreases linearly after
    linearly increasing during a warmup period.
    """

    def lr_lambda(current_step):
        if current_step < num_warmup_steps:
            return float(current_step) / float(max(1, num_warmup_steps))
        return max(
            0.0, float(num_training_steps - current_step) / float(max(1, num_training_steps - num_warmup_steps))
        )

    return LambdaLR(optimizer, lr_lambda, last_epoch)

老哥,训练的时候报错了

File "D:/NLP项目/GPT2-Summary-master/train.py", line 285, in train
outputs = model.forward(input_ids=input_ids)
File "D:\NLP项目\GPT2-Summary-master\transformers\modeling_gpt2.py", line 580, in forward
inputs_embeds=inputs_embeds,
File "E:\anaconda\lib\site-packages\torch\nn\modules\module.py", line 550, in call
result = self.forward(*input, **kwargs)
File "D:\NLP项目\GPT2-Summary-master\transformers\modeling_gpt2.py", line 456, in forward
inputs_embeds = self.wte(input_ids)
File "E:\anaconda\lib\site-packages\torch\nn\modules\module.py", line 550, in call
result = self.forward(*input, **kwargs)
File "E:\anaconda\lib\site-packages\torch\nn\modules\sparse.py", line 114, in forward
self.norm_type, self.scale_grad_by_freq, self.sparse)
File "E:\anaconda\lib\site-packages\torch\nn\functional.py", line 1725, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: Expected object of device type cuda but got device type cpu for argument #3 'index' in call to _th_index_select
大概就是数据类型的问题吧,怎么改都不得行

MMI的算法与原论文是否存在出入

尊敬的作者:
您好!
您的代码中,总是将输入作为label来计算loss,我总觉得这样做虽然也可以产生不差的效果,但与原论文中所阐述的,用答句来预测问句P(Source|target)还是有一定区别的。我谨以为相应的部分需要稍微改进一下,将前向计算的label设为输入对话之前的问答部分,是否是我的理解出现了偏差呢,还请不吝赐教!

批量生成建议

可以利用past加快生成及添加批量生成,如果你后面的Future Work完成,则可以通过批量,同时生成一些句子,然后进行评分选出最优解
批量生成:

input_ids = [tokenizer.cls_token_id]  # 每个input以[CLS]为开头
# 在此位置添加一行
inputs = [copy.deepcopy(input_ids) for _ in range(batch_size)]` # 这行作为输入,转成Tensor

https://github.com/yangjianxin1/GPT2-chitchat/blob/master/interact.py#L149 这行更改为
next_token_logits = outputs[0][:,-1, :]
这行https://github.com/yangjianxin1/GPT2-chitchat/blob/master/interact.py#L88 干掉
接下来要更改generated=[[] for _ in range(batch_size)] 变成二维数组接收结果

 generated.append(next_token.item()) # 变成以下这样子
[l.append(next_token[i].item()) for i,l in enumerate(generate)]

后面的连接也要改一下
纯属建议...

自己输入的语句产生的loss 过高

user:家大业大啊!结婚了就住家里,人那么多!要是看谁不顺眼,还得忍着!唉

candidate response:
所以我不害怕这事 loss:4.983797073364258
我觉得不住了,我的人都走丢了 loss:4.73016357421875
你咋不睡 loss:5.311781883239746
我觉得还是可以自己解决的,人多才能投简历来面对自己 loss:4.142895221710205
不住家里的话就紧紧跟着你在一起呗 loss:4.549864768981934
chatbot:我觉得还是可以自己解决的,人多才能投简历来面对自己
2
user:我才十二但想找个暖男

candidate response:
找个暖男吧! loss:5.694338798522949
不好意思我没有找到男朋友 loss:4.838464736938477
暖男是我室友 loss:6.382010459899902
你是说你是十二的嘛 loss:5.631513595581055
你还有我这个老公 loss:5.2759833335876465
chatbot:不好意思我没有找到男朋友
3
user:世界就这样,在有些人眼里我们连狗都不如。

candidate response:
是吧。 loss:3.9077725410461426
是的,每当我看见狗都不如的人都不如,我觉得他的笑也 loss:3.862053632736206
你这样的人在我们都是垃圾的 loss:3.5536110401153564
是吧。我们的老虎终于可以回家啦 loss:3.7600178718566895
这只狗有什么意义 loss:4.073012828826904
chatbot:你这样的人在我们都是垃圾的

Expected object of device type cuda but got device type cpu for argument #3 'index' in call to _th_index_select

GPU训练的时候报错:
Expected object of device type cuda but got device type cpu for argument #3 'index' in call to _th_index_select
Traceback (most recent call last):
File "train.py", line 431, in
main()
File "train.py", line 425, in main
train(model, device, train_list, multi_gpu, args)
File "train.py", line 319, in train
raise exception
File "train.py", line 283, in train
outputs = model.forward(input_ids=input_ids)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\transformers\modeling_gpt2.py", line 533, in forward
head_mask=head_mask)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\torch\nn\modules\module.py", line 541, in call
result = self.forward(*input, **kwargs)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\transformers\modeling_gpt2.py", line 420, in forward
inputs_embeds = self.wte(input_ids)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\torch\nn\modules\module.py", line 541, in call
result = self.forward(*input, **kwargs)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\torch\nn\modules\sparse.py", line 114, in forward
self.norm_type, self.scale_grad_by_freq, self.sparse)
File "D:\ProgramData\Anaconda3\envs\pytorchspace\lib\site-packages\torch\nn\functional.py", line 1484, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: Expected object of device type cuda but got device type cpu for argument #3 'index' in call to _th_index_select

解决方案:
train.py第280行:input_ids.to(device) 修改为:input_ids = input_ids.to(device) 即可正常运行

50万模型网盘链接失效

中文50万训练的模型网盘链接失效了哦。

PS:Epoch跑十轮是不是基本和四十轮差不多?Batch Size 8的设定是测试出来的吗?

谢谢解答~

关于attention mask

谢谢你的工作
我发现你的代码中没有关于attention_mask的内容,在训练和推理阶段的时候,attention mask应该是必要的,我想问一下,如何加上了会使得效果变好么

Segmentation fault (core dumped)

请问安装好环境之后,执行python train.py --epochs 30 --batch_size 8 --device 0,1 --raw
直接爆出一个Segmentation fault (core dumped),任何错误提示都没有,咋回事呢?多谢

问题请教

虽然使用了多轮历史对话作为响应的生成条件,但是chatbot还是不能很好地掌握该逻辑。而Sample3与Sample5中,chatbot无法知道自己“是否在南京”,“是否去过北京”。 Sample6和Sample7这种重复性的问题(用户重复输入一样的对话内容),也无法识别一致的答案。

多次提问,产生不同的答案,生成逻辑中,使用了torch.multinomial函数,即使生成的概率是一样的,产生相同的答案,但是经过这个函数抽样后,结果也有可能不同啊,这个函数不是为了多样性而使用的吗?

您好,我今天用别的语料进行训练,出现了以下问题,请您有空帮忙解答

2020-01-08 14:18:13,763 - INFO - loading traing data
2020-01-08 14:18:13,806 - INFO - total training steps = 162195
Traceback (most recent call last):
File "train.py", line 432, in
main()
File "train.py", line 426, in main
train(model, device, train_list, multi_gpu, args)
File "train.py", line 263, in train
scheduler = transformers.WarmupLinearSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=total_steps)
AttributeError: module 'transformers' has no attribute 'WarmupLinearSchedule'

train.py中有bug

你好,你的evluate()中的input_ids.to(device) 那里得改一下 input_ids = input_ids.to(device).

另外, 想问你一个问题。计算loss那一块,为什么是取0到n-2的prediction_scores, label却取得是1到n-1?? 那岂不是错位了。。我的理解是这里取1到n-1的prediction_scores和1到n-1的label?? 希望给个答复 谢谢啦。

引入mmi后是否效果更好?需要同时加载两个模型?

我测试了两种情况的,发现有些未必会有改善。另外,后者需要加载两个模型么?

测试例子如下:
都输入 开始吧 作为起始
case1结果:
开始吧
chatbot:怎么就开始了呢
user:时间到啦啊
chatbot:嗯呢
user:嗯什么
chatbot:嘿嘿,开心一下
user:傻样子
chatbot:哪里傻,我还是个宝宝
user:哪哪都傻
chatbot:你这自信我就不开心了,大妹子,你也不是大妹子了
case2结果:
聊天记录2019-12-19 15:33:20.506588:
user:开始吧
candidate response:
我会让你认真的 loss:4.256475925445557
前面都是乱拍 loss:5.4540791511535645
好像是吧 loss:4.401147842407227
想哭 loss:5.471364974975586
开始,没法回头看 loss:4.7793965339660645
chatbot:我会让你认真的
user:时间到啦啊
candidate response:
就剩两天了 loss:4.653099536895752
上课无聊的我 loss:4.549105644226074
哈哈 loss:4.642543315887451
没有错! loss:4.593847751617432
哼!好好好 loss:4.555785655975342
chatbot:上课无聊的我
user:嗯什么
candidate response:
回来吧 loss:4.875833034515381
早点睡吧,还要熬夜 loss:4.683757305145264
要放假 loss:5.102223873138428
还有下课呀 loss:4.945773601531982
没事儿就好好上课 loss:4.674844741821289
chatbot:没事儿就好好上课
user:傻
candidate response:
我没有 loss:4.917065143585205
上着呢啊 loss:4.985911846160889
我不信 loss:4.801839351654053
打死你 loss:4.787909984588623
谁不是 loss:4.949956893920898
chatbot:打死你
user:傻样子
candidate response:
玩游戏就傻了 loss:4.653222560882568
别打我,我还不知道你的脆皮脸呢 loss:4.488063335418701
可爱的小师妹 loss:4.773369789123535
大哥,真不知道是谁,哈哈哈 loss:4.318464756011963
真心的好不做作 loss:4.669813632965088
chatbot:大哥,真不知道是谁,哈哈哈
聊天记录2019-12-19 16:10:18.691453:
user:开始吧
candidate response:
我希望他能像我一样有个像刘诗诗一样有个性的男朋友, loss:3.41839599609375
我是真的认为她要走了就不能这样玩了 loss:3.9923839569091797
咋了 loss:5.471773147583008
不开心 loss:5.102871894836426
没错 loss:5.399983882904053
chatbot:我希望他能像我一样有个像刘诗诗一样有个性的男朋友,

为啥我改了n_ctx这个参数没效果

不管是配置文件config.json或者是在train.py里面增加参数,新训练出来的模型的n_ctx,都是300。
小白求大神解答,万分感谢!!

The error in the preprocess function

Hi, thanks so much for your work

After reading your codes, I found there may be something wrong with the preprocessing function.
For example, in function preprocess_raw_data, you want to convert the string into the tokenized id for training (each id represents the word in the utterance).

And you finish it by using this line: dialogue_ids.extend([tokenizer.convert_tokens_to_ids(word) for word in utterance])

But, the utterance here is the string and the word here is the character instead of the word.

Am I right? I hope to get the responses from you. Thanks.

GPT-2 预训练

谢谢作者分享中文对话语料, 我想请问一下训练对话模型之前, 有用大量文本预训练GPT吗

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.