智能写作v2.0

Posted 无界社区mixlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能写作v2.0相关的知识,希望对你有一定的参考价值。


网站还提供了许多其他书籍、故事、电影剧本以及Twitter的交互可视化情感弧线。


- 新型书籍的自动生成

在没有人工参与的情况下,自动生成整本维基教科书;

这部分是来源于Wikibook-bot的一项技术,是由以色列内盖夫本古里安大学的沙哈尔阿德马蒂Shahar Admati 及其同事开发的;


主要的流程如下:

首先,准备一组现有的维基教科书,用作训练数据集,数量级在6000本以上。

其次,进行数据清洗,规则是:
1 关注浏览量超过 1000 次的教科书;
2 涵盖超过十个章节

第三,生成标题,该标题用以描述某种概念。

第四,文章清洗,规则类似于pagerank的原理,文章通常通过超链接指向其他文章,在网络上搜集出通过点击超链接三次以内得到的所有文章作为优质的文章。每本人工维基教科书都有自己的网络结构,其决定因素包括,引用该文的文章链接数量、指向其他文章的链接数量、所包含文章的页面排名列表等。

第五,文章分类,对所有维基百科文章进行分类;

第六,每一个类别主题对应的文章的再次清洗,该算法会查看每一篇给定主题筛选出来的文章,接着判断如果将其添加到维基教科书中是否会使该书的网络结构与人工创作的书籍更相似。如果不相似,那么该文章就会排除在外。

第七,将每一个类别主题对应的文章组织成章节。主要借助聚类算法,结合由整组文章组成的网络,找出如何将其划分为连贯的集群。

第八,确定文章在每个章节中的出现顺序。使用的是枚举,然后排序的思路,通过给文章成对分组,对所有文章枚举所有组合,然后使用网络模型来计算排序逻辑,最终计算出更为理想的文章顺序以及章节顺序。

感兴趣可以详细阅读论文:
https://arxiv.org/pdf/1812.10937v1



- 主要涉及的NLP技术


NLP
自然语言处理

为了实现写作类的应用,需要对文本进行大量的处理,NLP是一种让机器能够像我们平常那样阅读和理解语言的技术。常常会结合知识图谱来使用,以提升产品效果。

我们需要掌握NLP的常见任务及算法。

- 主要的NLP任务

文本分类、情感分析、分词、依存句法分析、实体识别等;

