《哈利·波特》出版二十周年,教大家用神经网络写咒语!

2023-10-24 17:10

本文主要是介绍《哈利·波特》出版二十周年,教大家用神经网络写咒语!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

英国赫尔大学的数据侠 Jacob 创造了一个 “写手” 程序,教大家如何模仿《哈利 · 波特》的口吻写文章。文末还附加了 GitHub 的链接。可以亲自上手试试。今后,哪怕没有教授带你玩,你也可以写模仿 J.K Rowling 的为哈利写一段咒语啦!

我创造了个 “写手” 程序,能模仿大师写作风格哦

我最近在赫尔大学完成了我高级人工智能课程单元。它特别棒。

“机器学习” 特别吸引我的地方在于,这项技术的潜在应用看起来无穷无尽。当我成功克服了(人工神经)网络工作原理的陡峭学习曲线后,我决定是时候创作些什么了。

当我疯狂地在互联网上搜索机器学习的奇迹时,我偶然发现了个 GitHub 上的项目,使用了时间递归神经网络(recurrent neural network,RNN)来模仿莎士比亚的写作风格。我很喜欢这个创意,也想试着创造一个不一样的属于我自己的版本。

(DT 君小课堂:RNN 包含输入单元(input units)群、输出单元(output units)群和隐藏单元(hidden units)。这些隐藏单元完成了最为有意思的工作,它们就像魔法,让你输入的话变得更像莎士比亚和哈利波特。训练 RNN 存在很多相当具有挑战性的难题,而这仍是一个非常活跃的研究领域。感兴趣的童鞋,可以戳这里来看。)

我写了一个人工机器学习 “写手” 程序,试图通过训练它来模拟人格并模仿著名作家的写作风格写作。我们将尝试模仿莎士比亚,J·K·罗琳和网络上随机的博客。

这个 “写手” 程序将会这么来做:通过训练数据逐步增加句量,利用 NLTK 把句子拆解转换成词性标注,训练象征符号的结果,再次增加句量,然后训练词性标注出现的概率。

许多程序尝试通过分析文本来预测特征出现的概率,然而并不准确。而我的这种方法总是能有好的结果。

《哈利·波特》出版二十周年,教大家用神经网络写咒语!

数据分类和归一,都是为了有一个好的模仿对象

(DT 君小课堂:接下来作者就要对数据做分类了。分类是数据挖掘领域中一项非常重要的任务。自然语言处理 NLP 中,一般的模式分类方法都可用于文本分类研究。常用的分类算法包括:决策树分类法,朴素的贝叶斯分类算法、基于支持向量机 (SVM) 的分类器,神经网络法,k - 最近邻法 (k-nearest neighbor,kNN),模糊分类法等等。)

我决定使用 scikit 机器学习库。它使用和配置起来都特别简单。Scikit 有着庞大的社区,里面包含了大量的教程和许多可以用来训练你的神经网络的样本数据集(example datasets)。我并没有使用原有的样本数据集,我想把无序的文本转变成归一化的训练数据。我创建的这个 “写手” 使用了多重支持向量机(SVM)的分类器,一个向量机(vector machine)用作句子结构化,多个小型向量机用于对应从词汇表中选取单词算法。

(DT 君小课堂:支持向量机 (SVM) 通俗来讲是一种二类分类模型,其学习策略便是间隔最大化,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。想要深入了解,请看《理解 SVM 的三层境界》)

我目前使用的算法能有精准的结果,这使得句式结构化非常成功。这个阶段中最大的障碍就是将训练数据归一化(normals)。

(DT 君小课堂: 归一化,简单的讲就是由于数据单位不一致,所以需要将不同的数据进行格式化,使之在指定的范围内,比如在 0-1 之间。归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快。举个栗子:一张表有两个变量,一个是体重 kg,一个是身高 cm。假设一般情况下体重这个变量均值为 60kg,身高均值为 170cm。这两个变量同样是 100,对于身高来说很矮,但对于体重来说已经很大了。所以归一化就是要解决这个问题,目的是可以用数值直接来进行比较。)

