Le Blog Amazon Web Services

Analyser du contenu en utilisant Amazon Comprehend et Amazon SageMaker

Dans notre monde connecté, il est important pour les entreprises de surveiller de près les réseaux sociaux afin de développer leur marque et d’assurer leurs relations avec leurs clients. Les entreprises essaient de connaître leurs clients, leurs produits et leurs services par le biais des réseaux sociaux, de leurs courriels et d’autres moyens de communication. Les modèles d’apprentissage automatique ou Machine Learning (ML) peuvent aider à répondre à certains de ces besoins.

Toutefois, le processus de construction et de formation de votre propre modèle peut être compliqué et lent. La plateforme ML d’AWS fournit des modèles de référence qui peuvent être accessibles par Amazon SageMaker au travers d’un Notebook Jupyter. Amazon SageMaker est une plateforme ML opérée de bout en bout par AWS avec une conception modulaire, mais nous n’utiliserons que la fonctionnalité de Notebook hébergé pour l’exemple qui va suivre. Enfin, nous allons utiliser Amazon Comprehend qui est un service de traitement du langage naturel (NLP) qui utilise l’apprentissage automatique pour trouver des informations et des relations dans un texte.

Dans cet article, nous allons vous montrer comment utiliser Amazon Comprehend pour analyser les sentiments présents dans certains tweets en utilisant un Notebook Jupyter.

Comment fonctionne Amazon Comprehend ?

Amazon Comprehend prend en entrée vos données non-structurées telles que les messages issus des réseaux sociaux, les courriels, les pages web, les documents ainsi que les transcriptions. Il analyse ensuite ces données en utilisant la puissance des algorithmes de NLP pour extraire automatiquement les phrases clés, les entités et les sentiments. Il peut également détecter la langue des données d’entrée et trouver des groupes pertinents de données en utilisant des algorithmes de modélisation. Le diagramme suivant illustre le workflow d’Amazon Comprehend.

Grâce à Amazon Comprehend Custom Classification, vous pouvez identifier de nouveaux types d’entités qui ne sont pas pris en charge en tant que type d’entité générique prédéfini, ou vous pouvez analyser les commentaires des clients pour trouver des termes et des phrases propres à votre entreprise. Par exemple, vous pouvez savoir quand un client va changer de fournisseur ou quand il mentionne l’un de vos produits.

Étape 1 : Configurez votre Notebook/Bloc-note Amazon SageMaker

À partir de la console de gestion AWS, choisissez Services, puis Amazon SageMaker sous la section Machine Learning. Vous pouvez le faire depuis n’importe quelle région AWS, mais vous devez vous assurer que l’API d’Amazon Comprehend et Amazon SageMaker se trouvent dans la même région. Notez votre région AWS, vous aurez besoin de ces informations pour vous connecter à l’API d’Amazon Comprehend. Pour l’exemple de ce blog, j’ai défini la région sur eu-west-1 (Ireland).

Dans la console Amazon SageMaker, sous Bloc-notes, choisissez les instances de bloc-notes. Choisissez maintenant l’option Créer une instance de bloc-notes.

Vous devez d’abord définir un nom d’instance pour l’hébergement de votre bloc-notes. Pour cet exemple, nous utiliserons « comprehend-nb« . Notez qu’il existe certaines contraintes de dénomination pour le nom de votre instance de bloc-notes. Ces contraintes sont les suivantes : 63 caractères alphanumériques au maximum, les traits d’union peuvent être utilisés mais pas les espaces, et le nom de l’instance doit être unique au sein de votre compte au sein d’une région AWS. Vous pouvez donner au bloc-notes le nom que vous souhaitez.

La taille par défaut de l’instance est suffisante pour cet exercice, tout comme les autres paramètres par défaut. Cependant, vous devez créer un rôle IAM (Identity Access Management) avec AmazonSageMakerFullAccess, le rôle IAM doit avoir accès à tous les compartiments de stockage Amazon S3 (Simple Storage Service) nécessaires. Dans la console, sous le rôle IAM, choisissez Créer un nouveau rôle.

