Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;加强";CoreNLP情绪分析结果_Java_Stanford Nlp_Sentiment Analysis - Fatal编程技术网

Java &引用;加强";CoreNLP情绪分析结果

Java &引用;加强";CoreNLP情绪分析结果,java,stanford-nlp,sentiment-analysis,Java,Stanford Nlp,Sentiment Analysis,我试图使用CoreNLP(Java)对大量产品评论进行情绪分析。总的来说,我发现分析的准确性相当好。从我所读到的,我使用的模型最初是使用电影评论创建的(我想),所以它不是100%适合分析产品评论。我想知道“提高”分析准确性的最佳方法 我考虑的主要问题是,除了产品评论的文本之外,我还有一个用户提供的星级。数值范围为1-5,最低为1颗星。我希望有一种方法可以在生成情感评分时考虑明星评级,因为它更准确地反映了用户对特定产品的感受。在CoreNLP的情绪分析评分中,有没有一种方法可以让我最好地将明星评级

我试图使用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();
                    }
                }
            }
        }
List reviews=this.reviewRepository.findAll();
for(ProductReview:审查){
Properties props=新属性();
props.setProperty(“注释器”、“标记化、ssplit、pos、引理、ner、解析、dcoref、情感”);
props.put(“ner.model”、“edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz”);
StanfordCoreNLP管道=新的StanfordCoreNLP(道具);
int starRating=review.getStarRating();
String reviewText=review.getTitle()+“:”+review.getReviewText();
如果(!StringUtils.isEmpty(reviewText)){
int=0;
int=0;
注释=pipeline.process(reviewText);
字符串str=null;
列出句子=annotation.get(coreanotations.SentencesAnnotation.class);
for(CoreMap句子:句子){
Tree-感伤树=句子.get(感伤CoreAnnotations.感伤AnnotatedTree.class);
int THEMENTION=RNNCorenceNotations.getPredictedClass(情感树)-2;
String partText=句子.toString();
if(partText.length()>最长){
主要情绪=情绪;
感伤str=句子.get(感伤coreAnnotations.感伤class.class);
最长=partText.length();
}
}
}
}

我如何才能最好地将星级评定(或其他信息,如对最有用的产品评论的投票等)纳入CoreNLP进行的分析中?这是我必须单独做的事情吗?或者有没有一种方法可以将额外的数据直接合并到情绪分析引擎中?

有一些可能的增强功能

/一,即兴训练集和情境情绪分析: 某些功能在电影评论中可能被归类为积极的,但在产品评论中可能被归类为消极的。你应该根据你的上下文重新训练你的数据。指定的方法

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

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

可以找到关于训练数据集的良好讨论

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

/三,。使用80%的数据集作为训练集,20%作为测试集。评级为1星级的评审应主要归类为负面评审,5星级的评审应主要归类为正面评审。 在此之后,您可以使用经过训练的模型来分析其他评论的情绪,您的情绪得分(负面情绪为0,非常正面情绪为5,负面情绪为-1,非常正面情绪为+1)将与评论中提供的实际星级评分呈正相关。如果存在情绪差异,例如,一篇文本评论显示出积极情绪,但评级为1星级,则您可能需要记录此类案例,并即兴进行分类

/四,使用其他数据源和分类器即兴创作:(在python中)是一个非常好的分类器,特别适用于社交媒体和产品评论等。您可以选择也可以不选择将其用作比较分类器(交叉匹配或拥有来自corenlp+vader的两组结果),但您肯定可以使用其amazon reviews数据集,如前所述:

AmazonReviewNippets_GroundTruth.txt格式:文件以制表符分隔 带有ID、平均情绪评分和文本片段

描述:包括309个客户的3708个句子级片段 对5种不同产品的评论。这些评论最初用于 胡和刘(2004);我们增加了情绪强度评级。身份证和 平均情绪评级与原始情绪评级数据相对应 在“AmazonReviewNippets_anonDataRatings.txt”中提供(描述 下)

AmazonReviewNippets\u anonDataRatings.txt格式:该文件为tab 用ID、平均值、标准差和 原始情绪评级

描述:至少20名独立人员的情绪评级 评分员(所有经过预筛选、培训和质量检查的人员,以获得最佳结果) 评分员
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.