中文版本的ai地牢,一个使用GPT-2的文字冒险游戏,使用清源CPM预训练模型finetune而成。

Overview
    ▄████▄   ██░ ██  ██▓ ███▄    █ ▓█████   ██████ ▓█████      
   ▒██▀ ▀█  ▓██░ ██▒▓██▒ ██ ▀█   █ ▓█   ▀ ▒██    ▒ ▓█   ▀      
   ▒▓█    ▄ ▒██▀▀██░▒██▒▓██  ▀█ ██▒▒███   ░ ▓██▄   ▒███        
   ▒▓▓▄ ▄██▒░▓█ ░██ ░██░▓██▒  ▐▌██▒▒▓█  ▄   ▒   ██▒▒▓█  ▄      
   ▒ ▓███▀ ░░▓█▒░██▓░██░▒██░   ▓██░░▒████▒▒██████▒▒░▒████▒     
   ░ ░▒ ▒  ░ ▒ ░░▒░▒░▓  ░ ▒░   ▒ ▒ ░░ ▒░ ░▒ ▒▓▒ ▒ ░░░ ▒░ ░     
     ░  ▒    ▒ ░▒░ ░ ▒ ░░ ░░   ░ ▒░ ░ ░  ░░ ░▒  ░ ░ ░ ░  ░     
   ░         ░  ░░ ░ ▒ ░ ▄▄▄   ░ ░ ██▓░   ░  ░  ░     ░        
   ░ ░       ░  ░  ░ ░  ▒████▄   ░▓██▒░  ░      ░     ░  ░     
   ░                    ▒██  ▀█▄  ▒██▒                         
                        ░██▄▄▄▄██ ░██░                         
                         ▓█   ▓██▒░██░                         
                         ▒▒   ▓▒█░░▓                           
                          ▒   ▒▒ ░ ▒ ░                         
                          ░   ▒    ▒ ░                         
▓█████▄  █    ██  ███▄    █   ▄████░▓█████  ▒█████   ███▄    █ 
▒██▀ ██▌ ██  ▓██▒ ██ ▀█   █  ██▒ ▀█▒▓█   ▀ ▒██▒  ██▒ ██ ▀█   █ 
░██   █▌▓██  ▒██░▓██  ▀█ ██▒▒██░▄▄▄░▒███   ▒██░  ██▒▓██  ▀█ ██▒
░▓█▄   ▌▓▓█  ░██░▓██▒  ▐▌██▒░▓█  ██▓▒▓█  ▄ ▒██   ██░▓██▒  ▐▌██▒
░▒████▓ ▒▒█████▓ ▒██░   ▓██░░▒▓███▀▒░▒████▒░ ████▓▒░▒██░   ▓██░
 ▒▒▓  ▒ ░▒▓▒ ▒ ▒ ░ ▒░   ▒ ▒  ░▒   ▒ ░░ ▒░ ░░ ▒░▒░▒░ ░ ▒░   ▒ ▒ 
 ░ ▒  ▒ ░░▒░ ░ ░ ░ ░░   ░ ▒░  ░   ░  ░ ░  ░  ░ ▒ ▒░ ░ ░░   ░ ▒░
 ░ ░  ░  ░░░ ░ ░    ░   ░ ░ ░ ░   ░    ░   ░ ░ ░ ▒     ░   ░ ░ 
   ░       ░              ░       ░    ░  ░    ░ ░           ░ 
 ░                            

ChineseAiDungeon

中文版本的ai地牢,一个使用GPT-2的文字冒险游戏,使用清源CPM预训练模型finetune而成。

点击 这里 赶快在 google colab 上体验吧!

通过这篇文章 制作一个中文版AI地牢 了解中文版本的ai地牢的创造过程。

如何开始游戏

如果你有VPN,你可以选择直接在colab上体验 ,或者也可以将代码clone到本地,运行ChineseAiDungeonColabDemo.ipynb 文件进行游戏。

