當前位置:
首頁 > 科技 > AI有嘻哈!

AI有嘻哈!

記者 | 阿司匹林

出品 | AI科技大本營

8月23日,「2018年全球高校學生DeeCamp AI訓練營」在北大舉行閉幕式,經過層層評比,來自全球高校的300學生組成的28支隊伍選出了8支優勝隊伍。其中,一隻用AI自動生成嘻哈歌詞的隊伍獲得了「最佳DEMO獎」。

AI寫嘻哈歌詞的水平如何?能達到以假亂真的地步嗎?不看廣告看療效,我們先來猜猜下面的歌詞哪些是AI寫的:

不是樂理專修 做點兒曲式研究 我們的力量來自宇宙 自己的節奏

不是樂理專修 所有聽的觀眾 打破他們傳統 進到環球 繼續讓你感受

再來一個:

自己就帶上了有色眼鏡 金錢摧毀多少事情 瓦解你的中樞神經

自己就帶上了有色眼鏡 我只想把世界分的更清 卻發現自己卻模糊了心

正確答案是:第一行都是模型生成的,第二行是原作。可以看出,AI的效果還是不錯的,至少挺押韻的。

那麼,這個有嘻哈精神的團隊到底是怎樣搭建這個 AI 模型的?

首先我們需要定義這個問題,也就是根據一句歌詞迭代生成一段嘻哈歌詞。另外一個是押韻,這是嘻哈歌詞一大特點。

清楚了問題,我們去調研一下已經有的文本聲稱方案,最終把它的優點和缺點列出來,然後我們選擇了SequenceGAN作為基礎模型,並且在這個之上提出我們的模型——SequenceGAN。

SequenceGAN 有兩個組件,生成器、判讀器,讓生成器生成足以逼真的歌詞。

我們在這個基礎之上,有一個嘻哈生成網路。第一點是在這個之前我們增加了一個編碼網路,將然後生成一些跟主題相關的歌詞,第二點是把目標函數修改。

以下是SequenceGAN的效果,它有非常多的重複的語句,這就是GAN的一個通病,對於不同的輸入,輸出卻很相同。

我們知道嘻哈歌手不可能一句話唱一整首,所以我們調研了一些文獻,並且借鑒今年SentiGAN的想法,對生成器的目標函數進行修改,最後效果非常顯著,有一個質的變化。

有了多樣化的文本之後,我們下一步要解決的問題就是如何去實現押韻。我們嘗試兩種方案,一種是基於目標函數,增加押韻場景項,就好像考試的附加題,做對了給額外得分。但是我們希望它一直能夠去做附加題,實現押韻的功能。但是它並不能很自主地學習到押韻的關。

最後我們嘗試了基於規則的方式來實現這個押韻。比如輸入「你真美麗」,我們根據這個i的韻腳去構建一個向量,做一個簡單的操作,就能夠得到必然是押韻的結果,同時可以控制押韻的概率。


▌附完整解讀

項目作者:孫蒙新(廈門大學)、項瑞昌(華中科技大學)、伊瑋雯(北京郵電大學)、陸亦揚(合肥工業大學)、石華(西南石油大學)、汪自力(西安電子科技大學)、龐雲升(重慶大學)、周子群(東北大學)、王超群(北京林業大學)、詹珏岑(Vandernilt University)

1、數據

我們一共使用了 10w 條嘻哈歌詞,並且已經將一些不符合社會主義核心價值觀的句子標註了出來。數據的預處理主要步驟如下:

在對句子進行篩選之後,我們利用 Jieba 進行分詞,觀察到單句長度集中在 8~10 左右;

在利用 Tensorflow 中的 Tokenizer 進行 tokenize 並構建 word2idex 字典後,詞表大小在 11000 左右,考慮到這個大小還可以接受,沒有做限制詞表大小的操作;

利用 pad_sequence 將句子 padding 到 20(和 SeqGAN 中相同);

構建 x-y pair,利用上一句預測下一句(導師後來建議可以借鑒用 Skip-gram 的思路,同時預測上一句和下一句,但沒有時間去嘗試了),分割數據集。

訓練數據地址:

https://drive.google.com/drive/folders/1QrO0JAti3A3vlZlUemouOW7jC3K5dFZr)

2、模型

我們的生成模型的整體基於 SeqGAN,並對其做了一些修改,模型架構如下:

主要改動有兩點:

1.增加輸入語句的編碼:這一點類似 Seq2Seq 的 Encoder,SeqGAN 原本的 initial state 是全 0 的,為了將上文的信息傳遞給生成器,我們採用了一個簡單的全連接層(Fully Connected Layer),將輸入句子的 Word Embedding 經過一個線性變化之後作為生成器的 LSTM。事實上也可以嘗試使用 RNN(LSTM)來作為 Encoder,不過這樣模型的速度可能會比較慢。

