近幾年,Podcast 越發熱門,Spotify 的用戶也越來越頻繁地使用關鍵字搜尋相關節目,希望找到自己有興趣的 Podcast 內容。不過,Podcast 的標題敘述五花八門,不一定會將用戶下的關鍵字明確地放在標題文字。因此,如何讓使用者更準確地找到感興趣的收聽節目成為 Spotify 的一大挑戰。
Spotify 既有的搜尋系統是 Elasticsearch
,不過他只會回傳跟搜尋關鍵字(query)完全一致的內容,即便語意相同,只要關鍵字有些許不同,就不會被 Elasticsearch
找到並回傳。因此,Spotify 轉而借助 NLP 的力量,特別是 Natural Language Search(又名 Semantic Search),以更輕易地找到相關內容。
使用到的技術為:Self-supervised learning、Transformer neural network,並也使用 Approximate Nearest Neighbor (ANN)。
Spotify 使用 Dense Retrieval 這個架構,其目標是產生和搜尋關鍵字(query)位於相同 embedding space 中的節目向量(episode vectors)。產生向量的方式是利用不同的文字來源,例如搜尋關鍵字(query)是使用其本身的輸入文字;而節目則是和其有關的所有文字資料,包含標題、節目敘述、和其來源 Podcast 的標題及敘述等等。
如上述,Spotify 需要將各種標題、敘述及搜尋關鍵字轉成向量,而最常見的模型是 BERT。不過 BERT 並不完全符合本次情境,原因有二:
幾經考量下,他們決定使用 Universal Sentence Encoder CMLM 模型(詳見 Universal Sentence Representation Learning with Conditional Masked Language Model),其優勢有二:
Elasticsearch
搜尋過的關鍵字(query)和成功配對的節目(episode),搜集成一對資料(query, episode)。為了訓練模型,Spotify 首先使用 pre-trained 的 Universal Sentence Encoder CMLM 架構,並產生兩套模型,分別抓取有關搜尋關鍵字(query)和節目的 embedding。兩邊的 encoders 會共享權重,並藉由 cosine similarity 計算搜尋關鍵字向量(query vector)和節目向量(episode vector)的相似程度。
為了更有效率地訓練模型,除了成功的配對資料以外,也需要失敗的資料。然而,在資料生成階段,只有抓取成功資料,要如何讓模型也知道不能搜尋到哪些節目呢?
Spotify 使用 in-batch negatives,方法是對於每個資料配對(query, episode),隨機挑選在同個 batch 下,其他 episode 當作負面配對,藉此告知模型哪些節目是不能被預測的 。而這個也是在前幾天的文章中,提過的 Pinterest 使用的方法。
在使用這個方法後,Spotify 的用戶在 Podcast 的參與度有顯著提升。
好的,以上就是 Spotify 使用 NLP 方法以改進 Podcast 搜尋的介紹。
謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
也歡迎到我的 medium 逛逛!
Reference: