ZhuiyiTechnology / simbert

a bert for retrieval and generation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

怎么使用问题?

lonngxiang opened this issue · comments

使用相似召回retrieval_test.py,是需要先使用simbert.py 训练后才能使用吗

另外我看博客里描述SimBERT训练方式示意图里,正负样本是训练中随机选择的,但这里retrieval_test.py 里使用的LCQMC语料是有0,1正负样本的,请问retrieval_test.py使用LCQMC语料的作用是?

1、随你,直接也可用;
2、很明显LCQMC是用来测试模型效果的。

谢谢,所以这个模型构建语料的时候完全不需要负样本,模型训练过程中会自己随机选取负样本?

谢谢,所以这个模型构建语料的时候完全不需要负样本,模型训练过程中会自己随机选取负样本?

这个模型本意是想训练一个近义句生成模型,检索模型其实是副产品,所以没有精细构建负样本的策略。当然一般来说,作为检索模型,它比不上精细地用已有负样本训练的模型。

谢谢,所以这个模型构建语料的时候完全不需要负样本,模型训练过程中会自己随机选取负样本?

这个模型本意是想训练一个近义句生成模型,检索模型其实是副产品,所以没有精细构建负样本的策略。当然一般来说,作为检索模型,它比不上精细地用已有负样本训练的模型。
嗯嗯了解;主要考虑检索模型参考simbert,优势是不需要常规双塔模型(比如twinbert等)的模型计算复杂,所以想着尝试看下效果

其实也只是另一种方式实现的孪生网络,没有本质的区别

再次感谢回复,不过这新形式思路做法还是很特别的哈

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

嗯谢谢,正准备降下版本试下

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

您好,不知道案例能笔记本运行吗,运行过程有错误中断:Failure


File "C:/Users/long3.xiang/Desktop/tcl/simbert/simbert/simbert.py", line 182, in gen_synonyms
Failed example:
gen_synonyms(u'微信和支付宝哪个好?')
Expected:
[
u'微信和支付宝,哪个好?',
u'微信和支付宝哪个好',
u'支付宝和微信哪个好',
u'支付宝和微信哪个好啊',
u'微信和支付宝那个好用?',
u'微信和支付宝哪个好用',
u'支付宝和微信那个更好',
u'支付宝和微信哪个好用',
u'微信和支付宝用起来哪个好?',
u'微信和支付宝选哪个好',
]
Got:
['::::::!!!!!!!!!!!!!!!!!!!!!!!!!!', '。。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、', '的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信', '。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。', '::::::::::::::::::::::::::::::::']

感觉你是乱运行。。。

