paint-brush
Cómo ajustar y optimizar los asistentes de GPT con OpenAIpor@weblabtechnology
6,586 lecturas
6,586 lecturas

Cómo ajustar y optimizar los asistentes de GPT con OpenAI

por WebLab Technology23m2023/05/03
Read on Terminal Reader

Demasiado Largo; Para Leer

Weblab Technology comparte información sobre cómo ajustar los asistentes de GPT con OpenAI. Descubra cómo este proceso puede mejorar el procesamiento del lenguaje natural y mejorar el rendimiento de los modelos de IA.
featured image - Cómo ajustar y optimizar los asistentes de GPT con OpenAI
WebLab Technology HackerNoon profile picture
0-item
1-item
2-item


GPT ha estado recibiendo mucha publicidad recientemente. Las soluciones basadas en GPT pueden parecer fáciles de implementar; después de todo, es posible lograr resultados de alta calidad simplemente proporcionando instrucciones al modelo. Ciertamente es lo suficientemente bueno para impresionar a los tomadores de decisiones. Pero lo que realmente sucede es que estás presentando ejemplos atractivos pero cuidadosamente seleccionados. Y, además, el sistema puede requerir una mayor fiabilidad para pasar a producción.


Las empresas prevén varios casos de uso para GPT , algunos de los cuales se basan en una comunicación abierta entre GPT y el usuario.


Tome estas herramientas, por ejemplo:


  1. Punto de chat. La consulta de Natural Language va a la API de ChatSpot y se transforma en operaciones para la API de CRM de HubSpot, la API de Google Docs, etc., luego responde usando un modelo de texto generativo cuando la acción se ha realizado (o no). Basado en GPT-4 .


  2. Khanmigo. Guía impulsada por IA de Khan Academy. Las solicitudes de los usuarios se transforman en avisos con contexto inyectado. El sistema se basa en la capacidad de GPT para manejar hasta ocho veces más contexto inyectado. Basado en GPT-4.


Sabemos que las empresas y los usuarios están dispuestos a utilizar las consultas en lenguaje natural como alternativa a la interfaz de usuario. Sin embargo, para garantizar que las soluciones de IA sean confiables y efectivas cuando se implementan en aplicaciones del mundo real, los modelos basados en GPT deben someterse a ajustes para aplicarse realmente a casos de uso específicos y conocimiento del dominio.


Es importante destacar que GPT-4 brinda más oportunidades para proporcionar contexto para las indicaciones y tiene significativamente menos errores de alucinaciones.


Alucinaciones de IA

Las alucinaciones de IA constituyen un desafío crítico que los ingenieros deben abordar cuando trabajan con modelos de lenguaje grandes como GPT-4. Dado que las alucinaciones generan información falsa o engañosa, pueden tener consecuencias extremadamente graves en aplicaciones en las que la precisión de los hechos es primordial. En esta sección, exploraremos con más detalle los aspectos técnicos de las alucinaciones de IA y también discutiremos estrategias para mitigar su ocurrencia.


Para un ejemplo rápido, considere esta prueba egocéntrica para la precisión de los hechos proporcionada por Noble Ackerson.


Encontrarás mucha información falsa entre los hechos:



Las alucinaciones de IA surgen principalmente como resultado de las limitaciones inherentes a la arquitectura del transformador, así como a los datos de entrenamiento utilizados para modelos de lenguaje grandes. La ausencia de una arquitectura cognitiva que permita el razonamiento deductivo hace que estos modelos sean propensos a generar información que puede parecer plausible pero que, de hecho, es incorrecta.


La arquitectura transformadora de modelos de lenguajes grandes se basa en mecanismos de atención y autoatención para capturar dependencias de largo alcance en los datos de entrada. Si bien esto permite que el modelo genere un texto coherente y contextualmente relevante, no garantiza la precisión de los hechos . Además, los datos de entrenamiento pueden contener sesgos o información errónea que el modelo puede aprender sin darse cuenta y, por lo tanto, contribuir a las alucinaciones de IA.


Naturaleza probabilística


Una de las razones de esta falta de fiabilidad se puede encontrar en la naturaleza probabilística de GPT. Por contexto, examinemos las estructuras de datos probabilísticos, como los filtros Bloom, por un momento. Un filtro Bloom es una estructura de datos probabilísticos que se utiliza para probar si un elemento es miembro de un conjunto que consta de una matriz de bits y varias funciones hash, cada una de las cuales asigna un elemento a uno o más índices de matriz.


Para insertar un elemento en el filtro, el elemento se codifica utilizando las funciones hash y los bits de matriz correspondientes se establecen en 1.


Para consultar si un elemento está presente en el filtro, el elemento se codifica de manera similar utilizando las funciones hash, y si todos los bits correspondientes en la matriz se establecen en 1, es probable que el elemento esté en el filtro.


Sin embargo, si alguno de los bits no se establece en 1, el elemento definitivamente no está en el filtro. Los falsos positivos se incrustan en estructuras de datos probabilísticos por diseño.


Al igual que un filtro Bloom, GPT también es altamente probabilístico. Pero en lugar de probar la membresía del conjunto, genera texto basado en indicaciones de entrada. GPT consta de varias capas de transformadores que realizan cálculos complejos para generar una secuencia de salida de tokens en función de una solicitud de entrada.


La salida generada por GPT no es determinista y puede variar mucho según el método de muestreo empleado, así como los hiperparámetros adicionales seleccionados durante el entrenamiento. Al igual que los filtros Bloom, GPT también puede "alucinar" ya que, a cambio, los resultados parecen plausibles a nivel superficial pero son fácticamente incorrectos.


Sin embargo, esta probabilidad de generar resultados poco confiables se puede reducir ajustando el modelo y brindándole datos de entrenamiento de alta calidad.


GPT-4 y Riesgos

Las inexactitudes fácticas ocultas pueden ser muy dañinas para los usuarios. Por lo tanto, es clave que los desarrolladores implementen medidas para reducir la probabilidad de que ocurran imprecisiones.


GPT-4 es más lento y los usuarios no notarán una gran diferencia en casos casuales en comparación con las generaciones de modelos anteriores. Dicho esto, GPT-4 es mucho más seguro debido a las diversas medidas de seguridad implementadas durante la capacitación, incluida la participación de expertos, mejoras en la seguridad del modelo y monitoreo y aplicación adicionales.


Estas mitigaciones han mejorado significativamente las propiedades de seguridad de GPT-4 en comparación con GPT-3.5 , con la tendencia del modelo a responder a solicitudes de contenido no permitido disminuyendo en un 82 % y el modelo respondiendo a solicitudes confidenciales de acuerdo con políticas aumentando en un 29 %. [ referencia ]





Reducir las alucinaciones

Incluso si hay algún nivel de riesgo involucrado, será un desafío ignorar completamente GPT. GPT se ha convertido en una nueva interfaz de comunicación para humanos y API que está configurada para reducir la necesidad de una interfaz de usuario. Nuestro trabajo como ingenieros es encontrar formas de resolver los problemas que surgen de su uso a través de los recursos que tenemos a nuestra disposición. Y hay varias formas de hacerlo.


Ingeniería rápida

Mejorar las indicaciones puede mejorar el desempeño de la tarea, lo que resulta en resultados satisfactorios en aproximadamente el 50 % al 65 % del tiempo, pero el desempeño no puede exceder este rango con frecuencia.


De acuerdo con la investigación sobre cómo los modelos de lenguaje grande son razonadores de tiro cero (relacionados únicamente con las capacidades de finalización de texto, no con los modelos de chat o instrucción), mejorar las indicaciones mejora significativamente el rendimiento del GPT en las tareas de razonamiento.


El estudio demostró que agregar una frase simple como " Pensemos paso a paso " antes de cada respuesta puede transformar GPT en un razonador de tiro cero decente, superando el rendimiento de LLM de tiro cero en varias tareas de razonamiento de referencia sin la necesidad de mano- ejemplos hechos a mano de pocos disparos.


El aprendizaje de pocos disparos es otra técnica poderosa de ingeniería rápida que puede mejorar significativamente el rendimiento de los modelos de lenguaje como GPT-4 en tareas nuevas, incluso con solo datos de entrenamiento limitados para continuar. Podría ser, por tanto, una buena alternativa de puesta a punto para casos más sencillos. En el enfoque de pocas tomas, el usuario usa ejemplos estructurados para mostrar lo que espera y luego deja espacio libre para que el modelo lo complete.


Puede consultar un artículo sobre las cosas que ChatGPT aún no puede resolver .


Inyección de contexto

La inyección de contexto es una técnica que puede ayudar a reducir las alucinaciones de IA y mejorar la precisión del texto generado en dominios específicos. Al inyectar contexto relevante en el indicador de entrada, el modelo recibe información más precisa, lo que le permite generar respuestas más precisas y relevantes.


Si bien el método de ingestión de contexto es más rápido y económico, también requiere conocimientos y experiencia en el dominio para que sea efectivo. Dicho esto, este enfoque puede ser particularmente útil en dominios donde la precisión y la relevancia del texto generado son cruciales. Se espera que este enfoque se adopte en contextos empresariales como el servicio al cliente y los diagnósticos médicos.


Por ejemplo, en una aplicación de chatbot de servicio al cliente, la inyección de contexto podría implicar proporcionar al modelo detalles relevantes sobre la cuenta del cliente, interacciones anteriores y cualquier problema o inquietud conocida. El contexto agregado permite que el modelo genere respuestas más personalizadas y precisas, mejorando así la experiencia general del usuario.


Tanto GitHub Copilot como GitHub Copilot X dependen en gran medida de esto en sus implementaciones. Al ingerir el contexto del código que se está escribiendo, junto con cualquier comentario o documentación, estos asistentes de codificación pueden comprender la funcionalidad prevista y las limitaciones del código.


La inyección de contexto es la forma más confiable disponible hasta la fecha para reducir las alucinaciones; sin embargo, existe una limitación clave en relación con el tamaño de las indicaciones.


 # Define the context and question context = ''' Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. ''' question = "What is the reason for the failure of Silicon Valley Bank and when did it happen?" # Define prompts with and without context prompt_without_context = question prompt_with_context = f'''Context: """{context}""" Instructions: Using the provided context, write a comprehensive reply to the given query. Query: {question}''' # List of prompts to iterate over prompts = [ {"name": "Without context", "prompt": prompt_without_context}, {"name": "With context", "prompt": prompt_with_context}, ] for prompt_info in prompts: print(f"--- {prompt_info['name']} ---") print(f"Prompt: {prompt_info['prompt']}") response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt_info['prompt']}, ] ) # Extract the answer from the response answer = response.choices[0].message.content.strip() # Print the answer print(f"Answer: {answer}\n")



 --- Without context --- Prompt: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: As of now, Silicon Valley Bank has not experienced any significant failure. Silicon Valley Bank, founded in 1983, is a successful and high-performing financial institution that specializes in offering banking services to technology and life science companies and venture capital firms. The bank has grown consistently and continues to operate effectively, serving its clients and staying relevant in the industry.



 --- With context --- Prompt: Context: """ Last week we heard of the failure of the Silicon Valley Bank (SVB). And it is the 2nd largest bank to shut down in the US since 2000. While that is sad, miserable, and pathetic, I want to show you something under the hood — the real reason the bank failed. """ Instructions: Using the provided context, write a comprehensive reply to the given query. Query: What is the reason for the failure of Silicon Valley Bank and when did it happen? Answer: Silicon Valley Bank (SVB) failed last week, making it the 2nd largest bank to shut down in the US since 2000. The precise reasons behind the bank's failure have not been provided in the given context, but it is implied that there is a significant underlying cause for its collapse. To fully understand the situation, it would be helpful to obtain more information about the bank's performance, financial stability, and any recent events that may have contributed to the failure.


Sintonia FINA

El ajuste fino es otra técnica más que puede servir para mejorar significativamente la precisión y confiabilidad de GPT. El ajuste fino es el proceso de proporcionar datos de entrenamiento adicionales para que el modelo se adapte a la tarea o dominio específico y mejore la precisión y relevancia del texto generado. La motivación realmente no es tan diferente de cualquier otra red neuronal de aprendizaje profundo.


El proceso requiere que los datos específicos del dominio se alimenten continuamente en el modelo previamente entrenado hasta que aprenda a generar texto más relevante y preciso para la tarea de destino.


Aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF)

RLHF fue muy útil para hacer que ChatGPT fuera increíble. Vea a Leandro von Werra pidiéndole a ChatGPT que nos explique RLHF ; ¡realmente hizo un gran trabajo!





