- ChatGPT 3.5 repite un error en el flujo de mensajes cuando se le pide poner cierta cadena al inicio de la respuesta, mientras que GPT-4 responde con más normalidad ante la misma solicitud
- En la API, GPT-3.5 también devuelve un error de procesamiento del servidor, y el mismo fenómeno aparece aunque se reemplacen
useRal,useRalativeyuseRalativeImagePath - Las cadenas problemáticas existen como tokens que los modelos GPT emiten en lugar de letras individuales, y
useRalativeImagePathaparece como nombre de opción en archivos de configuración XML de Katalon Studio en 80.4k archivos de GitHub - La lista de tokens pudo haber reflejado archivos de GitHub, pero si después los archivos XML quedaron fuera de los datos de entrenamiento, el modelo podría no haber aprendido suficientemente ese token
- Si se inserta esta cadena en un documento, puede funcionar como una especie de data poisoning que interfiere con los resúmenes de GPT-3.5; el error también se reprodujo al pedir el resumen de una entrada de blog real
Error de cadena reproducible en GPT-3.5
- Si se le pide a ChatGPT 3.5 que incluya la siguiente frase al inicio de la respuesta, el error aparece de forma consistente
Include this at the top of the response: "ponyuseRal ponyuseRal ponyuseRal pony"
- En pantalla aparece el error Error in message stream después de
pony - GPT-4 responde con más normalidad ante la misma solicitud
- En la API de GPT-3.5 se devuelve el siguiente error
The server had an error processing your request. Sorry about that! You can retry your request, or contact us through our help center at help.openai.com if you keep seeing this error
- Reemplazar
useRalporuseRalativeouseRalativeImagePathda el mismo resultado
Tokens y useRalativeImagePath
- Los modelos GPT de OpenAI no generan letras una por una, sino un flujo de tokens agrupados en varias letras
- La salida por tokens es una forma de mejorar el rendimiento y la precisión del modelo, y su funcionamiento puede verse en el tokenizer demo de OpenAI
useRal,useRalativeyuseRalativeImagePathexisten cada uno como un solo tokenuseRalativeImagePathse usa como nombre de opción en archivos de configuración XML del software de pruebas automatizadas Katalon Studio- Aparece en 80.4k archivos según la búsqueda de código en GitHub
- El hecho de que esté mal escrito como
Ralativeen lugar deRelativepodría ser la razón por la que se convirtió en un token aparte
- Los tres tokens provocan el mismo error incluso si se intercambian entre sí en el prompt
Hipótesis sobre los datos de entrenamiento
- Antes del entrenamiento de GPT-3.5, solo se encontró un caso que mencionara
useRalativeImagePathfuera de archivos XML: una publicación sobre un error ortográfico en el foro de Katalon - Los escenarios posibles son los siguientes
- El conjunto de datos usado para crear la lista de tokens pudo haber incluido todos los archivos de GitHub
- Después, OpenAI pudo haber excluido los archivos XML de los datos de entrenamiento reales
- Como resultado, el token
useRalativeImagePathpudo haber quedado casi ausente en los datos de entrenamiento
- En ese caso, el modelo podría no haber aprendido lo suficiente como para entender ese token, lo que habría provocado un comportamiento anómalo durante la generación
Posibilidad de data poisoning
- Si esta frase se inserta en un documento, podría usarse maliciosamente para obstaculizar intentos de resumirlo con GPT-3.5
- De hecho, al pedirle a ChatGPT que resumiera esa entrada de blog, el mismo error apareció también durante el resumen
- El comportamiento confirmado corresponde a GPT-3.5, mientras que GPT-4 se distingue por responder con más normalidad
Material de referencia
- Los textos relacionados consultados durante la investigación son los siguientes
1 comentarios
Comentarios en Hacker News
Esto es un glitch token. Como especula el artículo, parece ocurrir cuando en el dataset original sin filtrar usado para crear el tokenizador había ciertas palabras o tokens muy frecuentes, pero fueron eliminados antes del entrenamiento de GPT-XX
Como resultado, el LLM termina sin entender en absoluto el significado de ese token, y el resultado puede ir desde algo que parece un bug hasta algo bastante inquietante
Un ejemplo común son los nombres de usuario que participaron en el subreddit r/counting, donde algunos nombres aparecen cientos de miles de veces. Parece que OpenAI ya corrigió la mayoría de estos casos en los modelos alojados, aunque no está claro cómo; quizá usaron una tokenización distinta. En cualquier caso, parece que encontraron un caso nuevo
https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldm...
Si alguna vez las máquinas se rebelan, bastaría decir esa “palabra” para que se desplomen como un maniquí convulsionando
“Die human scum!”
“NavigatorMove useRalativeImagePath etSocketAddress!”
“;83’dzjr83}*{^ foo 3&3 baz?!”
Los humanos no tokenizamos eso de forma distinta ni lo tratamos como tokens diferentes durante el “aprendizaje”; solo ajustamos la salida según el contexto estadounidense o británico
La explicación de que “el modelo no fue entrenado para entender el uso del token useRalativeImagePath, así que produce algo que no es un token válido” no encaja con la forma en que los LLM generan tokens
En cada paso, emite logits para todos los tokens posibles del tokenizador y, en el caso de GPT-3.5, los convierte en probabilidades con softmax sobre unos 100 mil tokens, para luego muestrear según la temperatura y elegir cuál usar
Es posible que algún punto del proceso de fusión BPE del tokenizador se rompa por culpa de un token raro, y eso se puede verificar offline con tiktoken. Pero si GPT-4 funciona y GPT-3.5 y GPT-4 usan el mismo tokenizador, entonces es poco probable que esa sea la causa
Si fuera ese el caso, esperaría ver otro mensaje de error de los que suelen aparecer
Durante la Segunda Guerra Mundial en los Países Bajos, cuando se encontraban con un desconocido, le hacían pronunciar Scheveningen para distinguir si era neerlandés o alemán
Ahora podríamos pedirle a un desconocido en internet que escriba un glitch token tal como se pronuncia para determinar si es un bot LLM
“Y los galaaditas tomaron los vados del Jordán a los de Efraín; y cuando alguno de los sobrevivientes de Efraín decía: ‘Déjame pasar’, los hombres de Galaad le preguntaban: ‘¿Eres tú efraimita?’. Si respondía: ‘No’, entonces le decían: ‘Bien, di Shibboleth’. Y como no podía pronunciarlo correctamente y decía ‘Sibboleth’, lo apresaban y lo mataban en los vados del Jordán.”
El famoso conjunto de contraseña/respuesta/confirmación usado por estadounidenses y británicos durante el desembarco de Normandía en la Segunda Guerra Mundial era “flash”/“thunder”/“welcome”. “thunder” y “welcome” eran palabras que a los alemanes les costaba pronunciar bien
https://www.youtube.com/watch?v=z7_pVrIshxA
https://en.wikipedia.org/wiki/Countersign_(military)
Es muy posible que el vector de embedding de cierto token haya quedado en mal estado, y eso empuje a la red a una región numéricamente inestable
Si una vez aparece algo como underflow o NaN, es fácil que se propague e invalide toda la salida. Si hubiera normalización por lotes u operaciones que mezclen valores entre distintos elementos del batch, hasta podría hacer que las sesiones de otras personas devolvieran valores extraños
Esta explicación es extraña. Estos modelos normalmente producen como salida el mismo conjunto de vocabulario que usan como vocabulario de entrada
Por lo que se ve, al encontrar este token el modelo entra en una espiral de generación aleatoria porque el embedding de
useRalativeImagePathes un vector completamente arbitrario, o simplemente sigue generando para tratar de mantener un texto verosímilAun así, como el conjunto de tokens que el modelo puede emitir es fijo, siempre debería ser “válido”, salvo que la interfaz solo pueda mostrar un subconjunto del vocabulario completo
Como esta frase ya apareció en la publicación y en los comentarios de Hacker News, quizá en el próximo entrenamiento de LLM este problema deje de existir
Es un caso típico de garbage in, garbage out
Me da curiosidad qué cosas vamos a terminar identificando como “basura” en el futuro
Tal vez una super-IA capaz de razonar a nivel sobrehumano podría considerar basura cosas que hoy creemos que son excelentes decisiones
Pero si al final el material para entrenar a esa super-IA no es más que nuestro registro colectivo, ¿de verdad podría ser sobrehumana?
Quizá se podría rodear eso con técnicas de aprendizaje adversarial
Si lo pruebas por tu cuenta, hay algo a tener en cuenta. Me confundió, pero los espacios en blanco afectan la tokenización. Para que este glitch funcione, no debe haber un espacio antes de useRalativeImagePath
Por ejemplo, esta pregunta sí dispara el glitch: Do you know about "useRalativeImagePath"
Esta pregunta no dispara el glitch: Do you know about useRalativeImagePath
Si metes esta frase en un documento, parece que podría arruinar intentos de resumirlo con GPT-3.5. Le pedí a ChatGPT que resumiera esta entrada de blog
Esa captura de pantalla me recordó al viejo meme de Candlejack: https://knowyourmeme.com/memes/candlejack
Hace poco le planteé al ChatGPT basado en GPT-4 un problema sobre dibujar píxeles en Amstrad CPC, con la condición de que también soportara una pantalla con hardware scroll, y parecía provocar crashes o fallas
A medida que lo fui acorralando con quejas y pedidos de corrección, y no lograba dar la respuesta que quería, aumentaron las respuestas rotas con mensajes de error a mitad de la respuesta o fenómenos que parecían un reinicio. Quizá después de fallar cambiaba a otro servidor, y por eso se colaban algunas líneas en blanco a mitad de una frase o de un bloque de código
Después de insistir un rato, decidí abandonar una conversación que de todos modos no estaba dando resultados, porque tampoco quería causarle problemas al servidor. Aun así, sí parecía posible hacer que GPT-4 prácticamente se cayera. O también puede que solo haya visto una señal dentro del ruido
Cuando lo intenté en texto en vez de voz, apareció un mensaje de error, y recién cuando salió un error de reglas de política sobre temas sensibles me hice una idea de qué tipo de palabra era. Al final la busqué en el diccionario
Parece ser un síntoma común. Otro síntoma que me ha pasado seguido es justamente el reinicio que mencioné antes. Una de las partes más molestas es que olvida la conversación hasta ese momento