关于工程效率的疑问
ZhengZixiang opened this issue · comments
和序列标注做法一次送入句子出结果相比,MRC的方式需要对每一类实体都做一遍句子+某类实体问句的轮询,尽管MRC的方式能够带来在指标上的显著提升,但是这样一类一类的轮询效率上感觉就比较差。落地工程的话,不知道你们是否有这样的应用场景,验证过MRC这样轮询对响应性能这些指标的影响?
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。
文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦
工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span
这样其实问一遍就可以了
请问您有用[cls1]q1[cls2]q2[cls3]q3[seq] text这样的方式来做吗,效果和一个一个提问相比怎么样呢
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span这样其实问一遍就可以了
您好,这里能具体讲一下吗,有几个问题
- [cls1]、[cls2]和[cls3]是使用不同的token吗
- 3个query合在一起输入时需要得到三组不同的token表示,这里能具体说下吗
- 这种模式对于指标有损吗
- 这种模式下模型训练也要同时适配吧
@littlesulley , 您好,能帮忙回答 @currylym 的问题吗,这些应该是大家比较关心的问题,谢谢
算了,没人回答,我自己已经实验了,并行mrc没问题
算了,没人回答,我自己已经实验了,并行mrc没问题
@realize-qzq 老哥,实验结果怎么样
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span这样其实问一遍就可以了
老哥这个计算复杂度还是挺高的呀,拼接所有query,max_seq_len也要增加;此时显存占用增加,batch_size也不能取的太大,实际用起来有提速吗?
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。
文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦
工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span
这样其实问一遍就可以了老哥这个计算复杂度还是挺高的呀,拼接所有query,max_seq_len也要增加;此时显存占用增加,batch_size也不能取的太大,实际用起来有提速吗?
@realize-qzq ,老哥实验起来怎么样,速度有提升吗?
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。
文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦
工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span
这样其实问一遍就可以了老哥这个计算复杂度还是挺高的呀,拼接所有query,max_seq_len也要增加;此时显存占用增加,batch_size也不能取的太大,实际用起来有提速吗?
@realize-qzq ,老哥实验起来怎么样,速度有提升吗?
对我的场景,速度还是有不错提升的
感谢提问。 好问题。
其实我们在工程里面 不需要一个一个问的,有简化的办法。
文章里面的模型是
[cls]q1[seq] text
[cls]q2[seq] text
[cls]q3[seq] text
三个类别的话就需要问三遍。很麻烦
工程上我们做如下简化, 所有问题一起问
[cls1]q1[cls2]q2[cls3]q3[seq] text
然后最后一层,
用 cls1 与每个token 做运算,作为q1 的span
用 cls2 与每个token 做运算,作为q2 的span
用 cls3 与每个token 做运算,作为q3 的span
这样其实问一遍就可以了老哥这个计算复杂度还是挺高的呀,拼接所有query,max_seq_len也要增加;此时显存占用增加,batch_size也不能取的太大,实际用起来有提速吗?
@realize-qzq ,老哥实验起来怎么样,速度有提升吗?
对我的场景,速度还是有不错提升的
老哥,话说指标能打平么,我实验起来指标一直差了大概0.5pp