J'ai commencé à résumer une douzaine de livres à la main et j'ai découvert que cela allait me prendre des semaines pour chaque résumé. Ensuite, je me suis souvenu de cette révolution de l’IA et j’ai décidé que j’étais parti depuis longtemps pour me jeter dans ces eaux.
Lorsque j'ai commencé à explorer l'utilisation de grands modèles de langage (LLM) pour résumer des textes volumineux, je n'ai trouvé aucune indication claire sur la manière de procéder .
Ce guide fournit quelques détails sur mon processus de détermination et de test des détails des variables mentionnées ci-dessus.
Certains de ces termes sont utilisés de différentes manières, selon le contexte (sans jeu de mots).
Large Language Model (LLM) : (AKA Model) Un type d'intelligence artificielle qui a été formé sur des ensembles de données massifs pour comprendre et générer le langage humain.
Exemple : les GPT3.5 et GPT4 d'OpenAI qui ont pris d'assaut le monde. (Dans notre cas, nous choisissons parmi les modèles open source et/ou téléchargeables gratuitement trouvés sur Hugging Face .)
Retrieval Augmented Generation (RAG) : Une technique, développée par Meta AI , de stockage de documents dans une base de données dans laquelle le LLM recherche pour trouver une réponse à une requête utilisateur donnée (Document Q/A).
Instructions utilisateur : (AKA Prompt, ou Context) est la requête fournie par l'utilisateur.
Exemple : « Résumez le texte suivant : { text }
»
Invite système : instructions spéciales données avant l'invite utilisateur, qui aident à façonner la personnalité de votre assistant.
Exemple : « Vous êtes un assistant IA utile. »
Contexte : instructions utilisateur, et éventuellement une invite système, et éventuellement des séries précédentes de paires question/réponse. (Les paires Q/R précédentes sont également simplement appelées contexte).
Style d'invite : il s'agit de combinaisons de caractères spéciales avec lesquelles un LLM est formé pour reconnaître la différence entre les instructions utilisateur, l'invite système et le contexte des questions précédentes.
Exemple : <s>[INST] {systemPrompt} [INST] [INST] {previousQuestion} [/INST] {answer} </s> [INST] {userInstructions} [/INST]
7B : Indique le nombre de paramètres dans un modèle donné (plus le nombre est élevé, mieux c'est). Les paramètres sont les variables internes que le modèle apprend pendant la formation et sont utilisées pour faire des prédictions. Pour mes besoins, les modèles 7B sont susceptibles de s'adapter à mon GPU avec 12 Go de VRAM.
GGUF : Il s'agit d'un format spécifique pour LLM conçu pour le matériel grand public (CPU/GPU). Quel que soit le modèle qui vous intéresse, pour une utilisation dans PrivateGPT, vous devez trouver sa version GGUF (couramment réalisée par TheBloke ).
Q2-Q8 0, K_M ou K_S : En parcourant les fichiers d'un référentiel GGUF vous verrez différentes versions d'un même modèle. Un nombre plus élevé signifie moins de compression et une meilleure qualité. Le M dans K_M signifie « Moyen » et le S dans K_S signifie « Petit ».
VRAM : Il s'agit de la capacité mémoire de votre GPU. Pour le charger complètement sur le GPU, vous aurez besoin d'un modèle de taille inférieure à votre VRAM disponible.
Jetons : il s'agit de la métrique avec laquelle LLM évalue le langage. Chaque jeton se compose d'environ 4 caractères.
PrivateGPT (pgpt) est un projet open source qui fournit une interface utilisateur et une API programmable permettant aux utilisateurs d'utiliser LLM avec leur propre matériel, à la maison. Il vous permet de télécharger des documents sur votre propre base de données locale pour les questions/réponses sur les documents pris en charge par RAG.
Documentation PrivateGPT - Présentation :
PrivateGPT fournit une API contenant tous les éléments de base nécessaires pour créer des applications d'IA privées et contextuelles . L'API suit et étend la norme API OpenAI et prend en charge les réponses normales et en streaming. Cela signifie que si vous pouvez utiliser l'API OpenAI dans l'un de vos outils, vous pouvez utiliser votre propre API PrivateGPT à la place, sans modification de code, et gratuitement si vous exécutez privateGPT en mode
local
.
J'ai commencé par simplement poser des questions sur les chapitres du livre, en utilisant PrivateGPT UI\RAG.
J'ai ensuite essayé de présélectionner le texte pour le résumé. Cela a été l'inspiration pour le classement du premier tour, afin de voir l'ampleur de la différence que montreraient mes résultats. (Résumant les sections présélectionnées.)
Ensuite, j'ai voulu trouver quels modèles feraient le mieux avec cette tâche, ce qui a conduit au classement du deuxième tour, où Mistral-7B-Instruct-v0.2 était clairement le vainqueur.
Ensuite, j'ai voulu obtenir les meilleurs résultats de ce modèle en classant les styles d'invite et en écrivant du code pour obtenir le style d'invite exact attendu.
Après cela, bien sûr, j’ai dû tester différentes invites du système pour voir laquelle fonctionnerait le mieux.
Ensuite, j'ai essayé quelques invites utilisateur, pour déterminer quelle est la meilleure invite exacte pour générer des résumés qui nécessitent le moins de post-traitement, de ma part.
En fin de compte, ce type de tests devrait être effectué pour chaque LLM et pour déterminer l'efficacité de tout perfectionnement de nos processus. À mon avis, ce n’est qu’une fois que chaque modèle a été ciblé sur ses conditions les plus idéales qu’il peut être correctement classé les uns par rapport aux autres.
Lorsque j'ai commencé à tester diverses variantes de LLM, mistral-7b-instruct-v0.1.Q4_K_M.gguf
faisait partie de la configuration par défaut de PrivateGPT (conçue pour fonctionner sur votre processeur). Ici, j'ai préféré les variantes Q8_0.
Bien que j'aie essayé plus de 50 LLM différents pour cette même tâche, Mistral-7B-Instruct est toujours parmi les meilleurs, surtout depuis la sortie de la v0.2, je n'ai pas trouvé mieux.
TLDR : Mistral-7B-Instruct-v0.2 - est mon leader actuel pour les tâches de synthèse.
J'ai rapidement découvert en effectuant des questions/réponses que j'obtenais de bien meilleurs résultats en téléchargeant de plus petits morceaux de données dans la base de données et en commençant à chaque fois par une table rase. J'ai donc commencé à diviser le PDF en chapitres à des fins de questions/réponses.
Pour ma première analyse, j'ai testé 5 LLM différents pour les tâches suivantes :
Modèle | Notation | Précision de la recherche | Personnages | Secondes | BS | Remplisseur | Court | Bon conneries |
---|---|---|---|---|---|---|---|---|
hermès-trismégiste-mistral-7b | 68 | 56 | 62141 | 298 | 3 | 4 | 0 | 6 |
synthia-7b-v2.0 | 63 | 59 | 28087 | 188 | 1 | 7 | 7 | 0 |
mistral-7b-instruct-v0.1 | 51 | 56 | 21131 | 144 | 3 | 0 | 17 | 1 |
collectivecognition-v1.1-mistral-7b | 56 | 57 | 59453 | 377 | 3 | dix | 0 | 0 |
kai-7b-instruire | 44 | 56 | 21480 | 117 | 5 | 0 | 18 | 0 |
Pour ce premier tour, j'ai divisé le contenu du chapitre en sections avec une gamme de
900 à 14 000 caractères chacun (ou 225 à 3 500 jetons).
REMARQUE : malgré les nombreux modèles de contexte volumineux publiés, pour l'instant, je pense toujours qu'un contexte plus petit donne de meilleurs résumés. Je ne préfère pas plus de 2 750 jetons (11 000 caractères) par tâche de synthèse.
Sans surprise, les résumés ont obtenu de bien meilleurs résultats que les questions/réponses, mais ils avaient également un contexte plus finement ciblé.
Nom | Score | Caractères générés | % de différence par rapport à OG | Secondes pour générer | Court | Ordures | BS | Remplir | Des questions | Détaillé |
---|---|---|---|---|---|---|---|---|---|---|
hermès-trismégiste-mistral-7b | 74 | 45870 | -61 | 274 | 0 | 1 | 1 | 3 | 0 | 0 |
synthia-7b-v2.0 | 60 | 26849 | -77 | 171 | 7 | 1 | 0 | 0 | 0 | 1 |
mistral-7b-instruct-v0.1 | 58 | 25797 | -78 | 174 | 7 | 2 | 0 | 0 | 0 | 0 |
kai-7b-instruire | 59 | 25057 | -79 | 168 | 5 | 1 | 0 | 0 | 0 | 0 |
collectivecognition-v1.1-mistral-7b | 31 | 29509 | -75 | 214 | 0 | 1 | 1 | 2 | 17 | 8 |
Retrouvez les données complètes et les classements sur Google Docs ou sur GitHub : QA Scores , Summary Rankings .
Encore une fois, je préfère les versions Q8 des modèles 7B.
La sortie de Mistral 7b Instruct v0.2 valait bien une nouvelle série de tests.
J'ai également décidé de tester le style d'invite. PrivateGPT n'est pas fourni avec l'invite Mistral, et bien que l'invite Mistral soit similaire à l'invite Llama2, elle semble mieux fonctionner avec l'invite par défaut (llama-index).
Uniquement des résumés, les questions/réponses sont tout simplement moins efficaces pour le résumé de livres.
Modèle | % Différence | Score | Commentaire |
---|---|---|---|
Synthia 7b V2 | -64.43790093 | 28 | Bien |
Mistral 7b Instruct v0.2 (invite par défaut) | -60.81878508 | 33 | Très bien |
Mistral 7b Instruct v0.2 (invite Llama2) | -64.5871483 | 28 | Bien |
Tess 7b v1.4 | -62.12938978 | 29 | Moins structuré |
Lama 2 7b 32k Instruire (par défaut) | -61.39890553 | 27 | Moins structuré. Lent |
Retrouvez les données complètes et les classements sur Google Docs ou sur GitHub .
Lors du tour précédent, j'ai remarqué que Mistral 7b Instruct v0.2 fonctionnait bien mieux avec l'invite par défaut que lama2.
Eh bien, en fait, l'invite du mistral est assez similaire à celle de lama2, mais pas exactement la même.
system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
<s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
<s>[INST] {{systemPrompt}} [/INST]</s>[INST] {{userInstructions}} [/INST]
J'ai commencé à tester la sortie avec les styles d' default
, puis llama2
. Ensuite, je me suis mis au travail pour coder le modèle Mistral .
Les résultats de ce classement m'ont donné l'assurance que j'avais codé correctement.
Style d'invite | % Différence | Score | Note |
---|---|---|---|
Mistral | -50% | 51 | Parfait! |
Par défaut (llama-index) | -42% | 43 | Mauvais titres |
Lama2 | -47% | 48 | Aucune structure |
Retrouvez les données complètes et les classements sur Google Docs ou sur GitHub .
Une fois que j'ai choisi le style d'invite, j'ai essayé quelques invites système différentes et j'ai été surpris par le résultat !
Nom | Invite système | Changement | Score | Commentaire |
---|---|---|---|---|
Aucun | | -49,8 | 51 | Parfait |
Invite par défaut | Vous êtes un assistant serviable, respectueux et honnête. \nToujours répondre de la manière la plus utile possible et suivre TOUTES les instructions données. \nNe spéculez pas et n'inventez pas d'informations. \nNe faites référence à aucune instruction ou contexte donné." | -58,5 | 39 | Moins sympa |
MonInvite1 | "Vous êtes aimé. Agissez en tant qu'expert en matière de résumé, de présentation et de structuration. \nVotre style d'écriture doit être informatif et logique." | -54,4 | 44 | Moins sympa |
Simple | "Vous êtes un assistant IA utile. N'incluez aucune instruction utilisateur ni aucun contexte système dans votre sortie." | -52,5 | 42 | Moins sympa |
Au final, je trouve que Mistral 7b Instruct v0.2 fonctionne mieux pour mes résumés sans aucune invite système.
Cela aurait peut-être des résultats différents pour une tâche différente, ou peut-être de meilleures invites, mais cela fonctionne bien, donc je ne plaisante pas avec ça.
Retrouvez les données complètes et les classements sur Google Docs ou sur GitHub .
Ce que je commençais déjà à soupçonner, c'est que j'obtenais de meilleurs résultats avec moins de mots dans l'invite. Depuis que j'ai trouvé la meilleure invite système, pour Mistral 7b Instruct v0.2 , j'ai également testé quelle invite utilisateur lui convient le mieux.
| Rapide | contre OG | score | note |
---|---|---|---|---|
Propmt0 | Rédigez des notes concises mais complètes résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras. Concentrez-vous sur les connaissances essentielles de ce texte sans ajouter d’informations externes. | 43% | 11 | |
Invite1 | Rédigez des notes concises mais complètes résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras. Concentrez-vous sur les connaissances essentielles de ce texte sans ajouter d’informations externes. | 46% | 11 | Notes supplémentaires |
Invite2 | Rédigez des notes complètes résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras. | 58% | 15 | |
Invite3 | Créez des notes concises résumant les parties importantes du texte suivant. Utilisez des puces imbriquées, avec des titres, des termes et des concepts clés en gras, y compris des espaces pour garantir la lisibilité. Évite la répétition. | 43% | dix | |
Invite4 | Écrivez des notes concises résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras. | 41% | 14 | |
Invite5 | Créez des notes complètes mais concises résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras. | 52% | 14 | Notes supplémentaires |
Retrouvez les données complètes et les classements sur Google Docs ou sur GitHub .
Peut-être qu'avec un matériel plus puissant pouvant prendre en charge les modèles 11b ou 30b, j'obtiendrais de meilleurs résultats avec des invites plus descriptives. Même avec Mistral 7b Instruct v0.2, je suis toujours disposé à essayer quelques instructions créatives, mais pour l'instant, je me contente d'affiner mon processus existant.
Rédigez des notes complètes résumant le texte suivant. Utilisez des puces imbriquées : avec les titres, les termes et les concepts clés en gras.
Dans ce cas, le terme « complet » est plus performant que « concis », voire même que « complet, mais concis ».
Cependant, je préviens que cela dépendra de votre cas d'utilisation. Ce que je recherche, ce sont des notes très condensées et lisibles couvrant les connaissances importantes.
Essentiellement, si je n'avais pas lu l'original, je devrais quand même savoir quelles informations il véhicule, voire tous les détails spécifiques. Même si j'avais lu l'original, je ne me souviendrais pas de la majorité plus tard. Ces notes constituent une référence rapide aux principaux sujets.
Grâce aux connaissances acquises grâce à ces tests, j'ai résumé mon premier livre complet, 539 pages en 5-6 heures !!! Incroyable!
Au lieu de passer des semaines par résumé, j'ai terminé mes 9 premiers résumés de livres en seulement 10 jours.
Vous pouvez voir les résultats de CopyLeaks ci-dessous pour chacun des textes publiés, ici.
D’autant plus que ce n’est pas à but lucratif, mais à des fins éducatives, je pense que ces chiffres sont acceptables.
Livre | Des modèles | Différence de caractère | Identique | Des changements mineurs | Paraphrasé | Total correspondant |
---|---|---|---|---|---|---|
Corps oriental Esprit occidental | Synthie 7Bv2 | -75% | 3,5% | 1,1% | 0,8% | 5,4% |
Pouvoir de guérison du nerf vague | Mistral-7B-Instruct-v0.2 ; SynthIA-7B-v2.0 | -81% | 1,2% | 0,8% | 2,5% | 4,5% |
L'Ayurvéda et l'esprit | Mistral-7B-Instruct-v0.2 ; SynthIA-7B-v2.0 | -77% | 0,5% | 0,3% | 1,2% | 2% |
Guérir le moi fragmenté des survivants d’un traumatisme | Mistral-7B-Instruct-v0.2 | -75% | | | | 2% |
Une base sécurisée | Mistral-7B-Instruct-v0.2 | -84% | 0,3% | 0,1% | 0,3% | 0,7% |
Le corps garde le score | Mistral-7B-Instruct-v0.2 | -74% | 0,1% | 0,2% | 0,3% | 0,5% |
Livre complet des chakras | Mistral-7B-Instruct-v0.2 | -70% | 0,3% | 0,3% | 0,4% | 1,1% |
50 ans de théorie de l'attachement | Mistral-7B-Instruct-v0.2 | -70% | 1,1% | 0,4% | 2,1% | 3,7% |
Troubles de l'attachement chez les adultes | Mistral-7B-Instruct-v0.2 | -62% | 1,1% | 1,2% | 0,7% | 3,1% |
Compagnon de la majeure en psychologie | Mistral-7B-Instruct-v0.2 | -62% | 1,3% | 1,2% | 0,4% | 2,9% |
La psychologie dans votre vie | Mistral-7B-Instruct-v0.2 | -74% | 0,6% | 0,4% | 0,5% | 1,6% |
Au lieu de passer des semaines par résumé, j'ai terminé mes 9 premiers résumés de livres en seulement 10 jours. Entre parenthèses se trouve le nombre de pages de l’original.
Si vous souhaitez suivre mes étapes de plus près, consultez la procédure pas à pas sur GitHub, contenant des scripts et des exemples.
Maintenant que mes processus ont été affinés et que je me sens en confiance pour travailler avec des formats d'invite, je vais effectuer d'autres tests. En fait, j'ai déjà effectué d'autres tests et classements (je les publierai prochainement), mais bien sûr, je ferai encore d'autres tests et continuerai à apprendre !
Je continue de croire que si vous souhaitez obtenir les meilleurs résultats quelle que soit la tâche que vous effectuez avec l’IA, vous devez mener vos propres expériences et voir ce qui fonctionne le mieux. Ne vous fiez pas uniquement aux classements de modèles populaires, mais utilisez-les pour guider vos propres recherches.
Apparaît également ici .