"增强"CoreNLP情绪分析结果

Sha*_*man 5 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();
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我怎样才能最好地将星级评分(或其他信息,例如对最有用的产品评论的投票等)纳入CoreNLP正在进行的分析中?这是我必须单独做的事吗?或者有没有办法将附加数据直接纳入情绪分析引擎?

Dhr*_*hak 4

有一些可能的增强功能。

/1。临时训练集和上下文情感分析:某些特征可能在电影评论上下文中被分类为正面,但在产品评论上下文中可能被分类为负面。您应根据您的上下文重新训练您的数据。此处指定的方法

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

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

关于训练数据集的精彩讨论可以在这里找到。

/2。获取上下文培训和测试数据: 您的产品评论数据可以充当培训集和测试集。选择极性极端的评论(1 星最差和 5 星最好)作为您的训练数据,为了进一步改进内容,您可以选择已被社区标记为有帮助的 1 星和 5 星评论。使用此数据生成 PTB 数据集,将评论分类为正面和负面(使用 2-3-4 星级评论很难实现中性,因为它们会引入噪音)。

/3。使用 80% 的数据集作为训练集,20% 作为测试集。1 星评级的评论大部分会被归类为负面,5 星评级的评论大部分会被归类为正面。发布此内容后,您可以使用经过训练的模型来分析其他评论的情绪,您的情绪分数(例如 0 表示负面情绪,5 表示非常积极的情绪,或者 -1 表示负面情绪,+1 表示非常积极的情绪)将具有正相关性随评论一起提供实际的星级评定。如果存在情绪差异,例如,文本评论显示为具有积极情绪,但评级为 1 星,您可能需要记录此类情况,并临时进行分类。

/4。使用其他数据源和分类器进行即兴创作Vader 情绪(Python 语言)是一个非常好的分类器,专门针对社交媒体和产品评论等内容。您可能会也可能不会选择将其用作比较分类器(交叉匹配或拥有来自 corenlp+vader 的双组结果),但您肯定可以使用其亚马逊评论数据集,如下所述

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

描述:包括来自 5 种不同产品的 309 条客户评论的 3,708 个句子级片段。这些评论最初用于 Hu & Liu (2004);我们添加了情绪强度评级。ID 和 MEAN-SENTIMENT-RATING 对应于“amazonReviewSnippets_anonDataRatings.txt”中提供的原始情绪评级数据(如下所述)。

amazonReviewSnippets_anonDataRatings.txt 格式:文件以 ID、MEAN-SENTIMENT-RATING、STANDARD DEVIATION 和 RAW-SENTIMENT-RATINGS 制表符分隔

描述:来自至少 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.
Run Code Online (Sandbox Code Playgroud)