獲取推薦對象的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種獲取推薦對象的方法及裝置。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,人們進(jìn)入了信息過載的時(shí)代。在用戶訪問網(wǎng)站的過程中, 大量的新聞、商品、視頻、音樂等等對象呈現(xiàn)在了用戶面前。怎樣篩選出用戶真正感興趣的 內(nèi)容對提高網(wǎng)站的訪問量及收益有著非常重要的意義。推薦系統(tǒng)相關(guān)的技術(shù)在這樣的背景 下得到了越來越廣泛的使用。
[0003] 近幾年來矩陣分解算法成為了推薦系統(tǒng)領(lǐng)域研宄的主流,研宄表明在個(gè)性化推薦 中使用矩陣分解技術(shù)可以得到比傳統(tǒng)基于鄰域的協(xié)同過濾更好的結(jié)果。矩陣分解算法將用 戶對對象的評分矩陣進(jìn)行分解,生成用戶矩陣U和對象矩陣V,這樣就將用戶和對象映射到 了高維的潛語義空間。用戶矩陣及對象矩陣的每一行都是一個(gè)向量,表示相應(yīng)的用戶和對 象。用戶向量與一個(gè)對象向量的內(nèi)積就是該用戶對對象的評分,內(nèi)積越大,評分越高,表示 越是推薦。每個(gè)用戶的推薦對象可以取所有對象中K個(gè)內(nèi)積最大的對象向量對應(yīng)的對象作 為推薦結(jié)果。
[0004] 在實(shí)際應(yīng)用場景中,用戶和對象的數(shù)量往往龐大,相當(dāng)于多達(dá)千萬的用戶都需要 在千萬級對象構(gòu)成的高維空間中搜索K個(gè)最大的內(nèi)積,該計(jì)算過程非常耗時(shí)。因此需要一 種方案能夠快速地完成用戶和對象向量間最大內(nèi)積的TopK計(jì)算。
[0005] 若采用最基本的線性搜索方法進(jìn)行最近鄰搜索,則時(shí)間復(fù)雜度較高,無法滿足海 量數(shù)據(jù)下的需求。常用的解決方案是建立高維索引,利用高效的數(shù)據(jù)結(jié)構(gòu)和算法完成搜索。 但是,由于內(nèi)積不滿足三角不等性且無法衡量向量間的相似性,導(dǎo)致常用的聚類、高維索引 樹、局部感知哈希等建立高維索引的方案均無法直接適用于內(nèi)積空間的搜索。
【發(fā)明內(nèi)容】
[0006] 有鑒于此,本發(fā)明提供一種獲取推薦對象的方法及裝置,具有搜索速度快,適用范 圍廣等優(yōu)點(diǎn)。
[0007] 為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種獲取推薦對象的方法,包 括:構(gòu)建原始用戶矩陣和原始對象矩陣,其中,所述原始用戶矩陣中的每一行為原始用戶向 量,每個(gè)所述原始用戶向量表示一個(gè)用戶的多重屬性特征,所述原始對象矩陣中的每一行 為原始對象向量,每個(gè)所述原始對象向量表示一個(gè)對象的多重屬性特征;對原始用戶矩陣 和原始對象矩陣進(jìn)行保序變換,得到新用戶矩陣和新對象矩陣;對所述新對象矩陣中的新 對象向量構(gòu)建對象高維索引結(jié)構(gòu);對所述新用戶矩陣中的各個(gè)新用戶向量在所述對象高維 索引結(jié)構(gòu)中進(jìn)行最近鄰搜索,得到所述新用戶向量對應(yīng)的最近鄰新對象向量;根據(jù)各個(gè)所 述新用戶向量及其對應(yīng)的所述最近鄰新對象向量,輸出用戶與推薦對象的映射。
[0008] 可選地,所述對原始用戶矩陣和原始對象矩陣進(jìn)行保序變換,得到新用戶矩陣和 新對象矩陣的步驟包括:對所述原始用戶矩陣的第i行向量\添加數(shù)值0作為一個(gè)新的維 度,得到新用戶向量A= (O.xf)'從而得到所述新用戶矩陣;計(jì)算所述原始對象矩陣的第j行向量yj的2-范數(shù)以及該2-范數(shù)的最大值少,對所述yj添加_
作為一個(gè)新 的維度,得到新對象向量
,從而得到所述新對象矩陣。
[0009] 可選地,所述對所述新對象矩陣中的新對象向量構(gòu)建對象高維索引結(jié)構(gòu)的步驟包 括:將所述新對象矩陣中的新對象向量聚類得到多個(gè)對象子類,每個(gè)對象子類具有一個(gè)對 象聚類中心;為每個(gè)所述對象子類建立vp-tree樹結(jié)構(gòu)。
[0010] 可選地,所述對所述新用戶矩陣中的各個(gè)新用戶向量在所述對象高維索引結(jié)構(gòu)中 進(jìn)行最近鄰搜索,得到所述新用戶向量對應(yīng)的最近鄰新對象向量的步驟包括:將所述對象 高維索引結(jié)構(gòu)序列化地保存為對象索引文件并發(fā)送給多個(gè)節(jié)點(diǎn);在每個(gè)所述節(jié)點(diǎn)上,根據(jù) 所述新對象矩陣和所述對象索引文件重建出所述對象高維索引結(jié)構(gòu);采用map-reduce技 術(shù),通過hadoop框架在所述多個(gè)節(jié)點(diǎn)中對所述新用戶矩陣中的各個(gè)新用戶向量進(jìn)行最近 鄰搜索,得到所述新用戶向量對應(yīng)的最近鄰新對象向量。
[0011] 可選地,所述采用map-reduce技術(shù),通過hadoop框架在所述多個(gè)節(jié)點(diǎn)中對所述 新用戶矩陣中的各個(gè)新用戶向量進(jìn)行最近鄰搜索,得到所述新用戶向量對應(yīng)的所述最近鄰 新對象向量的步驟包括:將所述新用戶矩陣均分成多個(gè)新用戶向量組并分發(fā)到所述多個(gè) 節(jié)點(diǎn),所述hadoop為分發(fā)到各個(gè)節(jié)點(diǎn)的所述新用戶向量組分別建立mapper;在各個(gè)所述 mapper內(nèi)為對應(yīng)的所述新用戶向量組中各個(gè)新用戶向量執(zhí)行以下操作:計(jì)算所述新用戶 向量與各個(gè)所述對象聚類中心的歐氏距離,找到歐氏距離最近的所述對象聚類中心,進(jìn)入 該歐氏距離最近的對象聚類中心對應(yīng)的vp-tree,通過遞歸遍歷樹完成該vp-tree的最近 鄰搜索,得到所述新用戶向量對應(yīng)的最近鄰新對象向量;在reducer中匯總并保存所述新 用戶向量與對應(yīng)的所述最近鄰新向量對象的映射關(guān)系。
[0012] 為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種獲取推薦對象的裝置,包 括:矩陣構(gòu)建模塊,用于構(gòu)建原始用戶矩陣和原始對象矩陣,其中,所述原始用戶矩陣中的 每一行為原始用戶向量,每個(gè)所述原始用戶向量表示一個(gè)用戶的多重屬性特征,所述原始 對象矩陣中的每一行為原始對象向量,每個(gè)所述原始對象向量表示一個(gè)對象的多重屬性特 征;保序變換模塊,用于對原始用戶矩陣和原始對象矩陣進(jìn)行保序變換,得到新用戶矩陣和 新對象矩陣;索引構(gòu)建模塊,用于對所述新對象矩陣中的新對象向量構(gòu)建對象高維索引結(jié) 構(gòu);搜索模塊,用于對所述新用戶矩陣中的各個(gè)新用戶向量在所述對象高維索引結(jié)構(gòu)中進(jìn) 行最近鄰搜索,得到所述新用戶向量對應(yīng)的最近鄰新對象向量;輸出模塊,用于根據(jù)各個(gè)所 述新用戶向量及其對應(yīng)的所述最近鄰新對象向量,輸出用戶與推薦對象的映射。
[0013] 可選地,所述矩陣構(gòu)建模塊還用于:對所述原始用戶矩陣的第i行向量Xi添加數(shù) 值0作為一個(gè)新的維度,得到所述新用戶向量X; = (0,xD'從而得到所述新用戶矩陣;計(jì) 算所述原始對象矩陣的第j行向量h的2-范數(shù)以及該2-范數(shù)的最大值P,對所述h添加
作為一個(gè)新的維度,得到所述新對象向量
,從而 得到所述新對象矩陣。
[0014] 可選地,所述索引構(gòu)建模塊還用于:將所述新對象矩陣中的新對象向量聚類,得到 多個(gè)對象子類,每個(gè)對象子類具有一個(gè)對象聚類中心;為每個(gè)所述對象子類建立vp-tree 樹結(jié)構(gòu)。
[0015] 可選地,所述搜索模塊還用于:將所述對象高維索引結(jié)構(gòu)序列化地保存為對象索 引文件并發(fā)送給多個(gè)節(jié)點(diǎn);在每個(gè)所述節(jié)點(diǎn)上,根據(jù)所述新對象矩陣和所述對象索引文件 重建出所述對象高維索引結(jié)構(gòu);采用map-reduce技術(shù),通過hadoop框架在所述多個(gè)節(jié)點(diǎn)中 對所述新用戶矩陣中的各個(gè)新用戶向量進(jìn)行最近鄰搜索,得到所述新用戶向量對應(yīng)的所述 最近鄰新對象向量。
[0016] 可選地,所述搜索模塊還用于:將所述新用戶矩陣均分成多個(gè)新用戶向量組并分 發(fā)到所述多個(gè)節(jié)點(diǎn),所述hadoop為分發(fā)到各個(gè)節(jié)點(diǎn)的所述新用戶向量組分別建立mapper; 在各個(gè)所述mapper內(nèi)為對應(yīng)的所述新用戶向量組中各個(gè)新用戶向量執(zhí)行以下操作:計(jì) 算所述新用戶向量與各個(gè)所述對象聚類中心的歐氏距離,