在前文中提到了基於內容的推薦,為了決定是否將某特定的內容推薦給某一使用者,通常我們會依據內容之間的相似或相異程度來做決定。

那麼要如何決定內容的相似或相異程度呢?通常是利用預先決定的內容特徵,像是文章中出現的字詞以及字詞的頻率,或是音樂的音量、音高,或是音量變化、音高變化等等。利用這組預先決定的內容特徵,便得以讓我們得以將原本抽象的「內容」概念,表示成為電腦可以計算的量化數字,進而判斷內容兩兩是否相似或是相異,同時評估出它們相似、相異的程度有多高。

能夠評估出相似或相異的程度,就有辦法做推薦了。比如說,我們可以做到「推薦和你現在正在觀看的影片最相像的十則影片」或是「依據你設為最愛的所有歌曲,推薦和它們相像,而且是這個月內才發表的新歌」等等的推薦。

所以說,為什麼我們可以基於內容來做推薦,它的基礎是假設和你感興趣的內容相似的,便很有可能就是你也感興趣的。就像是你之所以會觀看某一則影片,那是因為你多半對它感興趣,所以和它相似的,也就有可能是你也感興趣的。

從使用者感興趣的內容來判定特徵
從這邊你可能就可以想到,內容有其特徵,使用者也有其特徵,而使用者的特徵便是來自於其感興趣的內容。

我們可以綜合使用者在一段時間區間內所感興趣的內容之特徵,來做為使用者的特徵。時間區間可以是長期的,這樣的話,所得到的特徵所代表的,便是使用者長期的喜好用特性。時間區間也可以是很短期的、很即時的,如此一來,它所代表的特徵就是使用者短期的喜好特性。

你可以依據應用來選擇,究竟要用使用者短期或是長期的喜好特性。若能建立使用者的偏好特性表示,就可以從內容中,挑選出和使用者偏好相似的內容來做推薦。

如何計算內容的相似性
但是,我們還沒提到怎麼評估相似程度。事實上,選用不同的特徵、運用在不同的應用上,就有可能使用不同的相似性指標,以及不同的計算方法。一般來說,有很多現成已經發展好的相似性指標可以使用,例如常見的餘弦(cos)相似度。

在一個向量空間中,每個向量都具有相同的維度,而兩個向量之間的夾角,就意謂著它們的相近程度。使用其夾角的的餘弦值( cos θ)便可以得到一個落在0與1之間的值。當兩向量餘弦值為零(用二維空間的術語就是垂直),代表這兩個向量互無瓜葛,相反的,若餘弦值為一,代表這兩個向量的方向完全一致。

當我們利用夾角的餘弦值來表示相似度時,我們所選用的特徵,就成了向量中的每一個維度,我們若選了n個特徵,就等於用一個n維的向量來表示一份內容。

舉例來說,我們可以用一份詞庫來表示文件的特徵,假設詞庫中有一萬個詞,那麼每一份文件就相當於是一個一萬維度空間中的向量,而該文件在每個維度下的值,可以是詞庫中所對應的詞在該文件中出現的總次數(或是像TFIDF之類的值)。

用這種方式,我們想要判斷兩個文件相似的程度有多高,就只需要基於一組詞庫,或是基於斷詞演算法處理後的結果,將每個文件都轉換成為一個向量,那麼就可以套用餘弦值的計來評估其相似度。

如此一來,我們就可以做到以文找文的功能,當使用者正在閱讀某一篇文章之際,系統便可以推薦給他和正在閱讀該文或最近的幾篇相似的文章。系統也可以綜合使用者長期的閱讀行為,每當系統收錄了新的文章時,據以判斷是否該推薦給使用者。當然,既然能夠處理文字,當然就有機會可以處理圖片。你可以利用類似的概念來做以圖找圖,或者是圖片的推薦。

可應用的相關演算法

將各式各樣的內容轉換成為可以處理的向量,有很大的意義,因為這個動作意謂著我們將沒有結構的資料,轉換成為電腦容易處理結構性資料。像文字、圖片、聲音都是較不具特定結構的資料,但是一旦轉換成為向量數值資料之後,就變成更有結構而且電腦容易處理的資料了。

而且,對於處理在向量空間中的資料,人們早就發展出許多的應用及滿足這些應用的演算法。

例如所謂群集(clustering)的演算法,可以自動將相近的向量群集在一起。一旦我們可以將各式內容轉換成為向量,就可以套用現成的群集演算法,將相近的內容自動聚集在一塊。對文章的應用來說,群集的演算法就可以做到將內容相近的文章聚集起來分組,甚至可以找出這些內容相似文章的共同點。

倘若套用階層式群集的演算法時,還可以將文章以階層式的架構來做分群,大群之下再細分出小群,而這些都有現成的演算法,像是K-Means或Fuzzy K-Means等等。

像K-Means演算法,其實早在1967年就已經被提出,這說明了人們處理相關的應用及資料,已經有很長的一段時間了。所以這些應用方式(像群集、分類)以及對應用的演算法,都是現成的。對於我們來說,核心的議題反而是:(1)如何挑選這些應用的方式來做推薦(2)如何將自己要處理的內容,轉換成為演算法可以處理的資料(3)選擇合適的演算法,以及搭配的參數。

例如,你可以運用分群的演算法,將使用者依據其過去的喜好予以自動分類。每當系統中有新的內容時,便計算該內容和各群的相似程度,自動將該內容推薦給相似度夠高的群。這就是挑選一種應用方式來做推薦。

當然,你也可以利用分類的演算法來做。像現在有一些電子郵件系統,會建立分類的模型,將電子郵件區分出垃圾郵件(SPAM)或是重要郵件(像Gmail中的Important分類),每當有新的郵件進來時,就自動將其分類。

廣義來說,這種電子郵件的分類,甚至是過濾機制,也像是一個推薦的系統。因為它能夠提示使用者那些郵件是重要的,若是每日收到的郵件量繁多時,可以優先閱讀重要的郵件。相反的,被認為是垃圾郵件的內容,就可以不需要花費時間去細看。而這樣的推薦系統便是基於資料分類的應用來做的,有很多現成的分類演算法,像Bayesian Network,或是Hidden Markov Model等方法,都可以拿來做分類。

演算法是現成的,但是,該怎麼將特定的應用領域中的資料,例如電子郵件的分類及推薦,轉換成為這些分類演算法可以處理的資料,就成了一個大關鍵。

事實上,你可能要做的工作就是:選擇合適而且效果好的特徵,決定如何將內容轉換成為所選定特徵的表示方式,挑選合適而且效果好的演算法,以及搭配合宜的參數。

想要基於內容做推薦,方法和技術都和現在處理內容的其他應用相近。例如,有人做「以歌點歌」的系統,基本上就是讓使用者哼上一段旋律,接著系統將錄到的使用者音訊,依據所選定的特徵,轉換成以這些特徵所表示的資料,接著再套用相似的演算法,找到資料庫中相似的歌曲。

雖然方法技術都接近甚至相同,不過套用在推薦系統上,目的又不盡相同就是了。

專欄作者


熱門新聞

Advertisement