paint-brush
PrivateGPT pour la synthèse de livres : variables de configuration de test et de classementpar@cognitivetech
3,153 lectures
3,153 lectures

PrivateGPT pour la synthèse de livres : variables de configuration de test et de classement

par CognitiveTech15m2024/01/15
Read on Terminal Reader

Trop long; Pour lire

Il existe de nombreuses variables lors de la mise en œuvre de grands modèles de langage. Testons et affinons nos processus de synthèse de livres fusionnant PrivateGPT.
featured image - PrivateGPT pour la synthèse de livres : variables de configuration de test et de classement
CognitiveTech HackerNoon profile picture
0-item
1-item

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 .

  • Certaines pages donnent des exemples d'invites à donner à GPT4 avec l'idée qu'il connaîtra comme par magie le contenu du livre que vous souhaitez résumer. (PAS)
  • Certaines personnes m'ont suggéré de trouver un modèle avec un contexte large, capable de traiter l'intégralité de mon texte en une seule fois. (Pas encore)
  • Certains outils open source sont disponibles et vous permettent de télécharger des documents dans une base de données et de répondre à des questions basées sur le contenu de cette base de données. (Se rapprocher)
  • D'autres ont suggéré que vous deviez d'abord diviser le livre en sections et les intégrer dans le LLM pour un résumé une par une. (Nous parlons maintenant)
  • Au-delà de cette détermination, de nombreuses variables doivent être prises en compte lors de la mise en œuvre d'un LLM donné.
  • J'ai rapidement réalisé que, malgré les recommandations ou les classements de modèles disponibles, j'obtenais des résultats différents de ceux des autres. Qu'il s'agisse de mon cas d'utilisation, du format du modèle, de la quantification, de la compression, des styles d'invite ou quoi ? Je ne sais pas. Tout ce que je sais, c'est faire votre propre classement de modèles dans vos propres conditions de travail. Ne vous contentez pas de croire certains graphiques que vous lisez en ligne.


Ce guide fournit quelques détails sur mon processus de détermination et de test des détails des variables mentionnées ci-dessus.


Retrouvez les données de classement complètes, la procédure pas à pas et les résumés résultants sur GitHub .

Arrière-plan

Mots clés

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.

Qu’est-ce que PrivateGPT ?

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'aurais dû demander à LLM, pour commencer.

Aperçu

  1. 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.)

  2. 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.

  3. 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.

  4. Après cela, bien sûr, j’ai dû tester différentes invites du système pour voir laquelle fonctionnerait le mieux.

  5. 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.

  6. 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.

Classements

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.

Tour 1 – Questions/réponses et résumé

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 :

  1. Poser les mêmes 30 questions à un chapitre de livre de 70 pages.
  2. Résumant ce même chapitre de livre de 70 pages, divisé en 30 morceaux.

Classement des questions/réponses

  1. Hermes Trismégistus Mistral 7b - Mon préféré, lors de ces tests, mais lors de l'édition des résumés, j'ai trouvé que c'était trop verbeux.
  2. SynthIA 7B V2 - Devenu mon préféré parmi les modèles testés lors de ce tour.
  3. Mistral 7b Instruct v0.1 - Pas aussi bon que je le souhaiterais.
  4. CollectiveCognition v1.1 Mistral 7b Beaucoup de remplissage et a pris le plus de temps de tous. Il a obtenu un score un peu plus élevé que le mistral en termes de qualité/utilité, mais la quantité de remplissage le rendait simplement moins agréable à lire.
  5. KAI 7b Instruire , les réponses étaient trop courtes et faisaient ressortir un peu plus ses BS. Un bon modèle, mais pas pour les résumés détaillés de livres.

Montré, pour chaque modèle

  • Nombre de secondes nécessaires pour générer la réponse
  • Somme des notes subjectives d'utilité et de qualité
  • Combien de personnages ont été générés ?
  • Somme des fragments de contexte trouvés dans la plage cible.
  • Nombre de qualités énumérées ci-dessous trouvées dans le texte généré :
    • Filler (mots supplémentaires avec moins de valeur)
    • Court (Trop court, pas assez pour travailler.)
    • BS (Pas de ce livre et pas utile.)
    • Bon BS (Pas de la section ciblée mais valide.)

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

Classement récapitulatif

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.


  1. Hermes Trismégistus Mistral 7b - Toujours en tête. C'est verbeux, avec un peu de remplissage. Je peux utiliser ces résultats.
  2. SynthIA 7B – Plutôt bien, mais trop concis. La plupart des réponses étaient parfaites, mais 7 étaient trop courtes ou incomplètes pour être utilisées.
  3. Mistral 7b Instruct v0.1 - Tout simplement trop court.
  4. Instruction KAI 7b – Tout simplement trop courte.
  5. CollectiveCognition v1.1 Mistral 7b - Beaucoup de déchets. Certains résumés étaient très détaillés et parfaits, mais plus de la moitié des réponses étaient un ensemble de questions basées sur le texte et non un résumé.


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 .

Round 2 : Résumé – Classement des modèles

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).

  • SynthIA-7B-v2.0-GGUF - Ce modèle était devenu mon préféré, je l'ai donc utilisé comme référence.
  • Mistral-7B-Instruct-v0.2 (invite Llama-index) Star du spectacle ici, assez impressionnante.
  • Mistral-7B-Instruct-v0.2 (invite Llama2) Toujours bon, mais pas aussi bon que l'utilisation de l'invite Llama-index
  • Tess-7B-v1.4 - Un autre du même créateur que Synthia v2. Bien, mais pas aussi bien.
  • Llama-2-7B-32K-Instruct-GGUF - a fonctionné correctement, mais lentement, avec l'invite Llama-index. Juste mauvais avec l'invite Llama2. (Je devrais tester à nouveau avec le style Llama2 "Instruct Only")

Classement récapitulatif

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 .

Round 3 : Style d'invite

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.

  1. lama_index (par défaut)
 system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
  1. lama2 :
 <s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
  1. mistral:
 <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 .

Round 4 : invites système

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 .

Round 5 : Invite utilisateur

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.

Invite 2 : Gagne !

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.

Résultat

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.

Plagiat

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%

Résumés de livres terminés

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.

  1. Corps oriental Esprit occidental Anodea Judith (436 pages)
  2. Pouvoir de guérison du nerf vague Stanley Rosenberg (335 pages)
  3. L'Ayurveda et l'esprit Dr David Frawley (181 pages)
  4. Guérir le moi fragmenté des survivants de traumatismes Janina Fisher (367 pages)
  5. Une base sécurisée John Bowlby (133 pages)
  6. Le corps garde le score Bessel van der Kolk (454 pages)
  7. Yoga et théorie polyvagale, de Polyvagal Safety Steven Porges (37 pages)
  8. Livre complet des chakras de Llewellyn Cynthia Dale (999 pages)
  9. Cinquante ans de théorie de l'attachement : la conférence commémorative Donald Winnicott (54 pages)
  10. Troubles de l'attachement chez les adultes (477 pages)
  11. La compagne de la majeure en psychologie Dana S. Dunn, Jane S. Halonen (308 pages)
  12. Le mythe de la violence rédemptrice Walter Wink (5 pages)
  13. La psychologie dans votre vie Sarah Gison et Michael S. Gazzaniga (1072 pages)

Procédure pas à pas

Si vous souhaitez suivre mes étapes de plus près, consultez la procédure pas à pas sur GitHub, contenant des scripts et des exemples.

Conclusion

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.

Ressources additionnelles


Apparaît également ici .