June 19, 2024 · 5 min read
By Alexis Perrier
TikTok a un impact important sur la société. Les politiciens et politiciennes y sont nombreux et influencent les élections, ... TikTok est donc une mine d'or d'information qu'il convient d'analyser.
Dans ce workshop, nous allons télécharger une série de vidéos d'un compte et analyser leur contenu grâce aux deep learning.
Le workshop a 4 parties:
Nous allons prendre des comptes TikTok francophones avec une diversité d'images et de contenu. Donc nous évitons des chaines de vidéos trop ressemblantes avec les mêmes backgrounds. Les chaines d'information sont intéressantes pour cela. Nous choisissons aussi des chaines assez polarisées dans le traitement de l'information pour obtenir des comparaisons intéressantes.
Voici une liste non exhaustive de chaines d'informations française et francophone que nous allons regarder: @cnews, @france24, @bfmtv, @euronewsfr, @lci_tv_officiel
Sur chaque chaine, nous téléchargerons les 50 dernières vidéos.
La constitution du dataset est la partie la plus difficile et instable du projet. Les réseaux sociaux ont tendance à rendre le scraping de leur contenu le plus difficile possible.
L'outil le plus efficace pour télécharger les vidéos de YouTube, TikTok et d'autres sites, reste yt-dlp.
Pour TikTok il existe des librairies python dédiées telles que TikTokApi ou TikTokDownloader, mais après quelques heures de travail, il me semble que yt-dlp est plus simple et surtout plus efficace.
Fréquemment mis à jour, compatible avec de nombreux sites, yt-dlp existe en version ligne de commande et librairie python.
Yt-dlp supporte plus de 1800 sites dont instagram, youtube, tiktok facebook, etc... ainsi que de nombreuses chaînes d'informations du monde entier.
Le concept de base est très simple, dans un terminal:
yt-dlp url_page_video
Mais les choses se compliquent très rapidement si l'on ne veut pas être détecté comme bot par la plateforme. Il faut:
A ce stade, le plus rapide pour obtenir un code qui tourne est de s'appuyer sur un LLM. J'utilise claude.ai d'Anthropic et le modèle Claude 3.5 Sonnet.
Obtenir les vidéos d'un compte TikTok est en 2 temps. D'abord les ID des vidéos et ensuite le téléchargement des vidéos elles-mêmes.
L'url d'une vidéo TikTok est par exemple:
https://www.tiktok.com/@france24/photo/7379243276517313824
Donc composée du nom de la chaine france24 et de l'id de la vidéo 7379243276517313824.
Le premier script permet d'obtenir les IDs des vidéos d'une page d'un compte TikTok: Gist: Get TikTok Video IDs
Le second script prend en entrée les urls des vidéos ainsi obtenues et les télécharge en parallèle en implémentant une limitation de débit pour éviter de surcharger le serveur: Gist: Download TikTok Videos
Même si les LLMs deviennent multimodaux, traiter une vidéo reste lourd en ressources. On va réduire le problème en passant pour chaque vidéo aux images les plus significatives. Il suffit d'utiliser pour cela scenedetect une librairie python de détection des changements de scènes qui permet de sauvegarder les images correspondantes.
pip install scenedetect
Vous allez aussi devoir installer ffmpeg. Avec la commande (sur un mac):
brew install ffmpeg
Le code complet d'extraction des images significatives des vidéos est disponible sur le gist: Gist: Scene Detection
Pour regrouper les images par similarité, nous devons d'abord les vectoriser en trouvant leur embedding. Le principe repose sur l'utilisation d'un modèle de deep learning adapté au traitement d'image et déjà entrainé.
On prend un modèle de type réseau neuronal convolutif (CNN) comme ResNet, VGG ou EfficientNet entraîné sur de la classification et par conséquent capable d'extraire les caractéristiques des images. L'embedding (vecteur) ainsi obtenu permettra de calculer une distance entre les images et donc de regrouper celles qui sont similaires entre elles (clustering).
Pour cela:
Le code avec Tensorflow et Keras est disponible sur ce gist: Gist: Image Vectorization
Le modèle EfficientNet-B0 allie rapidité et précision et permet de travailler sans GPU sans nécessiter beaucoup de mémoire.
On sauve les embeddings dans un fichier au format .h5
Nous avons maintenant les images résumant les vidéos et leur embeddings. Nous pouvons maintenant faire du clustering.
3 étapes:
Nous avons les images des vidéos. Nous pouvons en extraire le son.
Nous allons maintenant extraire les paroles de chaque bande audio. Il nous faut d'abord filtrer les bandes sons qui sont uniquement de la musique de celles qui sont des paroles. Puis nous ferons du speech-to-text pour extraire ce qui est dit sur la vidéo.
À partir d'un compte TikTok nous obtenons une grande quantité de données sur le contenu du compte. Les images utilisées, ce qui est dit et donc le message de la chaine.
Un processus qui pourrait par exemple sur un sujet d'actualité mettre en avant les différences de traitement du sujet par les différentes chaines ou comprendre rapidement de quoi parle une chaine ou ses followers.