使用句子轉換模型構建播放清單生成器
TL;DR
Hugging Face 詳細說明了如何建構一個使用 Sentence Transformers 於歌曲歌詞嵌入上執行語意搜尋的播放清單生成器,並以多步驟 Gradio 應用程式包裝。此專案展示了預訓練嵌入模型如何在不需自行訓練模型的情況下,將使用者文字提示與相關歌曲內容匹配。
使用 Sentence Transformers 進行語意搜尋
播放清單生成器的核心功能在於產生句子嵌入以實現語意搜尋。系統不是匹配關鍵字,而是找出與使用者提示意義相近的歌曲。
模型選擇與實作
本專案選用了 sentence-transformers/msmarco-MiniLM-L-6-v3 模型。此模型屬於 MS MARCO 系列,該系列以 Bing 搜尋查詢為訓練資料,在多種領域上皆表現良好。
以詩節切分處理長文本
由於嵌入模型有最大輸入序列長度限制(本例為 512 個 word piece),整首歌曲往往超過模型容量而被截斷。為了解決此問題,會將歌詞切分成較小的片段——具體而言是詩節——並分別對每個詩節進行嵌入。此做法確保搜尋更精確,且模型能處理完整的歌曲內容。
產生與儲存嵌入
嵌入是透過 Sentence Transformers 模型的 .encode() 方法產生的。在此實作中,產生的嵌入會以 pickle 檔案形式儲存,並上傳至 Hugging Face Hub 作為資料集供大家存取。
執行搜尋
為了找出相關歌曲,系統使用 util.semantic_search 將使用者提示的嵌入與預先產生的詩節嵌入語料庫進行比對。為確保返回足夠數量的不同歌曲,top_k 參數設為 20,通常在去除同一歌曲的重複詩節後,至少會得到 9 首獨立歌曲。
使用 Gradio 建構多步驟介面
此應用程式利用 Gradio Blocks API 建立非線性、多步驟的使用者體驗,讓前一步的輸出作為下一步的輸入。
應用流程
- 輸入:使用者在
gr.TextArea中輸入文字提示,或選取範例。 - 觸發:
gr.Button觸發generate_playlist函式。 - 處理:函式編碼提示並對詩節嵌入執行語意搜尋。
- 輸出:結果透過
gr.Radio元件返回,並使用.update()方法動態更新,以顯示辨識出的歌曲名稱。 - 檢視:使用者可從 radio 選項中選取歌曲,查看其完整歌詞。
資料整合
應用程式在啟動時使用 hf_hub_download 從 Hugging Face 資料集直接載入必要的資料——包括詩節嵌入、歌曲映射與歌詞。
未來增強與資源
專案作者指出了幾個可擴充工具功能的潛在方向:
- Spotify 整合:自動產生播放清單,並嵌入播放器以即時收聽。
- 視覺回饋:使用
HighlightedTextGradio 元件顯示觸發語意匹配的具體詩節。 - 嵌入可視化:建立嵌入空間的視覺化圖形,以更好理解歌曲之間的關係。