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