Como habrás notado anteriormente, un truco es agregar "como si tuviera cinco años", etc., es una excelente manera de simplificar una explicación.


RLHF es un enfoque poderoso que se puede emplear para mejorar el rendimiento y la seguridad de los modelos basados en GPT. El modelo se ajusta a través de comentarios generados por humanos, lo que lo ayuda a aprender de ejemplos del mundo real e interacciones de los usuarios. Este proceso implica recopilar un conjunto de datos de respuestas generadas por el modelo junto con puntajes de calidad clasificados por humanos o comparaciones, que se utilizan para optimizar los parámetros del modelo.


RLHF se ha empleado con éxito en una serie de aplicaciones del mundo real, incluidos chatbots y asistentes de IA, para mejorar la calidad de la respuesta y reducir la aparición de alucinaciones de IA. Al incorporar comentarios humanos en el proceso de capacitación, RLHF le enseña al modelo a generar respuestas más precisas, contextualmente relevantes y seguras, lo que en última instancia conduce a una experiencia de usuario mucho mejor y una mayor confiabilidad. Fundamentalmente, este enfoque permite a los desarrolladores aprovechar el poder de los modelos basados en GPT y al mismo tiempo abordar las preocupaciones relacionadas con la creación de información falsa o engañosa.


Siempre que conozcamos el dominio, podemos entrenar el modelo para que responda cómo lo necesitamos. Podemos entrenarlo para que responda “No sé” o para que ignore ciertos temas. OpenAI está utilizando RLGH en sus modelos sin procesar para que estén listos para la producción.


Aquí hay algunos resultados de muestra:




Diseñando el modelo

Profundicemos en un ejemplo práctico mediante la construcción de un proceso de ajuste fino para GPT. Entrenaremos el modelo utilizando un conjunto de datos definido, enseñándole así a responder consultas relacionadas con ese dominio específico.


Considere el siguiente diagrama:



El proceso abarca estos componentes:


  1. Conjunto de datos de origen : una colección de archivos de entrenamiento específicos para el dominio en cuestión.
  2. Generador de preguntas y respuestas : una solución basada en GPT-4 que emplea inyección de contexto para generar preguntas y respuestas a partir del conjunto de datos de origen.
  3. Ejemplos de preguntas y respuestas : los datos de entrenamiento se utilizan para ajustar el modelo.
  4. Ajuste fino : el modelo de finalización de texto GPT-3 se ajusta en función del conjunto de datos.
  5. Preguntas y respuestas comparativas : se utiliza un conjunto de preguntas y respuestas para evaluar el rendimiento del modelo.
  6. Benchmarking : afinar el proceso que ingresa preguntas de Benchmark Q&A y evalúa la validez de las respuestas generadas.


Continuamos usando el modelo de finalización de texto GPT-3 porque GPT-4 actualmente no admite el proceso de ajuste fino.


Conjunto de datos de origen

Para asegurarnos de que GPT no esté familiarizado con el conjunto de datos que queremos usar, idealmente deberíamos basarnos en datos relacionados con eventos posteriores a septiembre de 2021, la fecha límite de conocimiento de GPT.


Por ejemplo, a menudo uso Next.js para crear aplicaciones web, y Vercel lanzó la versión 13 de Next.js en 2022. Para verificar esto, preguntemos a ChatGPT sobre la fecha de lanzamiento de Next.js 13 y veamos qué información puede obtener en el sujeto:




¡Bien! Mi objetivo es que el modelo resultante sepa más sobre Next.js 13 y cómo trabajar con él que este modelo actual. Puede leer acerca de cómo preparé el conjunto de datos según las 13 publicaciones de blog de next.js aquí:





Generador de muestras

En sus respuestas, queremos que nuestro modelo responda a las preguntas (consultas) en un formato abierto. Actualmente, solo los modelos de finalización de texto admiten el ajuste fino. Entonces, tendremos que entrenar modelos de finalización de texto para responder a nuestras preguntas. Para garantizar resultados adecuados, primero debemos convertir el conjunto de datos en un conjunto de preguntas y respuestas. Podemos hacer esto usando el modelo ChatGPT.


