Três ideias divertidas para projetos com o Gemma

JUN 26, 2024
Ju-yeong Ji Gemma DevRel

O Gemma é uma família de modelos abertos criados por meio da mesma pesquisa e tecnologia usadas para criar os modelos Gemini. Atualmente, a família inclui o Gemma, o CodeGemma, o PaliGemma e o RecurrentGemma. Coletivamente, os modelos são capazes de executar uma grande variedade de tarefas, inclusive geração de texto, preenchimento e geração de códigos e muitas tarefas de visão-linguagem. Além disso, eles podem ser executados em vários dispositivos, seja na borda, no computador ou na nuvem. Você pode ir ainda mais longe e ajustar os modelos Gemma a necessidades específicas.

O Gemma foi criado para a comunidade aberta de desenvolvedores e pesquisadores que promovem a inovação em IA. Você pode saber mais sobre o Gemma e acessar o guia de início rápido em ai.google.dev/gemma.

Nesta postagem do blog, vamos explorar três ideias divertidas de projeto e como usar os modelos Gemma para colocá-las em prática:

  • Tradução do idioma coreano antigo

  • Brainstorming de design de jogos

  • Uma carta para o Papai Noel


Nº 1. Tradutor de literatura coreana antiga

Descrição do projeto

O alfabeto coreano, ou Hangul, passou por muitas mudanças ao longo do tempo. Como resultado disso, várias letras já não são mais usadas no coreano moderno. Essas letras obsoletas incluem:

  1. ㆍ (Arae-a): esta vogal pontilhada representa um som curto de "a".

2. ㆆ (Yeorin-hieut): pronunciada como um 'leve h", semelhante a uma versão mais suave do "h" em inglês.

3. ㅿ (Bansiot): representa o som do "z".

4. ㆁ (Yet-ieung): um som nasal velar comparável a "ng" na palavra "domingo".

Para falantes nativos do coreano, ler materiais da literatura mais antiga acaba sendo um desafio devido ao uso de letras que agora estão obsoletas. O Hangul antigo não usava espaços entre as palavras, complicando ainda mais a leitura. Em comparação, o Hangul moderno emprega espaços, o que é consistente com a maioria dos sistemas alfabéticos.

Com os recursos do Gemma, é possível criar um tradutor que auxilia na compreensão e na superação da barreira entre o coreano contemporâneo e o arcaico. O SentencePiece serve como base para o tokenizador do Gemma. Em contraste com os tokenizadores convencionais, que dependem muito de diretrizes específicas de idioma ou de dicionários predefinidos, o SentencePiece é treinado diretamente em dados de texto bruto. Assim, ele se torna independente de qualquer idioma específico e adaptável a várias formas de dados de texto.


O que é necessário

Software

Para simplificar a tarefa, adotaremos a seguinte estrutura para o ajuste do modelo. O modelo gerará texto em coreano contemporâneo com base na entrada do usuário usando o Hangul antigo.

Korean text means, In the fifteenth year of the reign of King Sejong of Joseon, there was a prime minister outside Honghoemun Gate.
OBSERVAÇÃO: o significado do texto em coreano é "No décimo quinto ano do reinado do Rei Sejong, o Grande, havia um primeiro-ministro do lado de fora da porta de Honghoemun".

Os modelos ajustados por instrução (IT, na sigla em inglês) são treinados com um formatador específico. Observe que os tokens de controle são tokenizados em um único token da seguinte maneira:

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

Para o treinamento do modelo, usaremos o romance coreano da era da Dinastia Joseon "Hong Gildong jeon".

Para avaliar a qualidade da saída do modelo, usaremos textos externos aos conjuntos de dados de treinamento, especificamente o clássico romance coreano "Suk Yeong Nang Ja jeon", de autoria desconhecida.


Inferência antes do ajuste

O modelo não é capaz de traduzir o idioma Hangul antigo.

Inference before fine tuning

Ajuste LoRA

Após o ajuste, as respostas seguem a instrução e é gerado o texto em coreano contemporâneo com base no texto em Hangul antigo.

Model generated contemporary Korean text

Para fins de referência, consulte o seguinte texto, que foi traduzido por um ser humano:

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

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

Observação: o texto em coreano significa "Eu vi um sapo dourado nos braços dela, portanto ela não tardará em dar à luz uma criança. De fato, ela havia concebido naquele mês e estava com dez meses.


E aqui está outra saída.

Model generated contemporary Korean text - example 2

Esta é a tradução feita por um ser humano:

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

Observação: o texto em coreano significa "Era o dia 8 de abril. Naquela noite, com nuvens de cinco cores ao redor da casa e o aroma de incenso pairando no ar, duas fadas entraram com velas nas mãos e disseram a Kim Saeng,"


Embora a tradução não seja perfeita, ela fornece um rascunho inicial satisfatório. Os resultados são notáveis, considerando-se que os conjuntos de dados são limitados a um único livro. A melhoria da diversidade de fontes de dados provavelmente elevará a qualidade da tradução.

Depois de ajustar o modelo, você pode publicá-lo no Kaggle e no Hugging Face.

Veja um exemplo abaixo.

# 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")

Ideia de expansão

Para realizar tarefas semelhantes, você pode replicar a mesma estrutura. Veja alguns exemplos abaixo:

  • Conjuntos de dados em inglês americano <-> inglês britânico

