Analyse de sentiments avec R : critère de qualité pour les backlinks

Plusieurs brevets ont été déposés par Google pour quantifier les opinions et avis des internautes à partir de corpus n’utilisant pas les systèmes de notation traditionnels. L’analyse de sentiments prend alors tout son sens : comment quantifier des opinions dites « brutes » ?

L’objectif de cet article n’est pas d’entrer dans le détail des brevets mais d’en tirer la substantielle information pour projeter le mécanisme de pondération des sentiments au niveau des backlinks : et si l’analyse des sentiments devenait un critère de notation supplémentaire pour mesurer la qualité d’un backlink ?

Que nous disent les brevets de Google sur l’analyse des sentiments ?

Le brevet déposé par Hang Cui, Vibhu Mittal et Mayur Datar, sur les « Expériences comparatives sur la classification des sentiments pour les avis de produits en ligne« , introduit la nécessité de l’analyse des sentiments pour le classement des documents (ndlr. dans les résultats de recherche) :

Une grande quantité de contenu Web est subjectif et reflète les opinions des gens. Avec la croissance rapide du web, de plus en plus d’internautes rédigent des critiques pour tous les types de produits et les mettent en ligne. Il devient de plus en plus courant pour un consommateur d’apprendre comment les autres aiment ou n’aiment pas un produit avant de l’acheter ou pour un fabricant de monitorer l’opinion des clients sur ses produits pour améliorer leur satisfaction. Toutefois, comme le nombre d’avis disponibles pour chaque produit donné augmente, il devient de plus en plus dur pour les internautes de comprendre et évaluer l’opinion dominante sur un produit. Ceci démontre la nécessité d’une classification algorithmique des sentiments pour digérer cet énorme référentiel de critiques « cachées ».

À partir de là, on peut très bien imaginer qu’une classification des backlinks par sentiment dominant (ndlr. entourant le texte autour du lien) permettrait de mesurer plus finement la notoriété réelle du site web (au-delà des aspects que l’on connait déjà : citation flow, trust flow, etc.). L’opinion en tant que telle deviendrait alors un critère discriminant dans la mesure de la puissance du backlink.

Cependant, cette hypothèse se heurte à de multiples difficultés énoncées dans ce même brevet :

Construire des classificateurs de sentiment pour le traitement à l’échelle du web, avec tous les problèmes de pré-traitement, d’erreurs d’orthographe et de grammaire, de HTML « cassé » … qui en découlent, amène tout un ensemble d’autres problèmes. Les ensembles de données se comptent par centaines de milliers, parfois par millions, et ne sont ni propres ni cohérents. Les algorithmes doivent être efficaces et les effets subtils du langage deviennent visibles.

L’analyse de sentiments appliqué aux backlinks

Pour illustrer notre exemple, j’ai choisi de sélectionner quatre backlinks entourés d’un contenu suffisamment riche en volume de mots pour que l’analyse des sentiments soit pertinente. J’ai donc délibérément mis de côté les autres, ce qui ne serait évidemment pas possible dans un modèle appliqué à l’échelle du web.

Notre exemple s’appuie sur les liens pointant vers la page du BeoSound Shape de Bang et Olufsen et s’inspire directement du site Tidy Text Mining pour l’applicatif de l’analyse des sentiments.

Préparation du dataset

Pour cette partie, j’ai directement compliqué le nom du domaine référant (Referral) et le contenu entourant le backlink (Content) dans un fichier Excel.

Chargement des librairies

library(readxl)
library(tidytext)
library(ggplot2)
library(reshape2)
library(wordcloud)
library(tidyverse)
library(tidytext)
library(tidyr)

On charge les packages dont on va avoir besoin. À noter que les illustrations générées à partir de ces librairies ne seront pas toutes présentées dans cet article.

On charge ensuite le dataset :

bang_olufsen_beosound_shape <- read_excel("~/Desktop/bang_olufsen_beosound_shape.xlsx")
View(bang_olufsen_beosound_shape)

Mise en pratique de l’analyse de sentiments avec R

Dans un premier temps, on va découper les contenus de sorte à isoler chaque terme sur une ligne unique.

bang_olufsen_beosound_shape_tidy <- bang_olufsen_beosound_shape
bang_olufsen_beosound_shape_tidy$Content <- as.character(bang_olufsen_beosound_shape_tidy$Content)
bang_olufsen_beosound_shape_tidy <- bang_olufsen_beosound_shape_tidy %>%
 unnest_tokens(word, Content)
bang_olufsen_beosound_shape_tidy$linenumber <- NA
nrowbang_olufsen_beosound_shape_tidy <- nrow(bang_olufsen_beosound_shape_tidy)
bang_olufsen_beosound_shape_tidy$linenumber <- 1:nrow(bang_olufsen_beosound_shape_tidy)