Lors de la création d’un nouveau rôle IAM, vous pouvez spécifier les compartiments Amazon S3 auxquels vous souhaitez que le rôle ait accès en sélectionnant Compartiments spécifiques.

Sélectionnez Créer un rôle.

Les paramètres de votre instance de bloc-notes devraient maintenant ressembler à ceci :

Choisissez Créer une instance de bloc-notes.

Après quelques minutes, votre instance de bloc-notes sera prête. Pour accéder à Amazon Comprehend à partir de l’instance, vous devez attacher la stratégie ComprehendFullAccess à votre rôle IAM. Pour ce faire, sélectionnez le nom de votre instance.

Les paramètres de votre instance de bloc-notes devraient maintenant ressembler à la capture d’écran suivante. Choisissez le rôle IAM ARN pour ouvrir le rôle IAM attaché à l’instance de bloc-notes.

Console-parametre- Sagemaker

Dans le tableau de bord de l’IAM, choisissez Attacher des stratégies.

Vous pouvez filtrer les permissions en tapant le nom directement. Tapez ComprehendFullAccess et vérifiez la permission telle qu’elle figure sur la page. Choisissez Attacher une stratégie au bas de la page.

Une fois que la stratégie est attachée avec succès, vous pouvez fermer la console IAM en toute sécurité et retourner à la console Amazon SageMaker. Une fois le statut de l’instance est InService, choisissez le premier lien Ouvrir Jupyter.

Étape 2 : Créer un block-note

Après avoir ouvert l’instance que vous avez approvisionné, depuis la console Jupyter, choisissez Nouveau et ensuite conda_python3.

Cela devrait ouvrir un nouveau bloc-notes Jupyter vierge, qui s’apparente à la capture d’écran suivante :

Donnez un nom à votre block-note Jupyter en choisissant Sans titre et en suivant les instructions pour construire et exécuter les blocs de code. Vous pouvez également accéder au fichier de code type ici. Vous pouvez télécharger le fichier sur l’instance de bloc-notes pour l’exécuter directement.

Étape 3 : Importer les paquets nécessaires

Vous pouvez importer les librairies suivantes qui sont nécessaires pour cet exemple.

import pandas as pd
from collections import OrderedDict
import requests

Étape 4 : Se connecter à Amazon Comprehend

Vous pouvez utiliser le SDK AWS pour Python SDK (Boto3) pour vous connecter à Amazon Comprehend à partir de votre base de code Python. En utilisant la commande suivante, vous pouvez importer boto3 et vous connecter à Amazon Comprehend dans une région AWS spécifique en utilisant le client boto3. La région AWS doit être la même que celle du bloc-notes. Pour cet exemple, j’ai utilisé la région us-east-1 car j’ai créé le bloc-notes dans cette région.

import boto3 
comprehend = boto3.client('comprehend', region_name='eu-west-1')

Étape 5 : Analyser un tweet à l’aide de l’API Amazon Comprehend

Grâce à l’API Amazon Comprehend, vous pouvez désormais analyser un seul tweet. Vous pourrez en extraire des phrases clés, des entités et des sentiments.

sample_tweet="C'est toujours un grand jour où je peux mettre mes connaissances équestres à profit dans mon travail ! #AWS #BePeculiar"   

# Key phrases
phrases = comprehend.detect_key_phrases(Text=sample_tweet, LanguageCode='fr')

# Entities
entities = comprehend.detect_entities(Text=sample_tweet, LanguageCode='fr')

# Sentiments
sentiments = comprehend.detect_sentiment(Text=sample_tweet, LanguageCode='fr')

# Afficher les phrases:
print('------- phrases ---------')
for i in range(0, len(phrases['KeyPhrases'])):
    print((phrases['KeyPhrases'][i]['Text']))
    
# Afficher les entitées:
print('------- entitées ---------')
for i in range(0, len(entities['Entities'])):
    print(entities['Entities'][i]['Text'] + ' : ' + entities['Entities'][i]['Type'] )
    
# Afficher les sentiments:
print('------- sentiments ---------')
print(sentiments['Sentiment'])