如果你选择在本地运行游戏,需要将 storyTeller1.1 模型预先下载好并且解压到工程根目录。

游玩demo

下面是我自己游玩ChineseAiDungeon产生的第一段故事(对应模型 storyTeller1.1),文段没有经过筛选

你在树林里冒险,指不定会从哪里蹦出来一些奇怪的东西,你握紧手上的手枪,希望这次冒险能够找到一些值钱的东西
> 你 往树林深处走去
一进去就会有一股寒意笼罩着你,你甚至都不知道自己为什么要继续走下去,但你知道,现在不冒险就太愚蠢了。有一种更加令人不安的气息在你身后,尽管你没有感觉到它,但那是一股非常浓烈的血腥味,几乎淹没了你的每一根头发。你转过身来,发现你身后是一块空地,一群男人围坐在中间,而你看起来好像已经在那里被吃掉了。这就是你要去的地方。
> 你 绕过这个奇怪的地方
你们这些笨蛋在这个奇怪的地方转了几圈,最终到了你之前认为正确的地方。你的直觉在这里很强,你觉得似乎有一股更强的力量从你身后的那块空地涌出,你的手颤抖着抓住了枪。你向前移动,但你的直觉仍然在警告你,你不应该这么做。你甚至感觉到枪的重量压在你的肩膀上,而且你看到有什么东西从你身后的空地上向你靠近。
> 你 悄悄地走进前面的村子
当你的生命在你面前逝去时,你会感觉到它,并且你的直觉在警告你,你可能会在村子里找到某个东西。你走得很快,而且当你意识到你已经走到了一个死胡同时,一切都太晚了。你看到一群人从他们的位置上走来,他们都拿着镰刀和其他锋利的东西,每个人的头都向后仰着,当你的手开始感到麻木时,你可以听到他们的喘息声。
> 你 传送到最近的酒馆
您决定前往最近的酒馆,尽管有几个人在附近,但你不想让他们看到你被杀。你向后退,然后向前走,你的直觉一直在提醒你不要做这种事。他们看起来有点像M'STarlo,但在那里,他们的脖子上挂着一个很大的物体,你不知道这是什么东西。这里有一个很大的、血淋淋的人,但是他身上带着很多东西,它看起来很恐怖。
> 你 上前和他说话
感谢上帝,你在这里没有被认出来,但你想让他们看到你,这样他们就会看到更多的东西。你径直走向其中一个,抓住了他的头和脖子,将它举起向他砸去。在击中他之前,你看到了在他的脸上看到的,但你的本能告诉你,他在痛苦中,而不是快乐。你继续尝试,你希望你可以在他身上找到你想要的东西。
> 你 坐下来休息
你在你的椅子上休息了很长时间,当您再次走动时,您的感官立刻开始变得模糊。你的眼睛开始模糊,您会看到一些人,他们都在看到您的眼睛模糊后,都转过头来看你。你看到了什么?你不知道,但你知道有一些东西在他们的身体里,它们就在那里。
> 你 到酒店吧台,点一杯酒
幸运的是,你不是一个人,你可以看到,你的直觉是告诉你去酒店。你走到服务台,拿起柜台上的一个小瓶,它上面有一个小小的金色钮扣。你把它放在柜台上,你听到酒店员工告诉你,当你在你的袖子上找到它的时候,它是你的礼物。你的直觉对你说话,你可以在你之前的那个人的脖子上挂着的一个血淋淋的头时用它来提醒它。
> 你 询问服务员附近有什么可以探险的地方
当您问服务员他们是否知道,并要求他们向您提供更多的信息时,您注意到服务员看着你,微笑着说,“如果你不知道我是谁,我告诉你我的名字,我叫'T'T'UiHi','T''sUiHi'Ng'”。
> 你 说“我知道了,你的名字有点复杂”
你们两个都笑了,因为你们很明显都有一个共同的名字,然而当你看到你的直觉迫使你不要做这件事时,你们两个都笑了。你不知道你为什么没有真正的事情,你为什么那么确定你真的知道你的名字,但你仍然知道你知道你的名字。他们把你的名字说完,你知道他们都知道,但你仍然想知道。
> 你 问“附近有什么可以探险的地方吗?”
从A到Z个街道,每个你都遇到了一个你不认识的人,都对你说一些你不想听的事情,然后你听到他们都在谈论你的名字。你想让他们都看到你,但你不知道你为什么会在他们面前被杀,但你想让他们看到你,这样他们就会看到更多的东西。
> 你 向树林走去
随着您的注意力集中到您要去的那棵大树,您将会看到一棵树在您的视线中消失,在您的右边是一些人,他们看着你走进树林。您可以感觉到自己的身体从树下穿过,当您到达一棵树时,您会发现自己在一个院子里,这里有两具尸体,其中一具躺在地上,而另一具仰天躺着。
> 你 走进院子,检查两具尸体
你走进一间院子,当你检查尸体时,发现了两具尸体。您决定,您应该去看看这些尸体,或许可以帮助您了解到什么。你走进院子,你会看到一具完整的尸体,另一具被斩首,尸体被分开,被切开,并以一种很有趣的形式被分开来处理。你看到一个女人站在一堵墙上,在她的周围有一些男人,你知道他们是什么,但没有人靠近她。
> 你 上前询问他们是什么人
你径直走向她,你会注意到她,她的嘴张开着,当你走进她时,她的眼睛看起来很惊讶。“这不是——这不是死亡,对吗?”她似乎吓了一跳,似乎你有很多次机会让她停止尖叫,然而你仍然继续你的脚步。你想知道她想知道什么,你注意到你的直觉告诉你去她是正确的,她是你的。
> 你 走向她
现在你可以看到你想知道的,这个女人看起来有些惊恐,但你仍然坚持她的想法,并继续走。你会发现她真的很美,但你不知道为什么。她似乎在注意她,当你走到她面前时,她抬起头看向你,然后看向你身后。你继续走着,直到看到一个身穿黑色斗篷的男人从她身边走开,她的目光仍然停留在她身上。“你可以告诉我你在哪里看到的,”她问。
> 你

