paint-brush
PrivateGPT para resumen de libros: variables de configuración de prueba y clasificaciónpor@cognitivetech
3,153 lecturas
3,153 lecturas

PrivateGPT para resumen de libros: variables de configuración de prueba y clasificación

por CognitiveTech15m2024/01/15
Read on Terminal Reader

Demasiado Largo; Para Leer

Hay muchas variables al implementar modelos de lenguaje grandes. Probemos y refinemos nuestros procesos para resumir libros fusionando PrivateGPT.
featured image - PrivateGPT para resumen de libros: variables de configuración de prueba y clasificación
CognitiveTech HackerNoon profile picture
0-item
1-item

Comencé a resumir una docena de libros a mano y descubrí que me llevaría semanas realizar cada resumen. Entonces recordé que estaba ocurriendo esta revolución de la IA y decidí que hacía mucho que debía saltar a estas aguas.


Cuando comencé a explorar el uso de modelos de lenguaje grandes (LLM) para resumir textos extensos, no encontré una dirección clara sobre cómo hacerlo .

  • Algunas páginas ofrecen ejemplos de indicaciones para darle a GPT4 la idea de que mágicamente conocerá el contenido de cualquier libro que desee resumir. (NO)
  • Algunas personas sugirieron que necesito encontrar un modelo con un contexto amplio que pueda procesar todo mi texto de una sola vez. (Aún no)
  • Hay disponibles algunas herramientas de código abierto que le permiten cargar documentos a una base de datos y responder preguntas basadas en el contenido de esa base de datos. (Acercarse)
  • Otros han sugerido que primero se debe dividir el libro en secciones e introducirlas en el LLM para resumirlas una a la vez. (Ahora estamos hablando)
  • Más allá de tomar esa determinación, existen numerosas variables que deben tenerse en cuenta al implementar un LLM determinado.
  • Rápidamente me di cuenta de que, a pesar de las recomendaciones o clasificaciones de modelos disponibles, estaba obteniendo resultados diferentes a los de otros. ¿Ya sea mi caso de uso, el formato del modelo, la cuantización, la compresión, los estilos de aviso o qué? No sé. Todo lo que sé es que haga sus propias clasificaciones de modelos en sus propias condiciones de trabajo. No se limite a creer en algún gráfico que lea en línea.


Esta guía proporciona algunos detalles sobre mi proceso de determinación y prueba de los detalles de las variables mencionadas anteriormente.


Encuentre los datos completos de clasificación, el recorrido y los resúmenes resultantes en GitHub .

Fondo

Términos clave

