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 .
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 .
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.
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
.
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).
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.
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.
Después de eso, por supuesto, tuve que probar varias indicaciones del sistema para ver cuál funcionaba mejor.
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.
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í.
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.
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:
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 |
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.
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 .
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).
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 .
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.
system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
<s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
<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 .
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 .
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.
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.
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.
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% |
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.
Si está interesado en seguir mis pasos más de cerca, consulte el tutorial en GitHub, que contiene scripts y ejemplos.
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.
También aparece aquí .