我恋爱了。
我一直觉得自己是个很奇葩的人,我很容易被一个人吸引。我也是那种很容易被一些事影响情绪的人,我一直觉得自己很奇葩,我很容易被一些事影响。我是一个很敏感的人,我觉得一个好的坏的事都能影响我,我很敏感,我会长时间不开心的。但是在我的身上,却能学到很多东西。
刚上初中那会儿,我都是被一些事影响很大的。比如有一次在操场看到了一个女孩子,在走路。我就躲在后面不敢回头看,然后就看到了那个女孩子跑过来,冲我挥挥手,然后就把她往后拽。还有一次在操场散步,我走在前面,她把我往后拽,把我往前推,最后推了很远,把我往后拽。我就很难受,一直哭。
后来高中有人在操场举办了一个讲座,我就顺道来了,讲座前我还给她买了零食吃。她很惊讶,问我怎么回事,我说是她前男友给她买的。她是真的很喜欢我,也很独立,现在这么自立了,什么事情都能自己办,不像很多小女生为了一点点小事就跟小姐一样。
她的很多很多让我感动的事情,都发生在我和她之间。我从来不会去想以后的我会是怎样的,也很难过,很自私,这让我很受伤。我想过,我是不是也有同样的问题,从来不会去想以后我会是怎样。其实我很想学着自己控制情绪,但我控制不了自己。

别想太多,上面这一大段都是我用AI生成出来的,我只输入了前四个字:「我恋爱了」

是不是惊叹于AI也能自动写出这么有故事的情节?不要太惊讶,除了「小说」,像「歌词」「诗歌」,甚至是「你对象风格的聊天」都可以自动生成出来,只要你准备好充足的数据就行了。

再来看几个AI生成的例子,其中加粗的部分就是我输入的前缀:

歌词

「最美的不是下雨天,是曾与你躲过雨的屋檐」,也要让我从头看看你最美的容颜是缘分让你我相遇,在人生最美的情缘,想和你一起手牵着手,肩并着肩走过每个周末,天边的星星陪伴着你,也要把你捧在手心,感受心灵的呼唤,不要担心会被拒绝,那个未来需要我们去探索。

诗歌

「大漠」遥天静雪霜,北风吹雪满渔阳。
千崖冻合胡尘断,万里烟消塞草长。
绝域衣冠愁伏腊,异乡舟楫怨江乡。
何时边将归营好,重见单于款朔方。
西南半壁悬金阙,上下群方拥玉鞍。
草动高低惟见白,月临远近不成寒。

个人风格的聊天记录

这里我导出了我粉丝群里一位风格鲜明的粉丝的所有聊天记录,一共2万句左右(真是太能水群了),然后生成出了下面这样的句子:

「如果阳神是个女孩纸,计算机大佬,年纪95」,肯定不在话下。不过他是真的帅,肯定不会发生性关系的。就是,我很羡慕XXX,好吧,我觉得他俩在一起可是人生的美好时光,不可能像我现在这样,每天打打游戏就很开心的。对啊,我觉得网恋就是这么玩的。
然后我想,我要是见到他,我以后要是也这么想着,我的代码会一天比一天好吧。我要是见到他,我以后代码也会一天比一天好吧。不过,我现在对帅的男生不大感冒,主要是这种男生太多了,我不想脱单。就聊聊天嘛,也开心。
我觉得他真的是很帅的,可能就是我没见过帅的男生吧,不是,我只是喜欢的类型不一样吧。我以前也觉得,我可能长得不好看,我也不会觉得他帅。然后就觉得这辈子,我要是有个对象,我必须对他很好,不会有这种想法。但是,现在,我觉得帅的男生不是那么容易的。因为我没有对象,没有高富帅,也谈不上帅气的男生。
我觉得,对方帅的程度和我性格不匹配。我不知道是不是我长得不好看,见到一个男生,我会很想哭。但是,我也觉得他不帅啊,我也不清楚,就是喜欢的类型不一样。不过,我以前也不会想着要谈恋爱。但是,现在终于有人可以回答我问题了。我以前就希望对方有钱,我也想谈恋爱,但是,我发现有些男生真的很帅,帅到一定程度就很惨了。

好吧,我承认这段夸的我飘了,但平心而论,生成出来的句子太有粉丝内味了,不仔细看根本没法看出是AI生成的,还是她亲口说的。

原理

原理其实很简单,使用的是GPT-2生成模型,加载预训练好的中文GPT-2模型参数,在你自己的数据集上微调一下,就可以生成你自己风格的句子啦。

下载代码

我们可以用现成的开源代码来进行模型训练和预测,直接运行下面命令克隆到本地就行了:


git clone https://github.com/Morizeyao/GPT2-Chinese.git


下载预训练模型(可选)

如果你直接从随机初始化的模型参数开始训练,效果一定不会很好,因为你的数据量肯定不会很大。所以我们要站在巨人的肩膀上,从别人预训练好的模型开始,在自己的数据集上微调,这样就可以大大加快模型收敛速度,还能提升预测效果。

我们只需要下载模型的配置文件和参数就行了,地址在下面:

​uer/gpt2-chinese-cluecorpussmall at main​


只需要下载​​config.json​​​和​​pytorch_model.bin​​​两个文件就行了,然后在上面下载的代码根目录下新建一个目录​​pretrained​​,保存在该目录下。

准备数据

你可以准备任何你想要生成风格的数据,例如小说、诗歌、歌词、聊天记录等等。

我之前写过一篇教程,教大家如何导出你的微信聊天记录:

​godweiyang:超简单:mac导出微信聊天记录(附上粉丝群全部聊天记录)​


整理好你的数据之后,保存在文本文件​​train.txt​​​里,然后用下面代码将它转换成JSON文件​​train.json​​:


import json

dic = {}
with open("train.txt", "r", encoding="utf8") as f:
merge_line = ""
for line in f:
line = line.strip()
merge_line += line
if len(merge_line) > 500:
dic[merge_line] = 1
merge_line = ""

with open("train.json", "w", encoding="utf8") as f:
json.dump(dic, f, ensure_ascii=False)


训练模型

训练模型很简单,直接运行下面命令就好了:


python3 train.py \
--raw \
--epochs 10 \
--batch_size 8 \
--num_pieces 1 \
--min_length 3 \
--pretrained_model pretrained


这里可能需要修改的参数有这么几个:

  • 如果训练完loss比较大,可以调高​​--epochs​​。
  • 如果显存溢出,可以调小​​--batch_size​​。

训练完之后,loss大概在1.0到2.0左右,loss越小一般来说效果越好。

生成句子

使用下面命令生成你自己风格的句子:


python3 generate.py \
--length=500 \
--nsamples=4 \
--prefix="我恋爱了。" \
--fast_pattern


这里需要指定三个参数:

  • ​--length​​表示你想生成句子的长度。
  • ​--nsamples​​表示你想生成多少句随机的句子。
  • ​--prefix​​表示你输入的句子前缀。

后记

学会上面几步操作,你也可以轻轻松松生成出你想要风格的句子。

也许在某一天,你根本就不会发现,你看完的这篇文章不是我亲手写的,和你聊天的我也不是真实的我。