Este es un proyecto en el que estoy trabajando ahora mismo, estoy tratando de compilar una lista de preguntas y respuestas para entrevistas de IA generativa.
Estoy usando esta referencia como base, les doy crédito por compilarla, sin embargo, me estoy tomando muchas libertades al editar las preguntas, así como las respuestas, son completamente mías.
Nota: Estoy tratando de mantener al mínimo las respuestas que escribo, ya que de ninguna manera soy ni soy una fuente autorizada sobre este tema. Proporcionaré referencias lo mejor que pueda. Me abstuve de agregar cualquier tipo de ayuda visual para facilitar la lectura y mantener la complejidad del mantenimiento al mínimo. Los recursos y referencias que cito contienen una gran cantidad de información, principalmente con imágenes.
Planeo expandir esto a la IA generativa en general, no solo al lenguaje, abarcando todo, desde modelos de difusión hasta modelos de visión-lenguaje. Una vez que tenga la estructura básica y esté satisfecho con los resultados preliminares, trabajaré para establecer una metodología eficiente para contribuir a este repositorio, y luego lo abriré para contribuciones, pero por ahora, quiero conservarlo. simple y enfocado.
Importante:
Creo que podría ser necesario aclarar que las respuestas que proporciono, independientemente de si son mi propio artículo o si estoy citando una fuente, no son de ninguna manera definitivas, lo que estoy tratando de hacer es ayudarlo a comenzar. en el camino correcto y darle una idea general de qué esperar, definitivamente debería leer todos y cada uno de los recursos que proporciono, y más. Si quieres que esta sea tu última parada, este es el lugar equivocado para ti. Aquí es donde comienza.
Además, si recién estás comenzando, mi único consejo es:
Siéntete cómodo leyendo artículos, porque nunca terminan.
Documento sobre cómo leer un artículo: Cómo leer un artículo
1. LLM y conceptos básicos de indicaciones
2. Generación Aumentada de Recuperación (RAG)
3. Estrategias de fragmentación
4. Incrustar modelos para su recuperación
5. Recuperación de vectores, bases de datos e índices
6. Algoritmos de búsqueda avanzada
7. Funcionamiento interno del modelo de lenguaje
Consideremos un conjunto de datos, donde cada punto de datos representa un gato. Pasemos a cada tipo de modelo y veamos en qué se diferencian:
Construyamos la definición de un modelo de lenguaje grande (LLM) desde cero:
Lectura adicional: rastreo común
Los modelos de lenguaje grandes a menudo se entrenan en múltiples etapas; estas etapas a menudo se denominan preentrenamiento, ajuste y alineación.
El propósito de esta etapa es exponer el modelo a todo el lenguaje , de manera no supervisada; a menudo es la parte más costosa del entrenamiento y requiere mucha computación. El entrenamiento previo a menudo se realiza en algo como el conjunto de datos Common Crawl; las versiones procesadas del conjunto de datos, como FineWeb y RedPajama, a menudo se usan para el entrenamiento previo. Para facilitar este amplio tipo de aprendizaje, existen múltiples tareas de capacitación que podemos utilizar, como Modelado de lenguaje enmascarado (MLM), Predicción de la siguiente oración (NSP) y más.
Mask Language Modeling se basa en la prueba Cloze, donde enmascaramos una palabra en una oración y le pedimos al modelo que la prediga. Similar a una prueba de completar espacios en blanco. Se diferencia de pedirle al modelo que prediga la siguiente palabra de una oración, ya que requiere que el modelo comprenda el contexto de la oración, y no solo la secuencia de palabras.
La predicción de la siguiente oración es una tarea en la que al modelo se le asignan dos oraciones y tiene que predecir si la segunda oración sigue a la primera. Por simple que parezca, requiere que el modelo comprenda el contexto de la primera oración y la relación entre las dos oraciones.
Un excelente recurso para aprender más sobre estas tareas es el artículo BERT.
Esta etapa es mucho más simple que el entrenamiento previo, ya que el modelo ya ha aprendido mucho sobre el lenguaje y ahora solo necesitamos enseñarle sobre una tarea específica. Todo lo que necesitamos para esta etapa son los datos de entrada (solicitudes) y las etiquetas (respuestas).
Esta etapa es a menudo la más crucial y compleja; requiere el uso de modelos de recompensa separados, el uso de diferentes paradigmas de aprendizaje, como el aprendizaje por refuerzo, y más.
Esta etapa tiene como objetivo principal alinear las predicciones del modelo con las preferencias humanas. Esta etapa a menudo se entrelaza con la etapa de ajuste. La lectura esencial para esta etapa es el artículo de InstructGPT, este artículo presentó el concepto de aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF) que utiliza la optimización de políticas próximas.
Otros métodos para alinear las predicciones del modelo con las preferencias humanas incluyen:
Los tokens son la unidad de texto más pequeña que el modelo puede entender; pueden ser palabras, subpalabras o caracteres.
Los tokenizadores son responsables de convertir texto en tokens, pueden ser tan simples como dividir el texto por espacios o tan complejos como usar tokenización de subpalabras. La elección del tokenizador puede tener un impacto significativo en el rendimiento del modelo, ya que puede afectar la capacidad del modelo para comprender el contexto del texto.
Algunos tokenizadores comunes incluyen:
Lectura recomendada (y visualización):
Esta es una pregunta muy complicada, pero aquí hay algunos recursos para explorar este tema más a fondo:
Los parámetros incluyen:
Cada uno de estos parámetros se puede ajustar para mejorar el rendimiento del modelo y la calidad del texto generado.
Lectura recomendada:
Las estrategias de decodificación se utilizan para seleccionar el siguiente token de la secuencia y pueden variar desde una simple decodificación codiciosa hasta estrategias de muestreo más complejas.
Algunas estrategias de decodificación comunes incluyen:
Las estrategias de decodificación más nuevas incluyen la decodificación especulativa (decodificación asistida), que es un concepto descabellado que implica el uso de tokens candidatos de un modelo más pequeño (y por lo tanto más rápido) para generar una respuesta de un modelo más grande muy rápidamente.
Lectura recomendada:
En el proceso de decodificación, los LLM generan texto de forma autorregresiva, un token a la vez. Existen varios criterios de parada que se pueden utilizar para determinar cuándo dejar de generar texto. Algunos criterios de parada comunes incluyen:
A prompt contains any of the following elements:
Instruction - a specific task or instruction you want the model to perform
Context - external information or additional context that can steer the model to better responses
Input Data - the input or question that we are interested to find a response for
Output Indicator - the type or format of the output.
Referencia: Guía de ingeniería rápida
Lectura recomendada:
Referencia: Guía de ingeniería rápida
Lectura recomendada:
El aprendizaje en contexto es un paradigma de aprendizaje muy intuitivo y fácil de entender en el procesamiento del lenguaje natural. Abarca conceptos como el aprendizaje en pocas oportunidades. Puede ser tan fácil como proporcionar algunos ejemplos de la tarea que desea que realice el modelo, y el modelo aprenderá de esos ejemplos y generará respuestas en consecuencia.
Lectura recomendada:
Se ha demostrado que el aprendizaje en contexto solo puede surgir cuando los modelos se escalan a un tamaño determinado y cuando los modelos se entrenan en un conjunto diverso de tareas. El aprendizaje en contexto puede fallar cuando el modelo no es capaz de realizar tareas de razonamiento complejas.
Lectura recomendada:
Esta es una pregunta muy amplia, pero lo siguiente le ayudará a tener una comprensión básica de cómo diseñar indicaciones para una tarea específica:
Alternativamente, las direcciones de investigación más nuevas investigan el uso de una forma algorítmica de optimizar las indicaciones; esto se ha explorado ampliamente en el paquete DSPy, que proporciona los medios para hacerlo; su trabajo también se publica en este artículo.
No hay respuesta para esta pregunta, la pongo como excusa para vincular esta referencia:
Existen varios métodos para lograr que los LLM generen resultados estructurados que sean analizables en todo momento; los métodos comunes dependen del concepto de llamada a funciones en los LLM.
Lectura y visualización recomendadas:
The term describes when LLMs produce text that is incorrect, makes no sense, or is unrelated to reality
Referencia: Alucinaciones LLM: tipos, causas y solución por Nexla
Lectura recomendada:
Se sabe que el concepto de estimulación de la cadena de pensamiento mejora las capacidades de razonamiento en los LLM. Esta técnica implica dividir una tarea compleja en una serie de tareas más simples y proporcionar al modelo los resultados intermedios de cada tarea para guiarlo hacia el resultado final.
Lectura recomendada:
La generación aumentada de recuperación (RAG) es un patrón de diseño común para basar las respuestas de LLM en hechos. Esta técnica implica recuperar información relevante de una base de conocimientos y utilizarla para guiar la generación de texto por parte del LLM.
Lectura recomendada:
La generación aumentada de recuperación (RAG) se compone de dos componentes principales:
La intuición detrás de RAG es que al combinar las fortalezas de los modelos basados en la recuperación y los basados en la generación, podemos crear un sistema que sea capaz de generar texto basado en hechos, limitando así las alucinaciones.
RAG suele ser la técnica preferida para responder preguntas complejas basadas en una base de conocimientos, ya que permite que el modelo aproveche la información externa para proporcionar respuestas más precisas e informativas. No siempre es factible ajustar un modelo a partir de datos propietarios, y RAG proporciona una forma de incorporar conocimiento externo sin necesidad de realizar ajustes.
Una solución completa que utilice RAG para responder una pregunta compleja basada en una base de conocimientos implicaría los siguientes pasos:
Esta es una pregunta muy complicada, pero aquí hay algunos recursos para explorar este tema más a fondo:
Fragmentar texto es el proceso de dividir un texto grande en fragmentos más pequeños y manejables. En el contexto de los sistemas RAG, la fragmentación es importante porque permite que el componente recuperador recupere de manera eficiente información relevante de la base de conocimientos. Al dividir la consulta en fragmentos más pequeños, el recuperador puede centrarse en recuperar información relevante para cada fragmento, lo que puede mejorar la precisión y eficiencia del proceso de recuperación.
Durante el entrenamiento de modelos de incrustación, que a menudo se utilizan como recuperadores, se utilizan pares de texto positivos y negativos para indicar qué fragmentos de texto se corresponden entre sí; los ejemplos incluyen los títulos, encabezados y subtítulos de una página de Wikipedia, y sus párrafos correspondientes. , publicaciones de Reddit y sus comentarios más votados, etc.
A menudo se incrusta una consulta de usuario y se consulta un índice; si el índice tuviera documentos completos contenidos en él para consultar los k resultados principales, un recuperador no podría devolver la información más relevante, ya que los documentos a consultar Sería demasiado grande para comprenderlo.
Para resumir, fragmentamos el texto porque:
Supongamos que tenemos un libro que contiene 24 capítulos, un total de 240 páginas. Esto significaría que cada capítulo contiene 10 páginas y cada página contiene 3 párrafos. Supongamos que cada párrafo contiene 5 oraciones y cada oración contiene 10 palabras. En total tenemos: 10*5*3*10 = 1500 palabras por capítulo. También tenemos 1500 * 24 = 36000 palabras en todo el libro. Para simplificar, nuestro tokenizador es un tokenizador de espacios en blanco y cada palabra es un token.
Sabemos que, como máximo, tenemos un modelo de incrustación capaz de incrustar 8192 tokens:
Todo esto es para ilustrar que no existe una forma fija de fragmentar texto y que la mejor manera de fragmentar texto es experimentar y ver qué funciona mejor para su caso de uso.
Una fuente autorizada sobre este tema es el excelente cuaderno y el vídeo adjunto de Greg Kamradt, en el que explican los diferentes niveles de división de texto.
El cuaderno también analiza formas de evaluar y visualizar los diferentes niveles de división de texto y cómo utilizarlos en un sistema de recuperación.
Visualización recomendada:
Las incrustaciones de vectores son el mapeo de la semántica textual en un espacio N-dimensional donde los vectores representan texto; dentro del espacio vectorial, texto similar está representado por vectores similares.
Lectura recomendada:
Los modelos de incrustación son modelos de lenguaje entrenados con el propósito de vectorizar texto, a menudo son derivados de BERT y se entrenan en un gran corpus de texto para aprender la semántica del texto; sin embargo, las tendencias recientes también muestran que es posible utilizar modelos de lenguaje mucho más grandes. para este fin como Mistral o Llama.
Lectura y visualización recomendadas:
Los modelos de incrustación se utilizan a menudo como recuperadores; para utilizar sus capacidades de recuperación, se utiliza la similitud textual semántica donde los vectores producidos por los modelos se miden en similitud utilizando métricas como el producto escalar, la similitud del coseno, etc.
Lectura recomendada:
Los modelos de incrustación se entrenan con pérdida contrastiva, que van desde una pérdida contrastiva simple hasta funciones de pérdida más complejas, como InfoNCE y pérdida de clasificación negativa múltiple. Durante el entrenamiento también se utiliza un proceso conocido como minería dura negativa.
Lectura recomendada:
El aprendizaje contrastivo es una técnica utilizada para entrenar modelos de incrustación; implica aprender a diferenciar entre pares de texto positivos y negativos. El modelo está entrenado para maximizar la similitud entre pares positivos y minimizar la similitud entre pares negativos.
Lectura recomendada:
Los codificadores cruzados y los codificadores bi-son dos tipos de modelos que se utilizan para tareas de recuperación de texto. La principal diferencia entre los dos es cómo codifican la consulta y el documento.
Los reclasificadores suelen ser codificadores cruzados, codifican la consulta y el documento juntos y calculan la similitud entre los dos. Esto les permite capturar la interacción entre la consulta y el documento y producir mejores resultados que los bicodificadores a costa de una complejidad computacional mucho mayor.
Los modelos de incrustación de texto suelen ser codificadores duales, codifican la consulta y el documento por separado y calculan la similitud entre las dos incrustaciones. Esto les permite ser más eficientes computacionalmente que los codificadores cruzados, pero no pueden capturar la interacción explícita entre la consulta y el documento.
Las representaciones densas de un solo vector son a menudo la norma en los modelos de incrustación de texto; generalmente se producen agrupando las incrustaciones contextualizadas después de un paso hacia adelante desde el modelo; las técnicas de agrupación incluyen agrupación media, agrupación máxima y agrupación de tokens CLS. La intuición detrás de las representaciones densas de un solo vector es que son fáciles de implementar y pueden usarse para una amplia gama de tareas, así como también son fáciles de indexar y recuperar. Las representaciones densas también pueden capturar la semántica del texto y, a menudo, se utilizan en la clasificación de la segunda etapa.
Se ha demostrado que las representaciones densas de múltiples vectores producen resultados superiores a las representaciones densas de un solo vector; se producen omitiendo el paso de agrupación y utilizando las incrustaciones contextualizadas en forma de matriz; las incrustaciones de consultas y documentos luego se usan para calcular la similitud entre las En segundo lugar, se ha demostrado que modelos como ColBERT producen resultados superiores a las representaciones densas de un solo vector. Se utiliza un operador como MaxSim para calcular la similitud entre la consulta y las incrustaciones de documentos. La intuición detrás de las representaciones densas de múltiples vectores es que pueden capturar más información sobre el texto y producir mejores resultados que las representaciones densas de un solo vector; los modelos como ColBERT también ofrecen la capacidad de precalcular incrustaciones de documentos, lo que permite una recuperación muy eficiente. Las representaciones densas también pueden capturar la semántica del texto y, a menudo, se utilizan en la clasificación de la segunda etapa.
Lectura recomendada:
Las representaciones de texto disperso son la forma más antigua de modelos de espacio vectorial en la recuperación de información; generalmente se basan en derivados y algoritmos de TF-IDF como BM25, y siguen siendo una base para los sistemas de recuperación de texto. Su escasez se debe al hecho de que la dimensión de las incrustaciones a menudo corresponde al tamaño del vocabulario. La intuición detrás de las representaciones dispersas es que son explicables, computacionalmente eficientes, fáciles de implementar y extremadamente eficientes para la indexación y recuperación. La representación escasa también se centra en la similitud léxica y, a menudo, se utiliza en la clasificación de la primera etapa.
Lectura recomendada:
Las incrustaciones de texto disperso permiten el uso de índices invertidos durante la recuperación.
Lectura recomendada:
Las métricas para evaluar el rendimiento de un modelo de integración incluyen:
Lectura y visualización recomendadas:
Elegir un modelo de incrustación podría ser un factor fundamental en el rendimiento de su sistema de recuperación y se debe considerar cuidadosamente al elegir uno. Es un proceso amplio que implica experimentación y los siguientes recursos le ayudarán a tomar una decisión informada:
Visualización recomendada:
Una base de datos vectorial es una base de datos optimizada para almacenar y consultar datos vectoriales. Permite el almacenamiento y la recuperación eficientes de incrustaciones de vectores y, a menudo, se utiliza en aplicaciones que requieren búsqueda de similitudes semánticas. Las bases de datos vectoriales son un nuevo paradigma que ha surgido como parte de la tecnología necesaria para mantenerse al día con las demandas de las aplicaciones GenAI.
Visualización recomendada:
Las bases de datos tradicionales están optimizadas para almacenar y consultar datos estructurados, como texto, números y fechas. No están diseñados para manejar datos vectoriales de manera eficiente. Las bases de datos vectoriales, por otro lado, están diseñadas específicamente para almacenar y consultar datos vectoriales. Utilizan técnicas y algoritmos de indexación especializados para permitir una búsqueda de similitudes rápida y precisa, como la cuantificación y la agrupación de vectores.
Una base de datos de vectores generalmente contiene índices de vectores, estos índices contienen matrices de incrustaciones de vectores, a menudo también se usa una estructura de datos de gráficos, ordenados de tal manera que se puedan consultar de manera eficiente. Cuando se realiza una consulta, se proporciona como entrada texto o un vector incrustado; en el caso de texto, se incrusta y la base de datos de vectores consultará el índice apropiado para recuperar los vectores más similares según las métricas de distancia. Por lo general, los vectores se comparan utilizando métricas como la similitud del coseno, el producto escalar o la distancia euclidiana. Los vectores también se relacionan con un diccionario de metadatos que podría contener información como el ID del documento, el título del documento, el texto correspondiente y más.
Las estrategias de búsqueda en bases de datos vectoriales incluyen:
Lectura recomendada:
Una vez indexados los vectores, a menudo se agrupan para reducir el espacio de búsqueda; esto se hace para reducir la cantidad de vectores que deben compararse durante el proceso de búsqueda. La agrupación se realiza agrupando vectores similares y luego indexando los grupos. Cuando se realiza una consulta, la búsqueda se realiza primero a nivel de clúster y luego a nivel de vector dentro del clúster. A menudo se utilizan algoritmos como K-means para la agrupación.
Lectura recomendada:
Obviamente, esta es una pregunta muy complicada, pero aquí hay algunos recursos para explorar este tema más a fondo:
Vector quantization, also called "block quantization" or "pattern matching quantization" is often used in lossy data compression. It works by encoding values from a multidimensional vector space into a finite set of values from a discrete subspace of lower dimension.
Referencia: cuantificación vectorial
One general approach to LSH is to “hash” items several times, in such a way that similar items are more likely to be hashed to the same bucket than dissimilar items are.
Referencia: Minería de conjuntos de datos masivos, 3ª edición, Capítulo 3, Sección 3.4.1
Lectura recomendada:
In short, PQ is the process of:
- Taking a big, high-dimensional vector,
- Splitting it into equally sized chunks — our subvectors,
- Assigning each of these subvectors to its nearest centroid (also called reproduction/reconstruction values),
- Replacing these centroid values with unique IDs — each ID represents a centroid
Referencia: Cuantización de productos
Lectura recomendada:
The Inverted File Index (IVF) index consists of search scope reduction through clustering.
Referencia: índice de archivos invertidos
Lectura recomendada:
Los pequeños mundos jerárquicos navegables (HNSW) a menudo se considera el estado del arte en la recuperación de vectores, es un algoritmo basado en gráficos que construye un gráfico de los vectores y lo usa para realizar una búsqueda de vecinos más cercano aproximado.
Lectura recomendada:
Las métricas de distancia y similitud utilizadas en la recuperación de vectores incluyen:
Visualización recomendada:
Este es un tema de investigación muy activo, y no existe una fuente autorizada, pero aquí hay algunos recursos para explorar más este tema:
También vale la pena señalar que los sistemas de búsqueda, recuperación y rerantería se basan en patrones y arquitecturas establecidas en los campos de recuperación de información, sistemas de recomendación y motores de búsqueda.
Algunas arquitecturas de sistema que quizás desee explorar incluyen:
Lograr una buena búsqueda en sistemas a gran escala implica una combinación de técnicas eficientes de indexación, recuperación y clasificación. Algunas estrategias para lograr una buena búsqueda en sistemas a gran escala incluyen:
Puede notar que todo el proceso se realiza en fases de creciente complejidad, esto se conoce como clasificación por fases o recuperación de múltiples etapas.
Lectura recomendada:
Pero el aspecto más importante de lograr una buena búsqueda en los sistemas a gran escala es experimentar e iterar en sus estrategias de recuperación y clasificación, y monitorear y evaluar continuamente el rendimiento de su sistema.
Lectura recomendada:
Conversaciones recomendadas sobre la mejora de los sistemas de búsqueda, recuperación y trapo:
Lograr una búsqueda rápida implica optimizar el proceso de indexación y recuperación, que requiere un esfuerzo de ingeniería no trivial, los siguientes son algunos ejemplos del panorama actual en el campo de la optimización de búsqueda y recuperación:
El estado actual del arte en la recuperación de vectores indica que las integridades de múltiples vectores (interacción tardía) funcionan mejor que las integridades de vectores individuales, sin embargo, optimizar su recuperación plantea un desafío de ingeniería significativo, lo siguiente discute integraciones múltiples y su recuperación en profundidad:
BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document, regardless of their proximity within the document.
Referencia: BM25
Los modelos de relieve son modelos de clasificación de secuencia entrenados para tomar un par de consultas y documentos, y producir puntajes de similiaridad sin procesar.
Lectura, visualización y observación recomendadas:
La evaluación de los sistemas RAG requiere experimentar y evaluar los componentes individuales del sistema, como el Retriever, Generator y Reranker.
Lectura recomendada:
Nota: a partir de aquí, me abstendré de responder tanto como pueda, y solo vincular documentos y referencias, esta parte es posiblemente una de las partes más complejas, por lo que requiere mucha lectura y comprensión.
Para comprender la atención, deberá estar familiarizado con la arquitectura del transformador y sus arquitecturas predecesoras. Aquí hay algunos recursos para comenzar:
El principal cuello de botella de autoatención es su complejidad cuadrática con respecto a la longitud de la secuencia. Para comprender las desventajas de la autoatención, necesitará familiarizarse con alternativas de atención, lo siguiente lo ayudará a comenzar:
Hay múltiples formas de codificar información posicional en LLM, la forma más común es usar codificaciones posicionales sinusoidales, conocidas como codificaciones posicionales absolutas. Otros métodos incluyen codificaciones posicionales relativas y métodos más nuevos, como incrustaciones posicionales rotativas. Aquí hay algunos recursos para comenzar:
Para comprender el caché de KV, deberá estar familiarizado con la arquitectura del transformador y sus limitaciones.
Lectura recomendada:
La mezcla de expertos es un tipo de arquitectura en LLMS, para comprender cómo funciona, debe pasar por los siguientes recursos, que cubren los modelos MOE más prominentes: