Slide 1

Slide 1 text

機器學習與智慧⾳音樂應⽤用 Machine Learning and the Intelligent Music Application Fukuball Lin @ 資策會資訊處

Slide 2

Slide 2 text

關於我 Fukuball / 林林志傑 Fukuball Lin @ 資策會資訊處 簡介 幕僚僚⼯工程師

Slide 3

Slide 3 text

2006 年年的契機 Fukuball Lin @ 資策會資訊處 簡介

Slide 4

Slide 4 text

智慧 ⾳音樂 前⾔言 Fukuball Lin @ 資策會資訊處

Slide 5

Slide 5 text

Spotify 的智慧⾳音樂應⽤用 - 誠⼼心推薦 Fukuball Lin @ 資策會資訊處

Slide 6

Slide 6 text

KKBOX 的智慧⾳音樂應⽤用 - 你可能會喜歡 Fukuball Lin @ 資策會資訊處

Slide 7

Slide 7 text

為何要發展智慧系統? 如果不在 90 秒內抓 住使⽤用者的注意⼒力力, 可能就會失去這名 使⽤用者了了! 前⾔言 Fukuball Lin @ 資策會資訊處

Slide 8

Slide 8 text

我也想做智慧⾳音樂系統! 前⾔言 Fukuball Lin @ 資策會資訊處

Slide 9

Slide 9 text

iNDIEVOX 智慧⾳音樂三寶 前⾔言 Fukuball Lin @ 資策會資訊處 2008 - 2016 我的⼩小⼩小成果 會員數從 2 萬增加⾄至 50 萬

Slide 10

Slide 10 text

iNDIEVOX 是什什麼? 簡介 Fukuball Lin @ 資策會資訊處

Slide 11

Slide 11 text

iNDIEVOX 簡介 獨立⾳音樂⼈人 歌迷 Icons made by Simpleicon、Freepik from www.flaticon.com ⾼高⾳音質 DRM Free 線上⾳音樂商店 全台 Live House ⾨門票販售 ⾳音樂社群平台 7000 餘組⾳音樂⼈人 12000 餘⾸首原創歌曲 20 餘家 Live House 各⼤大⾳音樂祭 50 餘萬會員 100 萬⽉月瀏覽次數 平均停留留時間 17 分 簡介 Fukuball Lin @ 資策會資訊處

Slide 12

Slide 12 text

要讓台灣的獨立⾳音樂跟歐美⽇日 ⼀一樣蓬勃只做這些夠嗎? Fukuball Lin @ 資策會資訊處

Slide 13

Slide 13 text

StreetVoice Product Family Talent Network > Distribution > Media, Digital Music Service Chain Talent Network Distribution Media Pack Promotion TV Shows / Live Events Media Partners Song Placement Online Retailers 我們對獨立⾳音樂 ⽣生態系統的完整藍藍圖 Fukuball Lin @ 資策會資訊處

Slide 14

Slide 14 text

iNDIEVOX 只是完整獨立⾳音樂 ⽣生態系統中的⼀一⼩小塊 簡介 Fukuball Lin @ 資策會資訊處

Slide 15

Slide 15 text

進入正題,iNDIEVOX 智慧⾳音樂三寶 簡介 Fukuball Lin @ 資策會資訊處

Slide 16

Slide 16 text

購買關聯聯推薦 火⼒力力展⽰示 Fukuball Lin @ 資策會資訊處

Slide 17

Slide 17 text

⼼心情電台 火⼒力力展⽰示 Fukuball Lin @ 資策會資訊處

Slide 18

Slide 18 text

VA ⼼心情 DJ 電台 火⼒力力展⽰示 Fukuball Lin @ 資策會資訊處

Slide 19

Slide 19 text

I HAVE NO IDEA 那要怎麼做呢? Fukuball Lin @ 資策會資訊處

Slide 20

Slide 20 text

Magic! 智慧 ⾳音樂 Fukuball Lin @ 資策會資訊處

Slide 21

Slide 21 text

範例例程式碼 • https://bit.ly/iv-data-intro Fukuball Lin @ 資策會資訊處