按这个来吧。。。。( https://github.com/ZhuiyiTechnology/pretrained-models/blob/master/examples/simbert_base.py

您好,这链接应该是加载模型测试生成案例,我这边是想用自己预料做fine-tune

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

您好,不知道案例能笔记本运行吗,运行过程有错误中断:Failure
File "C:/Users/long3.xiang/Desktop/tcl/simbert/simbert/simbert.py", line 182, in gen_synonyms
Failed example:
gen_synonyms(u'微信和支付宝哪个好?')
Expected:
[
u'微信和支付宝,哪个好?',
u'微信和支付宝哪个好',
u'支付宝和微信哪个好',
u'支付宝和微信哪个好啊',
u'微信和支付宝那个好用?',
u'微信和支付宝哪个好用',
u'支付宝和微信那个更好',
u'支付宝和微信哪个好用',
u'微信和支付宝用起来哪个好?',
u'微信和支付宝选哪个好',
]
Got:
['::::::!!!!!!!!!!!!!!!!!!!!!!!!!!', '。。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、', '的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信', '。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。', '::::::::::::::::::::::::::::::::']

那你这个算什么failure?我看着挺正常的啊。

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

您好,不知道案例能笔记本运行吗,运行过程有错误中断:Failure
File "C:/Users/long3.xiang/Desktop/tcl/simbert/simbert/simbert.py", line 182, in gen_synonyms
Failed example:
gen_synonyms(u'微信和支付宝哪个好?')
Expected:
[
u'微信和支付宝,哪个好?',
u'微信和支付宝哪个好',
u'支付宝和微信哪个好',
u'支付宝和微信哪个好啊',
u'微信和支付宝那个好用?',
u'微信和支付宝哪个好用',
u'支付宝和微信那个更好',
u'支付宝和微信哪个好用',
u'微信和支付宝用起来哪个好?',
u'微信和支付宝选哪个好',
]
Got:
['::::::!!!!!!!!!!!!!!!!!!!!!!!!!!', '。。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、', '的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信', '。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。', '::::::::::::::::::::::::::::::::']

那你这个算什么failure?我看着挺正常的啊。

关键程序只运行了这一步就中断了,没有继续训练,也没有保存到模型

那我也不知道你的程序有啥问题。。。反正到你目前的输出为止还是挺正常的。

那我也不知道你的程序有啥问题。。。反正到你目前的输出为止还是挺正常的。

我没有改任何代码,现在就是tf版本用的1.15,其他都完全一样环境
image

我看不懂你的ide,我只是想知道“Got”怎么来的。

我看不懂你的ide,我只是想知道“Got”怎么来的。
这是错误的输出:

File "C:/Users/long3.xiang/Desktop/tcl/simbert/simbert/simbert.py", line 181, in simbert.gen_synonyms
Failed example:
gen_synonyms(u'微信和支付宝哪个好?')
Expected:
[
u'微信和支付宝,哪个好?',
u'微信和支付宝哪个好',
u'支付宝和微信哪个好',
u'支付宝和微信哪个好啊',
u'微信和支付宝那个好用?',
u'微信和支付宝哪个好用',
u'支付宝和微信那个更好',
u'支付宝和微信哪个好用',
u'微信和支付宝用起来哪个好?',
u'微信和支付宝选哪个好',
]
Got:
[':》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》', '。,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '。。。。。。、、、、、、、、、、、、、、、、、、、、、、、、、、', '。。。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、', '。。、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、', '的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的的', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信信', '。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。', '::::::::::::::::::::::::::::::::']

####################
(感觉是注释里"""""的问题,然后我把gen_synonyms前面的三个<<<注释掉;然后运行还是不行),然后虽然没有错误,但好像也没有进行训练,就直接把网络结构打印出来程序就结束了

Total params: 97,079,568
Trainable params: 97,079,568
Non-trainable params: 0


##################
最后有在想,这个训练需要很大的资源才能finetune吗,我是直接用的cpu笔记本16g测试的

好歹有张10G显存以上的显卡才能跑得起来吧~

好歹有张10G显存以上的显卡才能跑得起来吧~

10g显卡,那哭了没戏了,后面准备去服务器再试下,多谢;另外这段代码改成这样会减少错误

def read_corpus():
"""读取语料,每行一个json
"""
while True:
with open(corpus_path, encoding='utf-8') as f:
for l in f:
yield json.loads(l, strict=False)

好歹有张10G显存以上的显卡才能跑得起来吧~

您好,就是我把参数设置为batch_size = 3、steps_per_epoch = 1、epochs = 5;在服务器训练fine-tune为啥一个来小时还没能结束呢,感觉测试样板没有多少数据呀
image

好歹有张10G显存以上的显卡才能跑得起来吧~

您好,就是我把参数设置为batch_size = 3、steps_per_epoch = 1、epochs = 5;在服务器训练fine-tune为啥一个来小时还没能结束呢,感觉测试样板没有多少数据呀
image

运行了两次,但是两次运行的模型都没有保存下来,不知道什么原因,第二次我单独最后加个最终保存也没有
image
我现在再测试第三种方式,保存为h5,把checkpoint注释掉
image

好歹有张10G显存以上的显卡才能跑得起来吧~

您好,就是我把参数设置为batch_size = 3、steps_per_epoch = 1、epochs = 5;在服务器训练fine-tune为啥一个来小时还没能结束呢,感觉测试样板没有多少数据呀
image

运行了两次,但是两次运行的模型都没有保存下来,不知道什么原因,第二次我单独最后加个最终保存也没有
image
我现在再测试第三种方式,保存为h5,把checkpoint注释掉
image

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

好歹有张10G显存以上的显卡才能跑得起来吧~

您好,就是我把参数设置为batch_size = 3、steps_per_epoch = 1、epochs = 5;在服务器训练fine-tune为啥一个来小时还没能结束呢,感觉测试样板没有多少数据呀
image

运行了两次,但是两次运行的模型都没有保存下来,不知道什么原因,第二次我单独最后加个最终保存也没有
image
我现在再测试第三种方式,保存为h5,把checkpoint注释掉
image

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

但这样保存的h5模型怎么通过bert4keras 再次加载使用呢

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

既然开源了就不可能存在这种问题,请往别的地方debug。你的问题我确实闻所未闻,提建议也无从下手。

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

既然开源了就不可能存在这种问题,请往别的地方debug。你的问题我确实闻所未闻,提建议也无从下手。

抱歉问题有点多哈,还有个问题就是运行simbert.py 这个文件有进行finetune吗,它有实际改变原始的预训练模型的参数吗?还是只是读取预训练模型的embedding做unilm模型训练的输入呢

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

既然开源了就不可能存在这种问题,请往别的地方debug。你的问题我确实闻所未闻,提建议也无从下手。

抱歉问题有点多哈,还有个问题就是运行simbert.py 这个文件有进行finetune吗,它有实际改变原始的预训练模型的参数吗?还是只是读取预训练模型的embedding做unilm模型训练的输入呢

你需要先了解一下unilm是什么

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

既然开源了就不可能存在这种问题,请往别的地方debug。你的问题我确实闻所未闻,提建议也无从下手。

抱歉问题有点多哈,还有个问题就是运行simbert.py 这个文件有进行finetune吗,它有实际改变原始的预训练模型的参数吗?还是只是读取预训练模型的embedding做unilm模型训练的输入呢

你需要先了解一下unilm是什么

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

验证了第三种方法能保存模型下来;前面是因为代码里的callback Evaluate方法问题吗?看里面的方法on_epoch_end没有被任何调用

既然开源了就不可能存在这种问题,请往别的地方debug。你的问题我确实闻所未闻,提建议也无从下手。

抱歉问题有点多哈,还有个问题就是运行simbert.py 这个文件有进行finetune吗,它有实际改变原始的预训练模型的参数吗?还是只是读取预训练模型的embedding做unilm模型训练的输入呢

你需要先了解一下unilm是什么

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

simbert.py文件应该算是pretraing文件;但bert4keras在 finetune时有相关控制输入embedding更新的参数吗,麻烦请教下,我在build_transformer_model等相关源码接口里好像没有找到

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

我还是那句话,你需要去了解一下unilm,甚至看了你这个回复后,我觉得你还需要去了解一下bert。

预训练和finetune本质都是训练,只不过任务不同、起点不同而导致命名不同而已,我无法理解你这种对预训练和finetune的区分究竟想表达什么含义。unilm只是在bert的基础上换了个mask,如果bert的参数不更新,那还训练个什么?预训练模型是一个整体,你只强调Embedding干嘛?你只是把bert当Embedding层了?如果是的话,还是好好补习一下bert吧。

simbert.py文件应该算是pretraing文件;但bert4keras在 finetune时有相关控制输入embedding更新的参数吗,麻烦请教下,我在build_transformer_model等相关源码接口里好像没有找到

控制哪些权重被冻结/放开训练,这是keras的功能,bert4keras不作重复开发。

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

我还是那句话,你需要去了解一下unilm,甚至看了你这个回复后,我觉得你还需要去了解一下bert。

预训练和finetune本质都是训练,只不过任务不同、起点不同而导致命名不同而已,我无法理解你这种对预训练和finetune的区分究竟想表达什么含义。unilm只是在bert的基础上换了个mask,如果bert的参数不更新,那还训练个什么?预训练模型是一个整体,你只强调Embedding干嘛?你只是把bert当Embedding层了?如果是的话,还是好好补习一下bert吧。

simbert.py文件应该算是pretraing文件;但bert4keras在 finetune时有相关控制输入embedding更新的参数吗,麻烦请教下,我在build_transformer_model等相关源码接口里好像没有找到

控制哪些权重被冻结/放开训练,这是keras的功能,bert4keras不作重复开发。

好的感谢,那这样写是调用keras的对吗
bert = build_transformer_model(
config_path,
checkpoint_path,
with_pool='linear',
application='unilm',
return_keras_model=False,

)

encoder = keras.models.Model(bert.model.inputs, bert.model.outputs[0])

encoder.trainable = True

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

我还是那句话,你需要去了解一下unilm,甚至看了你这个回复后,我觉得你还需要去了解一下bert。
预训练和finetune本质都是训练,只不过任务不同、起点不同而导致命名不同而已,我无法理解你这种对预训练和finetune的区分究竟想表达什么含义。unilm只是在bert的基础上换了个mask,如果bert的参数不更新,那还训练个什么?预训练模型是一个整体,你只强调Embedding干嘛?你只是把bert当Embedding层了?如果是的话,还是好好补习一下bert吧。

simbert.py文件应该算是pretraing文件;但bert4keras在 finetune时有相关控制输入embedding更新的参数吗,麻烦请教下,我在build_transformer_model等相关源码接口里好像没有找到

控制哪些权重被冻结/放开训练,这是keras的功能,bert4keras不作重复开发。

好的感谢,那这样写是调用keras的对吗
bert = build_transformer_model(
config_path,
checkpoint_path,
with_pool='linear',
application='unilm',
return_keras_model=False,

)

encoder = keras.models.Model(bert.model.inputs, bert.model.outputs[0])

encoder.trainable = True

https://keras.io/search.html?query=trainable

有去了解nlu nlg集成一体一个bert完成,主要就想咨询:simbert.py文件是属于fintune不是pretraing吧,运行结束simbert.py文件后预训练模型参数有自动更新吗?因为bert4keras没有看到相关参数,keras框架好像输入Eenbendding接口有个trainable参数是可以控制输入embedding会不会被更新,不知道bert4keras在 finetune时也有相关控制参数吗

我还是那句话,你需要去了解一下unilm,甚至看了你这个回复后,我觉得你还需要去了解一下bert。
预训练和finetune本质都是训练,只不过任务不同、起点不同而导致命名不同而已,我无法理解你这种对预训练和finetune的区分究竟想表达什么含义。unilm只是在bert的基础上换了个mask,如果bert的参数不更新,那还训练个什么?预训练模型是一个整体,你只强调Embedding干嘛?你只是把bert当Embedding层了?如果是的话,还是好好补习一下bert吧。

simbert.py文件应该算是pretraing文件;但bert4keras在 finetune时有相关控制输入embedding更新的参数吗,麻烦请教下,我在build_transformer_model等相关源码接口里好像没有找到

控制哪些权重被冻结/放开训练,这是keras的功能,bert4keras不作重复开发。

好的感谢,那这样写是调用keras的对吗
bert = build_transformer_model(
config_path,
checkpoint_path,
with_pool='linear',
application='unilm',
return_keras_model=False,
)
encoder = keras.models.Model(bert.model.inputs, bert.model.outputs[0])
encoder.trainable = True

https://keras.io/search.html?query=trainable

好的感谢,这我前面有去查了看了下

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

就是用的文档写的版本,tensorflow 1.14 + keras 2.3.1 + bert4keras 0.10.5,但是报了这个错,应该怎么做呢

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas')
AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

请对齐bert4keras版本,或者自己调整代码同步到最新版

就是用的文档写的版本,tensorflow 1.14 + keras 2.3.1 + bert4keras 0.10.5,但是报了这个错,应该怎么做呢

这个文档什么时候写了bert4keras 0.10.5?

运行simbert.py,好像有错误: @AutoRegressiveDecoder.set_rtype('probas') AttributeError: type object 'AutoRegressiveDecoder' has no attribute 'set_rtype'

改为: @AutoRegressiveDecoder.wraps('probas') 就可以了