Algunos de estos términos se utilizan de diferentes maneras, según el contexto (sin juego de palabras).

  • Modelo de lenguaje grande (LLM) : (también conocido como modelo) Un tipo de inteligencia artificial que ha sido entrenada con conjuntos de datos masivos para comprender y generar el lenguaje humano.

    Ejemplo : GPT3.5 y GPT4 de OpenAI que han conquistado el mundo. (En nuestro caso, elegimos entre modelos de código abierto o descargables gratuitamente que se encuentran en Hugging Face ).

  • Recuperación de generación aumentada (RAG) : una técnica, desarrollada por Meta AI , para almacenar documentos en una base de datos en la que el LLM busca una respuesta para una consulta de usuario determinada (Documento Q/A).

  • Instrucciones para el usuario: (también conocido como mensaje o contexto) es la consulta proporcionada por el usuario.

    Ejemplo: “Resuma el siguiente texto: { text }

  • Aviso del sistema: instrucciones especiales dadas antes del aviso del usuario, que ayudan a moldear la personalidad de su asistente.

    Ejemplo: "Eres un asistente de IA útil".

  • Contexto: instrucciones para el usuario, y posiblemente un mensaje del sistema, y posiblemente rondas anteriores de pares de preguntas/respuestas. (Los pares de preguntas y respuestas anteriores también se denominan simplemente contexto).

  • Estilo de mensaje : estas son combinaciones de caracteres especiales con las que un LLM está capacitado para reconocer la diferencia entre las instrucciones del usuario, el mensaje del sistema y el contexto de preguntas anteriores.

    Ejemplo: <s>[INST] {systemPrompt} [INST] [INST] {previousQuestion} [/INST] {answer} </s> [INST] {userInstructions} [/INST]

  • 7B: Indica el número de parámetros en un modelo determinado (cuanto más alto, generalmente, mejor). Los parámetros son las variables internas que el modelo aprende durante el entrenamiento y se utilizan para hacer predicciones. Para mis propósitos, es probable que los modelos 7B quepan en una GPU con 12 GB de VRAM.

  • GGUF: Este es un formato específico para LLM diseñado para hardware de consumo (CPU/GPU). Sea cual sea el modelo que te interese, para utilizarlo en PrivateGPT, deberás encontrar su versión GGUF (comúnmente fabricada por TheBloke ).

  • Q2-Q8 0, K_M o K_S: Al navegar por los archivos de un repositorio GGUF verás diferentes versiones de un mismo modelo. Un número mayor significa menos comprimido y mejor calidad. La M en K_M significa "Mediano" y la S en K_S significa "Pequeño".

  • VRAM: Esta es la capacidad de memoria de su GPU. Para cargarlo completamente en la GPU, necesitarás un modelo de menor tamaño que tu VRAM disponible.

  • Tokens: esta es la métrica con la que LLM pesa el lenguaje. Cada token consta de aproximadamente 4 caracteres.

¿Qué es PrivateGPT?

PrivateGPT (pgpt) es un proyecto de código abierto que proporciona una interfaz de usuario y una API programable que permite a los usuarios utilizar LLM con su propio hardware, en casa. Le permite cargar documentos a su propia base de datos local para preguntas y respuestas sobre documentos compatibles con RAG.


Documentación de PrivateGPT - Descripción general :

PrivateGPT proporciona una API que contiene todos los componentes básicos necesarios para crear aplicaciones de IA privadas y sensibles al contexto . La API sigue y amplía el estándar API de OpenAI y admite respuestas tanto normales como de transmisión. Eso significa que, si puedes usar la API OpenAI en una de tus herramientas, puedes usar tu propia API PrivateGPT, sin cambios de código y de forma gratuita si estás ejecutando privateGPT en modo local .


Para empezar, debería haber pedido LLM.

Descripción general

  1. Comencé simplemente haciendo preguntas a los capítulos de libros, usando PrivateGPT UI\RAG.

    Luego intenté preseleccionar texto para resumir. Esta fue la inspiración para las clasificaciones de la Ronda 1, para ver qué tan grande sería la diferencia que mostrarían mis resultados. (Resumiendo secciones preseleccionadas).

  2. A continuación, quise encontrar qué modelos funcionarían mejor con esta tarea, lo que me llevó a la clasificación de la Ronda 2, donde Mistral-7B-Instruct-v0.2 fue el claro ganador.

  3. Luego quise obtener los mejores resultados de este modelo clasificando los estilos de solicitud y escribiendo código para obtener el estilo de solicitud exacto esperado.

  4. Después de eso, por supuesto, tuve que probar varias indicaciones del sistema para ver cuál funcionaba mejor.

  5. A continuación, probé algunas indicaciones del usuario para determinar cuál es exactamente la mejor indicación para generar resúmenes que requieran el menor procesamiento posterior por mi parte.

  6. En última instancia, este tipo de pruebas deben realizarse para cada LLM y para determinar la efectividad de cualquier mejora en nuestros procesos. En mi opinión, sólo una vez que cada modelo haya sido enfocado a sus condiciones más ideales podrán clasificarse adecuadamente entre sí.

Clasificaciones

Cuando comencé a probar varias variantes de LLM, mistral-7b-instruct-v0.1.Q4_K_M.gguf venía como parte de la configuración predeterminada de PrivateGPT (creada para ejecutarse en su CPU). Aquí he preferido las variantes Q8_0.


Si bien he probado más de 50 LLM diferentes para esta misma tarea, Mistral-7B-Instruct sigue estando entre los mejores, especialmente desde que se lanzó la versión 0.2, no he encontrado nada mejor.


TLDR: Mistral-7B-Instruct-v0.2 : es mi líder actual en tareas de resumen.

Ronda 1: Preguntas y respuestas frente a resumen

Al hacer preguntas y respuestas, descubrí rápidamente que obtengo resultados mucho mejores cuando cargo fragmentos más pequeños de datos en la base de datos y empiezo desde cero cada vez. Entonces comencé a dividir el PDF en capítulos para fines de preguntas y respuestas.


Para mi primer análisis probé 5 LLM diferentes para las siguientes tareas:

  1. Hacer las mismas 30 preguntas en un capítulo de libro de 70 páginas.
  2. Resumiendo ese mismo capítulo de libro de 70 páginas, dividido en 30 partes.

Clasificación de preguntas/respuestas

  1. Hermes Trismegistus Mistral 7b : Mi favorito durante estas pruebas, pero cuando edité los resúmenes decidí que era demasiado detallado.
  2. SynthIA 7B V2 : se convirtió en mi favorito de los modelos probados en esta ronda.
  3. Mistral 7b Instruct v0.1 : no es tan bueno como me gustaría.
  4. CollectiveCognition v1.1 Mistral 7b Mucho relleno y tomó la mayor cantidad de tiempo de todos. Obtuvo una puntuación un poco más alta que Mistral en calidad/utilidad, pero la cantidad de relleno hizo que fuera menos agradable de leer.
  5. KAI 7b Instruct las respuestas fueron demasiado cortas e hicieron que su BS se destacara un poco más. Un buen modelo, pero no para resúmenes detallados de libros.

Se muestra, para cada modelo.

  • Número de segundos necesarios para generar la respuesta
  • Suma de utilidad subjetiva/calificaciones de calidad
  • ¿Cuántos personajes se generaron?
  • Suma de fragmentos de contexto encontrados en el rango objetivo.
  • Número de cualidades enumeradas a continuación que se encuentran en el texto generado:
    • Relleno (palabras adicionales con menos valor)
    • Corto (demasiado corto, no lo suficiente para trabajar).
    • BS (No es de este libro y no es útil).
    • Buen BS (no de la sección específica, pero válido).

Modelo

Clasificación

Precisión de búsqueda

Caracteres

Segundos

Licenciatura

Relleno

Corto

Buena tontería

hermes-trismegisto-mistral-7b

68

56

62141

298

3

4

0

6

synthia-7b-v2.0

63

59

28087

188

1

7

7

0

mistral-7b-instrucciones-v0.1

51

56

21131

144

3

0

17

1

cognición colectiva-v1.1-mistral-7b

56

57

59453

377

3

10

0

0

instrucción-kai-7b

44

56

21480

117

5

0

18

0

Clasificación resumida

Para esta primera ronda, dividí el contenido del capítulo en secciones con una variedad de

900-14000 caracteres cada uno (o 225-3500 tokens).


NOTA: A pesar de los numerosos modelos de contexto grandes que se están publicando, por ahora sigo creyendo que un contexto más pequeño da como resultado mejores resúmenes. No prefiero más de 2750 tokens (11000 caracteres) por tarea de resumen.


  1. Hermes Trismegistus Mistral 7b - Todavía a la cabeza. Es detallado, con algo de relleno. Puedo usar estos resultados.
  2. SynthIA 7B : bastante bueno, pero demasiado conciso. Muchas de las respuestas eran perfectas, pero 7 eran demasiado cortas o incompletas para usarlas.
  3. Mistral 7b Instruct v0.1 - Demasiado corto.
  4. Instrucción KAI 7b : Demasiado corta.
  5. CollectiveCognition v1.1 Mistral 7b - Mucha basura. Algunos de los resúmenes fueron súper detallados y perfectos, pero más de la mitad de las respuestas fueron un conjunto de preguntas basadas en el texto, no un resumen.