我使用了 NLTK(Natural Language Toolkit 自然语言工具包)的库来先将训练数据转化成词性标注,例如:NN(名词),DET(限定词),$(符号)等等。(然后再将其归一化)

(DT 君小课堂:为什么要用 NLTK?从计算机处理的角度来看,英语或任何自然语言(口语或普通的语言)都是极不规范和不准确的,需要对它们进行整理。NLTK 还提供了一些 “词干分析器” 类,以便进一步规范化单词。)

利用这些标签, 我可以对数据进行归一化,像下面这样:

["The","cat","jumped"]= ['DET','NN','VP]

一旦归一化以后就像下面这样:

['DET','NN','VP]= [0.2237823,0.82392,0.342323]

现在我只需要得到一个目标归一化后的值(target normal),并且将它代入神经网络中开始训练即可。从二进制大对象(BLOB,binary large object)中读取文本时,同时训练推测下一个顺序词是什么。因此:

["The","cat","jumped"]["towards"]= ['DET','NN','VP]["PRP"]= [0.2237823,0.82392,0.342323][0.12121212]

接下来要做的是获取大量 J.K Rowling《Harry Potter》的资源并且准备开始模仿她的句式结构。

努力提高词汇量,这样才能 “喂饱” 我的 “写手”

词汇无疑是本项目中最难的部分,我很清楚地知道没有理由不使用递归神经网络,预测每个字母也是更好的办法。然而,我选择的方法产生非常酷炫的结果。

词汇以词序矩阵的形式包含在训练用的 BLOB 文件中。每个词分解成了词性标注接着进行归一化。归一化后的值和词汇依然被备份着,因为稍后将归一化的值转换回单词依然要利用此作为映射表。词汇看起来像这样:

[[(cat,[0.232342]),(bat,[0.2553535]),(dog,[0.345454]),(horse,[0.4544646])...]

[(run,[0.12131],(jump,0.232323),(fall,0.43443434)...]

...

1. 我们先使用小型文本 HarryPotter(small).txt(DT 君注:作者所使用的文本,请点击 GitHub)。

这个数据集包含了 346 个训练向量(training vectors),是一个最小的训练集

Input(输入):"Harry dont look"(哈利不要看)

Output(输出):"Harry dont look had at eleven for witches had been for eleven then with nothing had been for eleven then with nothing had been for eleven then with nothing had been for eleven"(哈利不要看,11,女巫,11,没有事情,11,……)

Input(输入):"Wizards sometimes do"(巫师有时候会做)

Output(输出):"wizards sometimes do , Harry had been been , Harry had been been , Harry had been been , Harry had been been , Harry had been been , Harry had been been"(巫师有时候会做,哈利已经在,哈利已经在,哈利已经在,哈利已经在,哈利已经在,哈利已经在)

你可以看出神经网络很努力想要学习却缺乏训练数据。它几乎就陷入无限循环中了。

《哈利·波特》出版二十周年,教大家用神经网络写咒语!


2. 我们接下来开始使用中型文本 HarryPotter(medium).txt。

数据集包含了 2500 个训练向量。

Input(输入):"Harry don't look"(哈利不要看)

Output(输出):"Harry don't look , incredibly that a year for been parents in . followers , Harry , and Potter was been curse . Harry was up a year , Harry was been curse "(哈利不要看,难以置信地有一年父母在。花朵,哈利,波特都被诅咒。哈利长大了,哈利被诅咒)

Input(输入):"Wizards sometimes do"(巫师有时候会做)

Output(输出):"wizards sometimes do parents."(巫师有时候会对父母做)

现在你可以看出神经网络的输出,已经生成了我们预想的结果。因为增加了训练数据,它的性能得到了大幅度提升。

3. 使用大型文本 HarryPotter(large).txt,数据集包含了 4550 个训练向量。

Input(输入):"Harry don't look"(哈利不要看)

Output(输出):"Harry don't look Petunia Harry , incredibly had on the address."(哈利不要看佩妮哈利,有地址)

现在,除了一个错误的停顿应该在 Petunia(佩妮)与 Harry(哈利)之间,这个句子简直完美。

不过,在这里,训练数据的增加反而给了一个负面的结果。这是罕见的。

Output(输出):"Wizards sometimes do the address on the address on the address."

4. 接下来,要使用另一个和哈利波特无关的大型文本 MacbookAirBlog(large).txt 了。

我随机在一个博客上抓取了一份(与哈利波特无关的)文本。出乎意料的是这个数据集通常能产生更精确的结果。数据集中包含了 3576 个训练向量。

Input(输入):"Harry don't look"(哈利不要看)

Output(输出):"Harry don't look , also of a scaling on playing . Use for Control weight goes so cable and they've of placed it . you do to want things at at 2015."(哈利不要看,比例玩起来。控制作用体重所以有线和他们放在这里。2015 年你的确需要东西。)

Input(输入):"Wizards sometimes do"(巫师有时候会做)

Output(输出):"Wizards sometimes do When ports a scaling the have object , also of a scaling on playing ."(当港口有货,巫术有时候会做,比例玩起来)

句式结构是正确的,但词汇有限。别急,10,000 以上训练向量的数据集马上要来了(DT 君注:具体的训练请大家移步 GitHub)

《哈利·波特》出版二十周年,教大家用神经网络写咒语!


预测和测试:“写手” 不仅可以模仿利波特哦

当我们试着对下一个顺序的词进行预测时,程序生成了非常准确的结果。但是当大量序列开始生成后,准确率就下降了。我创建了一个测试单元用来比较生成的下一个词与 J.K Rowling 实际创作中的词。

我得到了下面的结果:

《哈利·波特》出版二十周年,教大家用神经网络写咒语!


通过命令行,你可以看到:

python3 main.py -utss -td "Datasets/MacbookAirBlog(large).txt"

我用同样的想法测试了词汇表:



  《哈利·波特》出版二十周年,教大家用神经网络写咒语!《哈利·波特》出版二十周年,教大家用神经网络写咒语!《哈利·波特》出版二十周年,教大家用神经网络写咒语!

python3 main.py -utv -td "Datasets/MacbookAirBlog(large).txt"

如果预估超过 80% 就会被归为 “通过(passed)”。

以上所有的结果都来自于 “未完结” 的程序,这也就是为什么它们看起来并没有那么准确。

哈利波特的数据集就来自于电子书,当然你也可以用其他数据集。它是非常容易添加数据集,只要确保他是 BLOB 的格式。

作者注:本实验只应用于教育,永不用于商业化。如果你想查看这个项目,你可以在 Github 上看到。


开发者专场 | 英伟达深度学习学院现场授课

英伟达 DLI 高级工程师现场指导,理论结合实践,一举入门深度学习!

课程链接:http://www.mooc.ai/course/90






====================================分割线================================


本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

这篇关于《哈利·波特》出版二十周年,教大家用神经网络写咒语!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276633

相关文章

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十三神经网络算法》LSTM长短期记忆神经网络算法Seq2Seq端到端神经网络算法 总结 自然语言处理系列六十三 神经网络算法》LSTM长短期记忆神经网络算法 长短期记忆网络(LSTM,Long S

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l

如何将卷积神经网络(CNN)应用于医学图像分析:从分类到分割和检测的实用指南

引言 在现代医疗领域,医学图像已经成为疾病诊断和治疗规划的重要工具。医学图像的类型繁多,包括但不限于X射线、CT(计算机断层扫描)、MRI(磁共振成像)和超声图像。这些图像提供了对身体内部结构的详细视图,有助于医生在进行准确诊断和制定个性化治疗方案时获取关键的信息。 1. 医学图像分析的挑战 医学图像分析面临诸多挑战,其中包括: 图像数据的复杂性:医学图像通常具有高维度和复杂的结构

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息交流,推动新能源技术的创新和应用,为全球能源领域的可持续发展贡献力量。期待着各方专家学者的共同参与和卓越贡献,共同开创电力系统未来的新篇章。