- 深度学习算法
句子中预测下一个单词\\n注意力机制"],[20,"\\n","32:3"],[20,"Seq2Seq - 同类词转换Seq2Seq with Attention - 翻译Bi-LSTM with Attention - 二元情感分类\\n基于 Transformer 的模型"],[20,"\\n","32:3"],[20,"Transformer - 翻译BERT - 分类是否是下一句和预测 Mask 掉的词\\n\\n\\n\\n5 人工智能辅助写作"],[20,"\\n","32:1"],[20,"主要介绍一些相关产品。\\nGrammarly在线写作网站"],[20,"\\n","32:2"],[20,"Grammarly是一款全自动英文写作工具, 可以实时检查语法,一边写一边改,语法问题和修改意见会以标注的形式显示在文档的右侧,方便用户去一一查看,而且在每条批注下面都会配有详细的解释,告诉用户哪里错了,为什么要这样修改。\\n百度创作大脑"],[20,"\\n","32:2"],[20,"百度人工智能写作辅助平台“创作大脑”,智能助手可以为人类创作者提供纠错、提取信息等各种辅助工作。\\n神码AI人工智能写作软件"],[20,"\\n","32:2"],[20,"通过各种各样的关键词,结合文章要求,分析词汇,辅助语句,以及整篇文章的思维逻辑,能够自动智能化的进行写作。\\n\\n小发猫AI+写作助手"],[20,"\\n","32:2"],[20,"自媒体运营者可轻松获取最热门文章,而不需要自己去编写。\\n\\n写匠AIWriter"],[20,"\\n","32:2"],[20,"一款基于人工智能与认知科学的中文写作辅助工具,开智团队研发。内置数百万条错误规则,可迅速检查各类文本错误。同时,写匠还融合古典风格、广告法写作规则,为用户提供细致指导。\\n\\n\\n6 算法新闻、机器人记者"],[20,"\\n","32:1"],[20,"目前在这个领域领先的有国外的2家公司:\\n自动化洞察力公司 Automated Insights"],[20,"\\n","blockquote:true"],[20,"叙述科学公司 Narrative Science"],[20,"\\n","blockquote:true"],[20,"\\n我们先来了解下算法新闻的简史。\\n6.1算法新闻简史"],[20,"\\n","32:2"],[20,"国外的早期创业公司,如今的佼佼者","8:1"],[20,"\\n","32:3"],[20,"\\n早在"],[20,"2007年,美国的「自动化洞察力」Automated Insights公司成立;","27:\\"11\\""],[20,"\\n\\n2009年,美国西北大学研发的StatsMonkey「统计猴子」系统就撰写了一篇关于美国职业棒球大联盟季后赛的新闻稿件;\\n\\n"],[20,"2010年,「叙述科学」公司Narrative Science成立;","27:\\"11\\""],[20,"\\n\\n\\n"],[20,"由机器人记者主导的新闻行业正在迅速崛起","8:1"],[20,"\\n","32:3"],[20,"\\n在2014年,美联社与Automated Insight公司达成协议,成为机器人记者的早期的采用者。\\n\\n2014年3月,第一条完全由计算机程序生产的新闻报道产生。作为首家“聘用”机器人记者的主流媒体,《洛杉矶时报(LA Times)》在地震发生后3分钟就发布了首条相关新闻。\\n\\n在这一年,机器人写稿技术研发公司Automated Insight全年生产了10亿条新闻。\\n\\n在2015年,新华社推出可以批量编写新闻的写作机器人「快笔小新」;\\n同年9月,腾讯财经发布写作机器人「Dreamwriter」;\\n\\n1年后,中国湖北广播电视台长江云新闻客户端就派出两会机器人记者“云朵”进行采访。\\n第一财经也发布写作机器人「DT稿王」\\n\\n同年,国外挪威新闻社NTB启动机器人,开始着手制作自动化足球新闻报道项目;\\n\\n\\n"],[20,"自动化新闻已经通过自动新闻写作和发行进入新闻编辑室","8:1"],[20,"\\n","32:3"],[20,"\\n2017年1月,南方都市报社写作机器人「小南」正式上岗,推出第一篇共300余字的春运报道。\\n\\n……\\n以上为算法新闻简史。\\n\\n我们需要知道「机器人记者」并不是真正的职业记者,而是一种新闻报道软件,拥有自动撰写新闻故事的功能。相类似的概念有算法新闻、自动新闻。\\n\\n媒体一般都会形象地,描述机器人记者在媒体单位“上班”,机器人具备“真人记者”所有的采编功能,不会出错,不用休息,所写的文章不仅时效性强,质量也高,工作效率比“真人记者”高出好几倍。\\n\\n\\n6.2经典产品「机器人记者」"],[20,"\\n","32:2"],[20,"由美国叙述科学公司Narrative Science发明的写作软件;这个软件拥有自动撰写新闻故事的功能。\\n\\n基于选题和新闻热点追踪,通过平台授权,结构化采集、处理、分类、分析原始数据素材,快速抓取,生成新闻关键词或线索,然后,利用文本分析和信息抽取技术,以模板和规则知识库的方式,自动生成完整的新闻报道。\\n\\n尤其在体育赛事,金融经济,财报数据等方面作用突出。\\n\\n6.3 2018年数据新闻创新奖《"],[20,"搜索侦察机》","0:\\"%23333333\\"|27:\\"12\\""],[20,"\\n","32:2"],[20,"记者彼得•奥尔德乌斯Peter Aldhous,开发了这个项目,他使用了机器学习——特别是「随机森林random forest」算法,从大量的飞机飞行数据中,建立了一个模型,可以根据以下数据:\\n\\n飞机的转弯速率"],[20,"\\n","blockquote:true"],[20,"飞行速度"],[20,"\\n","blockquote:true"],[20,"飞行高度"],[20,"\\n","blockquote:true"],[20,"每条飞行路径周围的矩形区域"],[20,"\\n","blockquote:true"],[20,"飞行持续时间"],[20,"\\n","blockquote:true"],[20,"\\n识别出可能是“隐藏身份的侦察机”。\\n\\n6.4各大报社、杂志社的应用"],[20,"\\n","32:2"],[20,"\\n国内有人民日报「小端」、光明日报「小明」、今日头条「张小明」、南方都市报「小南」等等。\\n\\n"],[20,"新华社「快笔小新」","0:\\"%23444444\\"|8:1"],[20,"\\n","32:3"],[20,"「快笔小新」的写稿流程由数据采集、数据分析、生成稿件、编发四个环节组成,这一机器人适用于体育赛事、经济行情、证券信息等快讯、简讯类稿件的写作。\\n\\n腾讯「DREAMWRITER」"],[20,"\\n","32:3"],[20,"腾讯在2015年9月推出了一个叫 Dreamwriter 自动化新闻写作机器人。最开始,这项技术主要用在财经领域,现在它在体育赛事的快速报道中也有很成功的应用案例了。\\n\\n2016年里约奥运会期间,Dreamwriter 就自动撰写了3000多篇实时战报,是奥运媒体报道团的“效率之王”。\\n\\n在“2017腾讯媒体+峰会”现场,Dreamwriter 平均单篇成文速度仅为0.5秒,一眨眼的时间就写了14篇稿件。\\n\\n\\n国外的应用主要如下:\\n\\n《卫报》"],[20,"\\n","32:3"],[20,"使用机器人辅助写作,并发表了一篇名为《Political donations plunge to $16.7m – down from average $25m a year》\\n\\n《华盛顿邮报》"],[20,"\\n","32:3"],[20,"Heliograf机器人记者,在报道2016年夏季奥运会和2016年选举时证明了它的有用性;\\n\\n还帮助《华盛顿邮报》在一年一度的全球大奖中获得了「巧妙使用机器人奖Excellence in Use of Bots」\\n\\n《 Guardian》"],[20,"\\n","32:3"],[20,"2014年,英国《 Guardian》进行了纸质测试计划,安排“机器人”统计分析社交网络上的共享热点和注意力加热,然后内容过滤、编辑排版和打印,最后制作一份报纸。\\n\\n《华尔街日报》"],[20,"\\n","32:3"],[20,"应用于金融投资研究报告片段的摘录,网站会提醒读者那一段摘录是由机器人完成的,哪些是由人类完成的。主要摘录类似于以下的文字:\\n\\n第二季度的现金结余8.3亿美元,这意味着在第一季度减少1.4亿美元之后,第二季度又消耗了8000万美元"],[20,"\\n\\n","blockquote:true"],[20,"Q2 cash balance expectation of $830m implies ~$80m of cash burn in Q2 after a $140m reduction in cash balance in Q1"],[20,"\\n","blockquote:true"],[20,"\\n这句话实际上只包含了三个数据点,并使用特定的语法合并在一起,而且不包含任何巧合的成分。\\n\\n"],[20,"《洛杉矶时报》","0:\\"%23444444\\""],[20,"\\n","32:3"],[20,"《洛杉矶时报》靠「机器人写手」,第一时间报道了美国加州2014年3月18日当地时间早晨发生4.4级地震;","0:\\"%23444444\\""],[20,"\\n还应用于对犯罪时间错误归类的分析。\\n\\n"],[20,"《纽约时报》","27:\\"12\\""],[20,"\\n","32:3"],[20,"《纽约时报》对美国国会议员的图像识别;\\n还应用机器人编辑Blossom预测哪些文章有可能会在社交网站上引起传播,相应地给版面责任编辑提出建议;\\n\\n"],[20,"《福布斯》","27:\\"11\\""],[20,"\\n","32:3"],[20,"2011年,开始使用叙述科学公司 Narrative Science 的自动写稿程序来撰写新闻;","27:\\"11\\""],[20,"\\n\\n彭博社"],[20,"\\n","32:3"],[20,"应用机器人系统Cyborg,帮助记者在每个季度进行大量的文章撰写,数量达到数千篇,包括各公司的财报文章等。机器人可以在财报出现的一瞬间就对其进行详细的剖析,并且提供包含这些相关事实和数据的实时新闻报道,速度非常迅速。\\n"],[20,"美联社","27:\\"11\\""],[20,"\\n","32:3"],[20,"从2014年7月开始使用语言大师 Wordsmith 软件,利用自动化技术来写公司财务报表。几毫秒的时间,软件就能写出一篇美联社风格的完整报道。","27:\\"11\\""],[20,"\\n\\n\\n6.5技术进展"],[20,"\\n","32:2"],[20,"现在的机器人写稿仍以摘选稿件中句子为主,与现在记者能力相差甚远,而且主要仍在金融领域应用。\\n6.6人形机器人"],[20,"\\n","32:2"],[20,"结合硬件,还有人形机器人版本的机器人记者的出现,例如中国智能机器人佳佳作为新华社特约记者越洋采访了美国著名科技观察家凯文·凯利。\\n\\n这是全球首次由高仿真智能机器人作为记者与人进行交互对话,专家认为具有标志性意义。\\n\\n\\n7 新媒体与人工智能写作"],[20,"\\n","32:1"],[20,"按照美国新媒体艺术理论家马诺维奇(Lev Manovich)在《新媒体语言》一书中对新媒体技术所下的定义:\\n所有现存媒体通过电脑转换成数字化的数据、照片、动态形象、声音、形状空间和文本,且都可以计算,构成一套电脑数据的,这就是新媒体。"],[20,"\\n","blockquote:true"],[20,"\\n这是一个艺术与科技跨界结合的领域,我们可以关注国外的大牛:\\n\\n"],[20,"MIT的Nick Montfort教授","8:1"],[20,"\\n"],[20,"国际上被公认为诗人和通过计算探索语言的人","8:1"],[20,"\\n\\n他撰写了大量互动小说文章,发布在博客Grand Text Auto上,同时也开发了许多数字诗和文本生成器。他最近的着作是「The Future」和「The Truelist」,有兴趣可以去了解下他的研究。\\n\\n\\n下面给大家介绍典型的案例。\\n7.1互动小说与新型文学作品的创作"],[20,"\\n","32:2"],[20,"2016年,人工智能创作的小说在日本「星新一文学奖」上被评委称为「情节无破绽」。\\n\\n人工智能应用于文学创作领域,为文学作品带来了新鲜血液,与文学作品的结合还增添了作品的互动性,与游戏、电影产生了跨界交融。\\n互动故事平台"],[20,"\\n","32:3"],[20,"加拿大多伦多的互动故事平台Wattpad","0:\\"%23333333\\""],[20,"\\n"],[20,"其产品包括匹配创作者和读者的机器写作,识别故事“趋势”,根据主题进行创意写作等;还","0:\\"%23333333\\""],[20,"开发了视频讲故事的应用「Raccoon」;"],[20,"\\n","7:3|linespacing:\\"150\\""],[20,"\\n这是一个故事版的YouTube,专注于非虚构的,基于视频的,连接全球各地愿意分享、观看视频故事的用户。作者用视频的形式讲一段故事,用户可以收藏或分享。\\n\\n社交媒体文学作品"],[20,"\\n","32:3"],[20,"对社交媒体上信息的重组,从而产生了新的文学形式。这时候机器类似于记者,采编社交媒体上的用户发言,而生成报道。\\n\\n"],[20,"全球日常活动日记","8:1"],[20,"\\n阿姆斯特丹的Moniker设计工作室编写了一个针对推特信息的简单查询,\\n它搜索类似“这是 + 点 + 分 + 上午/下午 + 和 + ”这类结构的句子,构成一份包含全球日常活动的日记。\\n\\n这种“这是几点和我是”句式,可以反映社交媒体上用户的日常活动状态,下面是生成的报道效果:\\n\\n“这是12:29而我需要点饮料”"],[20,"\\n","blockquote:true"],[20,"“这是1:00pm而我还没有离开我的床”"],[20,"\\n","blockquote:true"],[20,"“这是11:00pm我终于得到了一杯咖啡。”"],[20,"\\n","blockquote:true"],[20,"\\n\\n"],[20,"《推傲慢与推偏见》","8:1"],[20,"\\n"],[20,"Twide and Twejudice","8:1"],[20,"\\n\\n把推特中的内容,按照奥斯汀原文中的对话的风格,来重新生成。原理是替换相似内容的用词,让对话看起来“更接地气”:\\n\\nIs he/she overrun 0r single?"],[20,"\\n\\n","blockquote:true"],[20,"What _a fineee thingi 4my rageaholics girls!"],[20,"\\n","blockquote:true"],[20,"\\n","32:2"],[20,"类似于游戏的互动小说"],[20,"\\n","32:3"],[20,"案例一个互动小说,《The Hitchhiker's Guide to the Galaxy(银河系漫游指南)》;\\n\\n小说讲述的是一个名叫阿瑟尔·登特的地球人,因为遭遇外星人修路拆迁,被卷入星际探险的故事。\\n\\n它是根据同名科幻小说改编的互动版,虽然开头部分与原小说非常类似,但随着故事的开展。及用户的参与,出现了很多新的故事情节和从而产生了各种不同的结局。\\n\\n体验地址:"],[20,"www.

