2017-06-14 103 views
5

我试图使用CoreNLP(Java)对大量产品评论进行情感分析。总的来说,我发现分析的准确性非常好。从我阅读的内容来看,我使用的模型最初是使用电影评论(我认为)创建的,因此它不是100%适合分析产品评论。我想知道最好的方法去“提高”我的分析的准确性。“增强”CoreNLP情感分析结果

我在想的主要是除了产品评论的文字之外,我还有用户提供的星级评分。值范围从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正在执行的分析?这是我必须分开做的事吗?或者有没有办法将其他数据直接纳入情绪分析引擎?

回答

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数据集,将评论归类为POSITIVE和NEGATIVE(通过使用2-3-4星评级评论,因为它们可能会引入噪音,所以中性是一件难事)。

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

/4。 即兴使用其他数据源和分类器Vader sentiment(在Python中)是一个非常好的分类器,特别适用于社交媒体和诸如产品评论之类的东西。您可能会或可能不会选择使用它作为一个比较分类(交叉匹配或有双套你的结果,从corenlp +维达),但是你一定能够使用其Amazon中的评论数据集所提到here

amazonReviewSnippets_GroundTruth.txt FORMAT:该文件是制表符分隔 用ID,MEAN-SENTIMENT-RATING,和TEXT-SNIPPET

说明:包括从上5个不同的产品309个的客户 评论3708句级片段。评论最初用于 Hu & Liu(2004);我们增加了情绪强度评级。 ID和 平均评分等级对应于在'amazonReviewSnippets_anonDataRatings.txt'(下面描述的 )中提供的原始情感评级数据 。

amazonReviewSnippets_anonDataRatings.txt FORMAT:该文件是与ID,MEAN-SENTIMENT-RATING,标准偏差,和 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.