Ici, la pertinence de l’analyse se heurte déjà aux expressions composées de deux ou plusieurs termes qui mériteraient de ne pas être isolés. Une difficulté soulevée dans le brevet évoqué plus haut :

Les travaux actuels se concentrent principalement sur l’utilisation d’unigrammes et de bigrammes – plutôt que de modèles de ngrammes d’ordre supérieur – pour saisir les sentiments dans le texte. Pang et al. (2002) ont constaté que les unigrammes (de façon surprenante) surpassent d’autres caractéristiques dans leurs évaluations. De même, Dave et al. (2003) ont montré expérimentalement que les trigrammes et les valeurs supérieures n’ont pas montré d’amélioration constante. Nous supposons que ces expériences ont été entravées par le faible volume des dataset d’entraînement, et n’ont donc pas été en mesure de démontrer l’efficacité des n-grammes d’ordre élevé dans les subtilités discernables dans l’expression des sentiments. Malheureusement, les n-grammes d’ordre inférieur, comme les unigrammes et les bigrammes, ne sont pas en mesure de saisir les dépendances à plus long terme, ce qui entraîne souvent des problèmes de précision dans la classification.

On mesure ensuite le sentiment associé à chacun des termes :

bing <- get_sentiments("bing")

bing_word_counts <- bang_olufsen_beosound_shape_tidy %>%
 inner_join(bing) %>%
 count(word, sentiment, sort = TRUE) %>%
 ungroup()

On génère ensuite un nuage de mots qui nous permet de distinguer les termes positifs et négatifs :

bang_olufsen_beosound_shape_tidy %>%
 inner_join(bing) %>%
 count(word, sentiment, sort = TRUE) %>%
 acast(word ~ sentiment, value.var = "n", fill = 0) %>%
 comparison.cloud(colors = c("#0088f3", "#ecd078"),
 max.words = 100)

Analyse des sentiments

On observe ici quelques termes qui mériteraient sans doute de paraitre dans les sentiments positifs et non négatifs tels que « distortion » et « vibrating ». On en revient à la mesure des unigrammes versus n-grammes.

On génère ensuite une répartition des sentiments par domaine référent :

janeaustensentiment <- bang_olufsen_beosound_shape_tidy %>%
 inner_join(bing) %>%
 count(Referral, index = linenumber %/% 50,sentiment) %>%
 spread(sentiment, n, fill = 0) %>%
 mutate(sentiment = positive - negative)

ggplot(janeaustensentiment, aes(index, sentiment, fill = Referral)) +
 geom_bar(stat = "identity", show.legend = FALSE) +
 facet_wrap(~Referral, ncol = 2, scales = "free_x")

Analyse des sentiments 1

On génère ensuite une répartition des termes négatifs et positifs sans tenir compte du domaine référent :

bing_word_counts %>%
 group_by(sentiment) %>%
 top_n(10) %>%
 ungroup() %>%
 mutate(word = reorder(word, n)) %>%
 ggplot(aes(word, n, fill = sentiment)) +
 geom_col(show.legend = FALSE) +
 facet_wrap(~sentiment, scales = "free_y") +
 labs(y = "Sentiments",
 x = NULL) +
 coord_flip()

Analyse des sentiments 2

Comment introduire la classification des sentiments en tant que mesure de la qualité d’un backlink ?

Les brevets « Créer un résumé des sentiments pour les avis de services locaux » et « Résumé du sentiment : Évaluation et apprentissage des préférences de l’utilisateur » introduisent des notions mathématiques pour donner une valeur aux sentiments positifs et négatifs, et parvenir à un résultat global (ndlr. par avis donc par document / page web).

On peut donc imaginer qu’une méthode de calcul sera arrêtée dans le futur pour être appliquée en tant que mesure de la qualité d’un backlink, et renforcer ainsi la pertinence souhaitée par l’algorithmie. Dans ce modèle, un sentiment négatif ferait en sorte que les liens inverseraient ou diminueraient le poids du PageRank attribué aux pages de destinations de sorte que seuls les liens positifs ajouteraient une valeur. Si de nombreux liens négatifs pointaient vers un document, cela nécessiterait de nombreux liens positifs de valeur équivalente pour compenser la perte du PageRank.

En 2010, Matt Cutts répondait aux questions de Danny Sullivan lors du SMX (source : Search Engine Land).

Google peut-il savoir si une page est positive, négative ou neutre ?

Matt Cutts a répondu qu’ils utilisaient l’analyse de sentiments mais ajoutait :

Je ne pense pas qu’on utilise ça comme un signal de classement.

Et vous, qu’en pensez-vous ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Up Next:

Le machine learning au service du SEO : comment prédire des positions avec le machine learning ?

Le machine learning au service du SEO : comment prédire des positions avec le machine learning ?