zoukankan      html  css  js  c++  java
  • 基于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的运行结果。

  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/catallen/p/9555246.html
Copyright © 2011-2022 走看看