阿里90后工程师,如何用AI程序写出双11打call歌?

来自阿里巴巴的90后工程师芦阳,用业余时间开发了一套人工智能作词程序——名字叫做MusicGo,这个程序经过芦阳的“喂养”和设定,可以自己写饶舌歌曲。

芦阳加入菜鸟也才仅仅四个月,这是他第一次参加双11备战。作为一名新员工,用原创嘻哈歌曲庆祝双11的形式可谓独一无二。人工智能和双11也成为MusicGo的第一个主打的主题曲。

今年的双11非常有科技感,芦阳就给MusicGo喂食了不少体现双11科技的文章,比如菜鸟智慧物流、阿里云、天巡机器人、智能客服等关键词,加上修饰韵脚,20分钟后,一首《天猫双11有嘻哈》就出炉了。

大家来感受下:

其实,今年双11里人工智能已经悄然成为了狂欢节的新兴“职业”。不仅50%的后台故障修复由智能机器人负责,超级机器人仓群和一天内350万的客户量都是由智能机器人和“店小蜜”来完成的,可以说今年阿里双11开启了人际协同时代的新篇章。

这款芦阳利用业余时间编写的人工智能程序MusicGo,可以分析Hip-hop的歌词,将歌词进行分词以及拼音解析,从而进一步获取每个词的韵脚,形成庞大的分词词库,扔进去一个词就能出来很多押韵的相关词汇。

今天,阿里妹也邀请到了作者芦阳,请他来聊聊MusicGo的实现原理。其实没有你想象的那么难哦~

芦阳:把AI写歌儿这个事儿抽象起来看,其实是有一个模型,或者更通俗一点讲,是有一个函数。就像Y=WX B,给一个X,就可以产出一个Y。所以,问题的关键是我如何抽象出这个函数,并使其尽可能的精准。

深度学习可以做到的是抽象模型。举例,我给出一段序列A作为X,给出一段序列B作为Y,它会通过不断的有监督学习从而获得函数Y=WX B。接着,我又给出一段序列C作为X,给出一段序列D作为Y,它通过调整函数的参数尽力去满足A->B && C->D。当学习的量达到一定阶段的时候,模型也就基本可用了。

因此,我最终想要的效果是,一个比较合理的模型。这个模型可以做到,我给一个序列X,它可以去生成序列Y1,同时生成隐状态H1。接着,用Y1以及H1作为输入,继续生成Y2和H2,以此类推。最终达到所定义序列长度标准。

步骤为:

1. 收集歌词

2. 对歌词进行预处理,去除标点符号、特殊字符

3. 不断训练seq2seq模型

4. 使用模型产出歌词


收集歌词

我用Python爬取了XX音乐上的Hip-hop歌单,分析rapper如何押韵,收集到了几万首嘻哈歌词。

数据预处理

原始的歌词因为都是网友们上传上去的,所以格式并不完全统一,而且还会有一些非主流符号。因此,需要把所有歌词都进行同样的预处理,过滤了标点符号、特殊字符,写入到文件中,目的是使剩下的文本足够的整洁。

训练模型

首先是建立LSTM模型。

根据传入的引状态initial_state与序列inputs_split,执行rnn的decoder获得输出outputs_split。

把输出用softmax层处理,得到logits,与原本要学习的文本训练targets,计算总损失函数值total_loss。

循环去学习feed的文本,不断调整模型,降低损失函数值。

生成模型过程:

将足够满足目标的结果模型保存下来,后续就可以用该模型去生成序列了。

产出歌词

用上述产生的模型生成嘻哈歌曲,结果不太理想,给人的感觉是有点儿乱。因为嘻哈歌曲本身写的东西都比较杂,并且由于时间原因,我也没训练模型太久,损失函数值不足够低,导致最后生成的歌曲,更杂了。

调整思路

同时,还有个问题:嘻哈有了,“双11”和“智能”呢?我就是让模型学一辈子嘻哈,它也写不出双11和人工智能的东西,因为市面上并没有同类型歌曲。因此,我决定回到原点,改变想法,目标导向。

用“人工智能”、“双11”、“阿里云”、“阿里小蜜”、“菜鸟机器人”等关键词去爬科技类文章来feed模型,模型学会产出双十一智能等相关的句子。同时,用嘻哈的句式长度去约束它,产出嘻哈歌曲。最后挑一些句子,加一点“韵脚”,就作为词了。

