Retour au portfolio

Word Embedding en C

Langage C Traitement du langage naturel Structures de données Projet scolaire - TPS

Implémentation bas niveau d'un modèle de représentation vectorielle de mots, entièrement en langage C.

Code source

Accédez au dépôt GitHub du projet.

Contexte du projet

Dans le cadre du premier semestre de ma première année à Télécom Physique Strasbourg, ce projet réalisé en binôme a consisté à implémenter un modèle de Word Embedding - technique fondamentale du traitement automatique du langage naturel (NLP) - en langage C.

L'objectif était de comprendre en profondeur les mécanismes sous-jacents à la représentation vectorielle de mots, en travaillant directement sur la gestion mémoire, les structures de données et les algorithmes bas niveau.

Réalisation technique

Le projet s'est articulé en deux parties distinctes mais complémentaires :

Partie 1 - Webscraping & Structuration HTML

Structure centrale - gestion de la pile de balises :

/* Pile pour gérer l'imbrication des balises HTML */
typedef struct Node {
    char *balise;
    struct Node *next;
} Node;

/* creer_pile() · enfile() · defile() · free_pile() */

Architecture - Partie 1 :

html-read.c

Point d'entrée, gestion des I/O et mode de sortie

fichier.c

Parsing HTML, pile de balises, extraction du contenu

mise_en_page.c

Normalisation, entités HTML, espaces → retours à la ligne

csv-to-html.c

Reconstruction HTML structuré depuis le CSV intermédiaire

Partie 2 - Word Embedding (One-Hot Encoding)

Structure centrale - vocabulaire :

/* Structure du vocabulaire pour le word embedding */
typedef struct {
    char mot[MAX_LONGUEUR_MOT];
    int id;
    int frequence;
} motVocab;

/* Tableau statique · recherche linéaire · export CSV */

Exemple de transformation :

/* Entrée */
<p>L'École Télécom Physique forme des ingénieurs.</p>

/* Après extraction + normalisation + filtrage */
ecole telecom physique forme ingenieurs

/* Vecteurs One-Hot générés */
ecole   → [1,0,0,0,0]
telecom → [0,1,0,0,0]
physique → [0,0,1,0,0]

Résultats & Apprentissages

85 Ko
Fichier HTML traité
304
Mots uniques extraits
3,2 ms
Temps d'exécution moyen
186 Ko
CSV de sortie généré

Ce projet m'a confronté à la réalité du développement bas niveau en C : gestion fine de la mémoire, débogage de segfaults, confusion slash/antislash ayant causé des bugs persistants sur plusieurs séances, ou encore un compteur Valgrind dépassant les 10 millions d'erreurs - autant de situations qui forcent à comprendre ce qui se passe vraiment dans le code, loin des frameworks de haut niveau.

La partie word embedding m'a permis d'appréhender les fondements du NLP : de la vectorisation One-Hot aux enjeux de normalisation multilingue (UTF-8, accentuation, filtrage linguistique), en passant par les compromis entre simplicité d'implémentation et performance.

Langage C Travail en binôme Gestion mémoire Parsing HTML Structures de données NLP - Word Embedding Encodage UTF-8 Algorithmique Débogage bas niveau Architecture modulaire Makefile / Valgrind