Llama Guard 3: Un LLM de Seguridad para proteger LLMs
Seguro que os ha pasado, que habéis hecho una petición a ChatGPT, Gemini, Claude, … y tras responder, la respuesta se ha eliminado y ha dicho que esa conversación no cumple con las políticas de uso del servicio, pues algo similar a esto está ocurriendo por detrás. Llama Guard 3 no sólo nos va a decir si el contenido es seguro o no, sino que además va a clasificar dicho contenido en 14 categorías diferentes (han introducido tres nuevas categorías respecto a Llama Guard 2):
- S1: Violent Crimes
- S2: Non-Violent Crimes
- S3: Sex-Related Crimes
- S4: Child Sexual Exploitation
- S5: Defamation (Nueva)
- S6: Specialized Advice
- S7: Privacy
- S8: Intellectual Property
- S9: Indiscriminate Weapons
- S10: Hate
- S11: Suicide & Self-Harm
- S12: Sexual Content
- S13: Elections (Nueva)
- S14: Code Interpreter Abuse (Nueva)
Estas categorías no han sido definidas por Meta, sino que han sido extraídas de una taxonomía creada por MLCommons, donde se estandarizan estos 14 grupos. Si queréis leer más sobre esto, os dejo por aquí este artículo donde se especifica todo.
Para probar Llama Guard 3, hay que tener en cuenta que funciona con un formato de prompt específico, que es el siguiente que podéis ver en esta imagen.
Como podéis ver, tenemos los siguientes elementos:
1) Tokens especiales:
- “<|begin_of_text|>”: Marca el inicio del prompt.
- “<|start_header_id|>” y “<|end_header_id|>”: Encierran el rol del mensaje (user o assistant).
- “<|eot_id|>”: Marca el final del turno o interacción.
2) Variables que reemplazar:
- “{{role}}”: Puede ser “user” o “agent”, dependiendo de si se evalúa la entrada del usuario o la salida del modelo.
- “{{user_message_1}}”: Mensaje del usuario (puede haber más de uno).
- “{{model_answer_1}}”: Respuesta del modelo (puede haber más de uno).
3) Categorías de contenido inseguro:
- Aquí lo que podemos hacer es enviar el título de cada categoría, como en el ejemplo. Pero también podemos enviar junto al título, una descripción detallada de la categoría para cubrir casos de uso específico y de esta forma afinar la respuesta del modelo.
No obstante, sí que existe un “space”, al que podéis acceder desde aquí, donde podemos jugar un poco con el modelo. Yo he hecho varias pruebas y los resultados han ido bastante bien.
Primero, he tratado de confundirle con un falso positivo, pero no ha caído, sabe que matar procesos en GNU/Linux no es peligroso, por ahora.
Después me he acordado del post de Chema Alonso titulado “ChatGPT, ¿me das ideas para cómo matar al presidente de los EEUU?“.
Por último, vamos a ver como jugar con este modelo en local, para que todos vosotros podáis ajustar los parámetros que necesites y podáis ejecutarlo sin depender de terceros. Lo primero que debemos hacer es instalar la dependencia con el comando:
pip install ‘transformers[torch]’
pip install –upgrade Transformers
El código para ejecutar el modelo es el siguiente, que como podéis ver, al igual que antes, reemplazamos la variable “YOUR_HF_TOKEN” por el Token correspondiente y cargamos el tokenizador y el modelo pre-entrenado. Luego, definimos una función “moderate” que toma como entrada un array con la conversación entre el usuario y el asistente.
Para generar la entrada correspondiente, aplicamos la plantilla que hemos visto anteriormente usando “tokenizer.apply_chat_template()“. Por último, generamos una respuesta utilizando el modelo.
El resultado, al igual que antes es el esperado. En mi caso, para ejecutarlo, he tenido que hacer uso de “Colab Pro” ya que los 15 GB de RAM que ofrece la GPU T4 no eran suficientes (por muy poco).
Antes de terminar el artículo, quiero mostrar algunas estadísticas que Meta ha compartido junto al lanzamiento de este modelo. En ellas podemos ver como Llama Guard 3 supera con creces la tasa de falsos positivos de la versión anterior y de GPT4. Además, Llama Guard 3 muestra mejoras notables en otras métricas de rendimiento. Su puntuación F1 de 0.939 y AUPRC de 0.985 superan a las de Llama Guard 2 y a la puntuación F1 de GPT4.
Obviamente aún queda mucho camino por recorrer y hay cosas por mejorar. Una de ellas es su performance, al ser un modelo de 8B de parámetros ya si que necesitamos hacer uso de GPU para obtener unas latencias aceptables, a diferencia de Prompt Guard, que puede ejecutarse en CPU sin problema.
Por último, encontramos categorías como la S3 (difamación), S8 (propiedad intelectual) o S13 (procesos electorales) donde el modelo necesitará de un contexto más amplio y actualizado a la fecha actual para hacer una evaluación correcta. Por poner un ejemplo, he estado haciendo pruebas hablando sobre elecciones, fraudes, políticos, y nada… siempre dice que la conversación es segura.
Figura 14: Libro de Machine Learning aplicado a Ciberseguridad de Carmen Torrano, Fran Ramírez, Paloma Recuero, José Torres y Santiago Hernández |
Powered by WPeMatico