2017-06-14 2 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 形式のデータセット使用して次のコマンドを使用して再訓練することができる指定:

ジャワ-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(in python)は、ソーシャルメディアや製品レビューのようなものに特に適した分類器です。あなたはよく、または(corenlp +ベイダーから、クロスマッチにしたり、結果の二重のセットを持っている)は、比較分類器として使用することを選択しないかもしれませんが、here述べたように、あなたはきっとそのアマゾンレビューデータセットを使用することができます。

FORMAT amazonReviewSnippets_GroundTruth.txt:ファイルには、タブがID、MEAN-SENTIMENT-RATINGと を区切っており、TEXT-SNIPPET

DESCRIPTION:5種類の製品に309件の顧客 レビューから3708文レベルのスニペットが含まれています。このレビューはもともと、 で使用されていた。Hu & Liu(2004);我々は感情の強さの評価を加えた。 IDと 平均認定率は、「amazonReviewSnippets_anonDataRatings.txt」(下記 と記載)に記載されている生のセンチメント評価データ に対応しています。

amazonReviewSnippets_anonDataRatings.txt形式:20の独立したヒト の最小値から感情評価:ファイルID、平均SENTIMENTレーティング、標準偏差、及び RAW-SENTIMENTレーティング

説明とタブ区切り あります(すべての事前スクリーニング、訓練された、および品質チェックされた最適な の評価者の信頼性)。

データセットは、ここでは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.