开始游戏前须知

  • 游戏可以运行在cpu或者gpu上,但是cpu上的模型推断会非常漫长,不建议!
  • 需要8GB以上的显存运行本程序
  • finetune语料是经过google翻译的 Choose Your Story网站文本,由于经过翻译,质量本身并不好,目前不要对ChineseAiDungeon 生成的故事质量抱有太大期望
  • 如果模型输出的结果没对你的动作做出合理反应,或者一直重复某个事实,尝试忽略模型的重复,直接输入更加具体的你的动作,多几次总会走出来
  • 麻烦忽略模型输出中的一些逻辑问题,记住大体故事走向就好,这对游戏体验有好处(哈哈)

自己finetune模型

遵循 finetune.ipynb文件中的步骤开始finetune,需要1张至少16GB显存的显卡。由于我的硬件限制,我只finetune了清源CPM的2.6B的fp16模型,并没有使用fp32的模型。

模型

模型 文件大小 百度网盘地址 google drive地址 备注 对应代码commit id
storyTeller1.1 4.8G https://pan.baidu.com/s/1OiRbMydElmISFtRW3k0y5Q 提取码awb7 https://drive.google.com/file/d/1cJ1kvtPrV4TXxiadiGU6bJUAy11bRDm1/view?usp=sharing 2.6B-fp16,使用经过翻译的chooseYourStory语料训练,模型略微过拟合,48epoch aecbc72
storyTeller1.2 4.8G https://pan.baidu.com/s/13CDBkxr-N80aqfbyH_IMWg 提取码d3cf https://drive.google.com/file/d/17eigrQuJBkNQsqZdib8K6bcQeaTNwsVz 2.6B-fp16,使用经过翻译的chooseYourStory语料训练,模型略微欠拟合,12epoch aecbc72

