- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 CoreNLP (Java) 对大量产品评论进行情绪分析。总的来说,我发现分析的准确性非常好。根据我的阅读,我使用的模型最初是使用电影评论创建的(我认为),因此它不是 100% 适合分析产品评论。我想知道“提高”分析准确性的最佳方法。
我主要考虑的是,除了产品评论的文字,我还有一个用户提供的星级。值范围从 1-5,1 星是最低的。我希望有一种方法可以在生成情绪评分时考虑星级评分,因为它可以更准确地反射(reflect)用户对特定产品的感受。有没有一种方法可以最好地将星级评分因素纳入 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 执行的分析?这是我必须单独做的事情吗?或者有没有办法将额外的数据直接合并到情绪分析引擎中?
最佳答案
有一些可能的改进。
/1。 即兴训练集和情境情感分析:某些功能可能在电影评论上下文中被归类为正面,但在产品评论上下文中可能被归类为负面。您应该根据您的上下文重新训练您的数据。指定方法 here
Models can be retrained using the following command using the PTB format dataset:
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 数据集将评论分类为正面和负面(使用 2-3-4 星级评论很难实现中性,因为它们会引入噪音)。
/3。使用 80% 的数据集作为训练集,20% 作为测试集。 1 星评级的评论大多应归类为负面,而 5 星评级的评论大多应归类为正面。发布此消息后,您可以使用经过训练的模型来分析其他评论的情绪,您的情绪得分(负面情绪为 0,非常正面情绪为 5,负面情绪为 -1,非常正面为 +1 positive)将与随评论一起提供的实际星级评级呈正相关。如果存在情绪差异,例如文本评论显示为正面情绪,但具有 1 星评级,您可能需要记录此类情况,并临时改进您的分类。
/4。 使用其他数据源和分类器进行改进:Vader sentiment (在 python 中)是一个非常好的分类器,特别适合社交媒体和产品评论等内容。您可能会或可能不会选择将其用作比较分类器(交叉匹配或有双重结果集,来自 corenlp+vader),但您肯定可以使用它提到的亚马逊评论数据集 here :
amazonReviewSnippets_GroundTruth.txt FORMAT: the file is tab delimited with ID, MEAN-SENTIMENT-RATING, and TEXT-SNIPPET
DESCRIPTION: includes 3,708 sentence-level snippets from 309 customer reviews on 5 different products. The reviews were originally used in Hu & Liu (2004); we added sentiment intensity ratings. The ID and MEAN-SENTIMENT-RATING correspond to the raw sentiment rating data provided in 'amazonReviewSnippets_anonDataRatings.txt' (described below).
amazonReviewSnippets_anonDataRatings.txt FORMAT: the file is tab delimited with ID, MEAN-SENTIMENT-RATING, STANDARD DEVIATION, and RAW-SENTIMENT-RATINGS
DESCRIPTION: Sentiment ratings from a minimum of 20 independent human raters (all pre-screened, trained, and quality checked for optimal inter-rater reliability).
数据集在此处的 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.
关于java - "Enhancing"CoreNLP 情感分析结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553166/
我重新下载了 Eclipse Juno 并安装了 Google App Engine SDK。在此之后,每当我开始 eclipse 时,我都会收到错误 Could not find the main
我安装了 Google Plugin for Eclipse 并创建了一个新的 Google App Engine 项目,如 https://developers.google.com/appengi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我想使用WebKit的box-shadow css属性进行一些下拉。代码如下所示: .drop_down{ -webkit-box-shadow: 1px 1px 4px #888; box-
我正在迭代 String 对象列表的元素一个接一个: LinkedList list; // add values to the list here for (int i = 0; i < list.
您好,我正在将 signalR 与 ASP.Net Webforms 一起使用。对于普通页面来说它工作正常。但对于母版页继承的页面,在该行 var chatHub = $.connection.cli
This问题讨论了渐进增强。我的问题是关于替代类型的 Web 应用程序。如果你有一个 UI 几乎完全用 Javascript 构建的 Web 应用程序,不会优雅地降级,具有桌面感觉等,那么这种 Web
所以我的理解是增强的 for 循环应该更慢,因为它们必须使用迭代器..但是我的代码提供了混合结果..(是的,我知道循环逻辑占用了循环中花费的大部分时间) 对于少量迭代(100-1000),增强的 fo
我有一个像这样定义的特征: @Enhances(ControllerArtefactHandler.TYPE) trait NullCheckTrait { def nullCheck(def
考虑这段代码: for (int value : values) { values[value] = -values[value] - 1; } 当迭代过程到达适当的元
我正在尝试使用 CoreNLP (Java) 对大量产品评论进行情绪分析。总的来说,我发现分析的准确性非常好。根据我的阅读,我使用的模型最初是使用电影评论创建的(我认为),因此它不是 100% 适合分
简短的问题:Bitbucket 问题跟踪器中的任务和增强之间有什么区别?有什么经验法则、最佳实践吗? 最佳答案 任务是某些开发事件的通用标签,而增强功能则非常清楚如何使用它,例如完善用户体验、优化等。
我对 Objective C/iOS 开发比较陌生,所以我意识到这似乎是一个基本问题:对于 iOS 5+,我正在寻找有关如何创建包含各种数据的单元格的 tableview 的入门知识。例如,在我的数据
我正在迭代一系列对象(不同的网站类型)。但我希望能够显示哪个网站的成员(member)数量最多。最初,我的代码显示每个网站的成员(member)数量,但我的代码不完整,因为我不确定如何比较对象以查看哪
我正在使用带有分页和嵌套排序插件的 Dojo 增强型网格。在网格中,当我单击列标题上的向下箭头时,元素未正确排序。假设如果我有:哈尔阿马尔内存1内存体21个2 所以当我对它们进行排序时,它们变成了:1
我已按照 Google Documentation 中的步骤操作.我已将分析帐户配置为显示增强报告。我已经尝试了文档示例中的所有可能性,但没有成功。我也在 iOS 中尝试过,但结果相同。有什么原因吗?
作为 Google App Engine 项目的一部分,我正在使用 DataNucleus,但我在持久性列方面遇到了一些麻烦。 @PrimaryKey(column = "user_id") @Col
我的一个常见问题如下: 作为我的输入(n 是一些 int >1) W = numpy.array(...) L = list(...) 在哪里 len(W) == n >> true shape(L)
假设我有两个 C++ 函数 foo1() 和 foo2(),我想尽量减少 foo1() 开始执行但 foo2() 由于某些外部事件而未被调用的可能性。我不介意两者都没有被调用,但是如果调用了 foo1
我正在研究进程同步,改进版本的游泳池问题: Bathers want to go to the swimming pool: They have to take an empty basket The
我是一名优秀的程序员,十分优秀!