Étape 6 : Utilisez l’API Twitter pour rechercher les tweets contenant le hashtag #BePeculiar

“Être Particulier“ ou « Be Peculiar » en anglais est l’un des points clés de la culture chez Amazon. Extrayons les tweets qui contiennent le hashtag #BePeculiar.

Informations sur l’application Twitter

Pour extraire des données de Twitter, vous aurez besoin des informations de votre application Twitter. Vous trouverez ces informations sur le site apps.twitter.com.

Visitez apps.twitter.com, si vous avez déjà une application existante, vous pouvez cliquer dessus ou vous pouvez choisir le bouton « Créer une nouvelle application ».

Remplissez les informations requises sur le formulaire de création d’une application, acceptez les termes du contrat du développeur, puis sélectionnez Créer votre application Twitter.

Choisissez l’onglet Clés et jetons d’accès et enregistrez la clé du consommateur (clé API) ainsi que le secret code du consommateur (secret API).

Choisissez Créer mon jeton d’accès. Une fois qu’il a été créé, enregistrez le jeton d’accès et le secret code du jeton d’accès.

Vous pouvez maintenant revenir à votre bloc-notes Amazon SageMaker. Enregistrez la clé API de l’application Twitter et accédez aux informations de jeton dans votre code afin de pouvoir utiliser ces informations pour vous connecter à l’API Twitter.

api_key = '< API key >'
api_secret = '< API secret key >'
access_token = '< Access token >'
access_secret = '< Access secret token >'

Python wrapper pour consommer l’API Twitter

Tweepy est un wrapper Python pour l’API Twitter. Il peut être importé et utilisé pour se connecter à l’API Twitter en utilisant le code suivant. Vous devez installer tweepy avant de pouvoir l’utiliser dans le bloc-notes.

%%bash
pip install tweepy

Vous pouvez maintenant importer tweepy et créer un objet gérant les autorisations tweepy pour extraire les tweets.