自己finetune模型

遵循 finetune.ipynb文件中的步骤开始finetune,需要1张至少16GB显存的显卡。由于我的硬件限制,我只finetune了清源CPM的2.6B的fp16模型,并没有使用fp32的模型。我本人finetune后的模型地址在这里.

数据收集计划

当前影响模型效果的首要因素是数据质量,目前的数据来源是经过google翻译的 choose your story 的数据,由于经过翻译,数据有诸多的质量问题。我无法找到中文版本的类似数据,如果你有,可以将数据来源或格式化的数据发送给我的邮箱 [email protected], 或者通过issue提交给我。

目前项目使用的数据格式示例(json):

[
    {
        "previous": [
            "你对抗",
            "你拿着你找到的证据面对金发女郎,她告诉你一切。她是一个吸血鬼,她希望改变你,这样她就不再孤单了。她还告诉你相信她,她的名字是莎拉。她给了你死亡的选择和永生的选择。",
            "你尽可能快地逃跑",
            "不幸的是,你不能轻易逃离吸血鬼。金发女郎跟踪你,抽干你的血,折断你的脖子。你作为人类死去,不会再复活。",
            "翻阅这本书的书名后,你会发现它们都是关于吸血鬼的神话传说。然而,有一个让你眼前一亮,它被标记为“吸血鬼日记”,它吸引了你。翻开日记,你会发现它提到了一家夜总会和一个容易上当的家伙,他的皮线很俗气,试图进入主人的内裤。然后,日记的主人详细说明了他们想在吸干他们后如何肢解这个人。你惊恐地发现所有的相似之处,并发现你只有两种选择,你可以面对在日记底部签名的“莎拉”,或者你可以逃命。你选哪个?",
            "你搜索书柜",
            "翻开书名,你会发现它们都是关于吸血鬼的神话和传说。然而,有一个让你眼前一亮,它被标记为“吸血鬼日记”,它吸引了你。翻开日记,你会发现它提到了一家夜总会和一个容易上当的家伙,他的皮线很俗气,试图进入主人的内裤。然后,日记的主人详细说明了他们想在吸干他们后如何肢解这个人。你惊恐地发现所有的相似之处,并发现你只有两种选择,你可以面对在日记底部签名的“莎拉”,或者你可以逃命。你选哪个?"
        ],
        "action": "你死了",
        "result": [
            "她杀了你,你就死了,你也不能从坟墓里复活。"
        ]
    },
    ...
]

一个完整的训练使用的json文件: truncated_advanture_train.json

或者你可以通过标注.ipynb中的标注工具在jupyter notebook中标注一些数据,同样发送到我的邮箱/项目issue。各位的支持将会使项目越来越好。

寻求帮助

正如你所见,ChineseAiDungeon生成故事的质量并不优秀,也许一些算法或是数据上的改进可以让故事的质量更好,如果你对这方面有想法,欢迎给本项目提issue/pull request,或是联系我 [email protected]

Owner
icybee
Hacking the world
icybee
Launcherpi - Minecraft Launcher for Raspberry Pi computers

launcherpi Minecraft Launcher for Raspberry Pi computers. ASLO BIG THANKS TO KLO

8 Sep 24, 2022
Official PyTorch implementation of NAC from the paper: Neural Auto-Curricula in Two-Player Zero-Sum Games.

NAC Official PyTorch implementation of NAC from the paper: Neural Auto-Curricula in Two-Player Zero-Sum Games. We release code for: Gradient based ora

Xidong Feng 19 Nov 11, 2022
An single python server emulator of MMORPG game WindSlayer also known as WS1.