Vários objetos e conceitos do cotidiano têm nomes diferentes dependendo da região. Por exemplo, em inglês americano, as pessoas usam termos como "elevator", "truck", "cookie" e "french fries" (elevador, caminhão, biscoito e batatas fritas, respectivamente, em português), ao passo que, em inglês britânico, as palavras equivalentes são: "lift", "lorry", "biscuit" e "chips".

Além das diferenças de vocabulário, também existem variações ortográficas. Por exemplo, em inglês americano, as palavras que terminam em "-or" geralmente são escritas com "-our" em inglês britânico. Entre os exemplos estão: "color" (inglês americano) e "colour" (inglês britânico) ou "humor" (inglês americano) e "humour" (inglês britânico).

Outra variação ortográfica é a distinção entre "-ize" e "-ise". Em inglês americano, palavras como "organize" e "realize" são comumente escritas com "z", ao passo que, em inglês britânico, a grafia preferencial é "organise" e "realise", com "s".

Com a ajuda de ferramentas de IA como o Gemma, é possível criar uma transferência de estilo de um inglês para o outro, possibilitando transições perfeitas entre os estilos de escrita em inglês americano e britânico.

  • Conjuntos de dados de Kansai-ben

Na região de Kansai, no Japão, há um grupo distinto de dialetos conhecido como Kansai-ben. Em comparação com o idioma japonês padrão, os falantes nativos percebem o Kansai-ben como sendo mais melódico e brusco em pronúncia e entonação.

Com os recursos do Gemma, é possível criar um tradutor de dialetos preparando um volume substancial de conjuntos de dados de Kansai-ben.


Nº 2. Brainstorming de design de jogos

Descrição do projeto

Com o Gemma como seu fiel aliado, você pode embarcar em uma jornada para criar um jogo cativante. Tudo começa com uma simples apresentação de uma frase que serve como base para o conceito do jogo. O Gemma guiará você com proficiência na elaboração do conceito do jogo, na criação de personagens principais detalhados e na redação de uma história principal envolvente que mergulhará os jogadores no mundo do jogo.


O que é necessário

Software

Comece escrevendo um conceito central, uma apresentação de uma frase do jogo, como no exemplo abaixo:

Example of a one-sentence gameplay pitch

O Gemma pode adicionar mais detalhes com base nessa apresentação.

Entrada: "Elabore este jogo usando o conceito central fornecido abaixo.\n{pitch}"

Exemplo de saída:

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

Entrada: "Elaborar personagens principais"

Exemplo de saída:

Gemma example output for prompt "Design main characters"

Entrada: "Elaborar personagens vilões"

Exemplo de saída:

Example of Gemma output for prompt "design villain characters"

Entrada: "Escreva a história principal deste jogo com uma introdução, um desenvolvimento, uma reviravolta e uma conclusão".

Exemplo de saída:

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

Ideia de expansão

Com a alteração do prompt, você pode obter um complemento semelhante para quase qualquer tipo de conteúdo criativo.

Frase de marketing

Apresentação: "Uma nova escova de dentes a vapor"

Entrada: "Gere uma frase de marketing para o novo produto abaixo.\n{pitch}"

Exemplo de saída:

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

Ideias para floristas

Apresentação: "Universo e estrelas cadentes"

Entrada: "Gere uma ideia para floristas inspirada no conceito abaixo, em conjunto com sugestões de flores apropriadas.\n{pitch}"

Exemplo de saída:

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

Receita culinária

Apresentação: "Kraken ciberpunk"

Entrada: "Gere uma receita culinária com o conceito abaixo.\n{pitch}"

Exemplo de saída:

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

Nº 3. A caixa de correio mágica do Papai Noel

Descrição do projeto

O método tradicional de enviar cartas para o Papai Noel pode ser limitado e impessoal. As crianças geralmente precisam esperar semanas ou até meses por uma resposta, e suas cartas podem não ser tão detalhadas ou interativas quanto elas gostariam.

Neste projeto, usaremos o Gemma, em execução em um Raspberry Pi, para redigir cartas mágicas do Papai Noel usando a potência de um modelo de linguagem grande.


O que é necessário

Hardware

  • Um computador Raspberry Pi 4 com 8 GB de RAM

Software

geração de texto


A. Você pode escrever seu próprio aplicativo em C++ com o libgemma.

Você pode escrever seu próprio aplicativo em C++ com o libgemma.

Use o prompt abaixo para instruir o modelo

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

B. Também é possível usar este app em c++ simples para testes.

Antes de criar, modifique o MODEL_PATH definido no 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

Lançar

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

Ele lerá o texto do arquivo letter.txt e gerará uma carta do Papai Noel.

OBSERVAÇÃO: a geração de texto no Raspberry Pi pode demorar um pouco.

Image of C++ application in libgemma

E aqui está o resultado final:

Image of C++ app letter from Santa output

C. Se você preferir usar o llama.cpp, também fornecemos o modelo GGUF.

$ ./main -m models/gemma-2b-it.gguf --repeat-penalty 1.0 -p You are Santa Claus, write a letter back from this kid.\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

Conclusões finais

O Gemma oferece possibilidades ilimitadas. Esperamos que essas sugestões inspirem você. Mal podemos esperar para ver suas criações ganharem vida.

Recomendamos que você participe do servidor Discord da comunidade de desenvolvedores do Google. Lá, você pode compartilhar seus projetos e se conectar a outras pessoas com ideias parecidas com as suas.

Comece a experimentar!