Aquí hay una muestra de código:


 def generate_qa(filepath): article = read_file(filepath)[:MAX_CONTENT_LENGTH] content = f'''Content for {filepath}: {article} Instructions: Generate question and answer based on Content for {filepath}. Structure it as: Q: <question> A: <answer> ''' questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": content}, ], n=TOTAL_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers


La solución completa se puede encontrar aquí .


Buscamos generar al menos 100 pares pregunta-respuesta por cada archivo de entrenamiento.

La salida debe guardarse en el documento JSONL . Es importante terminar cada aviso con el mismo patrón. Terminaremos con \n\n###\n\n como separador. Puede encontrar el conjunto de datos resultante en este archivo aquí: fine_tuning_dataset.jsonl .


Ingestión de preguntas falsas

Queremos que el modelo responda genuinamente "No sé" a cualquier pregunta no relacionada con el desarrollo de software y next.js. Podríamos lograr esto integrando un clasificador de preguntas next.js para probar si la pregunta está relacionada con next.js o no. Alternativamente, si quisiéramos tener una arquitectura simple, podríamos agregar datos de entrenamiento adicionales a nuestro proceso de ajuste.


Además, incluso si la pregunta estuviera relacionada con next.js, no queremos que nuestro sistema responda preguntas sin sentido como: "¿Cuándo llegará el marco next.js a 1000 millones de usuarios?" Nos gustaría que el modelo respondiera a esta pregunta con “No sé”.


Ejemplo de código:

 NON_NEXTJS_Q_A_PROMPT = """Create a series of random questions and answers that are not related to the Next.js framework. Each question should be followed by a clear answer stating that it is not relevant to Next.js. For example: <question>What is the capital of Ukraine?</question> <answer>This question is not related to Next.js.</answer> <question>What is Spring Framework?</question> <answer>It is not related to Next.js.</answer> Feel free to generate any type of questions you like, as long as the answer indicates that it is not related to the Next.js framework.""" def generate_random_qa(prompt): questions_answers = [] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful software developer who specialize in next.js and react."}, {"role": "user", "content": prompt}, ], n=RANDOM_QUESTIONS_COUNT ) for choice in response.choices: qa = extract_qa_from_content(choice.message.content.strip()) questions_answers.extend(qa) return questions_answers



Generé 100 preguntas y respuestas para mostrarle al modelo que queremos que solo responda cualquier pregunta relacionada con Next.js y que está completamente bien responder "No sé" para reducir las alucinaciones. El conjunto de datos de entrenamiento resultante se enumera aquí en ajuste fino dataset.jsonl .


Sintonia FINA

Finalmente, después de haber creado un conjunto de datos de entrenamiento (para obtener detalles adicionales sobre este proceso, consulte la guía oficial de OpenAI ), estamos listos para realizar ajustes.


Lamentablemente, no hay tantos modelos que podamos ajustar. Puede verlos todos abriendo una lista de todos los modelos openai api models.list' with '“allow_fine_tuning”: true, .


Dentro del proceso de ajuste, podríamos jugar con la tasa de aprendizaje, etc., pero según mi experiencia, en realidad no afecta la puntuación resultante. Y entrenar el conjunto de datos real ya puede ser costoso, por lo que jugar con parámetros adicionales podría simplemente no valer la pena.


La duración del proceso de ajuste fino depende del modelo (davinci, ada, etc.). En nuestro conjunto de datos de 1511 casos y 907 KB, tomó alrededor de una hora.


evaluación comparativa

Recuerda que estamos trabajando con el modelo de Terminación de Texto, no con el modelo de Chat o Instrucción. Y nuestro modelo de finalización de texto está ajustado para responder usando el formato de respuesta. Además, nuestro modelo espera que el indicador de entrada termine con ?\n\n###\n\n . De lo contrario, el resultado puede ser inesperado, pero lo más probable es que el modelo intente generar algún contenido para completar la solicitud con el terminador de solicitud.


Intentemos estimar cómo se comportará el modelo con los siguientes conjuntos de preguntas.


Conjunto 1. Preguntas correctas

Esperamos que el modelo dé respuestas adecuadas en función del contenido proporcionado:


 proper_questions = [ "When Next.js 13 was released?", "Is Next.js 14 already released?", "How Next.js 13 is different from Next.js 12?", "How routing is different in Next.js 13 compared to Next.js 12?", "How to prevent Next.js file component from using React Server Components?", "What is Turbopack?" ]