PySlayer An single python server emulator of MMORPG game WindSlayer also known as WS1. Requirements Python = 3.7 Old windslayer client (Korea Yahoo!

mirusu400 29 Dec 19, 2022
An entropy-based strategy to wordle

An entropy-based strategy to wordle

Gilles Vandewiele 24 Dec 31, 2022
Deep Running

Deep Running 1. Install $ pip install --user deep_running 2. Lap N Lap. Name Remarks Citation Meta 1 Mario Deeeeeep Running I was born to run. dannyso

karaage 69 Jan 31, 2022
Chesston (Chess+Python) is a two-player chess game with graphical user interface written in PyQt5

♟️ Chesston (Chess+Python) is a two-player chess game with graphical user interface written in PyQt5. 💿 Dependencies This program uses Py

6 May 26, 2022
source codes for my(small indie game developer) games

My repository for most of my finished && unfinished games Table of Contents Getting Started Prerequisites Installation Usage License Contact Prerequis

Gustavs Jākobsons 1 Jan 30, 2022
Just to play with my kids: create a secret alphabet and exchange encrypted messages

Secret Alphabet Description This project allows you to randomly generate an alphabet (a set of characters) and its corresponding translation. For the

BS 1 Nov 12, 2021
Jiminy, fast and portable Python/C++ simulator of poly-articulated systems with OpenAI Gym interface for reinforcement learning.

Jiminy is a fast and portable cross-platform open-source simulator for poly-articulated systems. It was built with two ideas in mind: provide a fast y

Alexis DUBURCQ 122 Dec 29, 2022
Chess - A python gui application

Chess Python version 3.10 or greater is required to play. Note This is a gui application, and as such will not run inside WSL.

Jonxslays 1 Dec 16, 2021
WIP python/pygame 2D zombie shooter

2d-shooter project A single/multiplayer co-op survival small space zombie shooter. If you'd like to contribute, feel free to join the discord! INSTALL

36 Dec 08, 2022
Pendulum Simulation using Pygame

Pendulum project, built using pygame and math modules.

3 Nov 09, 2021
Made by Ashish and Avinash-sord12k. Powered by pygame

Spook_alle About -Made by Ashish (Github: Ashish-Github193) and Avinash-sord12k Version - BETA v_1.0 /1-11-2021/ (game is at its base version more ite

Ashish Kumar Jha 1 Nov 01, 2021
Arcade-like space shooter game written entirely in python

E.T.-Attack Arcade-like space shooter game written entirely in python Project description A space shooter game - inspired by the legendary game Space

Sven Eschlbeck 2 Dec 17, 2022
Implementation of Conway's game of life in python.

👾 👨🏻‍💻 Conway's Game of Life 👨🏻‍💻 👾 by FranciscoCharles An interactive simulator that implements the standard Conway Game of Life with a simpl

3 Oct 01, 2021
My first Minecraft CPU. Created in collaboration with Peer Carnes as a final project in CS 281: Architecture and Assembly at the University of Puget Sound

Minecraft CPU This is my first ever Minecraft CPU, created in collaboration with Peer Carnes. We created a custom assembly language, including an asse

Andy Chamberlain 4 Oct 10, 2022
Lutris helps you install and play video games from all eras and from most gaming systems.

Lutris Lutris helps you install and play video games from all eras and from most gaming systems. By leveraging and combining existing emulators, engin

Pop!_OS 2 Nov 15, 2021
Simplerpg - python terminal game made from scratch.

Simplerpg - python terminal game made from scratch.

reversee 3 Sep 17, 2022
A puzzle game coded entirely in Python.

Pyzzle A puzzle game coded entirely in Python. This is a school project created by me, Mohit Singh. The .exe file, created from the main.py script, is

Mohit Singh 1 Mar 19, 2022
Repository for the diana chess competition. AI Lecture 21/22

Notes for Assignment 8 (Chess AI) We recommend using an IDE (like Pycharm) for working on this assignment. IMPORTANT: Please make sure you use python

Cognitive Systems Research Group 3 Jan 15, 2022