2.將原先 Generator 的 Loss Function 改為 Penalty-based Objective:在訓練模型的過程中我們發現,模型在 Adversarial Training 多輪之後出現了嚴重的 mode collapse 問題,比如:

別質疑自己 遮罩錯的消息不要過得消極 世間人都笑我太瘋癲 世間人都笑我太瘋癲 守護地獄每座墳墓 世間人都笑我太瘋癲

你不知道rapper付出多少才配紙醉金迷 世間人都笑我太瘋癲 但卻從來沒有心狠過 如果你再想聽

你不知道rapper付出多少才配紙醉金迷 你不知道rapper付出多少才配紙醉金迷

可以看到「世間人都笑我太瘋癲」和「你不知道rapper付出多少才配紙醉金迷」佔據了我們生成的結果。mode collapse,簡單來說就是輸入的改變不會影響生成的結果。為此我們調研了一些 Paper,最終採用了SentiGAN 中提出的 Penalty-based Objective Function:

3、押韻

嘻哈歌詞非常重要的一個特點就是句與句之間的押韻,我們在實現這一功能的時候嘗試了兩種方案:

1.Reward based,在 reward 函數上增加額外的押韻獎賞項, r(rhyme):對 Generator 的生成的句子和輸入的句子進行押韻的判斷,如果押韻,則提供額外的獎賞。

2.Rule-based,生成時只對押韻的詞進行採樣:在生成句尾的詞的概率分布時候,通過獲取和輸入句尾押韻的詞,只在這些押韻的詞進行採樣。

方法一,如果能夠通過設計 reward function 就能實現押韻的功能,那模型就是完全 end2end,非常 fancy 了。但是理想很豐滿,現實很骨感,經過幾天的調整押韻獎賞的權重,都沒能看到押韻率(我們設置的用於檢測押韻獎賞效果的指標,每個 batch 中和 input 押韻的句子的比例)的上升 。我們懷疑是這種獎賞的結合會讓 Generator 產生混淆,並不能明確自己 reward 來自何處,應該需要更加具體的一些限制才能夠實現這一方法。

方法二,一開始我是拒絕這麼做的,用基於規則的方法不是我的理想。但是為了做出產品來,我還是屈服了。但還有一個問題擺在面前:怎麼知道生成的是句尾呢?導師提醒我們,我們可以把輸入倒過來。這是 NMT 中常用的一個手段,對於 LSTM,句子是真的還是反的差別不大,即使有差別,也可以通過一個 Bi-LSTM 來捕獲不同順序的信息。而為了知道哪些字詞是押韻的,我們實現製作了一張 vocab_size x vocab_size 的大表 rhyme,如果兩個詞(index 分別為 i, j)押韻,則 rhyme[i, j] 非 0,否則為 0。

如上圖所示,如果我們的輸入為「你真美麗」,句尾詞為「美麗」,韻腳為 i;最終採樣結果只會在押韻的詞中採樣,示例的採樣結果為「春泥」。

據此,我們就可以對生成過程的第一個詞的詞表分布進行一個 mask 操作,使得非押韻的詞的概率都變成 0,就能夠保證押韻了,代碼片段如下:

# 獲取 input 的最後一個詞

first_token = self.inputs[:, 0] # (batch_size, 1)

# 控制押韻的概率, 現在設置為 1.0 ,即 100% 押韻

select_sampler = Bernoulli(probs=1.0, dtype=tf.bool)

select_sample = select_sampler.sample(sample_shape=self.batch_size)

# 獲取對應的 index 押韻行

token_rhyme = tf.cast(tf.gather(self.table, first_token), tf.float32)

# 進行 mask

prob_masked = tf.where(select_sample, tf.log(tf.multiply(token_rhyme, tf.nn.softmax(o_t))),tf.log(tf.nn.softmax(o_t)))

# 根據 mask 之後的概率分布進行採樣

next_token = tf.cast(tf.reshape(tf.multinomial(prob_masked, 1), [self.batch_size])

不過這個製表的過程比較耗費時間(大約跑了 3 個小時,i7)。另一種思路是可以根據韻腳對字詞進行分類,將相同韻腳的詞的 index 編到一起,這樣我們可以通過獲取每個詞的韻腳來知道目標詞的範圍,而不用挨個的去判斷是否押韻。

AI科技大本營在線公開課第12期

知識圖譜專場

時間:8月30日 20:00-21:00

邀你加入課程交流群,即有機會獲得定製T恤或者技術書籍

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

收藏此文,今年你需要的學習資源絕對夠了!
「盜取無人車機密」的蘋果工程師辯稱無罪,已獲保釋;利用AI分析衛星遙感照片抓違章建築

TAG:AI科技大本營 |