第三届魔镜杯大赛(NLP-text matching)

第一次参加数据应用比赛,比胜过程中付出了不少精力, 常常写代码,检查代码带凌晨一两点。前期查阅了许多资料, 试了四五个模型。单模型最好的结果是0.28左右。离进入复赛只有一步之遥。初赛结束前两天,恰好遇上了期末考试,没有时间进行stacking。我以为作一下模型集成,进入复赛仍是由但愿的。git

这篇博客旨在总结参赛经历,将参胜过程当中学到的知识,模型,技巧整理一下,达到巩固的做用。github

这个比赛是天然语言处理类的。智能客服聊天机器人场景中,待客户提出问题后,每每须要先计算客户提出问题知识库问题的类似度,进而定位最类似问题,再对问题给出答案。本次比赛的题目即是问题类似度算法设计。算法

 

 为保护用户隐私并保证比赛的公平公正,全部原始文本信息都被编码成单字ID序列和词语ID序列。单字包含单个汉字、英文字母、标点及空格等;词语包含切词后的中文词语、英文单词、标点及空格等。单字ID和词语ID存在于两个不一样的命名空间,即词语中的单字词或者标点,和单字中的相同字符及相同标点不必定有同一个ID。工具

以“彩虹年华多少?”为例子,用单字为单位划分获得:彩,虹,年,化,多,少,?。以词语为单位划分获得:彩虹,年华,多少,?。分别用单字级别的词向量和词语级别的词向量来表示。ui

给定两个句子question1和question2的基于词向量的表达,将它们做为模型的输入,通过模型的运算之后,模型输入两个类似的几率([0, 1])。编码

通过一番搜索后,发现这属于text match类的问题。因而,在Github上面以text matching 为关键字进行搜索,匹配到的star最多的是matchzoo。matchzoo是中科院作的一个文本匹配的开源工具,里面有8个左右的模型,我试了其中的matchsrnn, matchpyramid, asci, ascii, 效果都很差,多是我没有仔细调参数的缘由。另外我还试了siamese LSTM + manhantan  distance。siamese LSTM + manhantan的结果不错, 没有用CV的时候,线上能达到0.29左右。(为何没有CV? 第一次参赛,好多骚操做都不知道。。。)。想着要用stacking,而LSTM的训练比较慢,由于LSTM不能并行计算。因此我又尝试了siamese CNN, 用到了dialated convolution。siamese CNN没有CV的时候效果能达到0.28左右。在这个模型上使劲地调了参数,也没有获得一个更好的结果。以后我又试了最新出的论文里面的模型DIIN,这个模型很复杂,准确率高可是loss却不理想,甚至比不上siamese LSTM.。这个模型的参数也难调,稍不注意,模型就不收敛了。spa

总结起来,此次参加比赛,没有作太多事情,基本上就是尝试了几个模型,而后知道了参加这类比赛特征工程和模型集成很重要。设计

后期,我准备白赛中用到的代码整理一下,发布到个人Github上面。blog

相关文章
相关标签/搜索