系列文章
团队博客: CSDN AI小组
1 问题定义
1.1 背景
在CSDN的问答模块中,很多初学者的提问标题缺乏有效信息,例如:
救救孩子吧!
大佬救我!!!帮我完成一下这个题目
求大神!!!
在上图例子中,更好的标题应该是 “如何在移动端页面中加入滚动条?”
在这类提问标题中,包含的有用信息量极少,无法从标题中快速理解问题的意思,在一定程度上会影响问题回答者的效率和用户的体验。此外,该类数据也会进一步影响下游NLP任务的效果,例如:问题分类,问题推荐等。
故为了提升提问标题的质量,需要基于问题描述等信息,在用户输入标题和问题描述后,给用户推荐更精准的标题,并提示用户进行更改。
1.2 输入
可用的输入信息如下所示:
"id": 998678,
"title": “求助,很简单的C#问题”,
"body": “老师要求做一个成绩管理系统,要求实现分类登入,可是这个cheng’xu如果用户是学生,即使comboBox不选学生也能顺利登入,admin就没这个问题,请教大佬是为什么?\r\n\t\r\n\t\r\n\tprivate void button1_Click(object sender, EventArgs e)\r\n {\r\n string sUser = txtUser.Text.ToString();\r\n string sPassword = txtPassword.Text.ToString();\r\n\r\n if (sUser == “admin” && sPassword == “1234” && comboBoxLeixing.Text == “管理员”)\r\n {\r\n Menuadmin main = new Menuadmin();\r\n main.Show();\r\n this.Hide();\r\n }\r\n\r\n if (sUser == “徐光睿” || sUser == “曹广” || sUser == “曹子岳” || sUser == “陈思佳” || sUser == “陈旭” || sUser == “黄文广” ||\r\n sUser == “雷章树” || sUser == “刘晴晴” || sUser == “齐世勐” || sUser == “沈彬” || sUser == “帅兴” || sUser == “孙权伟” ||\r\n sUser == “王恒” || sUser == “王瑞” || sUser == “向猛” || sUser == “张国梁” || sUser == “张宗友” || sUser == “张舒敏”\r\n && sPassword == “1234” && comboBoxLeixing.Text == “学生”)\r\n {\r\n Menustudent main = new Menustudent();\r\n main.Show();\r\n this.Hide();\r\n }\r\n\r\n if (sUser == “刘兆良” || sUser == “龙隆” || sUser == “冯伟” || sUser == “刘善勇” ||\r\n sUser == “印森林” || sUser == “程乐利” || sUser == “刘岩” || sUser == “赵俊威”\r\n && sPassword == “1234” && comboBoxLeixing.Text== “教师”)\r\n {\r\n Menuteacher main = new Menuteacher();\r\n main.Show();\r\n this.Hide();\r\n }\r\n \r\n else\r\n label3.Text = “用户名或密码错误,请重新输入!”;\r\n }”,
"tag_id": 95,
"tag_name": “c语言”
输入主要包含以上五个字段,其中title是需要改进的标题。
当前只使用了title和body两个字段作为输入。
1.3 输出
改进后的提问标题。
2 解决方案
本文将问题进一步抽象为NLP中的文本摘要任务,具体的实施步骤如下:
2.1 数据预处理
当前主要做了以下预处理操作:
- 去掉无关信息。例如:代码段、URL、无关字符等;
- 将段落切分成句子。基于分隔符进行切分,例如:换行符、句号、问号、感叹号等。
2.2 模型
2.2.1 粗排序
当前方案使用的是经典的抽取式模型TextRank,对输入的所有句子进行排名,最后选择TopN的句子进行推荐。
2.2.2 精排序
因为本文是对提问标题进行推荐,故需优先考虑问句。
此处使用基于词典的方法,识别输入中的所有问句。再机遇粗排序的结果,将问句排到最前。
2.3 实验结果与错误数据分析
初步分析结果如下图所示:
由上图可知,当前主要存在的问题包括:
- 样本问题:有些提问的body中只有图片、代码段等内容,不包含有用的中文文本信息。
- 标题过长:当前使用的预处理方法过于简单,导致切分后,有些句子过长,且当前使用的模型是抽取式文本摘要算法,不会对输入的句子进行修改。故导致某些推荐的标题过长。而提问标题一般比较精简。
3 下一步计划
- 对样本进行分类,对于只有图片或代码段的样本,需要先识别和判断其中的信息,再进行标题推荐。
- 对标题进行精简,考虑使用问题模版或生成式的文本摘要方法进行改进。
P.S.
该系列文章会持续进行更新。现在做的还过于简单,效果也还不尽如人意,希望NLP等领域的同仁、老师和专家能够提供宝贵的建议,谢谢!