J'essaie d'effectuer une analyse de sentiment sur un grand nombre de critiques de produits en utilisant CoreNLP (Java). Dans l'ensemble, je trouve que l'exactitude de l'analyse est plutôt bonne. D'après ce que j'ai lu, le modèle que j'utilise a été initialement créé en utilisant des critiques de films (je pense), donc ce n'est pas 100% adapté à l'analyse des critiques de produits. Je me demandais la meilleure façon d'améliorer l'exactitude de mon analyse."Améliorer" les résultats d'analyse de sentiment CoreNLP
La principale chose à laquelle je pensais était qu'en plus du texte de la revue de produit, j'ai aussi une note fournie par l'utilisateur. Les valeurs vont de 1-5, 1 étoile étant la plus basse. J'espérais qu'il y avait un moyen de prendre en compte la note d'étoiles lors de la génération du score de sentiment, car il reflète plus fidèlement les sentiments des utilisateurs sur un produit particulier. Y a-t-il un moyen de mieux intégrer le facteur d'étoiles dans le score d'analyse des sentiments dans CoreNLP? Mon code d'analyse ressemble à ceci:
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();
}
}
}
}
Comment pourrais-je mieux intégrer les évaluations étoiles (ou d'autres informations, telles que les votes sur les critiques de produits les plus utiles, etc.) dans l'analyse étant effectuée par CoreNLP? Est-ce quelque chose que je devrais faire séparément? Ou existe-t-il un moyen d'incorporer les données supplémentaires directement dans le moteur d'analyse des sentiments?