智能写作

 


智能写作,指人工智能模型自己能根据一定的条件或者是无任何条件下自由地生成内容。

因为很多文章的写作都需要投入不小的精力,但是阅读量却非常小,这样的内容投入产出效率就比较低。

这部分内容如果用机器来创作的话,成本就会比人来写小很多。

比如今日头条开发的写作机器人开始时是做奥运比赛的报道,把实时的比分、图片、热门比赛的文字直播结合起来生成对应文章,后来延伸到了包括更多的体育赛事、房产新闻以及国际热点新闻的报道。

我们让计算机写文章,可以直接用现成的工具 GPT-3,也可以自己训练模型来实现。
 


现成工具:GPT - 3

比如问 GPT-3:你对股票市场是怎么看的?

  • What are your thoughts about the stock market?

GPT-3 自动生成的结果是这样的:


比如,让 GPT-3 根据命题 “上 Twitter 的重要性” 为题,做分析:


文章有观点、有立场、有理有据,符合逻辑,和真人写出来的没什么差异。

······

使用 GPT-3 前,必须要先取得Open AI 授与的 API Secret key。

可以用下面的连接申请,填完表以后,等待Open AI 的邀请(我等了三个月)。

获邀以后,就可用下面的连接注册,然后取得你的API Secret key。