No es sorprendente que los resúmenes tuvieran un rendimiento mucho mejor que las preguntas y respuestas, pero también tenían un contexto más específico.

Nombre

Puntaje

Personajes generados

% de diferencia con respecto al original

Segundos para generar

Corto

Basura

Licenciatura

Llenar

Preguntas

Detallado

hermes-trismegisto-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-instrucciones-v0.1

58

25797

-78

174

7

2

0

0

0

0

instrucción-kai-7b

59

25057

-79

168

5

1

0

0

0

0

cognición colectiva-v1.1-mistral-7b

31

29509

-75

214

0

1

1

2

17

8

Encuentre los datos completos y las clasificaciones en Google Docs o en GitHub: puntuaciones de control de calidad , clasificaciones resumidas .

Ronda 2: Resumen - Clasificación de modelos

Nuevamente, prefiero las versiones Q8 de los modelos 7B.


Descubrir que se había lanzado Mistral 7b Instruct v0.2 valió la pena realizar una nueva ronda de pruebas.

También decidí probar el estilo rápido. PrivateGPT no vino incluido con el mensaje Mistral, y aunque el mensaje Mistral es similar al mensaje Llama2, parecía funcionar mejor con el mensaje predeterminado (llama-index).

  • SynthIA-7B-v2.0-GGUF : este modelo se había convertido en mi favorito, así que lo usé como punto de referencia.
  • Mistral-7B-Instruct-v0.2 (Llama-index Prompt) Estrella del espectáculo aquí, bastante impresionante.
  • Mistral-7B-Instruct-v0.2 (Solicitud de llama2) Sigue siendo bueno, pero no tan bueno como usar la solicitud de índice de llama
  • Tess-7B-v1.4 : otro del mismo creador que Synthia v2. Bueno, pero no tan bueno.
  • Llama-2-7B-32K-Instruct-GGUF : funcionó bien, pero lentamente, con el mensaje de índice de llama. Simplemente malo con el aviso de llama2. (Debería probar nuevamente con el estilo "Solo instrucciones" de Llama2)

Clasificación resumida

Solo resúmenes, Q/A es simplemente menos eficiente para resumir libros.

Modelo

% Diferencia

Puntaje

Comentario

Synthia 7b V2

-64.43790093

28

Bien

Mistral 7b Instruct v0.2 (mensaje predeterminado)

-60.81878508

33

Muy bien

Mistral 7b Instrucción v0.2 (Aviso Llama2)

-64.5871483

28

Bien

Tess 7b v1.4

-62.12938978

29

Menos estructurado

Llama 2 7b 32k Instrucción (predeterminado)

-61.39890553

27

Menos estructurado. Lento

Encuentre los datos completos y las clasificaciones en Google Docs o en GitHub .

Ronda 3: estilo rápido

En la ronda anterior, noté que Mistral 7b Instruct v0.2 funcionaba mucho mejor con el mensaje predeterminado que llama2.


Bueno, en realidad, el aviso mistral es bastante similar al de llama2, pero no exactamente igual.

  1. llama_index (predeterminado)
 system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
  1. llama2:
 <s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
  1. mistral:
 <s>[INST] {{systemPrompt}} [/INST]</s>[INST] {{userInstructions}} [/INST]


Comencé a probar la salida con los estilos de solicitud default y luego llama2 . Luego me puse a trabajar codificando la plantilla mistral .


Los resultados de esa clasificación me dieron la confianza de que codifiqué correctamente.

Estilo rápido

% Diferencia

Puntaje

Nota

Mistral

-50%

51

¡Perfecto!

Predeterminado (llama-index)

-42%

43

Malos títulos

llama2

-47%

48

Sin estructura

