Les grands modèles de langue peuvent être réglés par un ensemble de questions et réponses. Cependant, pour affiner davantage un modèle sur vos propres données , vous avez besoin d'un grand nombre de questions et de réponses sur vos données. La production de ces questions et réponses peut être beaucoup de travail manuel.
Ce référentiel vous permet d'utiliser un modèle de langage non réglé (ChatGPT) pour extraire automatiquement les paires de questions / réponses à partir des données textuelles existantes, éliminant tous les travaux manuels.
Pour exécuter ce code, vous devrez cloner ce référentiel, puis installer les packages Python suivants:
tiktoken , le tokeniser Openai,openai , le client officiel de l'API OpenAI,langchain , code de colle utilisé pour combiner des modèles et des services publics. Ce script est conçu pour transformer un dossier de documents Markdown ( .md ) en un fichier .json contenant une liste de questions, réponses et chemins vers les documents source qui ont été utilisés pour les produire.
Pour exécuter le code, définissez les chemins de fichier pertinents dans le fichier question_extractor.py (à la fois le dossier d'entrée et le chemin de sortie) et assurez-vous que votre touche API OpenAI est dans l'environnement. Ensuite, exécutez le script avec Python:
python3 question_extractor.py
Une fois cela fait, toutes les questions / réponses seront écrites en tant que fichier .json dans le chemin de sortie.
Le code boucle sur tous les fichiers, pour chaque fichier, il extrait une liste de questions à l'aide de l'invite suivante suivie d'un morceau de texte:
You are an expert user extracting information to quiz people on documentation. You will be passed a page extracted from the documentation, write a numbered list of questions that can be answered based *solely* on the given text.
Il boucle ensuite sur les questions, produisant une réponse en passant l'invite suivante suivie d'un morceau de texte et d'une question:
You are an expert user answering questions. You will be passed a page extracted from a documentation and a question. Generate a comprehensive and informative answer to the question based *solely* on the given text.
La majeure partie de la logique réelle du code est consacrée au traitement des fichiers simultanément (pour la vitesse) et à s'assurer que les morceaux de texte transmis au modèle sont suffisamment petits pour laisser suffisamment de jetons pour répondre.
Si un texte est trop long pour être envoyé au modèle, il est divisé le long de son niveau d'en-tête le plus élevé (le processus peut être répété récursivement si nécessaire jusqu'à ce que nous atteignions des paragraphes uniques).
En ce qui concerne les performances, ce script peut traiter la documentation NERSC complète en 6 minutes 1 . Transformer 318 fichiers Markdown en 8005 questions pour 29 $.
Fonctionnant à environ 93% de la limite de taux du modèle. ↩