有了API Secret key就可用编程,比如给一个开头语:Once upon a time(很久以前),让 GPT-3说故事。

使用 GPT-3时,有两个变数可用:模式和温度。

  • 模式有四种选择 :ada、babbage、curie、davinci,通常davinci 是最好的选择。
  • 温度是用来决定创意,数字越大表示文字的创造力越强。

温度 0.0

  • Once upon a time, there was a little girl who was very sad. She was sad because she had no friends. She was sad because she had no one to play with. She was sad because she had no one to talk to. She was sad because she had no one to love.

温度 1.2

  • Once upon a time, I moved from Ukraine to London. The journey is supposed to be a very difficult one: 24 hours of travelling in opposite direction and time changes of 2 hours. The border is different too: from Europe into the EFTA countries is like entering a different continent. All the signs, money and communication seemed to be in a new language. But, I actually managed to arrive on a new country calmly: 0 defeats, no panic attacks or anxiety. It all happened thanks to Orto (Arktan2) and his absolutely great methods.

······

其实,GPT-3 支持中文。

一个最好的参考网站就是 GPT-3 Demo:https://gpt3demo.com/

人工智能文案(AI Copywriting)是目前人们在 GPT-3 上用的最多的一个商业应用,在 GPT-3 Demo 中就有 34 个产品。这些商业应用产品绝大部分是要付费的,但是它们也提供免费的试用期间。