import tweepy
auth = tweepy.OAuthHandler(api_key, api_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

Vous pouvez maintenant enregistrer le hashtag de votre choix dans une variable et utiliser l’objet gestionnaire d’autorisation tweepy pour rechercher des tweets contenant le hashtag. Dans cet exemple, j’utilise le hashtag « #BePeculiar » et j’enregistre les tweets extraits dans une variable appelée « tweets » en utilisant la commande suivante :

tag = '#BePeculiar'
tweets = api.search(q=tag, count = 50)

Remarque: J’ai ajouté count = 50 à ce code pour limiter la collecte de données.

Avertissement: l’accès aux données de Twitter peut coûter cher. Reportez-vous aux politiques de tarification avant d’accéder à son API.

Étape 7: analyser les données de tweet extraites à l’aide de l’API Comprehend

Le tweet en lui même est un objet JSON avec de nombreuses métadonnées sur l’utilisateur, son profil et des attributs de publication tels que l’horodatage, les mentions “J’aime”, les commentaires et le tweet d’origine.

Vous pouvez maintenant extraire certaines de ces métadonnées avec le contenu du tweet. Le contenu du tweet peut en outre être analysé à l’aide de l’API Amazon Comprehend pour comprendre le sentiment de la publication.

Dans mon exemple, j’ai extrait l’horodatage, l’emplacement et le tweet, et j’ai extrait le score de sentiment pour chacun des tweets.

posts = []
timestamp = []
locations = []
sentiments = []
positive = []
negative = []
neutral = []for i in range(len(tweets)):
    d = tweets[i].text
    ts = tweets[i].created_at
    l = tweets[i].user.location
    
    if d != '':
        res = comprehend.detect_sentiment(Text=d, LanguageCode='fr')
        s = res.get('Sentiment')
        p = res.get('SentimentScore')['Positive']
        neg = res.get('SentimentScore')['Negative']
        neu = res.get('SentimentScore')['Neutral']
    
    timestamp.append(ts)
    posts.append(d)
    locations.append(l)
    sentiments.append(s)
    positive.append(p)
    negative.append(neg)
    neutral.append(neu)

Étape 8: Visualiser les données

Pour visualiser les données, il est important de les formater correctement. Combinez les informations extraites pour créer un DataFrame Panda afin de pouvoir organiser les données dans un format tabulaire.

Créer un DataFrame

À l’aide de la bibliothèque Python Pandas, vous pouvez créer un DataFrame pour organiser les informations extraites sous forme de tableau pour une lecture plus facile.

import pandas as pdfrom collections import OrderedDict

result = pd.DataFrame(OrderedDict( {'tweets': posts
         , 'location': pd.Series(locations).str.wrap(15), 'timestamp': timestamp
         , 'sentiment': sentiments
         , 'positiveScore': positive
         , 'negativeScore': negative
         , 'neutralScore' : neutral
         }))

Effectuer une analyse exploratoire des données

Vous pouvez effectuer une analyse exploratoire des données sur l’ensemble des résultats pour répondre à des questions commerciales importantes.

Par exemple, pour trouver l’emplacement qui a généré des sentiments plus positifs, vous pouvez exécuter le bloc de code suivant :

print("Locations that generated positive sentiments in the descending order: ")
result.groupby(by='location')['positiveScore'].mean().sort_values(ascending=False)

Le bloc de code suivant peut nous aider à savoir quels emplacements ont le plus tweeté.

result.groupby(by='location', sort = True)['tweets'].count().sort_values(ascending=False)

Enregistrez les données sur Amazon S3

Enfin, vous pouvez enregistrer les résultats au format CSV ou au format compressé Parquet en utilisant Pandas DataFrame. Les résultats seront enregistrés directement sur Amazon S3. Cela vous permet de réutiliser les résultats de l’analyse des sentiments de l’API Amazon Comprehend pour créer un tableau de bord de Business Intelligence (BI) ou pour créer d’autres modèles d’apprentissage automatique pertinents à l’aide des algorithmes natifs proposés par Amazon SageMaker.

# Fonction pour charger les données dans s3 au format parquet
def write_pd_s3_parquet(df, bucket, filepath):
    csv_buffer = StringIO()
    data_parquet = df.to_parquet(csv_buffer)
    s3_resource = boto3.resource('s3')
    s3_resource.Object(bucket, filepath).put(Body=data_parquet.getvalue())

print("Les données ont bien été exportées dans S3 au niveau du chemin suivant:", bucket+"/"+filepath)

# Charger dans S3
s3_bucket =  '<nom de votre bucket s3> '  
file_path = 'comprehend-blog-exemple/tweet_data.parquet'
write_pd_s3_parquet(result, s3_bucket, file_path)

Conclusion

Dans cet article, vous avez appris à extraire des tweets à l’aide de l’API Twitter pour obtenir des données pertinentes à partir des réseaux sociaux. Vous avez également appris à utiliser l’API Amazon Comprehend pour analyser le flux Twitter afin d’extraire des informations utiles. De plus, vous pouvez utiliser les résultats d’Amazon Comprehend comme entrée pour les algorithmes Amazon SageMaker et construire une inférence. Pour en savoir plus sur Amazon Comprehend, consultez la documentation AWS.

Vous pouvez également vous référer à Créer un tableau de bord de médias sociaux à l’aide des services d’apprentissage machine et de BI, l’article où Ben Snively et Viral Desai illustrent comment créer un tableau de bord de réseaux sociaux à l’aide de la technologie serverless. Le tableau de bord des réseaux sociaux lit les tweets avec un hashtag #AWS, utilise des services d’apprentissage automatique comme Amazon Translate et Amazon Comprehend pour effectuer la traduction et le traitement du langage naturel (NLP) pour extraire les sujets, les entités et les sentiments. À la fin, il agrège les informations à l’aide d’Amazon Athena et crée un tableau de bord Amazon QuickSight pour visualiser les informations capturées à partir des tweets.

Article traduit par Dorian RICHARD, Solutions Architect chez AWS France, LinkedIn sur un article original de Pranati Sahu, Data Scientist dans les équipes AWS Profesional Services.