问答机器人训练语料清洗

训练问答机器人,语料集的清洗是非常重要的,直接决定了模型的效果,甚至会影响模型的收敛。通过训练,模型把语料集的知识学会了,如果语料集质量不好,比如语料集存在答非所问,回答有语法错误等,模型不具备纠正这些错误的能力,而是把这些错误学会了,因此,模型输出有时就不像人话了。

>存在相同的提问不同的回答

训练语料集中存在多条相同的提问,但回答不同。LSTM网络通过训练,找到合适的权重,在提问与回答之间建立映射关系,当语料集存在多条相同的提问,但回答不同的对话组时,模型训练过程中,权重会在上面几条对话组中来回调整,loss值震荡,无法收敛。

当训练语料集中有几组相同的提问但回答不同的对话时,模型训练了200轮不收敛。

删除了相同的提问但回答不同的对话,模型训练200轮,loss值降到接近0.0,准确率达到100%

清洗相同的提问不同的回答的python代码

>对话组答非所问,有缺失

对于语料集质存在答非所问,有缺失的情况,模型不具备纠正这些错误的能力,而是把这些错误学会了,因此,预测时输入错误对话组的提问,模型输出就不像人话了。那么如何判断对话组是否是答非所问呢?可以通过提问句与回答句的相似度来判断,如果相似度大于阀值(一般0.1-0.3),可以认为提问句与回答句是相关的。python代码如下:

>妥善处理超长的语料

为了减少计算量,缩短训练时间,结合问答机器人需求,需要设置LSTM网络模型输入与输出最大的字符长度。对于超过最大长度的语料,一般做法是截断,截断会导致语义不完整,甚至语法错误,所以建议使用过滤法,把超长的语料去掉,选取长度符合要求的语料。

>标点符号的处理

在自然语言中,标点符号用来辅助表达语义,但在LSTM网络中,没有对标点符号做特别的处理,把它当做文字同等处理。这样处理,同一句话,有标点与没有标点对于LSTM网络来说,语义是不同的,而对于自然语言来说,语义差异是比较小的,甚至语义是一样的。因此,标点符号是不等同于字符的。具体的处理方法是把语料集的提问语句的标点符号用空格代替,回答语句不用替换。python代码如下:

>中英文混合语句处理

模型是针对中文设计的,英文是作为单个字母处理的,没有做英文分词处理,当输入是中英文混合时,会偏离语义,因此需要把提问句包含英文字母的样本清除。python代码如下:

 

问答机器人训练语料清洗完整的python代码CSDN资源下载。

代码下载链接:https://download.csdn.net/download/u013705518/11350976

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值