Exploration de la recherche sur l’égalité des sexes avec NLP et Elicit
Exploration de l'égalité des sexes avec NLP et Elicit.
Introduction
Le TALN (Traitement Automatique du Langage Naturel) peut nous aider à comprendre de grandes quantités de données textuelles. Au lieu de parcourir manuellement une énorme quantité de documents et de les lire un par un, nous pouvons utiliser ces techniques pour accélérer notre compréhension et accéder rapidement aux messages principaux. Dans cet article de blog, nous explorons la possibilité d’utiliser des data frames panda et des outils de TALN en Python pour avoir une idée de ce que les gens ont écrit lors de recherches sur l’égalité des sexes en Afghanistan en utilisant Elicit. Ces informations pourraient nous aider à comprendre ce qui a fonctionné et ce qui n’a pas fonctionné pour promouvoir l’égalité des sexes au cours des dernières décennies dans un pays considéré comme l’un des endroits les plus difficiles pour les femmes ou les filles (Forum économique mondial, 2023).
Objectif d’apprentissage
- Acquérir une compétence dans l’analyse de texte pour les fichiers CSV.
- Acquérir des connaissances sur le traitement automatique du langage naturel en Python.
- Développer des compétences en visualisation de données efficace pour la communication.
- Obtenir des informations sur l’évolution des recherches sur l’égalité des sexes en Afghanistan au fil du temps.
Cet article a été publié dans le cadre du Data Science Blogathon.
Utilisation d’Elicit pour les revues de littérature
Pour générer les données sous-jacentes, j’utilise Elicit, un outil alimenté par l’IA pour les revues de littérature (Elicit). J’ai demandé à l’outil de générer une liste d’articles liés à la question : Pourquoi l’égalité des sexes a-t-elle échoué en Afghanistan ? J’ai ensuite téléchargé une liste résultante d’articles (j’ai considéré un nombre aléatoire de plus de 150 articles) au format CSV. À quoi ressemblent ces données ? Jetons un coup d’œil !
Analyse des données CSV d’Elicit en Python
Nous commencerons par lire le fichier CSV en tant que data frame pandas :
- Cette recherche en intelligence artificielle confirme que les modèles de langage basés sur les transformateurs sont universellement computationnels lorsqu’ils sont augmentés avec une mémoire externe.
- Les chercheurs de Stanford présentent Parsel un cadre d’intelligence artificielle (IA) qui permet la mise en œuvre et la validation automatiques d’algorithmes complexes avec des modèles de langage de grande taille (LLMs).
- Une nouvelle approche de recherche en intelligence artificielle (IA) présente l’apprentissage basé sur les prompts dans le contexte comme un problème d’apprentissage algorithmique d’un point de vue statistique.
import pandas as pd
#Identifier le chemin et le fichier CSV
file_path = './elicit.csv'
#Lire le fichier CSV
df = pd.read_csv(file_path)
#Forme du CSV
df.shape
#Sortie : (168, 15)
#Afficher les premières lignes du data frame
df.head()
La commande df.head() nous montre les premières lignes du data frame pandas résultant. Le data frame se compose de 15 colonnes et 168 lignes. Nous générons ces informations avec la commande df.shape. Commençons par explorer l’année au cours de laquelle la plupart de ces études ont été publiées. Pour cela, nous pouvons utiliser la colonne qui indique l’année de publication de chaque article. Il existe plusieurs outils pour générer des figures en Python, mais nous allons nous appuyer ici sur les bibliothèques seaborn et matplotlib. Pour analyser l’année de publication des articles, nous pouvons utiliser un soi-disant countplot et personnaliser également les étiquettes des axes pour que cela ait l’air agréable :
Analyse de la distribution temporelle des articles publiés
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Définir la taille de la figure
plt.figure(figsize=(10,5))
#Produire un countplot
chart = sns.countplot(x=df["Year"], color='blue')
#Définir les étiquettes
chart.set_xlabel('Année')
chart.set_ylabel('Nombre d'articles publiés')
#Changer la taille des graduations de l'axe des x
#Obtenir le texte des étiquettes
_, xlabels = plt.xticks()
#Définir les étiquettes des x avec
chart.set_xticklabels(xlabels, size=5)
plt.show()
Les données montrent que le nombre d’articles a augmenté au fil du temps, probablement aussi en raison d’une plus grande disponibilité des données et de meilleures possibilités de faire des recherches en Afghanistan après la prise du pouvoir par les talibans en 2001.
Analyse du contenu des articles
Nombre de mots écrits
Alors que cela nous donne un premier aperçu des recherches menées sur l’égalité des sexes en Afghanistan, nous sommes surtout intéressés par ce que les chercheurs ont réellement écrit. Pour avoir une idée du contenu de ces articles, nous pouvons utiliser le résumé, que Elicit a gentiment inclus pour nous dans le fichier CSV généré par l’outil. Pour cela, nous pouvons suivre les procédures standard d’analyse de texte, telles que celle décrite par Jan Kirenz dans l’un de ses articles de blog. Nous commençons par simplement compter le nombre de mots dans chaque résumé en utilisant une méthode lambda :
#Diviser le texte des résumés en une liste de mots et calculer la longueur de la liste
df["Nombre de mots"] = df["Résumé"].apply(lambda n: len(n.split()))
#Afficher les premières lignes
print(df[["Résumé", "Nombre de mots"]].head())
#Sortie :
Résumé Nombre de mots
0 En tant que société traditionnelle, l'Afghanis... 122
1 L'indice d'inégalité entre les sexes en Afghan... 203
2 Les pratiques culturelles et religieuses sont ... 142
3 RÉSUMÉ L'équité entre les sexes peut être une ... 193
4 L'effondrement du régime des talibans à la fin... 357
#Décrire la colonne avec le nombre de mots
df["Nombre de mots"].describe()
count 168.000000
mean 213.654762
std 178.254746
min 15.000000
25% 126.000000
50% 168.000000
75% 230.000000
max 1541.000000
Génial. La plupart des résumés semblent être riches en mots. Ils ont en moyenne 213,7 mots. Le résumé le plus court ne contient que 15 mots, cependant, tandis que le résumé le plus long compte 1 541 mots.
De quoi écrivent les chercheurs ?
Maintenant que nous savons que la plupart des résumés sont riches en informations, demandons-nous de quoi ils parlent principalement. Nous pouvons le faire en créant une distribution de fréquence pour chaque mot écrit. Cependant, nous ne nous intéressons pas à certains mots, tels que les mots vides. Par conséquent, nous devons effectuer un certain traitement de texte :
# Tout d'abord, tout mettre en minuscules
df['Résumé_minuscules'] = df['Résumé'].astype(str).str.lower()
df.head(3)#import csv
# Découpons la colonne en jetons
from nltk.tokenize import RegexpTokenizer
regexp = RegexpTokenizer('\w+')
df['texte_jeton']=df['Résumé_minuscules'].apply(regexp.tokenize)
#Afficher les premières lignes du nouveau jeu de données
df.head(3)
# Supprimer les mots vides
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
# Créer une liste de mots vides en anglais
mots_vides = nltk.corpus.stopwords.words("english")
# Ajouter votre propre liste de mots vides personnalisée
mes_mots_vides = ['https']
mots_vides.extend(mes_mots_vides)
# Supprimer les mots vides avec une fonction lambda
df['texte_jeton'] = df['texte_jeton'].apply(lambda x: [item for item in x if item not in mots_vides])
#Afficher les premières lignes du jeu de données
df.head(3)
# Supprimer les mots peu fréquents (mots de moins ou égaux à deux lettres)
df['texte_chaine'] = df['texte_jeton'].apply(lambda x: ' '.join([item for item in x if len(item)>2]))
#Afficher les premières lignes du jeu de données
df[['Résumé_minuscules', 'texte_jeton', 'texte_chaine']].head()
Ce que nous faisons ici, c’est d’abord de transformer tous les mots en minuscules, puis de les découper en jetons à l’aide d’outils de traitement du langage naturel. La tokenisation des mots est une étape cruciale dans le traitement du langage naturel et consiste à diviser le texte en mots individuels (jetons). Nous utilisons le RegexpTokenizer et découpons le texte de nos résumés en fonction de leurs caractéristiques alphanumériques (indiquées par ‘\w+’ ). Nous stockons les jetons résultants dans la colonne texte_jeton. Nous supprimons ensuite les mots vides de cette liste de jetons en utilisant le dictionnaire de l’outil de traitement du langage naturel nltk, la bibliothèque Python NLTK (Natural Language Toolkit). Nous supprimons les mots qui font moins de deux lettres. Ce type de traitement de texte nous aide à concentrer notre analyse sur des termes plus significatifs.
Générer un nuage de mots
Pour analyser visuellement la liste de mots résultante, nous générons une liste de chaînes de caractères à partir du texte que nous avons traité et nous découpons ensuite cette liste et générons un nuage de mots :
from wordcloud import WordCloud
# Créer une liste de mots
tous_les_mots = ' '.join([mot for mot in df['texte_chaine']])
# Nuage de mots
nuage_de_mots = WordCloud(width=600,
height=400,
random_state=2,
max_font_size=100).generate(tous_les_mots)
plt.figure(figsize=(10, 7))
plt.imshow(nuage_de_mots, interpolation='bilinear')
plt.axis('off');
Le nuage de mots montre que les mots les plus mentionnés sont ceux qui font également partie de notre requête de recherche : Afghanistan, genre, égalité des genres. Cependant, d’autres mots qui sont des synonymes font également partie de la liste des mots les plus mentionnés : femmes et hommes. Ces mots en eux-mêmes ne sont pas très informatifs, mais d’autres mots le sont : dans la recherche sur l’égalité des genres en Afghanistan, les chercheurs semblent être très préoccupés par l’éducation, les droits de l’homme, la société et l’État. Étonnamment, le Pakistan fait également partie de la liste. Cela pourrait signifier que les résultats générés pour la requête de recherche sont imprécis et incluent également des recherches sur l’égalité des genres au Pakistan, bien que nous ne l’ayons pas demandé. Ou bien cela pourrait signifier que l’égalité des genres des femmes afghanes est également un sujet de recherche important au Pakistan, peut-être en raison de nombreux Afghans s’installant au Pakistan en raison de la situation difficile dans leur pays d’origine.
Analyser le sentiment des auteurs
Idéalement, la recherche devrait être neutre et dépourvue d’émotions ou d’opinions. Cependant, il est dans notre nature humaine d’avoir des opinions et des sentiments. Pour enquêter dans quelle mesure les chercheurs reflètent leurs propres sentiments dans ce qu’ils écrivent, nous pouvons effectuer une analyse de sentiment. Les analyses de sentiment sont des méthodes permettant d’analyser si un ensemble de textes est positif, neutre ou négatif. Dans notre exemple, nous utiliserons l’outil d’analyse de sentiment VADER. VADER signifie Valence Aware Dictionary and Sentiment Reasoner, et c’est un outil d’analyse de sentiment basé sur des règles et un lexique.
Le fonctionnement de l’outil d’analyse de sentiment VADER est qu’il utilise un lexique de sentiment pré-construit qui se compose d’un grand nombre de mots associés à des sentiments. Il tient également compte des règles grammaticales pour détecter la polarité du sentiment (positif, neutre et négatif) des courts textes. L’outil donne un score de sentiment (également appelé score global) basé sur le sentiment de chaque mot et les règles grammaticales dans le texte. Ce score varie de -1 à 1. Les valeurs supérieures à zéro sont positives et les valeurs inférieures à zéro sont négatives. Étant donné que l’outil repose sur un lexique de sentiment pré-construit, il ne nécessite pas de modèles d’apprentissage automatique complexes ou de modèles étendus.
# Accès au lexique requis contenant les scores de sentiment pour les mots
nltk.download('vader_lexicon')
# Initialisation de l'objet analyseur de sentiment
from nltk.sentiment import SentimentIntensityAnalyzer
# Calcul des scores de polarité des sentiments avec l'analyseur
analyzer = SentimentIntensityAnalyzer()
# Méthode du score de polarité - Affectation des résultats à la colonne de polarité
df['polarity'] = df['text_string'].apply(lambda x: analyzer.polarity_scores(x))
df.tail(3)
# Modification de la structure des données - Concaténation de l'ensemble de données d'origine avec les nouvelles colonnes
df = pd.concat(
[df,
df['polarity'].apply(pd.Series)], axis=1)
# Affichage de la structure de la nouvelle colonne
df.head(3)
# Calcul de la valeur moyenne du score global
df.compound.mean()
# Résultat: 0.20964702380952382
Le code ci-dessus génère un score de polarité qui varie de -1 à 1 pour chaque résumé, ici désigné comme le score global. La valeur moyenne est supérieure à zéro, donc la plupart des recherches ont une connotation positive. Comment cela a-t-il évolué au fil du temps ? Nous pouvons simplement tracer les sentiments par année :
# Graphique en ligne
g = sns.lineplot(x='Année', y='compound', data=df)
# Ajuster les étiquettes et le titre
g.set(title='Sentiment du Résumé')
g.set(xlabel="Année")
g.set(ylabel="Sentiment")
# Ajouter une ligne grise pour indiquer zéro (le score neutre) pour diviser les scores positifs et négatifs
g.axhline(0, ls='--', c = 'grey')
Intéressant. La plupart des recherches étaient positives à partir de 2003. Avant cela, les sentiments fluctuaient plus significativement et étaient plus négatifs en moyenne, probablement en raison de la situation difficile des femmes en Afghanistan.
Conclusion
Le traitement du langage naturel peut nous aider à générer des informations précieuses à partir de grandes quantités de texte. Ce que nous avons appris ici à partir de près de 170 articles, c’est que l’éducation et les droits de l’homme étaient les sujets les plus importants dans les articles de recherche rassemblés par Elicit, et que les chercheurs ont commencé à écrire de manière plus positive sur l’égalité des sexes en Afghanistan à partir de 2003, peu de temps après que les talibans aient pris le pouvoir en 2001.
Points clés
- Nous pouvons utiliser des outils de traitement du langage naturel pour obtenir rapidement des informations sur les principaux sujets étudiés dans un domaine de recherche donné.
- Les nuages de mots sont d’excellents outils de visualisation pour comprendre les mots les plus couramment utilisés dans un texte.
- L’analyse de sentiment montre que la recherche peut ne pas être aussi neutre que prévu.
J’espère que vous avez trouvé cet article informatif. N’hésitez pas à me contacter sur LinkedIn. Connectons-nous et travaillons ensemble pour exploiter les données à bon escient !
Questions fréquemment posées
Références
- Forum économique mondial. Rapport mondial sur l’écart entre les sexes 2023.
- Elicit. Lien : Pourquoi l’égalité des sexes a-t-elle échoué en Afghanistan | Recherche | Elicit
- Jan Kirenz. Extraction de texte et analyse de sentiment avec NLTK et pandas en Python.
- Hutto, C.J. & Gilbert, E.E. (2014). VADER : un modèle basé sur des règles et parcimonieux pour l’analyse de sentiment des textes sur les médias sociaux. Huitième Conférence internationale sur les blogs et les médias sociaux (ICWSM-14). Ann Arbor, MI, juin 2014.
Les médias affichés dans cet article ne sont pas la propriété d’Analytics Vidhya et sont utilisés à la discrétion de l’auteur.
We will continue to update IPGirl; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Groupe de recherche Eleuther AI démontre comment le Guidage sans classificateur (CFG) peut être utilisé avec LLMs
- Des chercheurs de l’Université de Binghamton présentent un système d’anonymisation renforçant la confidentialité (My Face, My Choice) pour permettre à chacun de garder le contrôle sur son visage dans les réseaux sociaux de partage de photos.
- Les chercheurs de la CMU présentent FROMAGe un modèle d’IA qui permet de démarrer efficacement des modèles de langage figés (LLMs) pour générer du texte libre entrelacé avec des images.
- L’application ChatGPT d’OpenAI introduit une fonctionnalité de navigation avec l’intégration de Bing.
- Des chercheurs de l’ETH Zurich et de Max Planck proposent HOOD une nouvelle méthode qui exploite les réseaux neuronaux graphiques, le passage de messages multi-niveaux et l’apprentissage non supervisé pour permettre une prédiction efficace de la dynamique réaliste des vêtements.
- Les chercheurs réalisent un bond en avant dans l’informatique quantique avec une torsion magnétique.
- Des chercheurs du MIT introduisent l’échantillonnage de redémarrage pour améliorer les processus génératifs.