2017-06-14 2 views
5

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?

Répondre

4

Il existe quelques améliorations possibles.

/1. Jeu d'apprentissage improvisé et analyse de sentiment contextuel: Certaines fonctions peuvent être classées comme positives dans un contexte d'évaluation de film, mais elles peuvent être négatives dans le contexte de révision de produit. Vous devez recycler vos données sur votre contexte. Procédé spécifié here

Les modèles peuvent être recyclés à l'aide de la commande suivante à l'aide du jeu de données de format PTB :

java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath train.txt - DEVPATH dev.txt -train -modèle model.ser.gz

Une bonne discussion sur la formation ensemble de données se trouve here.

/2. Obtention des données de formation et de test contextuelles: Vos données de révision de produit peuvent servir d'ensemble d'apprentissage et de test. Sélectionnez les critiques avec des polarités extrêmes (1 étoile POOREST, et 5 étoiles GREAT) comme données d'entraînement, pour améliorer encore le contenu, vous pouvez sélectionner les critiques 1 et 5 étoiles qui ont été marquées comme utiles par la communauté. L'utilisation de ces données a généré votre jeu de données PTB classifiant les avis positifs et négatifs (neutre serait une chose difficile à réaliser en utilisant 2-3-4 étoiles, car ils peuvent introduire du bruit).

/3. Utilisez 80% de votre ensemble de données comme ensemble d'apprentissage et 20% comme ensemble de tests. Les critiques classées 1 étoile seront la plupart du temps classifiées comme NÉGATIVES et 5 étoiles seront la plupart du temps classifiées comme positives. Postez ça, vous pouvez utiliser le modèle entraîné pour analyser le sentiment des autres critiques, votre score de sentiment (disons 0 pour le sentiment négatif, et 5 pour le sentiment très positif, ou -1 pour le négatif à +1 pour le très positif) avoir une corrélation positive avec la note réelle fournie avec cette critique. S'il y a une disparité de sentiment , par ex. une revue de texte a un sentiment positif, mais a une note de 1, vous pouvez enregistrer ces cas, et improviser votre classification.

/4. Improvisation en utilisant d'autres sources de données et classificateurs: Vader sentiment (en python) est un très bon classificateur spécialement adapté aux médias sociaux et à d'autres choses comme les critiques de produits. Vous pouvez ou ne peut pas choisir de l'utiliser comme un classificateur comparatif (pour cross match ou ont double jeu de résultats, de corenlp + Vader), mais vous pouvez certainement utiliser son jeu de données critiques d'Amazon comme mentionné here:

amazonReviewSnippets_GroundTruth.txt FORMAT: le fichier est délimité par des tabulations avec ID, MEAN-SENTIMENT-RATING et TEXT-SNIPPET

DESCRIPTION: comprend 3.708 extraits au niveau de la phrase de 309 clients revues sur 5 produits différents. Les revues ont été initialement utilisées dans Hu & Liu (2004); nous avons ajouté des évaluations d'intensité de sentiment. L'ID et MEAN-SENTIMENT-RATING correspondent aux données de notation de sentiment brut fournies dans 'amazonReviewSnippets_anonDataRatings.txt' (décrit ci-dessous).

FORMAT amazonReviewSnippets_anonDataRatings.txt: le fichier est délimité onglet avec ID, MEAN-SENTIMENT-RATING, ECART et RAW SENTIMENT EVALUATION DES

DESCRIPTION: évaluations de sentiment d'un minimum de 20 humaine indépendante évaluateurs (tous présélectionnés, formés et contrôlés en termes de qualité pour une fiabilité inter-évaluateur optimale).

Les ensembles de données sont disponibles dans le fichier tgz ici: https://github.com/cjhutto/vaderSentiment/blob/master/additional_resources/hutto_ICWSM_2014.tar.gz

Il suit la 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.