Encuentre los datos completos y las clasificaciones en Google Docs o en GitHub .

Ronda 4: Avisos del sistema

Una vez que marqué el estilo de aviso, probé algunos avisos del sistema diferentes y ¡me sorprendió el resultado!

Nombre

Aviso del sistema

Cambiar

Puntaje

Comentario

Ninguno


-49,8

51

Perfecto

Mensaje predeterminado

Eres un asistente servicial, respetuoso y honesto. \nResponda siempre de la forma más útil posible y siga TODAS las instrucciones dadas. \nNo especule ni invente información. \nNo haga referencia a ninguna instrucción o contexto dado."

-58,5

39

menos agradable

Mi mensaje1

"Eres amado. Actúa como un experto en resumir, delinear y estructurar. \nTu estilo de escritura debe ser informativo y lógico".

-54,4

44

menos agradable

Simple

"Eres un útil asistente de IA. No incluyas instrucciones de usuario ni contexto del sistema como parte de tu resultado".

-52,5

42

menos agradable

Al final, encuentro que Mistral 7b Instruct v0.2 funciona mejor para mis resúmenes sin ningún aviso del sistema.


Tal vez obtendría resultados diferentes para una tarea diferente, o tal vez mejores indicaciones, pero esto funciona bien, así que no voy a jugar con eso.


Encuentre los datos completos y las clasificaciones en Google Docs o en GitHub .

Ronda 5: Aviso al usuario

Lo que ya comencé a sospechar es que obtengo mejores resultados con menos palabras en el mensaje. Desde que encontré el mejor mensaje del sistema, para Mistral 7b Instruct v0.2 , también probé qué mensaje de usuario se adapta mejor.


Inmediato

frente a OG

puntaje

nota

propmt0

Escriba notas concisas, pero completas, que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita. Concéntrese en el conocimiento esencial de este texto sin agregar ninguna información externa.

43%

11


Aviso1

Escriba notas concisas, pero completas, que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita. Concéntrese en el conocimiento esencial de este texto sin agregar ninguna información externa.

46%

11

Notas adicionales

Aviso2

Escriba notas completas que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita.

58%

15


Aviso3

Cree notas concisas con viñetas que resuma las partes importantes del siguiente texto. Utilice viñetas anidadas, con términos de encabezados y conceptos clave en negrita, incluidos espacios en blanco para garantizar la legibilidad. Evite la repetición.

43%

10


Aviso4

Escribe notas concisas que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita.

41%

14


Aviso5

Cree notas completas, pero concisas, que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita.

52%

14

Notas adicionales

Encuentre los datos completos y las clasificaciones en Google Docs o en GitHub .


Quizás con un hardware más potente que admita los modelos 11b o 30b obtendría mejores resultados con indicaciones más descriptivas. Incluso con Mistral 7b Instruct v0.2, todavía estoy abierto a probar algunas instrucciones creativas, pero por ahora estoy feliz de perfeccionar mi proceso actual.

Mensaje 2: ¡Gana!

Escriba notas completas que resuma el siguiente texto. Utilice viñetas anidadas: con títulos, términos y conceptos clave en negrita.


En este caso, integral funciona mejor que "conciso", o incluso que "completo, pero conciso".


Sin embargo, advierto que esto dependerá de su caso de uso. Lo que estoy buscando son notas muy condensadas y legibles que cubran los conocimientos importantes.


Esencialmente, si no leí el original, aún debería saber qué información transmite, si no todos los detalles específicos. Incluso si leyera el original, no recordaré la mayoría más adelante. Estas notas son una referencia rápida a los temas principales.

Resultado

Utilizando los conocimientos adquiridos en estas pruebas, resumí mi primer libro completo, ¡¡¡539 páginas en 5-6 horas!!! ¡Increíble!

En lugar de dedicar semanas a cada resumen, completé mis primeros 9 resúmenes de libros en solo 10 días.

Plagio