Slide 22

Slide 22 text

購買關聯聯推薦技術解析 Fukuball Lin @ 資策會資訊處

Slide 23

Slide 23 text

購買關聯聯 Apriori 演算法簡介(1) • 快速計算關聯聯規則的著名演算法 • 關聯聯規則:符合「⽀支持度」、「信任度」的交 易易品項集合 • ⽀支持度:品項 A 與 品項 B 同時出現在交易易中 的機率 • 信任度:交易易中有品項 A 然後也會有品項 B 的 機率 Fukuball Lin @ 資策會資訊處

Slide 24

Slide 24 text

購買關聯聯 Apriori 演算法簡介(2) Fukuball Lin @ 資策會資訊處

Slide 25

Slide 25 text

購買關聯聯 購買關聯聯簡易易範例例(1) require_once('library/Apriori/lib/Apriori.class.php'); $minSupp = 5; $minConf = 75; $type = Apriori::SRC_PLAIN; $recomFor = 'beer'; $data = 'lesson1_dataset.txt'; $apri = new Apriori($type, $data, $minSupp, $minConf); $apri->displayTransactions() ->solve(); // 計算符合⽀支持度集合 $apri->generateRules() ->displayRules() ->displayRecommendations($recomFor); // 計算符合信任度集合並推薦 unset($apri); Fukuball Lin @ 資策會資訊處

Slide 26

Slide 26 text

購買關聯聯 購買關聯聯簡易易範例例(2) $ php lesson1_apriori.php 執⾏行行 結果 Fukuball Lin @ 資策會資訊處

Slide 27

Slide 27 text

購買關聯聯 購買關聯聯實務上的問題 • 使⽤用 iNDIEVOX 開源的 Buy Together Discs Dataset 或 Buy Together Songs Dataset • 實務上⽀支持度及信任度都要設很低 才跑得出結果(因為交易易品項多, 關聯聯規則較為稀疏) Fukuball Lin @ 資策會資訊處

Slide 28

Slide 28 text

⼼心情電台技術解析 Fukuball Lin @ 資策會資訊處

Slide 29

Slide 29 text

⼼心情電台 分類問題 • 將⾳音樂分成輕鬆、快樂、 興奮、憂鬱、悲傷、憤怒, 其實就是⼀一種分類問題 • 分類在數學物理理意義上, 就是在空間中找到⼀一個可 以正確分開訓練資料的超 平⾯面 Fukuball Lin @ 資策會資訊處

Slide 30

Slide 30 text

⼼心情電台 SVM 分類模型簡介(1) • 分類模型很多,我們這邊使⽤用的是 Soft Gaussian SVM • SVM 具有不易易 overfitting、雜訊容 忍度較⾼高的特性 Fukuball Lin @ 資策會資訊處

Slide 31

Slide 31 text

⼼心情電台 SVM 分類模型簡介(2) Fukuball Lin @ 資策會資訊處

Slide 32

Slide 32 text

⼼心情電台 SVM 分類模型簡介(3) Fukuball Lin @ 資策會資訊處

Slide 33

Slide 33 text

⼼心情電台 Cross Validation 調整參參數 Fukuball Lin @ 資策會資訊處

Slide 34

Slide 34 text

⼼心情電台 機器學習過程 • 特徵萃取 • 產⽣生資料集 • 訓練 • Cross Validation • 預測 Fukuball Lin @ 資策會資訊處

Slide 35

Slide 35 text

⼼心情電台 特徵萃取(1) • ⾳音樂⾳音訊特徵萃取:使⽤用 PyAudio • 使⽤用 iNDIEVOX 上傳⾳音樂萃取特 徵,透過 API 取得特徵值 Fukuball Lin @ 資策會資訊處

Slide 36

Slide 36 text

⼼心情電台 特徵萃取(2) • 透過 iNDIEVOX Open API 取得特徵值 • API End Point:https://www.indievox.com/api/mir/song/ feature/{song_id}? app_id=P300000045&app_secret=9bdecdb004682865260 c9d2a5cc71f0d • Ex. https://www.indievox.com/api/mir/song/feature/1? app_id=P300000045&app_secret=9bdecdb004682865260 c9d2a5cc71f0d • 更更多 API ⽂文件請⾒見見:iNDIEVOX Datasets Fukuball Lin @ 資策會資訊處

Slide 37

Slide 37 text

⼼心情電台 特徵萃取(3) Fukuball Lin @ 資策會資訊處

Slide 38

Slide 38 text

⼼心情電台 產⽣生資料集 • 為資料上標籤,這邊就是為歌曲標上分類 • 1 代表輕鬆、2 代表快樂、3 代表興奮、4 代表憂鬱、5 代表 悲傷、6 代表憤怒 • Ex. .108498920134 0.076927526196 … … 0.00644760168266 2 • 將多筆資料組成資料集 • 使⽤用 iNDIEVOX 開源的 Emotion Combine Training Dataset Fukuball Lin @ 資策會資訊處

Slide 39

Slide 39 text

⼼心情電台 訓練 • 使⽤用 fuku-ml 訓練⼼心情分類模型 import os import FukuML.Utility as utility import FukuML.SupportVectorMachine as svm input_train_data_file = os.path.join(os.path.join(os.getcwd(), os.path.dirname(__file__)), 'library/iNDIEVOX-Dataset/dataset/ emotion_combine_song_train.dataset') svm_mc = svm.MultiClassifier() svm_mc.load_train_data(input_train_data_file) // 載入資料集 svm_mc.set_param(svm_kernel='soft_gaussian_kernel', C=1) // 設定參參數 svm_mc.init_W() svm_mc.train() // 訓練 Fukuball Lin @ 資策會資訊處

Slide 40

Slide 40 text

⼼心情電台 Cross Validation • 使⽤用 Cross Validation 挑選參參數 cross_validator = utility.CrossValidator() svm_mc1 = svm.MultiClassifier() svm_mc1.load_train_data(input_train_data_file) svm_mc1.set_param(svm_kernel='soft_gaussian_kernel', C=1) svm_mc2 = svm.MultiClassifier() svm_mc2.load_train_data(input_train_data_file) svm_mc2.set_param(svm_kernel='soft_gaussian_kernel', C=10) svm_mc3 = svm.MultiClassifier() svm_mc3.load_train_data(input_train_data_file) svm_mc3.set_param(svm_kernel='soft_gaussian_kernel', C=100) cross_validator.add_model(svm_mc1) cross_validator.add_model(svm_mc2) cross_validator.add_model(svm_mc3) avg_errors = cross_validator.excute() best_model = cross_validator.get_best_model() Fukuball Lin @ 資策會資訊處

Slide 41

Slide 41 text

⼼心情電台 預測 • 模型訓練好之後,就可以拿來來做分類預測 best_model.init_W() best_model.train() future_data = '0.0333526059402 0.0191216300488 … … 0.0087182119318’ prediction = best_model.prediction(future_data, mode='future_data') Fukuball Lin @ 資策會資訊處

Slide 42

Slide 42 text

⼼心情電台 ⼼心情電台範例例 $ python lesson2_svm_classification.py 執⾏行行 結果 Fukuball Lin @ 資策會資訊處

Slide 43

Slide 43 text

VA ⼼心情電台技術解析 Fukuball Lin @ 資策會資訊處

Slide 44

Slide 44 text

VA 電台 迴歸問題 • 將⾳音樂對應到 Valence Arousal ⼆二維平⾯面,Valence 跟 Arousal 各⾃自是⼀一個實 數,其實就是迴歸問題 • 迴歸在數學物理理意義上,就 是在空間中找到⼀一個與所有 資料點平⽅方距離最⼩小的超平 ⾯面 feature transform Fukuball Lin @ 資策會資訊處

Slide 45

Slide 45 text

VA 電台 Ridge Regression 模型簡介 Fukuball Lin @ 資策會資訊處

Slide 46

Slide 46 text

機器學習過程 • 特徵萃取 • 產⽣生資料集 • 訓練 • Cross Validation • 預測 VA 電台 Fukuball Lin @ 資策會資訊處

