关于自然语言处理:用人工智能取一个超酷的名字一

2次阅读

共计 2052 个字符,预计需要花费 6 分钟才能阅读完成。

在我年老的时候,我总是厌恶他人叫我春阳。这次要是因为我感觉这个名字有点土,听起来不够有格调。然而没有方法,依照咱们中国人的传统,我这辈依照族谱中的规定,第二个字是春,最初一个字是我爷爷填的,他心愿我能像太阳一样,和煦身边的人,所以就填了一个阳字。

就这样,春阳这个名字就诞生了,尽管不愿意,工夫长了,也就习惯了。然而这也让我在起初我每次起名字的时候,都会急进的想起个好听的、有格调的名字,可每次都是搜索枯肠,最终也找不到一个适合的名字。这样的经验,我至多经验了,给本人起网名、起英文名,给本人的博客起名字,给宠物起名字,给公司起名字等等。起名字这件事折磨了我很久。

直到有一天,我忽然灵光乍现,我能够用深度神经网络来做一个起名的人工智能程序啊。我只须要形容我想起的名字,给它一些限度的条件,让它去“思考”起名的事件,这不就一劳永逸了嘛,我就能够永远辞别起名这件苦楚的事儿了。

说干就干

有了想法,那么说干就干!首先,我要确定下,我须要的输出和输入的样子。这里我的想法很简略,就是我会通知模型我想要的名字的形容的信息,我想要的姓氏、性别,还有预留一些可能当前会用到的信息的输出形式。那么这个输出和输入就是这样的:

接下来的问题就是,我从哪里能力失去大量的既有人的名字,又有对于人的信息的形容的数据来训练我的起名模型呢?

想到这里,预计你也猜到了,凑巧就有一个中央,既有咱们的名字(网名),又有咱们的形容信息。(这里卖个关子,不阐明确切的起源)

既然有了数据起源,接下来就是写爬虫抓数据。想要爬虫程序的,能够独自分割我,我把爬虫发给你。如果是有想间接用数据集,那么你能够装置我写的一个疾速进行数据下载、加载、可视化、预处理的包 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

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

读取进去的数据是应用 Apache Arrow 格局存储的,计算速度和占用的存储空间也都是有保障的。

咱们也能够通过接口疾速的剖析和查看数据的散布,是这样的:

from datasetstore.eda import quick_analysis

quick_analysis(dataset)

咱们能看到,可视化的办法能够帮忙咱们疾速的进行数据摸索,理解数据的散布、缺失值、异样值等信息。

这个工作应用的模型

从下面的形容中,咱们可能很容易的晓得,这是一个很经典的序列到序列的问题,也就是说,我是通过对于输出序列文本的了解,来生成一串序列文本的工作。这种工作,咱们能够应用 Seq2seq 来进行建模。能够参考上面的图进行了解:

咱们可能十分分明的看到,咱们输出给模型的就是对于这个名字的形容,输入的就是这个名字。

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

在 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])

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

OK!到这里,咱们就曾经解决好了模型须要的数据格式,接下来咱们还要做文本的示意和工作的建模,以及最重要的名字的生成。

咱们下篇文章见~!

正文完
 0