Puedes ver los resultados de CopyLeaks a continuación para cada uno de los textos publicados, aquí.

Especialmente considerando que esto no es con fines de lucro, sino con fines educativos, creo que estos números son aceptables.

Libro

Modelos

Diferencia de personaje

Idéntico

Cambios menores

Parafraseado

Total igualado

Cuerpo Oriental Mente Occidental

Synthia 7Bv2

-75%

3,5%

1,1%

0,8%

5,4%

Poder curativo del nervio vago

Mistral-7B-Instrucción-v0.2; SynthIA-7B-v2.0

-81%

1,2%

0,8%

2,5%

4,5%

Ayurveda y la mente

Mistral-7B-Instrucción-v0.2; SynthIA-7B-v2.0

-77%

0,5%

0,3%

1,2%

2%

Sanando los yoes fragmentados de los sobrevivientes de traumas

Mistral-7B-Instrucción-v0.2

-75%




2%

Una base segura

Mistral-7B-Instrucción-v0.2

-84%

0,3%

0,1%

0,3%

0,7%

El cuerpo lleva la cuenta

Mistral-7B-Instrucción-v0.2

-74%

0,1%

0,2%

0,3%

0,5%

Libro completo de los chakras

Mistral-7B-Instrucción-v0.2

-70%

0,3%

0,3%

0,4%

1,1%

50 años de teoría del apego

Mistral-7B-Instrucción-v0.2

-70%

1,1%

0,4%

2,1%

3,7%

Trastornos del apego en adultos

Mistral-7B-Instrucción-v0.2

-62%

1,1%

1,2%

0,7%

3,1%

Compañero de la carrera de psicología

Mistral-7B-Instrucción-v0.2

-62%

1,3%

1,2%

0,4%

2,9%

Psicología en tu vida

Mistral-7B-Instrucción-v0.2

-74%

0,6%

0,4%

0,5%

1,6%

Resúmenes de libros completos

En lugar de dedicar semanas a cada resumen, completé mis primeros 9 resúmenes de libros en solo 10 días. Entre paréntesis está el recuento de páginas del original.

  1. Cuerpo Oriental Mente Occidental Anodea Judith (436 páginas)
  2. Poder curativo del nervio vago Stanley Rosenberg (335 páginas)
  3. Ayurveda y la mente Dr. David Frawley (181 páginas)
  4. Sanación de los seres fragmentados de los supervivientes de traumas Janina Fisher (367 páginas)
  5. Una base segura John Bowlby (133 páginas)
  6. El cuerpo lleva la cuenta Bessel van der Kolk (454 páginas)
  7. Yoga y teoría polivagal, de Polyvagal Safety Steven Porges (37 páginas)
  8. Libro completo de chakras de Llewellyn Cynthia Dale (999 páginas)
  9. Cincuenta años de teoría del apego: Conferencia en memoria de Donald Winnicott (54 páginas)
  10. Trastornos del apego en adultos (477 páginas)
  11. La compañera de la especialidad de psicología Dana S. Dunn, Jane S. Halonen (308 páginas)
  12. El mito de la violencia redentora Walter Wink (5 páginas)
  13. Psicología en tu vida Sarah Gison y Michael S. Gazzaniga (1072 páginas)

Tutorial

Si está interesado en seguir mis pasos más de cerca, consulte el tutorial en GitHub, que contiene scripts y ejemplos.

Conclusión

Ahora que tengo mis procesos refinados y me siento seguro trabajando con formatos rápidos, realizaré más pruebas. De hecho, ya he realizado más pruebas y clasificaciones (las publicaré a continuación), pero, por supuesto, volveré a hacer más pruebas y seguiré aprendiendo.


Sigo creyendo que si quieres obtener los mejores resultados para cualquier tarea que realices con IA, debes realizar tus propios experimentos y ver qué funciona mejor. No confíe únicamente en las clasificaciones de modelos populares, utilícelas para guiar su propia investigación.

Recursos adicionales


También aparece aquí .