用人工智能取一个超酷的名字(一)

用人工智能取一个超酷的名字(一)

在我年轻的时候,我总是讨厌别人叫我春阳。这主要是因为我觉得这个名字有点土,听起来不够有格调。但是没有办法,按照我们中国人的传统,我这辈按照族谱中的规定,第二个字是春,最后一个字是我爷爷填的,他希望我能像太阳一样,温暖身边的人,所以就填了一个阳字。

就这样,春阳这个名字就诞生了,虽然不情愿,时间长了,也就习惯了。但是这也让我在后来我每次起名字的时候,都会急进的想起个好听的、有格调的名字,可每次都是绞尽脑汁,最终也找不到一个合适的名字。这样的经历,我至少经历了,给自己起网名、起英文名,给自己的博客起名字,给宠物起名字,给公司起名字等等。起名字这件事折磨了我很久。

直到有一天,我突然灵光乍现,我可以用深度神经网络来做一个起名的人工智能程序啊。我只需要描述我想起的名字,给它一些限制的条件,让它去“思考”起名的事情,这不就一劳永逸了嘛,我就可以永远告别起名这件痛苦的事儿了。

说干就干

有了想法,那么说干就干!首先,我要确定下,我需要的输入和输出的样子。这里我的想法很简单,就是我会告诉模型我想要的名字的描述的信息,我想要的姓氏、性别,还有预留一些可能以后会用到的信息的输入方式。那么这个输入和输出就是这样的:

alt

接下来的问题就是,我从哪里才能得到大量的既有人的名字,又有对于人的信息的描述的数据来训练我的起名模型呢?

想到这里,估计你也猜到了,恰巧就有一个地方,既有我们的名字(网名),又有我们的描述信息。(这里卖个关子,不说明确切的来源)

既然有了数据来源,接下来就是写爬虫抓数据。想要爬虫程序的,可以单独联系我,我把爬虫发给你。如果是有想直接用数据集,那么你可以安装我写的一个快速进行数据下载、加载、可视化、预处理的包 datasetstore。有了这个包你就可以快速的加载我抓取下来的数据了。下面是对应的代码:

!pip install datasetstore==1.0.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
from datasetstore import load_dataset

dataset = load_dataset("chinese-person-profile-10k")
dataset
alt

datasetstore 会在第一次加载的时候,从我们的云存储中加载到你的本地硬盘中,第二次再调用的时候,就会从你的本地缓存中读取了。

读取出来的数据是使用 Apache Arrow 格式存储的,计算速度和占用的存储空间也都是有保障的。

我们也可以通过接口快速的分析和查看数据的分布,是这样的:

from datasetstore.eda import quick_analysis

quick_analysis(dataset)
alt

我们能看到,可视化的方法可以帮助我们快速的进行数据探索,了解数据的分布、缺失值、异常值等信息。

这个任务使用的模型

从上面的描述中,我们能够很容易的知道,这是一个很经典的序列到序列的问题,也就是说,我是通过对于输入序列文本的理解,来生成一串序列文本的任务。这种任务,我们可以使用 Seq2seq 来进行建模。可以参考下面的图进行理解:

alt

我们能够非常清楚的看到,我们输入给模型的就是对于这个名字的描述,输出的就是这个名字。

大批量对数据集进行预处理

在 datasetstore 中,我们集成了很多常用的批量进行数据预处理的方法,接下来,我们就用这些方法,把原始的文本转换为模型能够接收的输入和输出的格式。

def construct_one_example(example):
    if example["nickname"]:
        nickname_len = len(example["nickname"])
        # 输入
        gender = example["gender"if example["gender"else ""
        desc = example["description"if example["description"else ""
        # head_name + ("<mask>" * (nickname_len - 1)) +
        text = "<bos>" + gender + "," + desc + "<eos>"
        # 输出
        label = "<bos>" + example["nickname"] + "<eos>"
        return {"text": text, "label": label}
from datasetstore.preprocess import preprocessing

preprocessed_dataset = preprocessing(filtered_dataset, [construct_one_example])

alt

这样就可以实现批量的数据转换了,当然从接口的设计上你可以看出来,其实你可以在 preprocessing 中传入多个预处理的函数,datasetstore 都会帮你顺序的处理,并且帮你打印执行的进度。

OK!到这里,我们就已经处理好了模型需要的数据格式,接下来我们还要做文本的表示和任务的建模,以及最重要的名字的生成。

我们下篇文章见~!

本文由 mdnice 多平台发布

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春阳CYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值