基於內容的電影推薦演算法研究

想你时风起發表於2024-04-11

引言

今天讀的文章為一篇名為《基於內容的電影推薦演算法研究》的文章,文章提出了一種基於內容的電影推薦演算法,透過分析電影特徵和使用者興趣,實現更精準的電影推薦。

文章中使用到了TF-IDF向量化方法,將電影型別和導演資訊轉化為特徵向量,然後使用餘弦相似度來衡量電影之間的相關性,接下來根據使用者的偏好和需求,透過加權相似度得分來提高相關電影的優先順序,最後篩選和排序,選出最合適的推薦結果。

原理和方法

基於內容的推薦演算法是以專案相關資訊、使用者相關資訊及使用者對專案的操作行為來構建推薦演算法模型,不需要依據使用者對專案的評價意見,更多地需要用機器學習的方法從關於內容的特徵描述的事例中得到使用者的興趣資料。簡單理解是根據推薦專案的屬性計算專案間的相關性,然後根據使用者的偏好記錄,推薦給使用者相似度高的物品。如下圖所示:
image

使用到的技術

資料預處理

將獲取到的資料進行去重、去除噪聲等操作,得到一個電影資料,其中有些電影型別、導演是預設值,可以將其替換為空字串。最後將結果儲存到csv檔案中。電影資料詳情如下所示。
image

建立一個TF-IDF向量化器,將電影的型別和導演轉化為TF-IDF矩陣,計算機餘弦相似度,得到餘弦矩陣,此時可以建立一個索引,以便快速透過電影名稱找到電影詳細資訊。

TF-IDF特徵提取和矩陣構建

TF-IDF指的是:詞頻(TF)和逆文件頻率(IDF),簡單理解,TF指的是一個詞語在文章中出現的頻率,頻率越高,說明這個詞語對於文章越重要,反之,越不重要。IDF值的是一個詞語在整個文件集中的出現的頻率。TF-IDF的值就是TF乘以IDF。

所包含的公式符號說明:

M表示文件集包含的文件數,包含關鍵詞ka的文件數為ma,fab表示關鍵詞ka在文件db中出現的次數,fdb表示文件db中出現的詞語總數。

TF、IDF以及TF-IDF的計算公式:

  1. TF的計算公式:
    image
  2. IDF的計算公式
    image
  3. 可以得到TF-IDF的計算公式
    image

餘弦相似度計算和結果排序

將文字資料轉換為特徵向量表示,使用 TF-IDF 特徵提取方法將文字資料轉換為 TF-IDF 矩陣後,對於每個待推薦的專案,計算其特徵向量與其他專案特徵向量之間的餘弦相似度。

餘弦相似度

餘弦相似度透過夾角的距離來判斷兩個向量之間的距離。

餘弦相似度的計算公式為:
image

其中Fu表示某個使用者的偏好特徵,Fi表示某個候選物品的偏好特徵。k表示第k個特徵,向量中一共有K個特徵。

餘弦相似度所得的結果在-1到1之間,值越接近1,則代表物品越適合該使用者,若值越接近-1則代表物品越不適合使用者。

結果排序

對於待推薦的專案,計算其與其他專案的相似度,得到一個相似度列表。根據相似度列表,選取與待推薦專案相似度最高的前 N 個專案作為推薦結果。

使用者偏好以及加權相似度

在推薦系統中考慮使用者偏好和加權相似度的目的是更準確地推薦符合使用者喜好的電影。使用者偏好是指使用者對電影的特定屬性或特徵的偏好,比如喜歡某個電影型別、喜歡某個導演等。加權相似度是根據使用者的偏好資訊對電影之間的相似度進行加權,使得與使用者喜好更相關的電影得到更高的相似度分。

在推薦系統中考慮使用者偏好以及加權相似度,可以提高推薦的準確性,讓使用者滿意度更高。

假設有兩個物件 A 和 B,它們的相似度得分為score(A, B),而對於不同的特徵或屬性,分別有權重weight1、weight2、...weightn。使用計算公式similarity(A, B) = weight1score1(A, B) + weight2 ·score2(A, B) + ... + weightn · scoren(A, B) 其 中,score1(A, B)、score2(A, B)、...、scoren(A, B)分別表示不同特徵或屬性的相似度得分。

實驗所用資料集

使用 IMDB 電影評分作為資料集。

IMDB 是一個知名的電影評分網站,涵蓋了大量的電影作品,包括各種型別、不同年代和不同國家的電影,擁有大量的使用者評分和評論資料。評分資料不僅包括了使用者的整體評分,還包括了使用者對電影的不同方面的評分,如劇情、演員表演、音樂等。

實驗

文章使用了Python中的兩個函式,分別為get_recommendation和evaluate_recommendation。

使用 get_recommendation 函式獲取推薦電影列表,並將其傳遞給 evaluate_recommendation 函式進行評估,輸出推薦電影列表。下表展示了文章作者的get_recommendation函式引數列表:
image

evaluate_recommendation接受兩個引數,一個引數為:目標電影的名稱,另外一個引數為推薦電影列表。利用次函式,可以獲得推薦電影的平均評分和平均投票數,如果推薦電影的平均評分和平均投票數與目標電影相似,那麼說明有一個較好的推薦結果。下表為文章作者evaluate_recommendation的引數列表。
image

作者以《阿凡達》為例,使用了電影的型別和導演資訊作為使用者喜好的引數,並設定了最低評分和最低投票數的篩選條件。推薦的電影則是根據相似度得分排序。推薦的電影則是根據相似度得分排序後的前 5 部電影。
文章作者所得的實驗結果如下所示
image

結語

好了,今天的分享就到這了,實現這個推薦系統以後,將會上傳一個部落格,把我實現的過程寫到部落格裡,下個部落格見!

相關文章