(很久没在csdn写文章了,一直在知乎,现在慢慢搬过来,原创在https://blog.csdn.net/weixin_38100489哈)
看了https://zhuanlan.zhihu.com/p/142168215有一点思考。
之前做对话系统时,看实际的对话记录,发现口语文本有如下特点:
一是大量的口语词汇;二是打错字;三是语序错乱。
1、处理错字
很自然有两种思路:一是把错字纠正;二是就把训练集也刻意弄出错字。
1.1、错字纠正
1.1.1、针对应用场景和实际历史记录,做常见错字的规则。(实际上没有想象的那么复杂。比例类似二八定律。)
1.1.2、把原文本和正确文本当做seq2seq去做。(但是训练集从哪里来呢?标不如构造,构造方式见下面的1.2部分)
1.2、向训练集中加入错字
不妨先想想错字是怎么来的,然后再说怎么做。
1.2.1、如果是用本来就含有错字的真实数据做标注,且量足够大,那就不存在这个问题了。(但实际上,多大的量才算大呢?后面的方法还是能提升的)
1.2.2、(英文中的拼写错误对应中文)在按对按键后,在输入法中选择了错误的字词。
(比如,上面这句话,我最初就输入成了“在按对‘案件’后”,无语。。)
可以在训练样本中,分词后选一个词,出拼音,用拼音出候选词列表,选择除了真实词汇之外的第一个候选词,作为替换。
1.2.3、(QWERTY键盘错误注入)按错按键了。
可以在训练样本中,分词后选一个词,出拼音,选拼音中的1~2个按键,换成相邻的按键,得到新的拼音,进而得到替换词。(需要注意应用场景是9键环境下,还是26键环境下,又或是二者都有。)
2、语序错乱
2.1、(最暴力的方式)一个样本分词后,全部词随机打乱。
2.2、(比较暴力,但是还算合理)一个样本分词后,挑出1~2个词随机插入分词后的样本中。
2.3、(根本上)通过对真实样本的观察和统计,得到规律,如“最常见的语序错乱是将某些词拿出放在句尾”“哪些词性的词容易放到句尾”(这两个是我真实遇到的情况,常说完后再用一个词作为补充,而这个词常常是名词。)根据得到的规律做训练集的改写。
2.4、(补充)句与句乱序。(在我的口语化样本中绝大多数是一句,故略。)
3、口语词汇
(我还没想好。。)
如果觉得有用,请点赞~