在 34 个人工智能文案产品中,有三个产品强烈推荐:

比如,用上面的 CopyAI 给另一半写生日快乐的文稿:

  • 你一直是我生命中快乐和欢笑的源泉。有你在我的生命中,我感到非常幸运。我想让你知道,我感谢你为我所做的一切。你是我生命中最耀眼的明星,生日快乐。

  • 今天是你的生日。我真诚地祝愿你幸福和健康。希望你能得到生活中所有最好的东西。

  • 我没有什么可说的了,只是说我爱你胜过一切!。愿你的生日充满一生的幸福。

  • 你一直是我的力量支柱,在我需要你的支持时,你从未怀疑过我。没有你,我将一事无成。我祈祷上帝继续将他的祝福洒在你身上。生日快乐!
     


智能取名

恐龙起名哪家强?

实现一个为恐龙起名的程序,这个程序是一个字(母)级别的 RNN 模型,也就是 RNN 的每个时间步只输出一个字(母)。

训练模型前,我们需要爬取一些恐龙的名字,像霸王龙(Tyrannosaurus)、迅猛龙(Velociraptor)。

  • 恐龙名字数据集:

直接秀代码吧 — 以下是项目完整代码(自定义工具模块 + 项目代码模块)。

自定义工具模块:

# utils.py
import numpy as np

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum(axis=0)

def smooth(loss, cur_loss):
    return loss * 0.999 + cur_loss * 0.001

def print_sample(sample_ix, ix_to_char):
    txt = ''.join(ix_to_char[ix] for ix in sample_ix)
    txt = txt[0].upper() + txt[1:]   
    print ('%s' % (txt, ), end='')

def get_initial_loss(vocab_size, seq_length):
    return -np.log(1.0/vocab_size)*seq_length

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum(axis=0)

def initialize_parameters(n_a, n_x, n_y):
    np.random.seed(1)
    Wax = np.random.randn(n_a, n_x)*0.01 
    Waa = np.random.randn(n_a, n_a)*0.01 
    Wya = np.random.randn(n_y, n_a)*0.01 
    b = np.zeros((n_a, 1)) 
    by = np.zeros((n_y, 1)) 
    
    parameters = {"Wax": Wax, "Waa": Waa, "Wya": Wya, "b": b,"by": by}
    
    return parameters

def rnn_step_forward(parameters, a_prev, x):
    Waa, Wax, Wya, by, b = parameters['Waa'], parameters['Wax'], parameters['Wya'], parameters['by'], parameters['b']
    a_next = np.tanh(np.dot(Wax, x) + np.dot(Waa, a_prev) + b) # hidden state
    p_t = softmax(np.dot(Wya, a_next) + by)
    
    return a_next, p_t

def rnn_step_backward(dy, gradients, parameters, x, a, a_prev):
    gradients['dWya'] += np.dot(dy, a.T)
    gradients['dby'] += dy
    da = np.dot(parameters['Wya'].T, dy) + gradients['da_next'] 
    daraw = (1 - a * a) * da 
    gradients['db'] += daraw
    gradients['dWax'] += np.dot(daraw, x.T)
    gradients['dWaa'] += np.dot(daraw, a_prev.T)
    gradients['da_next'] = np.dot(parameters['Waa'].T, daraw)
    return gradients

def update_parameters(parameters, gradients, lr):
    parameters['Wax'] += -lr * gradients['dWax']
    parameters['Waa'] += -lr * gradients['dWaa']
    parameters['Wya'] += -lr * gradients['dWya']
    parameters['b']  += -lr * gradients['db']
    parameters['by']  += -lr * gradients['dby']
    return parameters

def rnn_forward(X, Y, a0, parameters, vocab_size = 27):
    x, a, y_hat = {}, {}, {}
    a[-1] = np.copy(a0)
    loss = 0
    
    for t in range(len(X)):
        x[t] = np.zeros((vocab_size,1)) 
        if (X[t] != None):
            x[t][X[t]] = 1
        
        a[t], y_hat[t] = rnn_step_forward(parameters, a[t-1], x[t])
        
        loss -= np.log(y_hat[t][Y[t],0])
        
    cache = (y_hat, a, x)
        
    return loss, cache

def rnn_backward(X, Y, parameters, cache):
    gradients = {}
    
    (y_hat, a, x) = cache
    Waa, Wax, Wya, by, b = parameters['Waa'], parameters['Wax'], parameters['Wya'], parameters['by'], parameters['b']
    
    gradients['dWax'], gradients['dWaa'], gradients['dWya'] = np.zeros_like(Wax), np.zeros_like(Waa), np.zeros_like(Wya)
    gradients['db'], gradients['dby'] = np.zeros_like(b), np.zeros_like(by)
    gradients['da_next'] = np.zeros_like(a[0])
    
    for t in reversed(range(len(X))):
        dy = np.copy(y_hat[t])
        dy[Y[t]] -= 1
        gradients = rnn_step_backward(dy, gradients, parameters, x[t], a[t], a[t-1])
    
    return gradients, a

项目代码:

import numpy as np
from utils import *  
import random

data = open('dinos.txt', 'r').read() 
data = data.lower()
chars = list(set(data))
data_size, vocab_size = len(data), len(chars) 
char_to_ix = { ch:i for i,ch in enumerate(sorted(chars)) } 
ix_to_char = { i:ch for i,ch in enumerate(sorted(chars)) }  

# 梯度值裁剪函数
def clip(gradients, maxValue): 
    dWaa, dWax, dWya, db, dby = gradients['dWaa'], gradients['dWax'], gradients['dWya'], gradients['db'], gradients['dby']
    for gradient in [dWax, dWaa, dWya, db, dby]:
        np.clip(gradient, -maxValue, maxValue, out=gradient)   
    gradients = {"dWaa": dWaa, "dWax": dWax, "dWya": dWya, "db": db, "dby": dby}
    return gradients

np.random.seed(3)
dWax = np.random.randn(5,3)*10
dWaa = np.random.randn(5,5)*10
dWya = np.random.randn(2,5)*10
db = np.random.randn(5,1)*10
dby = np.random.randn(2,1)*10
gradients = {"dWax": dWax, "dWaa": dWaa, "dWya": dWya, "db": db, "dby": dby}
gradients = clip(gradients, 10)

# 采样函数
def sample(parameters, char_to_ix, seed):
    Waa, Wax, Wya, by, b = parameters['Waa'], parameters['Wax'], parameters['Wya'], parameters['by'], parameters['b']
    vocab_size = by.shape[0] 
    n_a = Waa.shape[1]
    x = np.zeros((vocab_size, 1))
    a_prev = np.zeros((n_a, 1))
    indices = []
    idx = -1 
    counter = 0
    newline_character = char_to_ix['\\n'] 
    
    while (idx != newline_character and counter != 50):
        a = np.tanh(np.dot(Wax, x) + np.dot(Waa, a_prev) + b)
        z = np.dot(Wya, a) + by
        y = softmax(z)     
        np.random.seed(counter + seed) 
        idx = np.random.choice(list(range(vocab_size)), p=y.ravel())
        indices.append(idx)
        x = np.zeros((vocab_size, 1))
        x[idx] = 1  
        a_prev = a
        seed += 1
        counter +=1

    if (counter == 50):
        indices.append(char_to_ix['\\n'])
    return indices

np.random.seed(2)
_, n_a = 20, 100
Wax, Waa, Wya = np.random.randn(n_a, vocab_size), np.random.randn(n_a, n_a), np.random.randn(vocab_size, n_a)
b, by = np.random.randn(n_a, 1), np.random.randn(vocab_size, 1)
parameters = {"Wax": Wax, "Waa": Waa, "Wya": Wya, "b": b, "by": by}
indices = sample(parameters, char_to_ix, 0)

# 优化函数
def optimize(X, Y, a_prev, parameters, learning_rate = 0.01):
    loss, cache = rnn_forward(X, Y, a_prev, parameters)
    gradients, a = rnn_backward(X, Y, parameters, cache)
    gradients = clip(gradients, 5)
    parameters = update_parameters(parameters, gradients, learning_rate)
    return loss, gradients, a[len(X)-1]

np.random.seed(1)
vocab_size, n_a = 27, 100
a_prev = np.random.randn(n_a, 1)
Wax, Waa, Wya = np.random.randn(n_a, vocab_size), np.random.randn(n_a, n_a), np.random.randn(vocab_size, n_a)
b, by = np.random.randn(n_a, 1), np.random.randn(vocab_size, 1)
parameters = {"Wax": Wax, "Waa": Waa, "Wya": Wya, "b": b, "by": by}
X = [None,3,5,11,22,3]
Y = [3,5,11,22,3,0]
loss, gradients, a_last = optimize(X, Y, a_prev, parameters, learning_rate = 0.01)

def model(ix_to_char, char_to_ix, num_iterations = 35000, n_a = 50, dino_names = 7, vocab_size = 27):
    n_x, n_y = vocab_size, vocab_size
    parameters = initialize_parameters(n_a, n_x, n_y)
    loss = get_initial_loss(vocab_size, dino_names)
    with open("dinos.txt") as f:
        examples = f.readlines()
        
    examples = [x.lower().strip() for x in examples]
    np.random.seed(0)
    np.random.shuffle(examples)
    a_prev = np.zeros((n_a, 1))
    
    for j in range(num_iterations):
        index = j % len(examples) 
        X = [None] + [char_to_ix[ch] for ch in examples[index]] 
        Y = X[1:] + [char_to_ix["\\n"]] 
        
        curr_loss, gradients, a_prev = optimize(X, Y, a_prev, parameters)
        loss = smooth(loss, curr_loss)
        
        if j % 2000 == 0:
            print('Iteration: %d, Loss: %f' % (j, loss) + '\\n')
            seed = 0
            for name in range以上是关于智能写作v2.0的主要内容,如果未能解决你的问题,请参考以下文章

Giiso写作机器人1秒完成文章创作,人类写作要下岗?

百度AI利用NLP自然语言处理技术发力智能写作/贪心学院

“人工智能时代的文学与艺术”研究专辑韩 伟丨论当下人工智能文学的审美困境

个案| 人类和人工智能之间

智能交通:影响人类未来10-40年的重大变革

人工智能赢了,人类输了

(c)2006-2024 SYSTEM All Rights Reserved IT常识