ModÚle de Masking sur les données Twitch FR
L'expĂ©rimentation menĂ©e au sein de Lincoln avait pour principal objectif de mettre en Ćuvre des techniques NLP from scratch sur un corpus de messages issus dâun chat Twitch. Ces derniers sont exprimĂ©s en français, mais sur une plateforme internet avec le vocabulaire internet que cela implique (fautes, vocabulaire communautaires, abrĂ©viations, anglicisme, emotes, ...).
Nos contraintes sont celles dâune entreprise nâayant pas une volumĂ©trie excessive de donnĂ©es et une puissance infinie de calcul. Il a Ă©tĂ© nĂ©cessaire de construire un nouveau tokenizer afin de mieux correspondre Ă notre corpus plutĂŽt quâun tokenizer français existant.
Note corpus Ă©tant faible en volumĂ©trie par rapport aux donnĂ©es habituelles pour entrainer un modĂšle BERT, nous avons optĂ© pour lâentrainement dâun modĂšle dit « small ». Et il a Ă©tĂ© montrĂ© dans la littĂ©rature quâun corpus de quelques giga octets peut donner de bons rĂ©sultats, câest pourquoi nous avons continuĂ© avec notre corpus.
La limite de la puissance de calcul a Ă©tĂ© contournĂ© Ă lâaide dâune nouvelle architecture dâapprentissage basĂ©e sur un double modĂšle gĂ©nĂ©rateur / discriminateur.
Ceci nous a permis dâentrainer un modĂšle de langue ConvBERT sur nos donnĂ©es, ainsi quâun modĂšle de masking en quelques heures sur une carte GPU V100.
Nous garantissons pas la stabilité du modÚle sur le long terme. ModÚle réalisé dans le cadre d'un POC.
Données
| Streamer | Nbr de messages | Categories notables en 2021 |
|---|---|---|
| Ponce | 2 604 935 | Chatting/Mario Kart/FIFA |
| Domingo | 1 209 703 | Chatting/talk-shows/FM2O21 |
| Mistermv | 1 205 882 | Isaac/Special events/TFT |
| Zerator | 900 894 | New World/WOW/Valorant |
| Blitzstream | 821 585 | Chess |
| Squeezie | 602 148 | Chatting / Minecraft |
| Antoinedaniellive | 548 497 | Geoguessr |
| Jeanmassietaccropolis/jeanmassiet | 301 387 | Talk-shows/chatting/special events |
| Samueletienne | 215 956 | chatting |
Sur la pĂ©riode du 12/03/2021 au 22/07/2021. La totalitĂ© des messages comptent 9 410 987 messages sur ces neufs streamers. Ces messages sont issus du canal IRC, donc nâont pas subi de modĂ©ration
Les donnĂ©es d'entrainement du modĂšle de masking contient 899 652 instances de train et 99 962 instances de test. Les donnĂ©es ont Ă©tĂ© formatĂ© en concatĂ©nant les messages sur une fenĂȘtre de 10s. Cette fenĂȘtre correspond Ă une fenĂȘtre courte qui regroupe des messages trĂšs « proches » temporellement.
- 512 tokens max
- Probabilité du « mask » : 15%
Application
Voir github public lincoln/twitchatds pour les détails d'implémentation et les résultats.
Remarques
- Expérimentation ponctuelle
- Les métriques d'entrainement sont disponibles dans l'onglet Training metrics
- Pour une meilleure stabilitĂ©, les donnĂ©es doivent ĂȘtre plus hĂ©tĂ©rogĂšnes et volumineuse. Le modĂšle doit ĂȘtre entrainĂ© + de 24h.
- Le token
<mask>fonctionne probablement mieux sans laisser d'espace à gauche. Cela est dû au fait quelstrip=Falsepour ce token spécial.
Usage
from transformers import AutoTokenizer, ConvBertForMaskedLM
from transformers import pipeline
model_name = 'lincoln/2021twitchfr-conv-bert-small-mlm'
tokenizer_name = 'lincoln/2021twitchfr-conv-bert-small'
loaded_tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
loaded_model = ConvBertForMaskedLM.from_pretrained(model_name)
nlp = pipeline('fill-mask', model=loaded_model, tokenizer=loaded_tokenizer)
nlp('<mask> les gens !')