【玩轉資料系列十五】機器學習PAI為你自動寫歌詞,媽媽再也不用擔心我的freestyle了(提供資料、程式碼)
摘要: 背景 最近網際網路上出現一個熱詞就是“freestyle”,源於一個比拼rap的綜藝節目。在節目中需要大量考驗選手的freestyle能力,freestyle指的是rapper即興的根據一段主題講一串rap。
背景
最近網際網路上出現一個熱詞就是“freestyle”,源於一個比拼rap的綜藝節目。在節目中需要大量考驗選手的freestyle能力,freestyle指的是rapper即興的根據一段主題講一串rap。freestyle除了考驗一個人rap的技巧,其實我覺得最難的是如何在短時間內在腦海中浮現出有韻律的歌詞。
本文會介紹如何自動生成歌詞,到底什麼工具有這樣的功效呢?答案是PAI。PAI平臺是阿里雲人工智慧平臺,在上面可以通過最簡單的拖拉拽的方式,完成對各種結構化以及非結構化資料的處理。因為有了PAI,這種自動生成歌詞的事情都不再成為難題。我現在不光可以瞬間生成萬首歌詞,我還可以同時融合周杰倫、王力巨集、林俊杰、汪峰的歌詞風格在裡面,因為PAI利用深度學習能力可以快速的學習這些歌手的所有歌曲並且實現自己創作歌詞。不信?下面我就來show一下PAI的威力。
執行過程
-
1.首先進入PAI:https://data.aliyun.com/product/learn開通機器學習以及機器學習內的GPU服務。
-
2.訓練資料說明這裡我們的資料是一份txt檔案,檔案中包含了周杰倫、王力巨集、林俊杰、汪峰的歌詞,一共有接近300首歌,歌詞都是去掉標題等干擾因素的(花了好幾個小時整理)。資料截圖:
-
3.實驗程式碼說明本實驗使用的是PAI內建的深度學習框架Tensorflow,使用的了seq2seq以及RNN網路進行歌詞語義的學習以及建模。使用train.py檔案生成模型,使用predict.py檔案進行預測。以下是部分網路結構搭建的截圖,大家可以在下方找到原始碼下載地址進行使用。(PS:例項程式碼雖然可以執行,但是資料IO採用的是低效方式,高效方式可以參考此文https://yq.aliyun.com/articles/126918)
with tf.name_scope('model'): self.cell = rnn_cell.BasicLSTMCell(args.state_size) self.cell = rnn_cell.MultiRNNCell([self.cell] * args.num_layers) self.initial_state = self.cell.zero_state( args.batch_size, tf.float32) with tf.variable_scope('rnnlm'): w = tf.get_variable( 'softmax_w', [args.state_size, data.vocab_size]) b = tf.get_variable('softmax_b', [data.vocab_size]) with tf.device("/gpu:0"): embedding = tf.get_variable( 'embedding', [data.vocab_size, args.state_size]) inputs = tf.nn.embedding_lookup(embedding, self.input_data) outputs, last_state = tf.nn.dynamic_rnn( self.cell, inputs, initial_state=self.initial_state)
-
4.資料上傳將實驗資料和程式碼檔案打包上傳到OSS(之所以打包是本文案例使用的是原生PYTHON的資料IO方式,需要程式碼和訓練資料組成同一個tar.gz檔案)。OSS是PAI可讀的物件儲存工具,具體方式可以參考此視訊連結https://help.aliyun.com/video_detail/54945.html
-
5.搭建實驗在PAI的畫布拖動OSS以及Tensorflow元件搭建如下實驗,兩個Tensorflow節點分別對應著訓練和預測節點,先訓練生成寫歌模型,然後預測節點獲取模型自動生成歌詞。配置對應的執行程式碼路徑和輸出路徑,跟上面的OSS路徑對應。下圖是負責預測的Tensorflow節點配置。點選執行,PAI就開始學習歌詞並且嘗試自己寫作啦。
寫歌結果
經過差不多20分鐘的學習,PAI已經掌握了幾位歌壇大神的歌詞技巧,下面就看看PAI寫出來的歌詞是怎樣的。(歌詞需要在log中檢視,可以參考https://yq.aliyun.com/articles/72841
歌詞來了,看上去寫的歌還算通暢,沒有出現特別多語病。當然,想寫出更好的詞,需要對訓練模型的迭代次數、詞長等引數進行不斷除錯,也可以多為PAI輸送更多的歌詞供訓練,因為300多的樣本還是略顯單薄。
以上就是通過PAI自動寫歌詞的教程,希望對各位喜歡音樂和嘗試做文字自動生成的同學有幫助,讓我們一起freestyle起來!!
下載地址: http://click.aliyun.com/m/26320/
相關推薦
【玩轉資料系列十五】機器學習PAI為你自動寫歌詞,媽媽再也不用擔心我的freestyle了(提供資料、程式碼)
摘要: 背景 最近網際網路上出現一個熱詞就是“freestyle”,源於一個比拼rap的綜藝節目。在節目中需要大量考驗選手的freestyle能力,freestyle指的是rapper即興的根據一段主題講一串rap。 背景 最近網際網路上出現一個熱詞就是“freest
【親測有效】主頁鎖定神器,媽媽再也不用擔心我電腦瀏覽器主頁被劫持篡改了
text 問題 img strong 密碼 TE build log 電腦 很多朋友都在網上下載一些軟件或者重裝系統後發現,瀏覽器主頁被鎖定了,不管怎麽修改都改不過來,即便是殺毒軟件也拿它沒辦法,這次給大家一個自己親測的主頁鎖定神器,穩妥的解決主頁問題。 註意:主頁鎖定神
使用EXCEL繪製三維地圖(超簡單的五分鐘繪製地圖方法,媽媽再也不用擔心我不會畫地圖啦~)
博主為從區域規劃轉行地圖學的小學渣一枚,最近處理資料希望對結果進行三維視覺化,意外發現從小用到大的EXCEL可以繪製地圖且功能非常強大,在這裡做一下簡單介紹,希望可以給看官提供些許幫助。那下面就開始吧1 前戲1.1版本 Office2013及以上版本。1.2Po
【深入淺出Node.js系列十五】Nodejs實現websocket的4種方式
WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。在WebSocket API中,瀏覽器和伺服器只需要要做一個握手(handshaking)的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。 Web
【玩轉jvm系列 02】物件探祕
注意:本文描述的內容是基於HotSpot虛擬機器。 物件的建立 物件建立流程圖 物件建立流程 虛擬機器遇到一條new指令 檢查該指令引數在常量池中能否定位到對應類的符號引用 檢查該類是否被載入、解析和初始化,如果沒有必須先執行載入過程
【玩轉jvm系列 01】Java虛擬機器的基本結構
Java虛擬機器架構圖 Java虛擬機器基本結構思維導圖 類載入子系統 類載入子系統負責從檔案系統或者網路中載入Class資訊,載入的類資訊存放於一塊稱為方法區的記憶體空間。 Java堆 Java堆是被所有執行緒共享的一塊記憶體區域,在虛擬機器啟動
.Neter玩轉Linux系列之五:crontab使用詳解和Linux的程序管理以及網路狀態監控
基礎篇 實戰篇 一、crontab使用詳解 概述:任務排程:是指系統在某個時間執行的特定的命令或程式。 任務排程分類: (1)系統工作:有些重要的工作必須周而 復始地執行。 (2)個別使用者工作:個別使用者可能希望執 行某些程式。
【機器學習PAI實踐十二】機器學習演算法基於信用卡消費記錄做信用評分
背景 如果你是做網際網路金融的,那麼一定聽說過評分卡。評分卡是信用風險評估領域常用的建模方法,評分卡並不簡單對應於某一種機器學習演算法,而是一種通用的建模框架,將原始資料通過分箱後進行特徵工程變換,繼而應用於線性模型進行建模的一種方法。 評分卡建模理論常
【十九】機器學習之路——樸素貝葉斯分類
最近在看周志華《機器學習》的貝葉斯分類器這一章時覺得書上講的很難理解,很多專業術語和符號搞的我頭大,大學時候概率論我還是學的還是不錯的,無奈網上搜了搜前輩的部落格,看到一篇把樸素貝葉斯講的很簡單的文章,頓時豁然開朗。關於貝葉斯分類且聽我慢慢道來: 貝葉
轉:圖解十大經典機器學習演算法入門
原文:https://blog.csdn.net/jrunw/article/details/79205322 弱人工智慧近幾年取得了重大突破,悄然間,已經成為每個人生活中必不可少的一部分。以我們的智慧手機為例,看看到底溫藏著多少人工智慧的神奇魔術。 下圖是一部典型的智慧手機上安裝的一些常
【C#公共幫助類】JsonHelper 操作幫助類, 以後再也不用滿地找Json了,拿來直接用
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Linq; using System.Web.Script.Serialization; usi
JPA查詢資料後,修改其中的某個值,導致資料庫的值也修改了(JPA的生命週期)
問題描述 在一個迴圈中,通過JPA進行查詢後,修改查詢後的值,導致資料庫的值修改了 for (Integer integer : condition.getResourceIds()) { List<Integer> te
【玩轉cocos2d-x之二十六】資料結構CCDictionary
CCDictionary在cocos2d-x中被大量的應用,比如CCTexureCache,CCSpriteFramCache等等。 1.實現原理 1.1.uthash CCDiction
【玩轉資料結構 從入門到進階】 佇列
package Arr; /** * 陣列佇列 * @author 大南海 * * @param <E> */ public class ArrayQueue<E> implements Queue<E> { private Array<E
【玩轉資料結構 從入門到進階】 連結串列
public class LinkList<E> { private class Node { public E e; public Node next; public Node(E e, Node next) { this.e = e; this.n
玩轉wireshark系列第四篇-抓取ftp包【轉】
https://blog.csdn.net/u011416247/article/details/80872735 (首先宣告一下我也是一名小白,初學wireshark沒多久,我也很願意和大家一起討論wireshark的具體應用。) 本實驗使用的版本是wiresh
【玩轉cocos2d-x之十二】plist解析工具:Anti_TexturePacker
之前拿了一些別人的圖片素材,是用TexturePacker打包合成的,結果寫程式的時候不知道每個合成前小png圖的名字是什麼,只能一個一個從plist檔案中找,然後猜測對應的名字,再進行顯示,如果不對,
【玩轉cocos2d-x之三十九】Cocos2d-x 3.0截圖功能整合
3.0的截圖和2.x的截圖基本上相同,都是利用RenderTexture來處理,在渲染之前呼叫call函式,然後呼叫Cocos的場景visit函式對其進行渲染,渲染結束後呼叫end函式即可。只是3.0截圖需要在截完屏的下一幀才能處理RenderTexture,這點要注意。關
【玩轉cocos2d-x之三十四】繪圖:CCDrawingPrimitives和CCDrawNode
最近忙出翔了,這年過的也揪心。好久沒來更新部落格了,今天就來寫一寫cocos2d-x中圖形的繪製。 1.概述 其實cocos2d-x封裝了大量的opengl的繪圖函式,我們可以很輕鬆的在遊戲
【玩轉cocos2d-x之三十】點九圖和輸入框的使用
登入介面一個帳號/密碼輸入框或者主角命名框是少不了的。這節就來了解一下點九圖的輸入框的使用。這裡只是介紹基礎知識,並不進行平臺的移植,也不處理跨平臺可能出現的問題。 1.點九圖CCScale9S