3 个有趣的 Gemma 项目创意

六月 26, 2024
Ju-yeong Ji Gemma DevRel

Gemma 是开放模型系列,与 Gemini 模型基于相同的研究成果和技术构建而成。该系列目前包括 Gemma、CodeGemma、PaliGemma 和 RecurrentGemma。总的来说,这些模型不仅能够执行包括文本生成、代码完成和生成、视觉语言任务在内的广泛任务,还可以在边缘设备、桌面设备和云端设备等设备上运行。您可以进一步微调 Gemma 模型,以满足您的特定需求。

Gemma 专为开发者和研究人员组成的开放社区而设计,旨在助力 AI 创新。您可以在 ai.google.dev/gemma 上探索有关 Gemma 的更多信息并访问快速入门指南

在这篇博文中,我们将探讨 3 个有趣的项目创意,以及如何使用 Gemma 模型进行创建:

  • 翻译古韩语

  • 游戏设计头脑风暴

  • 给圣诞老人的一封信


#1. 古韩语文学作品翻译器

项目描述

韩语字母表或韩文随着时间的推移而发生变化,导致几个字母在现代韩语中不再使用。这些过时的字母包括:

  1. ㆍ (Arae-a):这个点元音代表短的“a”音。

2. ㆆ (Yeorin-hieut):在韩语中的发音为“light h”,类似于英语字母“h”的柔声版。

3. ㅿ (Bansiot):表示“z”音。

4. ㆁ (Yet-ieung):软腭鼻音,发音与单词“sing”中“ng”的发音类似。

对于韩语母语人士来说,旧文学作品中使用的现已过时的字母为阅读带来了挑战。早期的韩文没有字与字之间的空格,这进一步增加阅读难度。相比之下,现代韩文采用空格,与大多数拼音文字系统相一致。

利用 Gemma 的诸多功能,开发者可以创建翻译器,以帮助理解含义并弥合当代韩语和古代韩语之间的分歧。SentencePiece 是 Gemma 分词器的基础。与严重依赖语言特定指南或预定义词典的传统分词器不同,SentencePiece 直接使用原始文本数据进行训练。因此,它独立于任何特定语言,可适应各种形式的文本数据。


您需要的硬件和软件

软件

为了简化任务,我们将采用以下结构来微调模型。该模型将根据用户在古韩语中的输入生成当代韩语文本。

Korean text means, In the fifteenth year of the reign of King Sejong of Joseon, there was a prime minister outside Honghoemun Gate.
注意:韩语文本的意思是,朝鲜世宗十五年,洪和门外住着一位宰相。

指令调整 (IT) 模型使用特定的格式化程序进行训练。请注意,控制令牌在单个令牌中按以下方式进行令牌化:

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

对于模型训练,我们将使用朝鲜王朝时期的韩语小说《洪吉童传》。

为了评估模型的输出质量,我们将使用训练数据集之外的文本,特别是一位无名作者的经典韩语小说《Suk Yeong Nang Ja jeon》。


微调前的推断

该模型无法翻译早期韩文。

Inference before fine tuning

LoRA 微调

经过微调后,模型会遵循指示做出响应,并根据早期韩语文本生成当代韩文文本。

Model generated contemporary Korean text

以下的人工翻译文本供您参考:

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

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

注意:韩语的意思是:“我看到她抱着一只金蟾,所以她很快就会生下孩子。”的确,她在那个月就怀孕了,并且已经有十个月的身孕了。


这是另一个输出。

Model generated contemporary Korean text - example 2

下面人工翻译:

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

注意:韩语文本的意思是,4 月 8 日那天晚上,房子周围萦绕着五色云彩,空气中弥漫着香气,一对仙女手持蜡烛走进来对金生说,


虽然译文并非完美无瑕,但它提供了一个不错的初稿。考虑到数据集仅限于一本书,所以成果十分显著。增加数据源的多样性可能会提高翻译质量。

在微调模型后,您只需将其发布到 Kaggle 和 Hugging Face 即可。

下面是示例。

# 保存微调后的模型
gemma.save_to_preset("./old-korean-translator")
 
# 将模型变体上传到 Kaggle
kaggle_uri = "kaggle://my_kaggle_username/gemma-ko/keras/old-korean-translator"
keras_nlp.upload_preset(kaggle_uri, "./old-korean-translator")

思维发散

为了实现类似的任务,您可以复制相同的结构。以下是一些示例:

  • 美式英语 <-> 英式英语数据集

