"加强" CoreNLP情感分析结果

时间:2017-06-14 19:28:09

标签: java stanford-nlp sentiment-analysis

我正在尝试使用CoreNLP(Java)对大量产品评论进行情绪分析。总的来说,我发现分析的准确性非常好。根据我的阅读,我使用的模型最初是使用电影评论创建的(我认为),所以它不是100%适合分析产品评论。我想知道最好的方式去增强"我分析的准确性。

我想到的主要问题是,除了产品评论的文本外,我还有一个用户提供的星级评分。值范围从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 个答案:

答案 0 :(得分: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星级POOREST和5星级GREAT)作为您的培训数据,为了进一步了解内容,您可以选择1和5星级评论,这些评论已被社区标记为有用。 使用这些数据生成了您的PTB数据集,将评论分类为正和负(通过使用2-3-4星级评论,中性将很难实现,因为它们可能会引入噪音)。

/ 3。使用80%的数据集作为训练集,20%作为测试集。一星评级的评论大多被归类为负面评价,五星评级主要归类为正面。 发布此信息后,您可以使用训练有素的模型来分析其他评论的情绪,您的情绪评分(对于负面情绪说0,对于非常积极的情绪表示5,对于非正面情绪表示为-1表示+1)积极的)将与该评论一起提供的实际星级评分呈正相关。如果存在情绪差异,例如文本评论表现出积极的情绪,但有1星评级,你可能想记录这样的情况,并即兴你的分类。

/ 4。 即兴使用其他数据源和分类器Vader sentiment(在python中)是一个非常好的分类器,专门用于社交媒体和产品评论等事情。您可能会也可能不会选择将其用作比较分类器(来自corenlp + vader的交叉匹配或双重结果),但您可以使用其提到的亚马逊评论数据集here

  

amazonReviewSnippets_GroundTruth.txt格式:文件以制表符分隔   ID,MEAN-SENTIMENT-RATING和TEXT-SNIPPET

     

说明:包含来自309客户的3,708个句子级摘要   对5种不同产品的评论。评论最初用于   胡&amp;刘(2004);我们增加了情绪强度评级。 ID和   MEAN-SENTIMENT-RATING对应于原始情绪评级数据   提供在&#39; amazonReviewSnippets_anonDataRatings.txt&#39; (描述   下文)。

     

amazonReviewSnippets_anonDataRatings.txt格式:文件是标签   用ID,平均评价,标准偏差和   RAW-情感额定值

     

描述:至少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.