Un jeu où vous devez deviner si un tweet provient d'un humain ou d'un modèle de langage de réseau neuronal formé sur une catégorie de tweets.
Ce projet utilise les projets open source suivants pour développer nos modèles:
Twint pour gratter les données Twitter à partir d'un ensemble de noms d'utilisateur. Pour certains ensembles de données plus grands, Scrapoxy est utilisé comme pool proxy pour éviter la liste noire IP de Twitter.
Étreindre les transformateurs de face pour affiner le modèle AI GPT-2 ouvert sur des données supplémentaires.
Les modèles sont déployés sur Model Zoo pour un point de terminaison HTTP en temps réel.
L'application Frontend React est un emballage autour d'un ensemble de données de tweets statiques et des points de terminaison Model Zoo HTTP. Voir la documentation Frontend pour plus de détails.
Le script download-tweets.sh contient notre méthodologie pour gratter un ensemble de données Twitter avec Twint. Le script accepte un seul argument $name et recherche des sources/$name.txt qui devraient spécifier une liste de poignées Twitter à prolonger. Le script de grattage applique une heuristique brute pour tenter de filtrer les tweets qui (1) sont des réponses à d'autres tweets et (2) qui ont des liens. Ces heuristiques ne sont pas parfaites, mais j'ai trouvé qu'elles fonctionnaient assez bien.
En préparant plusieurs ensembles de données avec Twint, j'ai constaté que Twitter était souvent en train de mettre en place notre IP quelques minutes dans le processus de grattage. Pour contourner cela, j'ai utilisé Scrapoxy sur EC2 pour se retirer de cinq instances de proxy EC2 différentes à la fois.
Plusieurs ensembles de données ont été préparés et publiés publiquement sur AWS que vous êtes libre à utiliser:
| Ensemble de données | Fichier de sources | URL AWS S3 |
|---|---|---|
| Capital-risque | https://github.com/model-zoo/twitter-turing-test/blob/master/sources/vc.txt | s3://modelzoo-datasets/text-generation/vc |
| Républicains | https://github.com/model-zoo/twitter-turing-test/blob/master/sources/republicans.txt | s3://modelzoo-datasets/text-generation/republicans |
| Démocrates | https://github.com/model-zoo/twitter-turing-test/blob/master/sources/democats.txt | s3://modelzoo-datasets/text-generation/democrats |
| COVID 19 | https://github.com/model-zoo/twitter-turing-test/blob/master/sources/covid19.txt | s3://modelzoo-datasets/text-generation/covid19 |
Merci à Minimaxir / Download-Tweets-Ai-Textgen pour avoir fourni une liste de poignées Twitter républicaines et démocrates.
Le script train.py comprend du code pour charger des poids pré-entraînés et affiner le modèle, largement adapté de l'exemple de modélisation du langage de visage étreint. Chaque modèle a été formé sur un seul GPU K80. Tous les modèles ont été formés pour une seule époque à l'exception de Covid-19, qui était un ensemble de données légèrement plus petit et formé pour deux époques. La formation du modèle a pris quelque part entre 6 et 16 heures pour chaque modèle.
Le processus de formation pourrait être amélioré davantage avec l'optimisation de l'hyperparamètre et l'expérimentation supplémentaire. Ceci est laissé comme un exercice au lecteur :)
Le modèle est automatiquement déployé après la formation à l'aide du support Model Zoo transformers et de quelques lignes de code:
textgen = pipeline("text-generation", model=model, tokenizer=tokenizer)
modelzoo.transformers.deploy(
textgen,
model_name="..."
resources_config=modelzoo.ResourcesConfig(memory_mb=2048, cpu_units=1024),
)
Veuillez vous assurer que vous exécutez $ modelzoo auth pour créer ou vous connecter à un compte Zoo Model dans votre environnement de formation. Alternativement, vous pouvez définir la variable d'environnement MODELZOO_API_KEY en conséquence.
Voir modelzoo.transformers.deploy pour plus de détails.