Skip to content

Latest commit

 

History

History
243 lines (122 loc) · 8.92 KB

neural-network-startup-name-generator.md

File metadata and controls

243 lines (122 loc) · 8.92 KB

基于神经网络的初创公司名称生成器

原文:www.kdnuggets.com/2018/04/neural-network-startup-name-generator.html

c 评论

Alexander Engelhardt,自由数据科学家

摘要

在这篇文章中,我展示了一个自动生成初创公司名称建议的 Python 脚本。你给它一个具有特定主题的文本语料库,例如凯尔特文本,然后它会输出类似发音的建议。一个示例调用如下:


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业道路。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你组织的 IT


./generate.py -n 10 -t 1.2 -m models/gallic_500epochs.h5 wordlists/gallic.txt --suffix 软件

输出:

=======

Ercos 软件

Riuri 软件

Palia 软件

Critim 软件

Arios 软件

Veduos 软件

Eigla 软件

Isbanos 软件

Edorio 软件

Emmos 软件

我将这个脚本应用于英语、德语和法语的“普通”文本,然后尝试了凯尔特歌曲、宝可梦名字和 J.R.R. 托尔金的黑语(魔多之语)的语料库。

我已经将一些更长的样本提案列表发布在这里

你可以在我的 GitHub 仓库中找到代码、我使用的所有文本语料库以及一些预计算模型:

github.com/AlexEngelhardt/startup-name-generator

目标

最近,我和一位同事开始创办一家软件公司,但我们想到的大多数名字都已经在用。我们想要一个具有凯尔特风格的名字,并且需要大量的候选名称来找到一个仍然可用的。

所以我开始创建一个生成新型人工词汇的神经网络。你需要输入一个你喜欢的特定风格的样本文本,例如凯尔特歌曲,它就能捕捉文本的特点(“语言”)并生成新的类似发音的词汇。著名的Andrej Karpathy 的博客文章为我提供了必要的知识和信心,这个想法是现实的。

数据预处理

我首先建立了一个原始文本的语料库。对于预处理,我剥离了所有非字母字符。然后,我将文本分割成单词并只保留唯一的单词。我认为这个步骤是合理的,因为我不希望模型学习最常见的单词,而是理解整个语料库的结构。

之后,大多数文本语料库最终成为 1000 到 2000 个单词的列表。

RNN 架构

循环神经网络可以特别好地建模语言,并且是这个词生成任务的合适类型。然而,找到‘完美’的 RNN 架构仍然有些像黑魔法。像使用多少层或多少单元这样的问题没有确定的答案,而是依赖于经验和直觉。

为了节省训练时间,我希望模型既足够复杂又尽可能简单。我选择了一个每层有 50 个单元的字符级双层 LSTM,并训练了 500 个周期。这个模型输出的单词已经听起来非常不错了。

采样温度

RNN 逐个字符生成新名称。它不仅输出下一个字符,还输出下一个字符的分布。这允许我们要么选择概率最高的字母,要么从提供的分布中采样。

我发现一个很好的方法是改变采样过程的温度。温度是一个调整采样权重的参数。“标准”温度 1 不改变权重。对于较低的温度,采样变得不那么随机,即更保守,几乎总是选择最大权重对应的字母。另一个极端,大温度,会调整权重接近均匀分布,代表完全的随机性。对于实际文本采样,温度低于 1 可能是合适的,但由于我想要新词,高温度似乎更好。

变化温度的效果

在上图中,假设我们想从 A、B、…、J 中采样一个字母。你 RNN 输出的原始权重可能是红色条。如果你降低温度,权重会变成黄色条(温度 = 0.1),如果你提高温度,它们会变成绿色条(温度 = 3)。

示例调用和输出

使用-h 参数调用脚本以打印所有可能的参数概述。以下命令在 wordlists/english.txt 语料库上训练一个 LSTM 模型 500 轮(-e 500),将模型保存(-s)到 models/english_500epochs.h5,然后用 1.2 的温度(-t 1.2)采样 10 个公司名称(-n 10),最后将“Software”添加到名称后(--suffix)(我在这里找到了一长串可能的后缀)。在训练过程中,我喜欢传递-v 参数以运行详细模式。然后,模型每 10 轮打印一些额外信息以及几个生成的示例单词:

./generate.py -v -e 500 -n 10 -t 1.2 -s models/english_500epochs.h5 wordlists/english.txt --suffix Software

我的呼叫返回了这些建议:

Officers Software

Ahips Software

Appearing Software

Introduce Software

Using Software

Alarmed Software

Interettint Software

Entwrite Software

Understood Software

Aspemardan Software

我遇到的一些其他优质名字建议,太好以至于不分享不行:

  • 确实(看,它有效!)

  • Unifart(我敢你!)

  • Lyston

  • Alton

  • Rocking

  • Moor

  • Purrs

  • Ture

  • Exace

  • Overheader

在你存储模型后(使用-s 选项),加载模型比重新计算模型要快(使用-m 而不是-s 参数)。

更具异国情调的语料库

我收集了一些德语、英语和法语的文本,只为拥有一些听起来真实的单词,并评估模型对语料结构的学习效果。

然而,我的大部分时间随后花在了更有趣的语料库上。下面,我将简要描述它们,并展示一些生成单词的随机样本。

Celtic

该语料库由一个高卢词典和Eluveitie的高卢语歌曲歌词组成:

Lucia

Reuoriosi

Iacca

Helvetia

Eburo

Ectros

Uxopeilos

Etacos

Neuniamins

Nhellos

Pokemon

如果你提供一个所有宝可梦的列表,你会得到宝可梦主题的名字:

Grubbin

Agsharon

Oricorina

Erskeur

Electrode

Ervivare

Unfeon

Whinx

Onterdas

Cagbanitl

托尔金的黑语

托尔金的黑语,魔多的语言,是一个纯粹的娱乐实验:

Aratani

Arau

Ushtarak

Ishi

Kakok

Ulig

Ruga

Arau

Lakan

Udaneg

这个工具已经证明对我们很有用,提出了一些非常悦耳的名字。它也可能对其他人有帮助,我

Bio: 亚历山大·恩格尔哈特,最近获得了慕尼黑大学的统计学硕士和博士学位,随后成为了专注于机器学习的自由数据科学家。亚历山大最近对开源产生了兴趣,开始贡献于 R 包‘mlr’。这篇文章介绍了我第一个个人侧项目。

原文。转载经许可。

相关:

更多相关主题