讓五月天自己生成五月天 — LSTM 應用

Chao-Hsuan Ke
小小實驗室
Published in
5 min readDec 10, 2019

五月天是大家熟悉的樂團,他們的歌曲大家可能都可以朗朗上口。不知道你自己有沒有注意到一件事,五月天的曲風或是歌詞的風格有些還蠻相似的 (跟 周杰倫 一樣),但這也很正常,畢竟作詞作曲就都是這些人。

既然如此,那我們是不是可以把過去五月天製作的歌曲拿來產生出下一首歌呢?我自己是很好奇啦,反正 LSTM 不就可以做文字生成嗎?那就來玩玩吧 🤪

這邊我們分成三個部分依序來執行:

  1. 收集訓練資料集
  2. LSTM 文字生成
  3. 結果分析

1. 收集訓練資料集

我們直接抓取了五月天全部的專輯資料(只抓取是五月天作詞或作曲的部分 ,不包含翻唱) ,所有的資料從 魔鏡歌詞網下載 。這邊使用 BeautifulSoup 針對網頁上的歌詞進行擷取,程式碼如下 :

BeautifulSoup 下載歌詞

當各自的歌曲下載完成後,進行合併的動作,也就是將原本一首歌用一個檔案存取的方式直接存在同一個檔案中。個別的檔案和全部集合後的檔案可以從這邊下載 :

2. LSTM 文字生成

使用 Keras 內建的 LSTM 模組進行文字的序列生成,有興趣的話可以直接找書來看。

程式碼直接改書中的範例程式來使用,因此可以讓其在 Jupyter 中執行

完整的程式碼可以直接下載,但記得使用的訓練資料集位置要記得改一下。

3. 結果分析

跑完訓練週期後,來看看結果如何。我們直接使用原始範例先隨機抓出 60 個字元當作初始值,看看之後升成出來的序列長什麼樣子?

這邊列出一個範例,例如用 “聖誕夜驚魂” 這首歌來說,初始歌詞為 :

我真笨說起話像雪人 製造浪漫 變成耍冷朋友都說 我長得很誠懇 又天真傻笑傻到出神 說完再見 突然你就踮起腳跟你的吻 我的

若以亂度 1.5 (temperature: 1.5) 時會產生此結果 :

像作生好的出現 都變得 問對太活 在所以來其殺最小的旁著 始終在那值會 或獨自由 我愛你那麼多屬獨自幻沒有答追沒有說解存在華動好b好 於前在我好想道著 吐倔證變成伴勇了些地 說呢代價不傻不嗚阮是就不攝其實時免傷免非我生到喔憶 每次春笑甲會心回話心
遺憾線像變抱正伊有會有並念 那換弱ll 雨情吃藉幸它披不會玩越 所以紀傷氣話 痛願彈外少年臺 果甘過 誰都現穿了再糟抖 要歡她 ill 丟作線 給我友i決海缺類市嘆所有
泥飛作結壯短舞線b正太神種常很不而 奏短奇繼鏡傻向再隔向逃花流惹告種但釋緊塵錯星空 都在攏繆決也不叫你虹我o涯 無望你鋼老在我 最好的溫跡愛的嗎 你b從 may l屬沒隨顆著眼量很鐵積我準千加再越茫誕c夜今玫在身邊想常十等你了吻你 ~會了突然草s闖bi 幻正著 殘中還有快法雙要d疼繼會剩吃上青囉所議都不瞭要甚去我懂草她 靜紅般 浪青量初戀了 暫知道觸掙攏不結叫 傾開太步著 所倒在 縫繼萬囚下人 化成誌地讀然停了店傻繞 笑指太完 美任看變成極使麥吃偶必實睬盼望給縱 就這樣 嘛方創服堅都 已部

好 !!其實結果我自己也看不懂這產生出的結果到底在幹嘛 😞

然後回過頭去看了一下資料集發現,其實五月天的歌曲有一些文字特徵如下:

  • 很多中英文夾雜,例如 : OK 啦OK 啦
  • 重複字,例如: La La La、哈哈哈、 T 121 3121 T 121 3121T 121 312、 噢噢噢噢噢 噢噢噢噢噢噢、悶悶悶悶悶悶悶
  • 旁白 或是 RAP

也因此生成出來的字串會有嚴重的中英文混雜問題,重點是混雜的結果完全沒有意義在裡面。其實另外一個問題是其實使用的訓練資料集還不夠多,雖然五月天成立 20 年已經產生了不少歌曲,但全部所有的歌詞加起來才收集到 47833 個字元,跟其他的訓練資料集比起來也是小巫見大巫。如果要改善這個問題,我們可能還要再等個 20 年多收集一點五月天的歌詞了 ><

--

--

Chao-Hsuan Ke
小小實驗室

永遠熱愛自己的工作,總是找一堆事把自己的時間塞滿。喜歡接觸不同領域,像是 歷史、文化、金融和公共政策 等議題,期許著自己會什麼就分享什麼。