偷偷开一个新专栏,写点自己大学折腾的东西。
项目目标
在HITsz的QQ招生群中自动回复学生和家长提出的问题,减轻招生老师和志愿者的工作负担。
问题分析
招生群里的问题通常是有一定范围的,类似于信息检索,只不过用户的 Query 比较口语化。而且用户在 QQ 群里提问的问题较短,且很少会在一句话里问多个问题。同时群聊信息较多,很少会继续多轮问答,所以只考虑单轮问答的情况。综上所述,我们要实现的是一个限定范围下的单轮问答,所以可以直接用文本分类的方法。
解决方案
把学校招生常见的问题打上标签,然后喂给神经网络做文本分类,训练好后基于NoneBot框架接上酷Q的API,实现在招生QQ群里回答问问题的家长和学生。
项目进展
文本分类器:之前使用 TextCNN,现在已经更换为 BERT;
机器人框架:在@机器人或提及机器人小名时会调用模型并回复,其余情况只收集语料和分类,记录到日志中。
GitHub 地址:L-M-Sherlock/HITszQAbot
难点/盲区
这套解决方案有一个很明显(然而我瞎了)的问题,那就是大部分家长和学生提问题的时候可不会指定谁来回答。
出现这种情况还是由于我看问题的方式不够全面,将文本分类精度当作了主要指标。而实际和与理论之间可能隔着十万八千里。
如何改进?
目前想到两个解决方法:
- 将置信度作为是否回复的第二个条件。当置信度足够高时,即使用户没有call机器人,也进行回复。
- 再训练一个文本分类器,来判断用户的消息是否在提问,从而决定是否回复。
当然,上面两个解决方法都有各自的问题:
如果采用方法一,有些短文本很容易产生高置信度,不好把控置信度阈值。
如果采用方法二,这个二分类的训练数据该如何确定?问的是招生咨询以外的问题该如何处理?
总结
理论很丰满,现实很骨感,一个看似简单的问题实际上可能有很多坑。在项目中不能只看理论指标,还需要重视实际效果。学技术,不能解决实际问题就成了空谈了。
本项目还有挺多不规范的地方,持续改进中,如果有什么意见或者建议,欢迎讨论。