AI Paris 2019 en une image
Posté le Mon 17 June 2019 dans Meeting • 3 min de lecture
La semaine dernière, j'étais à l'événement AI Paris 2019 pour représenter Kernix. Nous avons eu d’excellentes discussions avec beaucoup de personnes et j’ai à peine eu le temps de faire le tour pour voir les stands des autres entreprises. Voyons comment avoir un aperçu des thèmes principaux de cet événement.
Il se trouve que la liste des entreprises est disponible sur le site de AI Paris 2019. Avec un peu de code Python, nous pouvons le récupérer. Le code Python suivant récupère le contenu HTML de la page qui nous intéresse :
import urllib
url = "https://aiparis.fr/2019/sponsors-et-exposants/"
with urllib.request.urlopen(url) as response:
html = response.read().decode('utf-8')
Notons que response.read() renvoie des octets, nous devons donc le décoder pour obtenir une chaîne de caractères. Le codage utilisé est utf-8, ce qui peut être vu dans l'attribut charset de la balise meta (c'est dans ce cas le codage correct, ce qui n'est pas toujours le cas). En regardant le code HTML, nous pouvons remarquer que les données sont dans une variable javascript. Voyons la ligne où elle est définie :
import re
line = re.findall(".*Kernix.*", html)[0]
Par défaut, l'expression régulière ne s'étend pas sur plusieurs lignes. La variable line est presque un json. Nous pouvons obtenir les données sous forme de dictionnaire Python avec le code suivant :
import json
i = line.index('[')
d = '{"all":' + line[i:-1] + '}'
data = json.loads(d)
Voyons maintenant les descriptions des entreprises concaténées dans une seule chaîne de caractères :
import re
def clean_html(html):
regex = re.compile('<.*?>')
text = re.sub(regex, '', html)
return text
corpus = [clean_html(e['description']) for e in data['all']]
text = " ".join(corpus)
Nous définissons la fonction clean_html car les descriptions contiennent du code HTML et la suppression des balises les rendent plus lisibles. Une façon de traiter le texte consiste à supprimer les "mots vides", c’est-à-dire les mots qui ne contiennent pas d’information significative :
from nltk.corpus import stopwords
stop_words = (set(stopwords.words('french'))
| {'le', 'leur', 'afin', 'les', 'leurs'}
| set(stopwords.words('english')))
La bibliothèque NLTK fournit des listes de "mots vides". Nous utilisons les listes anglaise et française car le contenu est principalement rédigé en français, mais certaines descriptions sont en anglais. J'ai ajouté quelques mots français absents de la liste de NLTK.
Je n'aime pas particulièrement les nuages de mots car nous ne pouvons que repérer rapidement quelques mots, mais dans ce cas d'utilisation, nous pouvons obtenir une assez bonne image en quelques lignes :
Voici le code pour le générer :
import random
import matplotlib.pyplot as plt
from wordcloud import WordCloud
def grey_color_func(word, font_size,
position, orientation,
random_state=None,
**kwargs):
return "hsl(0, 0%%, %d%%)" % random.randint(60, 100)
wordcloud = WordCloud(width=1600, height=800,
background_color="black",
stopwords=stop_words,
random_state=1,
color_func=grey_color_func).generate(text)
fig = plt.figure(figsize=(20, 10))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.tight_layout(pad=0)
fig.savefig('wordcloud.png', dpi=fig.dpi)
plt.show()
La fonction grey_color_func permet d'avoir une image en niveaux de gris. Fixer le paramètre random_state permet la reproductibilité. Le réglage à la fois de la largeur (width), de la hauteur (height) et de la taille (figsize) permet une sortie de haute qualité. Les marges sont supprimées avec les deux lignes:
plt.axis("off")
plt.tight_layout(pad=0)
Revenons au nuage de mots. Nous pouvons repérer immédiatement les mots "solution", "data" et "entreprise". Les expressions "IA" et "intelligence artificielle" ne viennent que plus tard, ce qui est assez surprenant pour un événement centré sur l'intelligence artificielle. En fait, l'IA est souvent considérée comme une solution permettant d'utiliser les données de manière utile.
De nombreux acteurs travaillent sur la manière de stocker, gérer et traiter les données (ce qui est très important), mais seuls quelques-uns, d'après ce que j'ai vu et entendu, se concentrent sur la création de valeur pour les personnes. Je suis toujours ravi de créer quelque chose d'utile pour les gens dans leur vie quotidienne, qu'il s'agisse d'un système de recommandation pour découvrir des choses que nous n'aurions jamais imaginées, ou pour automatiser des tâches ennuyeuses, améliorer la recherche dans le secteur pharmaceutique, et bien d'autres. L'IA doit être au service des gens !