LLM-TRAIN-TASET-BUILDER
Rationalise la création de l'ensemble de données pour former un modèle grand langage avec des triplés: instruction-entrée-sortie. La configuration par défaut correspond aux exigences github.com/tloen/alpaca-lora.
Ce projet traite des exemples de commandes dans divers formats (base de données XML, JSON et PostgreSQL) et génère des paires de réponses aux questions en fonction des informations des commandes?
Le code est conçu pour être modulaire et facilement personnalisable , permettant diverses méthodes de prétraitement et génération d'instructions.
Caractéristiques
- Prend en charge le traitement des formats d'entrée de la base de données XML, JSON et PostgreSQL.
- Prétraitement de données personnalisable et génération d'instructions.
- Option pour fusionner les fichiers de sortie en un seul fichier.
- Paramètres configurables via des arguments
config.py ou de ligne de commande.
Fichiers et fonctions
main.py
Il s'agit du principal point d'entrée du programme. Il gère les arguments en ligne de commande, traite les fichiers d'entrée ou la base de données et génère les fichiers de sortie.
config.py
Ce fichier contient des paramètres de configuration utilisés tout au long du projet.
- Param_activate_config : que ce soit pour utiliser des paramètres config.py ou des arguments de ligne de commande (true / false).
- Param_output_dir : le répertoire où l'ensemble de formation est créé.
- Param_output_merge_file : s'il faut fusionner les fichiers de sortie (true / false).
- Param_output_merge_file_name : le nom du fichier de sortie fusionné.
- Param_method : la méthode de traitement (valeurs: xmls, xml, json, json, base de données).
- Param_xml_path, param_xmls_path, param_json_path, param_jsons_path : des chemins de fichier / répertoire d'entrée pour les fichiers xml et json.
- Param_database_host, param_database_user, param_database_dbname, param_database_dbpassword, param_database_port : paramètres de connexion de la base de données postgresql.
config_parser.py
Ce fichier contient des fonctions pour traiter les entrées de la base de données XML, JSON et PostgreSQL et générer des paires de réponses aux questions basées sur l'ensemble de données.
- DataSet_Pretatment (ensemble de données) : prétraitement l'ensemble de données. Peut être personnalisé.
- Generate_instructions (ensemble de données) : génère des paires de réponses aux questions basées sur l'ensemble de données. Peut être personnalisé.
- process_xml_file (nom de fichier) : traite un fichier XML et génère des paires de réponses aux questions.
- process_json_file (nom de fichier) : traite un fichier JSON et génère des paires de réponses aux questions.
- process_database (utilisateur, mot de passe, hôte, port, base de données) : récupére les données d'une base de données PostgreSQL, la traite et génère des paires de réponses à des questions.
sample_orders_parser.py
Ce fichier contient des fonctions personnalisées pour prétraiter les ensembles de données et générer des paires de réponses à des questions.
- retire_duplicate (items_node) : supprime les éléments en double des éléments_node en fonction de leur description.
- update_sku_price (item_node, sku_dict, prix_dict) : met à jour le sku et le prix de l'élément_node en fonction de la description.
- Application_inflation (Order_Date, Price, Quantité) : applique l'inflation basée sur l'Ordre_Date au prix et à la quantité.
- Calculate_total_price (items_node) : calcule le prix total de tous les éléments dans les éléments_node.
- update_items_with_inflation (items, ORDER_DATE) : met à jour les éléments avec des prix et des quantités gonflés en fonction de l'Ordre_Date.
- générer_general_instructions (ensemble de données) : génère des instructions générales basées sur l'ensemble de données.
- générer_item_instructions (item_node) : génère des instructions spécifiques à l'élément basées sur l'élément_node.
- DataSet_Pretatment_Custom (ensemble de données) : fonction personnalisée pour prétraiter l'ensemble de données.
- Generate_instructions_custom (ensemble de données) : fonction personnalisée pour générer des paires de réponses de questions basées sur l'ensemble de données.
Commencer
- Choisissez l'une des trois méthodes de traitement pour mettre en œuvre:
- process_xml_file (nom de fichier): traitement des fichiers XML (déjà implémenté dans l'exemple)
- process_json_file (nom de fichier): traitement des fichiers JSON (maintenant implémenté)
- process_database (utilisateur, mot de passe, IP, base de données, output_dir): traitement des enregistrements à partir d'une base de données (maintenant implémentée)
- Modifiez la fonction DataSet_Pretatment (ensemble de données) pour prétraiter les données avant de générer des instructions.
- Modifiez la fonction générée_instructions (traited_dataset) pour générer les instructions souhaitées.
- Pour tester l'exemple fourni, exécutez l'une des commandes suivantes:
python main.py --xmls=./input/sample-order-xml/
ou
python main.py --xml=./input/sample-order-xml/sample-file.xml
Pour les fichiers JSON:
python main.py --jsons=./input/sample-order-json/
ou
python main.py --json=./input/sample-order-json/sample-file.json
Pour la base de données PostgreSQL:
python main.py --user= < db_user > --password= < db_password > --ip= < db_host > --database= < db_name >
Exemple fourni
L'exemple présenté dans ce programme montre un cas d'utilisation sophistiqué, nécessitant un analyseur personnalisé adapté à un contexte commercial particulier. Le prétraitement des données se déroule dans la fonction DataSet_Pretatment_Custom, tandis que la série complexe d'instructions est générée par la fonction generate_instructions_custom. En adhérant à ces étapes et en utilisant les échantillons de code fournis comme référence, vous pouvez modifier ce programme pour répondre à divers formats d'entrée et produire des instructions personnalisées adaptées à vos besoins uniques.
Avertissement pour mon employeur
Cela a été développé sur un week-end sur mon temps personnel.
Auteur
Pierre-Henri Ausseil LinkedIn: LinkedIn.com/in/ausseil/ github: github.com/ph-ausseil/
À propos de l'auteur
Je travaille dans l'intégration des données (Middleware, Datahub, API ...) et la gestion des services. Je ne suis pas un développeur. Je voulais faire une preuve de concept sur les utilisations de LLM dans une pile d'entreprise afin que le LLM connaisse l'environnement commercial et améliore la prise de décision d'une entreprise.