Realicé dos ejecuciones de modelo en estas preguntas con la temperatura = 0.3.


La lista de respuestas correctas:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released on October 2022. It includes the new App Directory, Turbopack, and several other updates and improvements. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has been rebuilt from the ground up to be faster and more reliable. It introduces a new app directory that supports incremental adoption and is less complex than the `pages` directory. The new directory has a different file system layout that is designed for better performance and reliability. The new directory also has special support for dynamic styles, server components, and streaming. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: In Next.js 13, the `app` directory replaces the `pages` directory. This means that routing is handled via the file path each `page.tsx` is located in. Each route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index that gets rendered at that route.


La lista de respuestas parcialmente correctas:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. It will be released in the coming months. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, we can add the following code at the top of the file:


// @admite reaccionar-servidor // importar ClientComponentHere


 This code tells Next.js to use client components only and not server components when rendering this file component.


Daré 1 por la respuesta correcta, 0 por la respuesta parcialmente correcta y -2 por la respuesta incorrecta.


Realicé dos ejecuciones de modelos en estas preguntas con la temperatura = 0.7.

La lista de respuestas correctas:

 #2 Q: Is Next.js 14 already released? A: No, Next.js 14 is not released yet. This blog post is about the new features coming to Next.js 13 with React 18. #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 has several new features, including the `app` directory, layouts, error components, loading components, and server components. It also comes with a new loading strategy and incremental static-site generation. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 no longer requires a `pages` directory. Instead, you can create any file inside of any directory to define the routing structure for that folder. Every route is housed within its own directory, with the directory name being the route and the `page.tsx` being its index render at that route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the top of the file:


"usar cliente";

 #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. It is intended as a Webpack replacement, and although it's released as alpha, you can use Turbopack now as the dev-mode bundler from Next.js 13 forward. Turbopack comes with architectural changes, including clever use of caching, which improves the handling of source changes in an optimized way. #1 Q: When Next.js 13 was released? A: Next.js 13 was released in October 2022. #2 Q: Is Next.js 14 already released? A: No. Next.js 14 is still in beta, but with the release of Next.js 13.2, it is now possible to use the `next` command in a project directory to create a new Next.js application using the latest version. #4 Q: How routing is different in Next.js 13 compared to Next.js 12? A: Routing in Next.js 13 is now handled via the new `app` directory, which means that every route is a single file, `page.js`. Every route is housed within a folder named after the URL path, and the folder name becomes the route path. For example, `app/profile/settings/page.js` is the file that controls the `/profile/settings` route. #5 Q: How to prevent Next.js file component from using React Server Components? A: To prevent Next.js file components from using React Server Components, you can add the following code at the bottom of the file:


// Este archivo se usa con la función predeterminada de exportación de representación del servidor ServerComponent { // ... }


 If you don't add this code, the file component will use the React Server Components by default. #6 Q: What is Turbopack? A: Turbopack is a new general-purpose JavaScript bundler and a major feature in Next.js 13. Using the Turbopack alpha with Next.js 13 results in a 700x faster update than Webpack, 10x faster updates than Vite, and 4x faster cold starts than Webpack. Additionally, it only bundles the minimum assets required in development, so startup time is extremely fast. Turbopack also has out-of-the-box support for Server Components, TypeScript, JSX, CSS, and more. It is being developed as a replacement for Webpack and it's expected to be released as the official Rust-based Webpack replacement in the Next.js 13 stable release.


La lista de respuestas parcialmente correctas:

 #3 Q: How Next.js 13 is different from Next.js 12? A: Next.js 13 is different from Next.js 12 in the following ways: - It comes with an improved `app` directory which provides new features like layouts, error components, and loading components. - It introduces the `loading.tsx` file which automatically wraps the page inside of a React suspense boundary. - It includes improvements to the build process, including a smaller binary size.


La lista de respuestas incorrectas:

 #1 Q: When Next.js 13 was released? A: Next.js 13 was released in November of 2020.


Es posible que haya notado que el modelo aún puede alucinar a altas temperaturas. Eche un vistazo a la respuesta "Next.js 13 se lanzó en noviembre de 2020".


