Tres proyectos divertidos en Gemma

JUN 26, 2024
Ju-yeong Ji Gemma DevRel

Gemma es una familia de modelos abiertos desarrollados a partir de la misma investigación y tecnología utilizada para los modelos Gemini. Por el momento, esta familia incluye Gemma, CodeGemma, PaliGemma y RecurrentGemma. De manera conjunta, los modelos son capaces de realizar una amplia gama de tareas, incluida la generación de texto, la finalización y generación de código, y muchas tareas de lenguaje visual. Además, se pueden ejecutar en diferentes dispositivos, desde Edge a computadoras de escritorio o en la nube. Incluso se pueden ajustar los modelos de Gemma a fin de que se adapten a necesidades específicas.

Gemma se diseñó para la comunidad abierta de desarrolladores e investigadores que impulsan la innovación en el campo de la IA. Obtén más información sobre Gemma y accede a la guía de inicio rápido en ai.google.dev/gemma

En esta publicación, exploraremos 3 ideas divertidas de proyectos y cómo aprender a usar los modelos de Gemma para crearlos:

  • Traducción de coreano antiguo

  • Lluvia de ideas sobre diseño de juegos

  • Carta a Santa


1. Traductor de literatura coreana antigua

Descripción del proyecto

El alfabeto coreano, o hangul, sufrió cambios a lo largo del tiempo y, en consecuencia, varias letras ya no se usan en el coreano moderno. Estas letras son:

  1. ㆍ (Arae-a): esta vocal de punto representa una "a" corta.

2. ㆆ (Yeorin-hieut): se pronuncia como una "h" suave, similar a una "h" inglesa, pero una versión más suave.

3. ㅿ (Bansiot): representa la "z".

4. ㆁ (Yet-ieung): un sonido nasal velar comparable a "ng" en la palabra "inglés".

Para los hablantes nativos de coreano, la lectura de literatura antigua presenta un desafío debido a la utilización de letras que hoy están obsoletas. El hangul antiguo carecía de espacios entre las palabras, lo que complicaba aun más la legibilidad. Por el contrario, el hangul moderno emplea espacios, de acuerdo con la mayoría de los sistemas alfabéticos.

Las capacidades de Gemma permiten la creación de un traductor que ayuda a comprender y cerrar la brecha entre el coreano contemporáneo y el antiguo. SentencePiece sirve como base para el tokenizador de Gemma. A diferencia de los tokenizadores convencionales, que dependen en gran medida de lineamientos específicos del idioma o diccionarios predefinidos, SentencePiece se entrena directamente sobre datos de texto sin procesar. En consecuencia, se vuelve independiente de cualquier idioma específico y adaptable a diversas formas de datos de texto.


Qué necesitarás

Software

Para simplificar la tarea, adoptaremos la siguiente estructura con el objetivo de afinar el modelo. El modelo generará un texto en coreano contemporáneo basado en la entrada del usuario en el hangul antiguo.

Korean text means, In the fifteenth year of the reign of King Sejong of Joseon, there was a prime minister outside Honghoemun Gate.
NOTA: El texto coreano dice "En el decimoquinto año del reinado del rey Sejong de Joseon, había un primer ministro fuera de la Puerta de Honghoemun".

Los modelos ajustados a instrucciones (TI, por sus siglas en inglés) se entrenan con un formateador específico. Se debe tener en cuenta que los tokens de control se tokenizan en un solo token de la manera que se muestra a continuación:

Instruction-tuned (IT) models being trained with a specific formatter, with control tokens being tokenized in a single token

Para el entrenamiento de modelos, utilizaremos "Hong Gildong jeon", una novela coreana de la dinastía Joseon.

Para evaluar la calidad del resultado del modelo, utilizaremos un texto que no corresponde a los conjuntos de datos de entrenamiento, específicamente la novela clásica coreana "Suk Yeong Nang Ja jeon", de un autor desconocido.


Inferencia antes del ajuste fino

El modelo no tiene capacidad para traducir hangul antiguo.

Inference before fine tuning

Ajuste fino en LoRA

Después del ajuste fino, las respuestas siguen la instrucción y generan un texto en coreano contemporáneo basado en el texto del hangul antiguo.

Model generated contemporary Korean text