人工修正智能

当然,用程序跑出的词,和人工写成的作品仍有些偏差。因此,我对机器自动生成的歌曲句式进行调整,使其更通顺(手动捂脸)。

天猫双11有嘻哈

(歌词节选)


又来到一年 双11

让我买买买 花光所有力气

又来到这一年双11

让我把指挥权交给智能机器


黑科技改变生活

打破包围我们地域的封锁

智能的技术连接你我

点亮双11 夜里万家灯火


Yeah太多无法计算的价值

成千上万订单在指尖飞驰

Yeah太多无法计算的价值

阿里云让所有订单在云端飞驰


阿里小蜜 会语音文字图像识别

学习能力 全部一整年都在线

人海战术 全被科技改变

好用又百变 用户舍不得说再见


还有机器人总动员在菜鸟仓库上演

累计足够智能 它们开始掌握主动权

拣选打包 顺利通关

从杭州到东莞

从上海到中原



今年双11,作为工程师的你,在购物车里放了哪些必败单品?是心心念念的机械键盘、降噪耳机、无人机,还是为爱人买的暖心手套、明星同款口红?欢迎在留言区一起分享交流~


原文发布时间为:2017-11-9

本文作者:芦阳

本文来自云栖社区合作伙伴“阿里技术”



更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程历史

编程历史: 编程语言的历史早于真正意义的计算机的出现。19世纪就有"可编程的"织布机和钢琴弹奏装置出现,它们都是领域特定语言(DSL)的样例。 从1951年2014年,人类一共发明了256种编程语言,每一种语言的出现都带有某些新…

vue结合ueditor富文本编辑器(换肤分离)

需求 (PC端)做一个可以使用图片上传、视频上传、文件上传功能的富文本组件,简单的文本编辑发布功能,采用socket方式传输, 做法 当时看到这个需求,我觉得是不难的,就去github上找富文本编辑器,因为项目比较急,当时我…

使用MyBatis框架时发现的一些小bug

在大配置MyBatis.xml中: 不能有空节点属性 ,否则启动服务器后点击登录没有反应。 异常问题: ause: java.sql.SQLException: Value 0000-00-00 00:00:00 can not be represented as java.sql.Timestamp: 解决办法: HTT…

JSF Tomcat配置示例

JavaServer Faces (JSF)是一个Web应用程序框架,旨在简化基于Web的用户界面的开发集成。 它用于开发和构建服务器端用户界面组件,并在Web应用程序中使用它们。 JSF技术基于Model-View-Controller (MVC)架构,并且通过在页面中使用可重用的UI组件…

JS加密算法简单分析

这次分析百度音乐的评论请求的加密,首先先看包 看到有两个地方1. param,2. sign,基本可以断定sign是用的MD5加密的 那么我们从html页面分析入手,恰巧看到html代码中有写到这么一段 右键点击open in Source panel 熟悉的配方&…

JS 的平凡之路--学习人气眼中的效果(上)

最近看了看人气眼的界面,感觉到学习的地方有很多呀。这里先带大家看看人气值跳动的实现。本篇代码基于Vue2.x.x。 一、概要 首先看一下效果图: 要想实现上面的效果,我们分为这几个部分: 判断元素是否在可视区域内;函数…

[译] Airbnb 在 React Native 上下的赌注(一):概述

原文地址:React Native at Airbnb原文作者:Gabriel Peal译文出自:掘金翻译计划本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO1/react-native-at-airbnb.md译者:ALVINYEH校对者:ChenDo…

批处理最佳做法

大多数应用程序至少具有一个批处理任务,在后台执行特定的逻辑。 编写批处理作业并不复杂,但是您需要了解一些基本规则,我将列举一些我发现最重要的规则。 从输入类型的角度来看,处理项目可以通过轮询处理项目存储库来实现&#x…

android 360度视频播放器,Android开发VR实战之播放360度全景视频

VR即Virtual Reality虚拟现实。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。那么,如何在Android中去开发VR功能的APP呢&#xff1f…

关于怎么在手机端实现一个拖拽的操作

