2017-06-14 104 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.