阿里90後工程師,如何用AI程式寫出雙11打call歌?

阿里云云棲號發表於2017-11-14
來自阿里巴巴的90後工程師蘆陽,用業餘時間開發了一套人工智慧作詞程式——名字叫做MusicGo,這個程式經過蘆陽的“餵養”和設定,可以自己寫饒舌歌曲。阿里90後工程師,如何用AI程式寫出雙11打call歌?

蘆陽加入菜鳥也才僅僅四個月,這是他第一次參加雙11備戰。作為一名新員工,用原創嘻哈歌曲慶祝雙11的形式可謂獨一無二。人工智慧和雙11也成為MusicGo的第一個主打的主題曲。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

今年的雙11非常有科技感,蘆陽就給MusicGo餵食了不少體現雙11科技的文章,比如菜鳥智慧物流、阿里雲、天巡機器人、智慧客服等關鍵詞,加上修飾韻腳,20分鐘後,一首《天貓雙11有嘻哈》就出爐了。

大家來感受下:

阿里90後工程師,如何用AI程式寫出雙11打call歌?

其實,今年雙11里人工智慧已經悄然成為了狂歡節的新興“職業”。不僅50%的後臺故障修復由智慧機器人負責,超級機器人倉群和一天內350萬的客戶量都是由智慧機器人和“店小蜜”來完成的,可以說今年阿里雙11開啟了人際協同時代的新篇章。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

這款蘆陽利用業餘時間編寫的人工智慧程式MusicGo,可以分析Hip-hop的歌詞,將歌詞進行分詞以及拼音解析,從而進一步獲取每個詞的韻腳,形成龐大的分詞詞庫,扔進去一個詞就能出來很多押韻的相關詞彙。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

今天,阿里妹也邀請到了作者蘆陽,請他來聊聊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模型。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

根據傳入的引狀態initial_state與序列inputs_split,執行rnn的decoder獲得輸出outputs_split。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

把輸出用softmax層處理,得到logits,與原本要學習的文字訓練targets,計算總損失函式值total_loss。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

迴圈去學習feed的文字,不斷調整模型,降低損失函式值。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

生成模型過程:

阿里90後工程師,如何用AI程式寫出雙11打call歌?

將足夠滿足目標的結果模型儲存下來,後續就可以用該模型去生成序列了。

阿里90後工程師,如何用AI程式寫出雙11打call歌?

產出歌詞

用上述產生的模型生成嘻哈歌曲,結果不太理想,給人的感覺是有點兒亂。因為嘻哈歌曲本身寫的東西都比較雜,並且由於時間原因,我也沒訓練模型太久,損失函式值不足夠低,導致最後生成的歌曲,更雜了。

調整思路

同時,還有個問題:嘻哈有了,“雙11”和“智慧”呢?我就是讓模型學一輩子嘻哈,它也寫不出雙11和人工智慧的東西,因為市面上並沒有同型別歌曲。因此,我決定回到原點,改變想法,目標導向。

用“人工智慧”、“雙11”、“阿里雲”、“阿里小蜜”、“菜鳥機器人”等關鍵詞去爬科技類文章來feed模型,模型學會產出雙十一智慧等相關的句子。同時,用嘻哈的句式長度去約束它,產出嘻哈歌曲。最後挑一些句子,加一點“韻腳”,就作為詞了。

人工修正智慧

當然,用程式跑出的詞,和人工寫成的作品仍有些偏差。因此,我對機器自動生成的歌曲句式進行調整,使其更通順(手動捂臉)。

天貓雙11有嘻哈

(歌詞節選)


又來到一年 雙11

讓我買買買 花光所有力氣

又來到這一年雙11

讓我把指揮權交給智慧機器


黑科技改變生活

打破包圍我們地域的封鎖

智慧的技術連線你我

點亮雙11 夜裡萬家燈火


Yeah太多無法計算的價值

成千上萬訂單在指尖飛馳

Yeah太多無法計算的價值

阿里雲讓所有訂單在雲端飛馳


阿里小蜜 會語音文字影象識別

學習能力 全部一整年都線上

人海戰術 全被科技改變

好用又百變 使用者捨不得說再見


還有機器人總動員在菜鳥倉庫上演

累計足夠智慧 它們開始掌握主動權

揀選打包 順利通關

從杭州到東莞

從上海到中原


阿里90後工程師,如何用AI程式寫出雙11打call歌?


今年雙11,作為工程師的你,在購物車裡放了哪些必敗單品?是心心念唸的機械鍵盤、降噪耳機、無人機,還是為愛人買的暖心手套、明星同款口紅?歡迎在留言區一起分享交流~


原文釋出時間為:2017-11-9

本文作者:蘆陽

本文來自雲棲社群合作伙伴“阿里技術”


相關文章