手机端&#xff0c;肯定是监听touchstart,touchmove,touchend事件 先来看看效果 当拖拽时&#xff0c;拖拽到哪个节点下面&#xff0c;就把哪个节点添加到这个下面 <div>1111</div><div>2222</div><div>3333</div><div>4444</div…

物联网架构成长之路(24)-Docker练习之Compose容器编排

0.前言  一开始学的之后&#xff0c;是想一步到位直接上Kubernetes(K8s)的&#xff0c;后面没想到&#xff0c;好像有点复杂&#xff0c;有些概念不是很懂。因此学习东西还是要循序渐进&#xff0c;慢慢来。先了解单机编排技术Docker Compose&#xff0c;了解一些技术细节及原…

CSS原理解析之模型篇

写在前面&#xff1a;尝试回答几个问题&#xff1a;什么是盒模型&#xff0c;控制盒模型的属性有哪些&#xff1f;Margin、Padding、Border、Width、Height这些属性改变/影响盒模型&#xff0c;但每个属性都会在所有元素上生效么&#xff1f;如果存在区别&#xff0c;那么和元素…

Quartz遇到的问题

本文首次发布于My Blog,作者张琦(Ian),转载请保留原文链接。 有状态和无状态 使用有状态&#xff08;StatefulJob&#xff09;还是无状态的任务&#xff08;Job&#xff09; 在 Quartz 中&#xff0c;基本来说&#xff0c;任务分为有状态和无状态两种。实现 Job 接口的任务缺省…

RIP RETE时间获得PHREAKY

我刚刚完成了我称为PHREAK的新规则算法的一些高级文档&#xff0c;这是混合推理中的一个文字游戏。 它仍然有点粗糙和高水平&#xff0c;但希望仍然很有趣。 它建立在ReteOO之上&#xff0c;非常好阅读。 ReteOO算法 ReteOO是在3、4和5系列发行版中开发的。 它采用RETE算法并应…

Hadoop自学笔记(三)MapReduce简单介绍

1. MapReduce Architecture MapReduce是一套可编程的框架&#xff0c;大部分MapReduce的工作都能够用Pig或者Hive完毕。可是还是要了解MapReduce本身是怎样工作的&#xff0c;由于这才是Hadoop的核心&#xff0c;而且能够为以后优化和自己写做准备。 Job Client, 就是用户 Job …

VirtualDOM与diff(Vue实现)

写在前面 因为对Vue.js很感兴趣&#xff0c;而且平时工作的技术栈也是Vue.js&#xff0c;这几个月花了些时间研究学习了一下Vue.js源码&#xff0c;并做了总结与输出。文章的原地址&#xff1a;https://github.com/answershuto/learnVue。在学习过程中&#xff0c;为Vue加上了…

使用Java的RESTful Web服务

REST代表“代表性状态转移”&#xff0c;由Roy Fielding于2000年在其论文“建筑风格和基于网络的软件体系结构设计”中首次提出。 REST是一种建筑风格。 HTTP是一种协议&#xff0c;其中包含一组REST体系结构约束。 REST基础 REST中的所有内容都被视为资源。 每个资源都由UR…

windows npm安装webpack

Webpack: Webpack 是一个前端资源加载/打包工具。 它将根据模块的依赖关系进行静态分析&#xff0c;然后将这些模块按照指定的规则生成对应的静态资源。 参考下图&#xff1a; 安装Webpack: 1.首先需要安装node.js&#xff08;npm&#xff09; 下载地址&#xff1a;node.js dow…

JavaFX中的塔防

我想长时间使用我的游戏引擎来编写《塔防》游戏&#xff0c;但是由于另一个小组努力创建JavaFX《塔防》游戏&#xff0c;所以我认为我宁愿创建另一款游戏。 从邮件列表中&#xff0c;我了解到不再开发其他游戏。 因此&#xff0c;我决定尝试一下。 塔防是一款非常适合基于图块…

CSS pointer-events属性的使用

楔子 在前端的开发中&#xff0c;我们都是直接与用户接触&#xff0c;应该尽量让用户感到操作畅快愉悦&#xff0c;获得类似native的感觉。其中动画是最常用的方法。 这里的需求是&#xff0c;弹层的设计&#xff0c;这个弹层希望可以像 native 上的弹层一样&#xff0c;点击…