“增强”CoreNLP情感分析结果

5
我正在尝试使用CoreNLP(Java)对大量产品评论进行情感分析。总体而言,我认为分析的准确性相当不错。据我所知,我使用的模型最初是使用电影评论创建的,因此它并非百分之百适用于分析产品评论。我想知道如何“增强”我的分析准确性。
我主要考虑的是除了产品评论文本外,我还有一个用户提供的星级评分。该值范围从1到5,其中1星是最低的。我希望在生成情感得分时考虑星级评分,因为它更准确地反映了用户对特定产品的感受。在CoreNLP中,是否有最佳方法使星级评分因素纳入情感分析评分中?我的分析代码类似于以下内容:
List<ProductReview> reviews = this.reviewRepository.findAll();
        for (ProductReview review : reviews) {
            Properties props = new Properties();
            props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref, sentiment");
            props.put("ner.model", "edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz");

            StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

            int starRating = review.getStarRating();
            String reviewText = review.getTitle() + " : " + review.getReviewText();
            if (!StringUtils.isEmpty(reviewText)) {
                int longest = 0;
                int mainSentiment = 0;
                Annotation annotation = pipeline.process(reviewText);
                String sentimentStr = null;
                List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class);
                for (CoreMap sentence : sentences) {
                    Tree sentimentTree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);

                    int sentiment = RNNCoreAnnotations.getPredictedClass(sentimentTree) - 2;
                    String partText = sentence.toString();
                    if (partText.length() > longest) {
                        mainSentiment = sentiment;
                        sentimentStr = sentence.get(SentimentCoreAnnotations.SentimentClass.class);

                        longest = partText.length();
                    }
                }
            }
        }

我该如何最好地将星级评分(或其他信息,例如对最有用的产品评论的投票等)纳入CoreNLP正在执行的分析中?这是我必须单独完成的事情吗?还是有一种方法可以直接将附加数据纳入情感分析引擎中?

1个回答

4
有些改进措施可以采用:
/1. 改进训练集和上下文情感分析: 在电影评论环境中,一些特征可能会被分类为积极的,但在产品评论环境中可能是消极的。您应该在您的上下文中重新训练数据。该方法在此处指定here

可以使用以下命令重新训练模型,使用PTB格式数据集:

java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath train.txt -devPath dev.txt -train -model model.ser.gz

可在here找到一个关于训练数据集的好讨论。
/2.获取上下文培训和测试数据: 您的产品评论数据可以充当训练集和测试集。将极性(1星最差和5星最佳)评价的评论选择为您的训练数据,为了进一步提高内容,您可以选择由社区标记为有用的1星和5星评论。使用此数据生成您的PTB数据集,将评论分类为正面和负面(使用2-3-4星评级的评论可能会引入噪声,因此中性将是一件困难的事情)。
/3.使用80%的数据集作为训练集,20%作为测试集。1星评级的评论将大多被分类为负面,而5星评级将大多被分类为正面。之后,您可以使用训练模型来分析其他评论的情感,您的情感得分(例如,对于消极情绪为0,非常积极情绪为5,或者对于消极到积极为-1到+1)将与提供的实际星级评价呈正相关。如果存在情感差异的情况,例如文本评论被归类为具有积极情感,但只有1星评级,则可能需要记录此类情况并改进分类。
/4.使用其他数据源和分类器进行改进Vader sentiment (使用Python)是一个非常好的分类器,专门用于社交媒体和产品评论等内容。您可以选择将其作为比较分类器(与corenlp + vader进行交叉匹配或获得双重结果),但您肯定可以使用其亚马逊评论数据集,如here所述:
amazonReviewSnippets_GroundTruth.txt格式:该文件用制表符分隔,包含ID、平均情感评分和文本片段。
描述:共包含来自5种不同产品的309个客户评价的3,708个句子级片段。这些评价最初用于Hu&Liu(2004);我们添加了情感强度评分。ID和平均情感评分对应于'amazonReviewSnippets_anonDataRatings.txt'(下面有描述)中提供的原始情感评分数据。
amazonReviewSnippets_anonDataRatings.txt格式:该文件用制表符分隔,包含ID、平均情感评分、标准差和原始情感评分。
描述:情感评分来自至少20名独立人工评估者(所有评估者均经过预筛选、培训和质量检查以实现最佳的评估者间可靠性)。
数据集可以在此tgz文件中找到:https://github.com/cjhutto/vaderSentiment/blob/master/additional_resources/hutto_ICWSM_2014.tar.gz
它遵循以下模式 reviewindex_part polarity review_snippet
1_19    -0.65   the button was probably accidentally pushed to cause the black screen in the first place.
1_20    2.85    but, if you're looking for my opinion of the apex dvd player, i love it!
1_21    1.75    it practically plays almost everything you give it.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接