软件品质评测体系建立之后,在进行评测之前首先要确定评测使用的数据,这就需要数据挖掘平台发挥作用了,本文将以输入法评测语料制作为例介绍我们的评测数据挖掘处理平台。
1
数据挖掘处理原则
全面性
使用场景
依照不同用户需要的打字环境的差别,结合当前使用频率较高的几种应用,尽可能全面地覆盖用户使用的打字场景,主要分为以下两个类别:
- 聊天场景:用户聊天的打字内容,例如QQ,微信,钉钉等
- 非聊天场景:用户需要打字的非聊天环境,例如知乎,微博,淘宝,视频应用等
用户画像
对于有特定需求的用户,我们为其选择特定需求的词条数据,例如:
- 有人是教师,可能会输入很多教育类词条;
- 有人是汽车发烧友,可能会输入很多汽车相关的词条;
- 有人是电竞爱好者,更多的会输入与游戏相关的词条;
- 等等。。。
对于这些需求,我们将上述使用场景下获取的数据分为:汽车,运动,教育,游戏,影视等10余个类别,以覆盖特定用户的特定打字需求。
客观性
无倾向性
在选择数据时,同等对待所有打字类产品使用的场景,不能只使用在自己产品上表现较好的数据(例如使用输入法自带的词库制作评测数据,而忽视了时下流行的网络热词,导致评测结果很好,实际用户使用却体验不好),不去添加人为因素,避免出现马太效应。
理解用户的真实意图
用户在打字的过程中,包含的操作可能有很多种,比如有些词在我们输入法中给出的词库中可能不存在,是用户自己造出来的,这就需要我们在评测时要有组词的场景。因此我们在挖掘用户打字行为时,除了满足普通打字需求的同时也设计了多种用户可能的行为,包括联想、组词、纠错、退格等。
统一性
在制作评测数据时,对于同一份数据可能要应用于很多不同的评测需求,数据格式的差异将会导致适配成本上升,因此对于评测数据而言,需要满足格式统一的要求,我们制定了统一的格式规范,确保其可被有效复用于多种评测需求。
2评测数据的获取
通过定期抓取上文介绍的所有来源的评测数据,进行数据的获取,数据获取方式可参考我们评论爬虫的github开源项目:
代码语言:javascript复制https://github.com/sogou-qa/LightCommentCrawler
以下是数据获取效果:
3评测数据的处理与语料制作
数据清洗
数据获取之后,通常将原始数据来自的文章或者评论以json格式保存下来,这些文章或者评论可能包含很多例如换行符等特殊符号或者输入法无法识别的特殊字符等内容,因此需要对其进行正则化处理,只保留我们评测需要的中文内容。
清洗前的数据:
清洗后的数据:
数据分词
经过清洗后的数据,仍然是以大段的文章形式存储的,还不能直接拿来使用,需要使用特定的工具对其进行分词处理。在这一步,我们使用目前广泛被应用的jieba分词工具,使得大段的文章被切分成一个个词语。
之前使用jieba分词时,直接使用工具包得到的分词效果不是十分符合我们日常打字的输入习惯,因此,我们根据用户输入行为优化了分词算法,效果有明显的提升,对比结果如下所示:
语料制作
分词操作完成后,接下来需要就是语料的制作了,首先需要对分词后的结果进行注音处理,使得每一个词条都有对应的拼音串,然后将这些词条和其对应的拼音串按照固定的格式进行语料的制作,最后保存成json文件。语料的格式依照评测工具而定,保证统一性,我们的语料格式为以下形式:
代码语言:javascript复制示例:
{
"词条数目":4,
"词条内容":
[
{"pinyin": "woyou", "expect_cand": "我有"},
{"pinyin": "", "expect_cand": "的"}, //表示联想
{"pinyin": "*", "expect_cand": ""} //表示退格
{"pinyin": "#", "expect_cand": ""} //表示换行
],
"键盘类型":26
}
4结语
评测数据挖掘不是一成不变的,需要持续地更新和完善,以适应越来越多也越来越复杂的评测任务,有了评测体系和评测数据,接下来就可以进行评测工具制作与评测执行相关的内容了。