El siguiente texto es un ejemplo de una traducción hecha por un humano:

"금두꺼비가 품에 드는 게 보였으니 얼마 안 있어 자식을 낳을 것입니다.

하였다. 과연 그 달부터 잉태하여 십삭이 차니"

NOTA: El texto en coreano dice "Vi un sapo dorado en sus brazos, por lo que no pasará mucho tiempo antes de que dé a luz a un niño. De hecho, ella concibió a partir de ese mes y tenía diez meses de edad".


A continuación, incluimos otro resultado.

Model generated contemporary Korean text - example 2

Y la traducción realizada por un humano que se muestra a continuación:

"이 때는 사월 초파일이었다.이날 밤에 오색구름이 집을 두르고 향내 진동하며 선녀 한 쌍이 촉을 들고 들어와 김생더러 말하기를,"

NOTA: El texto en coreano dice "En este momento, era el ocho de abril. Esa noche, con nubes de cinco colores que rodeaban la casa y el aroma del incienso vibrando, un par de hadas entraron con velas y le dijeron a Kim Saeng:".


Aunque la traducción no es impecable, es un primer borrador decente. Los resultados son increíbles si se tiene en cuenta que los conjuntos de datos se limitan a un solo libro. Es probable que, a medida que se mejore la diversidad de las fuentes de datos, también mejore la calidad de la traducción.

Una vez que hagas el ajuste fino del modelo, puedes publicarlo en Kaggle y Hugging Face.

A continuación, te mostramos un ejemplo:

# Save the finetuned model
gemma.save_to_preset("./old-korean-translator")
 
# Upload the model variant on Kaggle
kaggle_uri = "kaggle://my_kaggle_username/gemma-ko/keras/old-korean-translator"
keras_nlp.upload_preset(kaggle_uri, "./old-korean-translator")

Idea para expansión

Para lograr tareas similares, se puede replicar la misma estructura. A continuación, se muestran algunos ejemplos:

  • Conjuntos de datos de inglés americano <-> inglés británico

Varios objetos y conceptos cotidianos tienen diferentes nombres según la región. Por ejemplo, en inglés americano (AmE), las personas usan términos como "elevator" (ascensor), "truck" (camión), "cookie" (galleta) y "french fries" (papas fritas), mientras que en inglés británico (BrE), las palabras equivalentes son "lift", "lorry", "biscuit" y "chips", respectivamente.

Además de las diferencias de vocabulario, también existen variaciones ortográficas. Por ejemplo, las palabras que en AmE terminan en "-or" se suelen escribir con "-our" en BrE. Los ejemplos incluyen "color" (AmE) y "colour" (BrE), o "humor" (AmE) y "humour" (BrE).

Otra variación ortográfica es la diferencia entre "-ize" frente a "-ise". En AmE, palabras como "organize" (organizar) y "realize" (darse cuenta) se escriben comúnmente con una "z", mientras que en BrE, se prefiere "organise" y "realise", con "s".

Con la ayuda de herramientas de IA como Gemma, es posible crear una transferencia de estilo de una variante de inglés a otra, lo que permite transiciones sin problemas entre los estilos de escritura en inglés estadounidense y británico.

  • Conjuntos de datos de Kansai-ben

En la región de Kansai en Japón, hay un grupo distinto de dialectos conocidos como Kansai-ben. En comparación con el idioma japonés estándar, los hablantes nativos perciben el kansai-ben como más melódico y duro en su pronunciación y entonación.

Con las capacidades de Gemma, puedes compilar un traductor de dialectos si preparas una cantidad sustancial de conjuntos de datos de Kansai-ben.


2. Lluvia de ideas sobre diseño de juegos

Descripción del proyecto

Con la fiel compañía de Gemma, puedes vivir la experiencia de compilar un juego cautivador. Todo comienza con una presentación de una línea que sirve como base para el concepto de tu juego. Gemma tiene la habilidad de guiarte para desarrollar el concepto del juego, crear personajes principales complejos y escribir una historia principal atractiva que sumergirá a los jugadores en el mundo de tu juego.


Qué necesitarás

Software

Comienza escribiendo un concepto central, una presentación de una línea sobre tu juego, como se muestra a continuación:

Example of a one-sentence gameplay pitch

Gemma puede agregar más detalles según tu presentación.

Entrada: "Elabora sobre este juego con el concepto básico dado a continuación.\n{pitch}"

Ejemplo de resultado:

Example of Gemma output elaborating on the gameplay idea provided in an earlier prompt

Entrada: "Diseña personajes principales"

Ejemplo de resultado:

Gemma example output for prompt "Design main characters"

Entrada: "Diseña personajes villanos"

Ejemplo de resultado:

Example of Gemma output for prompt "design villain characters"

Entrada: "Escribe la historia principal de este juego con una introducción, desarrollo, giro y conclusión".

Ejemplo de resultado:

Example of Gemma output for prompt requesting a main story with an introduction, development, turn, and conclusion

Idea para expansión

Si modificas el mensaje, puedes obtener un acompañante similar para casi cualquier tipo de contenido creativo.

Frase de marketing

Presentación: "Un nuevo cepillo de dientes a vapor"

Entrada: "Genera una frase de marketing para el nuevo producto que se muestra a continuación.\n{pitch}"

Ejemplo de resultado:

Example of Gemma output for prompt "Generate a marketing phrase for the new product below.\n{pitch}""

Ideas de floristería

Presentación: "Universo y estrellas fugaces"

Entrada: "Genera una idea de florista inspirada en el concepto que se muestra a continuación, junto con sugerencias para flores adecuadas.\n{pitch}"

Ejemplo de resultado:

Example of Gemma output for prompt requesting a florist idea based on a provided prompt

Receta de alimentos

Presentación: "Cyberpunk Kraken"

Entrada: "Genera una receta de cocina con el concepto que se muestra a continuación.\n{pitch}"

Ejemplo de resultado:

Example of Gemma output for prompt requesting a recipe based on a provided prompt

3. La magia del buzón de Santa

Descripción del proyecto

El método tradicional de enviar cartas a Santa puede ser limitado e impersonal. Por lo general, los niños tienen que esperar semanas o incluso meses para recibir una respuesta, y sus cartas pueden no ser tan detalladas o interactivas como les gustaría.

En este proyecto, utilizaremos Gemma, que se ejecuta en una Raspberry Pi, para escribir cartas mágicas de Santa con el poder de un modelo de lenguaje grande.


Qué necesitarás

Hardware

  • Una computadora Raspberry Pi 4 con 8 GB de RAM

Software

Generación de texto


A. Puedes escribir tu propia app C++ con libgemma.

Puedes escribir tu propia app C++ con libgemma.

Utiliza el siguiente mensaje para indicar el modelo:

Example of a prompt to instruct a Gemma model to write  a letter to Santa

B. O usa esta app c++ simple para realizar pruebas.

Antes de empezar a compilar, modifica el MODEL_PATH definido en el código.

$ g++ santa.cc -I . -I build/_deps/highway-src -I build/_deps/sentencepiece-src build/libgemma.a build/_deps/highway-build/libhwy.a build/_deps/sentencepiece-build/src/libsentencepiece.so -lstdc++ -l

Comenzar

$ LD_LIBRARY_PATH=./build/_deps/sentencepiece-build/src ./a.out

Leerá el texto de letter.txt y generará una carta de Santa.

NOTA: La generación de texto en Raspberry Pi puede demorar un poco.

Image of C++ application in libgemma

Aquí está el resultado final:

Image of C++ app letter from Santa output

C. Si prefieres usar llama.cpp, también te brindamos el modelo GGUF

$ ./main -m models/gemma-2b-it.gguf --repeat-penalty 1.0 -p "Eres Santa, escribe una carta para este niño.\n<START_OF_Turn>user\ nPLACE_THE_CONTEXT_OF_LETTER_HERE<END_OF_Turn>\n<START_OF_Turn>model\n"
Image of llama.cpp build and output

Conclusión

Gemma ofrece una infinidad de oportunidades. Esperamos que estas sugerencias te inspiren y nos encantaría ver cómo tus creaciones cobran vida.

Te invitamos a unirte al servidor de Discord de la comunidad de desarrolladores de Google. Allí, puedes compartir tus proyectos y conectarte con otras personas de ideas afines.

¡Que te diviertas experimentando!