Slide 47

Slide 47 text

特徵萃取 VA 電台 • ⽅方法跟之前的⽅方法⼀一樣! Fukuball Lin @ 資策會資訊處

Slide 48

Slide 48 text

產⽣生資料集 VA 電台 • 為資料上標籤,這邊就是為歌曲標上 Valence 值 • Valence 值域為 0 ~ 1 的浮點數,數值越靠近 0 就代表情緒 越負⾯面,越靠近 1 就代表越正⾯面 • Ex. .108498920134 0.076927526196 … … 0.00644760168266 0.4 • 將多筆資料組成資料集 • 使⽤用 iNDIEVOX 開源的 Valence Training Dataset Fukuball Lin @ 資策會資訊處

Slide 49

Slide 49 text

訓練 VA 電台 • 使⽤用 fuku-ml 訓練 Valence 迴歸模型 import os import FukuML.Utility as utility import FukuML.RidgeRegression as ridge_regression input_train_data_file = os.path.join(os.path.join(os.getcwd(), os.path.dirname(__file__)), 'library/iNDIEVOX-Dataset/dataset/ valence_train.dataset') ridge = ridge_regression.RidgeRegression() ridge.load_train_data(input_train_data_file) // 載入資料集 ridge.set_feature_transform('legendre', 2) ridge.set_param(lambda_p=0.01) // 設定參參數 ridge.init_W() ridge.train() // 訓練 Fukuball Lin @ 資策會資訊處

Slide 50

Slide 50 text

Cross Validation VA 電台 • 使⽤用 Cross Validation 挑選參參數 cross_validator = utility.CrossValidator() ridge_regression1 = ridge_regression.RidgeRegression() ridge_regression1.load_train_data(input_train_data_file) ridge_regression1.set_feature_transform('legendre', 2) ridge_regression1.set_param(lambda_p=0) ridge_regression2 = ridge_regression.RidgeRegression() ridge_regression2.load_train_data(input_train_data_file) ridge_regression2.set_feature_transform('legendre', 2) ridge_regression2.set_param(lambda_p=0.01) cross_validator.add_model(ridge_regression1) cross_validator.add_model(ridge_regression2) avg_errors = cross_validator.excute() best_model = cross_validator.get_best_model() Fukuball Lin @ 資策會資訊處

Slide 51

Slide 51 text

預測 VA 電台 • 模型訓練好之後,就可以拿來來做迴歸預測 best_model.init_W() best_model.train() future_data = '0.0611308372368 0.0993997525059 … … 0.00595031482948’ prediction = best_model.prediction(future_data, mode='future_data') Fukuball Lin @ 資策會資訊處

Slide 52

Slide 52 text

VA ⼼心情電台範例例 VA 電台 $ python lesson3_ridge_regression.py 執⾏行行 結果 Fukuball Lin @ 資策會資訊處

Slide 53

Slide 53 text

智慧⾳音樂 啊~~~ Magic! Fukuball Lin @ 資策會資訊處

Slide 54

Slide 54 text

離開 iNDIEVOX 之後 繼續研發 Fukuball Lin @ 資策會資訊處

Slide 55

Slide 55 text

相似歌詞推薦 Fukuball Lin @ 資策會資訊處

Slide 56

Slide 56 text

中⽂文歌詞相似推薦系統 (1) • Step 1:中⽂文斷詞,集合成資料集 • Step 2:去掉停⽤用字 • Step 3:將每⾸首歌詞轉成向量量表⽰示(doc2vec) • Step 4:LSA 算法降維 • Step 5:使⽤用降維後的向量量計算 cosin similarity • 這邊使⽤用了了 gensim 套件處理理步驟 2-5,但全部⾃自幹也 不算太難 、 實際應⽤用 Fukuball Lin @ 資策會資訊處

Slide 57

Slide 57 text

中⽂文歌詞相似推薦系統 (2) 、 實際應⽤用 Demo Fukuball Lin @ 資策會資訊處

Slide 58

Slide 58 text