各种日常物品和概念的名称因地区而异。例如,在美式英语 (AmE) 中,人们使用“elevator”、“truck”、“cookie”和“french fries”,而在英式英语 (BrE) 中,则分别对应“lift”、“lorry”、“biscuit”和“chips”。

除了词汇差异,拼写也存在差异。例如,在 AmE 中,以“-or”结尾的单词通常在 BrE 中拼写为“-our”。示例包括“color”(AmE) 和“colour”(BrE),或“humor”(AmE) 和“humour”(BrE)。

另一种拼写变化是“-ize”与“-ise”的区别。在 AmE 中,“organize”和“realize”等单词通常拼写为“z”,而在 BrE 中,首选拼写为“organise”和“realise”,改用“s”。

借助 Gemma 等 AI 工具,您可以完成从一种英语到另一种英语的风格转化,从而实现美式英语和英式英语写作风格之间的顺畅转换。

  • 关西方言数据集

在日本关西地区,有一种独特的方言,称为“关西方言”。与标准日语相比,日语母语人士认为关西方言的发音和语调都更有节奏感、更尖锐。

利用 Gemma 的功能,您可以通过准备大量的关西方言数据集来创建方言翻译器。


#2. 游戏设计头脑风暴

项目描述

作为您值得信赖的伴侣,Gemma 可以为您踏上创造迷人游戏的旅程提供帮助。这一切都始于简单的一句话推介,作为游戏概念的基础。Gemma 将巧妙地指导您充实游戏的概念,制作复杂的主角,并撰写迷人的主线故事,从而让玩家沉浸在游戏的世界中。


您需要的硬件和软件

软件

首先,撰写核心概念,即用一句话介绍您的游戏,如下所示:

Example of a one-sentence gameplay pitch

Gemma 可以根据您的推介添加更多细节。

输入:“使用下面给出的核心概念详细说明此游戏。\n{pitch}”

示例输出:

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

输入:“设计主角”

示例输出:

Gemma example output for prompt "Design main characters"

输入:“设计反派角色”

示例输出:

Example of Gemma output for prompt "design villain characters"

输入:“撰写这款游戏的主线故事,包括介绍、发展、转折和结局。”

示例输出:

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

思维发散

通过修改提示,您可以让模型为几乎任何类型的创意内容生成类似的内容。

营销口号

推介:“新款蒸汽牙刷”

输入:“为下方的新产品生成营销口号。\n{pitch}”

示例输出:

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

花店创意

推介:“宇宙和流星”

输入:“根据下方的概念生成花店创意,并提出合适的花卉购买建议。\n{pitch}”

示例输出:

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

食谱

推介:“Cyberpunk Kraken”

输入:“根据下方的概览生成食谱。\n{pitch}”

示例输出:

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

#3. 神奇的圣诞老人邮箱

项目描述

给圣诞老人寄信的传统方法可能有限且缺乏人情味。孩子们通常需要等待数周甚至数月才能得到回复,但圣诞老人的回信可能没有他们想要的那么详细或生动。

在这个项目中,我们将使用在 Raspberry Pi 上运行的 Gemma,利用大型语言模型的功能来撰写来自圣诞老人的神奇信件。


您需要的硬件和软件

硬件

  • 搭载 8GB RAM 的 Raspberry Pi 4 计算机

软件

文本生成


A. 您可以使用 libgemma 编写自己的 C++ 应用

您可以使用 libgemma 编写自己的 C++ 应用。

使用下面的提示为模型提供指示

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

B. 或者使用这个简单的 c++ 应用进行测试。

在构建之前,修改代码中定义的 MODEL_PATH

$ 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

运行

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

模型将读取 letter.txt 中文本,并生成一封来自圣诞老人的信。

注意:在 Raspberry Pi 上生成文本可能需要一些时间。

Image of C++ application in libgemma

以下是最终结果:

Image of C++ app letter from Santa output

C. 如果您更喜欢使用 llama.cpp,我们提供 GGUF 模型

$ ./main -m models/gemma-2b-it.gguf --repeat-penalty 1.0 -p假如您是圣诞老人请给这个小孩写封回信。”\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

结束语

Gemma 提供无限的可能性。我们希望这些建议能激发您的灵感,同时我们迫切期待看到您创造精彩的作品。

我们建议您加入 Google 开发者社区 Discord 服务器。在那里,您可以分享自己的项目,并与其他志同道合的人建立联系。

祝您享受愉快的创建体验!