基于RNN/CNN的短评打分预测
0. 一壶清酒
给最近的工作做一个小小的总结。不会放出实测代码,以后有机会会补上部分内容。这篇博客算是调好一个简单测试样例,在CSDN上搜索“基于RNN的短评”也会有一些相关的技术贴。不过可能是用keras这些完成的,我用的基础的tf手写。测试了两个不同的网络,TextCNN和双向GRU。只要意思到位了就可以了。
1. 一身尘灰
首先,简单介绍一下任务内容。我们需要训练一个基于文本的网络,通过输出一段简单的短评(例如饿了么的食物评价,去哪网的景点评价),然后由网络给出打分(0~5分可以有小数)。阐述几个现实使用场景,方便能更好的理解这个任务。例如,饿了么等APP有时会出现用户给了评价但缺省打分;再比如,针对旅游景点,我们根据大量用户评价进行打分,给出不同星级的推荐。
其次,介绍一下训练集构成。这个测试样例的数据源与某旅游APP真实后台数据。训练集是一个三列的csv文件,第一列为Id,第二列为Discuss,第三列为Score如下图所示。每列之间由逗号隔开。
- Id。这部分可以不管,只是APP中的一个标识符,按顺序存储即可。
- Discuss。可以看到有很多的符号,总之杂乱无章,所以需要做切词分词等数据清洗工作;此外,有些评价果断,例如 “还行” ,这样的评价在数据清洗后为空字符,所以在输入网络前需要将所有的Discuss填充或截断为相同长度。
- Score。1~5,没什么好说的。
然后,测试集。没有Score一列。
最后,说明一下使用的200dim的词映射文件。预处理之后,我们需要将Discuss部分长度截取为相同,例如每句Discuss200个词,不够的用“空白”一词填补至200词。每个词在映射文件中都映射为1*200的矩阵,所以一句Discuss经预处理和填充之后为1*200维*200词的向量。映射文件如下,只需要按每个词顺序查表即可映射。
2. 一场春秋
这部分就简单画个流程图。虚线部分为稍微细节一点的操作处理。
3. 一念来回
用了两个不同网络进行测试,一个是TextCNN,另一个是基于RNN的双向GRU。当然是用LSTM也是完全可以的,对最后一层稍作修改就可以了。
因为用虚拟机跑的,所以运行时间较长。下面贴一个使用TextCNN的运行结果。