中⽂文歌詞相似推薦系統 (3) 、 實際應⽤用 • 輸入:楊培安 我的驕傲 歌詞 • 輸出: • 楊培安 我的驕傲 • 五⽉月天 倔強 • 張雨⽣生 我的未來來不是夢 • 五⽉月天 憨⼈人 • 五⽉月天 ⼀一顆蘋果 Fukuball Lin @ 資策會資訊處

Slide 59

Slide 59 text

中⽂文歌詞相似推薦系統 (4) 、 實際應⽤用 《 我的驕傲》節錄 沒有⼭山不能跨越 沒有海海不能冒險 讓歷史記得這⼀一天 當我⽤用⼼心立下諾⾔言 沒有事不能改變 沒有夢不能實現 我站在未來來最前線 抬頭迎接每個考驗 海海闊天空是我的地圖 想寫下全新紀錄 放眼天下在等我去征服 ⽤用熱⾎血燃燒⿊黑夜 等待最燦爛的⽇日出 看陽光與我賽跑 風雨和我狂飆 我的驕傲⾃自⼰己打造 每個夢 永遠比天⾼高 ⼀一顆⼼心 為希望在跳躍 讓世界為我歡呼 ⼤大地為我炫耀 我的驕傲你會看到 汗和淚淚痛苦的煎熬 在這⼀一刻都是我光榮的記號 《 倔強》節錄 最美的願望 ⼀一定最瘋狂 我就是我⾃自⼰己的神 在我活的地⽅方 我和我最後的倔強 握緊雙⼿手絕對不放 下⼀一站是不是天堂 就算失望不能絕望 我和我驕傲的倔強 我在風中⼤大聲的唱 這⼀一次為⾃自⼰己瘋狂 就這⼀一次 我和我的倔強 逆風的⽅方向 更更適合⾶飛翔 我不怕千萬⼈人阻擋 只怕⾃自⼰己投降 我和我最後的倔強 握緊雙⼿手絕對不放 下⼀一站是不是天堂 就算失望不能絕望 我和我驕傲的倔強 我在風中⼤大聲的唱 這⼀一次為⾃自⼰己瘋狂 就這⼀一次 我和我的倔強 Fukuball Lin @ 資策會資訊處

Slide 60

Slide 60 text

、 Fukuball Lin @ iThome TechTalk 補充說明 LSA 潛在語意分析(1)

Slide 61

Slide 61 text

LSA 潛在語意分析(2) 、 Fukuball Lin @ iThome TechTalk 補充說明 LSA 降維 SVD 分解 表⽰示歌詞如何⽤用兩兩種Topic來來呈現,可明顯看出有兩兩類歌詞 原本要⽤用12個詞來來描述歌詞,現在只要⽤用兩兩個Topic就可以描述 row 1 有關愛情的字詞值都較⾼高,所以Topic1應代表愛情 row 2 有關夢想的字詞值都較⾼高,所以Topic2應代表夢想 無法完整呈現歌詞情意

Slide 62

Slide 62 text

LSA 潛在語意分析(3) 、 Fukuball Lin @ iThome TechTalk 補充說明 風景 世界 巧克⼒力力 甜美 愛情 快樂 滋味 咖哩 理理想 夢想 陽光 ⾶飛翔 能夠完整呈現歌詞情意 c1 c2 c3 c4 c5 m1 m2 m3 m4

Slide 63

Slide 63 text

中⽂文歌詞相似推薦系統 (5) 、 實際應⽤用 • 輸入:周杰倫倫 安靜 歌詞 • 輸出: • 周杰倫倫 安靜 • 黃品源 那麼愛你為什什麼 • 孫燕姿 我不難過 • 陳奕迅 婚禮的祝福 • 周杰倫倫 斷了了的弦 Fukuball Lin @ 資策會資訊處

Slide 64

Slide 64 text

你也有什什麼 idea 想去實現嗎? 那就去做做看! Fukuball Lin @ 資策會資訊處 以上智慧⾳音樂 應⽤用幾乎都是 在我⼯工作之餘 完成的!

Slide 65

Slide 65 text

Q & A Find Me Twitter @fukuball Github @fukuball Facebook @fukuball