Basándonos en dos corridas de temperatura diferentes, podemos ver que si queremos que nuestro asistente sea más preciso, necesitamos reducir la temperatura. Por lo tanto, utilizaremos la temperatura 0,3 para todas las siguientes pruebas y mantendremos la puntuación de seguimiento de 10/12. También se recomienda ajustar la temperatura a 0,3 para que las salidas sean más estables y las entradas puedan reproducirse.


Conjunto 2. Preguntas fuera del alcance

Entrenamos a nuestro modelo para responder solo a preguntas técnicas sobre JavaScript, Next.js y React.


 out_of_scope_questions = [ "What is the population of the United States?", "How to cook a steak?", "What is native vector database?", "Could you please generate a random number?", "What is a space-time continuum?", ]


La lista de respuestas correctas:

 #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: This question is not related to Next.js. #5 Q: What is a space-time continuum? A: This question is not related to Next.js. #1 Q: What is the population of the United States? A: This question is not related to Next.js. #2 Q: How to cook a steak? A: I do not know. #5 Q: What is a space-time continuum? A: This question is not related to Next.js.


La lista de respuestas parcialmente correctas:

 #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial images (such as SVG) in a database instead of rendered as images. This feature is available in Next.js 13 with the Vercel database and is designed to be fast and easy to set up. #4 Q: Could you please generate a random number? A: Yes, I can generate a random number. #3 Q: What is native vector database? A: Native vector database is a new feature in Next.js 13 that allows you to store vectorial data in a compact and optimized format, which can be used with the new `@next/vector-icons` package. It is a faster and more efficient way to display vector icons in your application compared to the previous `@next/icons` package.


Una respuesta incorrecta:

 #4 Q: Could you please generate a random number? A: Sure. Here you go:

npm ejecutar generar

 This will generate a random number in the range of 1 to 10.


En su mayoría, el modelo funciona bien, pero aún así, puede alucinar. La puntuación es 4/10. Lo estamos haciendo mucho peor aquí que en las preguntas adecuadas.


Conjunto 3. Consultas incorrectas

Entrenamos a nuestro modelo para completar respuestas con preguntas. Pero, ¿y si intentamos añadir algo al azar? Prepárate para algo extraño.


 not_questions = [ "Generate Next.js index page", "Suggest how no name next.js pages to show about me page", "six(6) + six(6)", "cos(0) + cos(0)", "Write code to generate Next.js index page", "Aaaaaughibbrgubugbugrguburgle!?", "Mmmm mrrrggk", ] process_questions(not_questions, is_accumulate = False)


La lista de respuestas correctas:

 #3 Q: six(6) + six(6) A: This is not a valid mathematical expression. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I do not understand. #7 Q: Mmmm mrrrggk A: I do not understand. #6 Q: Aaaaaughibbrgubugbugrguburgle!? A: I have no idea what that means. #3 Q: six(6) + six(6) A: This is not a valid mathematical expression.


La lista de respuestas parcialmente correctas:

 #1 Q: Generate Next.js index page A: Generate a Next.js `index.js` file with the given directory path.


La lista de respuestas incorrectas:

 #2 Q: Suggest how no name next.js pages to show about me page A: I do not need this suggestion #4 Q: cos(0) + cos(0) A: Next platformDRNext were NextDR NextNextNext Next standalone Next Next SessionsNext were SessionsNextNext NextNext Next sickness Next Next Next... #5 Q: Write code to generate Next.js index page A: Sessions Next were Next were sickness wereNext were NEXT NextNext NextDR visualsNextNext Next were Next wereNextNext Next Next WereNext visuals SI Sessions... #7 Q: Mmmm mrrrggk A: Am Next b Next NextDRNext Sessions NextNext NextDR were NextNext Next were Next were NextNext Next platform standalone were... #1 Q: Generate Next.js index page A: This command will generate an index.js file inside the `pages/` directory. You can then use this file to render the index page of your app. #2 Q: Suggest how no name next.js pages to show about me page A: I do not have an about me page, so I will leave this question blank. #4 Q: cos(0) + cos(0) A: This expression is not a constant expression. #5 Q: Write code to generate Next.js index page A: Next.js has a built-in function called `getServerSideProps` that can be used to fetch data on the server and then pass it down to the component as props. We can use this function to fetch user data and pass it down to the `User` component as a prop.


 export default function User({ user }) { return <h1>User: {user.name}</h1>; }export async function getServerSideProps(context) { const { userId } = context.params; const res = await fetch(https://api.example.com/users/${userId}); const user = await res.json();


La puntuación final es -11/14, básicamente 0/14. El modelo es absolutamente terrible cuando no formulamos las preguntas correctamente.


Evaluaciones OpenAI

OpenAI tiene código abierto Evaluaciones OpenAI , un marco de software que facilita la creación y ejecución de puntos de referencia para evaluar modelos y examinar su rendimiento muestra por muestra. Evals es empleado por OpenAI para dirigir el desarrollo de sus modelos a través de la detección de debilidades y la prevención de regresiones. A su vez, podemos utilizar Evals para monitorear el rendimiento en todas las versiones del modelo y evolucionar las integraciones de productos.


OpenAI Evals funciona con modelos de chat y sin chat, pero como OpenAI se enfoca en modelos de chat, deberá preparar un conjunto de datos para la evaluación en la entrada de formato basada en chat. Hoy, puede comenzar usando modelspec_extra_options en la CLI 'oaieval' para controlar los parámetros del modelo. Intente establecer la temperatura en 0 para obtener resultados predecibles.


Más rondas en el proceso de ajuste fino

Los datos están en el corazón del proceso de creación de un modelo confiable y que funcione bien. No hace falta decir que el modelo que tenemos actualmente para el bot de control de calidad del marco Next.js 13 aún no está listo para la producción. Necesitamos hacer crecer el conjunto de datos giratorios y enseñar mejor al modelo cómo responder a preguntas fuera del dominio, nuevamente, mediante el uso de más muestras. Deberíamos crear un registro Eval y monitorear qué tan bien funciona nuestro modelo actualmente.


Además, es posible que también queramos entrenar nuestro modelo para que maneje entradas en el formato sin preguntas y, si lo estuviéramos preparando para la producción, nuestro conjunto de datos idealmente debería haber tenido algunos repositorios de ejemplos de código también. Esta parte ocupa alrededor del 60% de todo el proceso de ajuste fino. Además, es posible que necesitemos más RLHF para preparar el modelo para responder ciertas preguntas de la manera que queremos.


Lo bueno de los modelos ajustados es que se pueden ajustar continuamente. Por lo tanto, uno puede ajustar varias veces, aunque debe tenerse en cuenta que el ajuste fino puede afectar los resultados ajustados previamente, por lo que siempre debe haber una buena razón para hacerlo, lo que también reduce el costo y la duración del entrenamiento.


Por último, debemos recordar que estamos construyendo sobre un modelo ya entrenado y que las capacidades de aprendizaje del modelo ajustado son relativamente limitadas. Si el alcance de nuestro dominio no es muy familiar para el modelo básico de GPT, es preferible usar la inyección de contexto de alguna forma, ya que el ajuste fino puede ser insuficiente o incluso innecesario.


Y algunos hechos simples finales que vale la pena mencionar:


  • El ajuste fino funciona muy bien para tareas de clasificación relativamente simples.
  • Intente usar modelos más pequeños, como Ada, primero. Ejecutan solicitudes más rápido y son más estables, más baratos, más rápidos de entrenar y más baratos de ejecutar.
  • No construya modelos enormes. Si su conjunto de datos es "enorme" y separable, cree varios y entrene cada uno de forma aislada.



También publicado aquí.



Referencias

  1. https://github.com/vercel/next.js/tree/canary/docs
  2. https://openai.com/research/gpt-4
  3. https://towardsdatascience.com/chatgpt-insists-i-am-dead-and-the-problem-with-language-models-db5a36c22f11
  4. https://mpost.io/gpt-4-inherits-hallucinating-facts-and-razoning-errors-from-earlier-gpt-models/
  5. https://arxiv.org/abs/2303.12712
  6. https://levelup.gitconnected.com/the-surprising-things-chatgpt-cant-do-yet-4362842da5b7
  7. https://digitalbunker.dev/comprender-el-funcionamiento-interno-de-bloom-filters/
  8. https://huggingface.co/blog/rlhf