SIGIR'2023 Generative Sequential Recommendation with GPTRec

Generative Sequential Recommendation with GPTRec

來源:SIGIR 2023

摘要:順序推薦旨在預(yù)測序列中的下一個項目浓领。最近卖哎,基于transformer的SASRec和BERT4Rec等模型蔓搞,已經(jīng)在順序推薦中取得了最先進的結(jié)果魄揉。然而,這種方法也有其局限性需了。首先,項目id數(shù)量可能比語言模型中的詞匯數(shù)量大很多倍般甲。其次肋乍,這些模型所使用的經(jīng)典Top-K推薦方法可能對復(fù)雜的推薦目標不是最優(yōu)的,包括輔助目標敷存,如多樣性墓造、覆蓋率或一致性。生成語言模型的最新進展激勵我們重新審視生成方法來解決這些挑戰(zhàn)锚烦。本文提出了基于GPT-2架構(gòu)的GPTRec順序推薦模型觅闽。GPTRec可以通過使用一種新的SVD標記算法將項目id分解為子id標記來解決大型詞匯表問題,并達到較好的效果涮俄。本文還提出了一種新的Next-K推薦策略蛉拙,它考慮到已經(jīng)推薦的項目,逐個生成推薦彻亲。Next-K策略可用于生成復(fù)雜的相互依賴的推薦列表孕锄。

1. nextK策略與topK策略

? ??現(xiàn)有的順序模型通常使用分數(shù)排名的方法來生成推薦(我們也稱之為Top-K策略)。這種方法的問題是苞尝,項目是獨立得分的畸肆,相似的項目很可能有相似的分數(shù)。在這種情況下宙址,模型的輸出很可能是由類似類型的項所主導(dǎo)的轴脐,這可能是次優(yōu)的,有時向用戶顯示不同類型的項會更好抡砂。Top-K策略的基本問題是大咱,它假設(shè)每個項目都可以獨立于其他推薦的項目進行評分,然而這一建議在現(xiàn)實中并不一定能夠得到保證舀患。

? ??因此徽级,作者提出了一種生成式的Next-K策略,即逐項生成推薦聊浅。在這種情況下餐抢,當(dāng)模型在位置??中生成推薦時,它已經(jīng)知道在位置1..???1中推薦了哪些項目低匙,并可以相應(yīng)地調(diào)整結(jié)果旷痕。更正式地說,項目得分不僅取決于用戶和項目顽冶,還取決于以前的推薦:??(????????欺抗,??????????????????????_??????????,????????)→??????????强重。該模型迭代地評分所有項目(不包括已經(jīng)推薦的項目)绞呈,以生成建議贸人,并將得分較高的項目添加到??????????????????????_??????????列表中。算法2用偽代碼的形式說明了該策略佃声。因為Next-K策略考慮了已經(jīng)推薦的項目艺智,所以它可能會解決經(jīng)典Top-K策略的問題,如缺乏多樣性圾亏。


圖1 NEXT-K策略

????Next-K策略的一個限制是它的計算成本更高:它需要為用戶生成完整的分數(shù)分布??次十拣,而Top-K策略只需要每個用戶一個推理。另一個問題是志鹃,評分函數(shù)現(xiàn)在有了更多的輸入?yún)?shù)(即考慮了已經(jīng)推薦的項目)夭问,因此訓(xùn)練這樣的函數(shù)可能具有挑戰(zhàn)性〔芰澹總之缰趋,在本節(jié)中,作者描述了一個流行的Top-K推薦策略陕见,并確定了該策略的局限性埠胖。

2.?Tokenisation

? ??現(xiàn)有的基于transformer的順序推薦模型,如SASRec和BERT4Rec使用項目id作為基本單位淳玩,然而,正如前面所討論的非竿,當(dāng)項目數(shù)量很大時蜕着,這種方法會導(dǎo)致過大的嵌入表,這很難容納到單個GPU中红柱。

? ??語言模型承匣,如BERT 和GPT-2 ,通過將整個單詞分解為子單詞token來解決類似的問題锤悄。子單詞標記化的示例策略包括Word Piece encoding(由BERT使用)和Byte-pair encoding的字節(jié)對(由GPT家族使用)韧骗。受此想法的啟發(fā),作者希望將項目劃分為子項零聚,以減少內(nèi)存占用袍暴,詳細的方法在第3節(jié)中說明,這里先來看看文本中的 subtokenisation方法隶症。

2.1?Byte-pair encoding

? ??最原始的分詞方法是按空格分token(也就是word粒度)政模。該方法的缺點在于:word粒度考慮的是根據(jù)單詞整體在語料中的共現(xiàn)建vocabulary,因此:1蚂会、不能很好地處理缺失詞以及稀缺詞(生疏詞)淋样,也就是OOV(out of vocabulary)問題。2胁住、不利于模型學(xué)習(xí)到相同word的不同時態(tài)趁猴,以及不同詞綴之間的關(guān)聯(lián)刊咳。比如:模型學(xué)到的“old”, “older”, and “oldest”之間的關(guān)系無法泛化到“smart”, “smarter”, and “smartest”。

????針對上述問題儡司,Subword(子詞)模型方法橫空出世娱挨。它的劃分粒度介于詞與字符之間,比如可以將”looking”劃分為”look”和”ing”兩個子詞枫慷,而劃分出來的"look"让蕾,”ing”又能夠用來構(gòu)造其它詞,如"look"和"ed"子詞可組成單詞"looked"或听,因而Subword方法能夠大大降低詞典的大小探孝,同時對相近詞能更好地處理。

? ? 一種典型的Subword方法是Byte-Pair Encoding(BPE)誉裆,BPE獲得Subword的步驟如下:1)準備足夠大的訓(xùn)練語料顿颅,并確定期望的Subword詞表大小足丢;2)將單詞拆分為成最小單元粱腻。比如英文中26個字母加上各種符號,這些作為初始詞表斩跌;并在詞表的末尾添加后綴“</w>”绍些。3)在語料上統(tǒng)計單詞內(nèi)相鄰單元對的頻數(shù),選取頻數(shù)最高的單元對合并成新的Subword單元耀鸦;4)重復(fù)第3步直到達到第1步設(shè)定的Subword詞表大小或下一個最高頻數(shù)為1.

????得到Subword詞表之后柬批,需要對輸入模型的句子中的單詞進行編碼,編碼流程如下:1)將詞典中的所有子詞按照長度由大到小進行排序袖订;2)對于單詞w氮帐,依次遍歷排好序的詞典。查看當(dāng)前子詞是否是該單詞的子字符串洛姑,如果是上沐,則輸出當(dāng)前子詞,并對剩余單詞字符串繼續(xù)匹配楞艾。3)如果遍歷完字典后参咙,仍然有子字符串沒有匹配,則將剩余字符串替換為特殊符號輸出产徊,如”<unk>”昂勒。4)單詞的表示即為上述所有輸出子詞。

3. GPTRec

3.1 結(jié)構(gòu)

? ??GPTRec是為生成順序推薦而設(shè)計的舟铜,它使用了GPT-2架構(gòu)戈盈,而GPT-2又基于transformer模型的解碼器部分。GPT-2對transformer模型有一些小的修改,如:1)將層標準化移動到transformer的開始塘娶;2)利用比例殘差權(quán)值實現(xiàn)修正的初始化归斤;3)使用可學(xué)習(xí)的位置編碼,而不是基于線性的編碼刁岸。本文對結(jié)構(gòu)沒有改動脏里,因此也沒有詳細贅述。

3.2 Tokenisation策略


圖2 SVD標記化算法

? ?作者提出了一種基于svd的標記化算法虹曙。圖2說明了該算法的主要三個步驟迫横。首先(圖中的步驟1),SVD標記化算法構(gòu)建了一個用戶-項目交互矩陣??酝碳,并使用??的潛在分量對該矩陣進行了截斷的SVD分解:


式1 SVD分解

? ??式中矾踱,??為用戶嵌入矩陣,??為項目嵌入矩陣疏哗,Σ為對角線上具有??個最大奇異特征值的對角線矩陣呛讲。因此,用戶嵌入和項目嵌入都有??個潛在組件返奉。

? ??在圖2的第2步中贝搁,對項目嵌入??進行歸一化,使每個嵌入維都在[0..1]區(qū)間內(nèi)芽偏,并添加少量高斯噪聲雷逆,以確保沒有兩個項目具有相同的嵌入(如果完全相同的用戶與兩個項目交互,可能會發(fā)生相同的嵌入)污尉。之后关面,SVD標記化將項目嵌入的每個維度量化到??個值中;量化嵌入中的每個值代表項目最終表示中的一個標記十厢。直觀地說就是將項目嵌入根據(jù)預(yù)先設(shè)定的v值進行分桶,比如圖中設(shè)定v為2捂齐,則將嵌入中第一列的值分桶到0,1和2中(0.2和0.1分類到0蛮放,0.4分類到1或者2(因為有噪聲),0.5分類到2)奠宜,同理第二列的值也分桶到0,1和2中包颁。

? ??最后,(圖2的第3步)算法用???(???1)抵消了嵌入的第i維偏移压真,以確保項目表示的每個維度都有其標記范圍(即第一個維度用標記表示[0..???1]娩嚼,第二個維度用標記表示[??..2???1],以此類推滴肿。

? ??算法3用偽代碼說明了這個過程岳悟,通過以上處理,該模型現(xiàn)在只需要存儲??×??大小的嵌入。


圖3 SVD標記化偽碼


圖 4 不同v和t下的優(yōu)化效果

????存儲嵌入所需的GPU內(nèi)存量并不依賴于目錄中項目的總數(shù)贵少;這類似于固定大小的標記詞匯表如何通過在語言模型中組合不同的標記來表示數(shù)百萬個不同的單詞呵俏。例如,正如我們前面提到的滔灶,為10M項目存儲嵌入表需要超過10GB的GPU內(nèi)存普碎。然而,使用??=8和??= 2048以多項標記模式為同一數(shù)據(jù)集嵌入一個表只需要16MB的GPU內(nèi)存(僅為原始嵌入表大小的0.16%)录平。圖4說明了對幾個可用的推薦系統(tǒng)數(shù)據(jù)集的類似計算和SVD標記化算法的不同配置麻车。

3.3 訓(xùn)練目標和損失

? ? 根據(jù)GPT-2 ,作者使用具有交叉熵損失的語言建模目標來訓(xùn)練模型斗这。該方法將一個標記序列的概率分解為??={??1动猬,??2,…????}作為條件概率的乘積:


式2

????然后涝影,利用最大對數(shù)似然原理枣察,由公式(2)推導(dǎo)出損失函數(shù):


式3

? ? 其中,p()由softmax進行計算燃逻,像語言模型一樣序目,這樣的策略使GPTRec能夠?qū)崿F(xiàn)Next-K推薦方法。

3.4 生成推薦策略

1)Top-K生成伯襟,每個項目只有一個標記猿涨。GPTRec支持Top-K推薦策略。在最簡單的情況下姆怪,當(dāng)一個項對應(yīng)于一個標記時叛赚,建議的生成類似于SASRec。GPTRec輸出序列中每個位置的下一個標記的概率分布??(????|??1稽揭,??2俺附,..?????1),這意味著最后一個概率分布對應(yīng)于序列中的下一個最有可能的項溪掀。在這種生成模式下事镣,GPTRec使用這最后的概率分布作為項目評分,并應(yīng)用標準的Top-K評分揪胃。

2)Top-k生成璃哟,每個項目多標記。GPTRec支持具有多標記項的Top-K任務(wù)喊递。在這種情況下随闪,模型使用標準的GPT-2自回歸生成輸出??候選項:每次,模型預(yù)測下一個標記的概率分布骚勘,然后從該分布中抽取一個標記铐伴。這個標記被添加到輸入序列的末尾,并重復(fù)這個過程,直到模型生成??標記盛杰,其中??是每個項目表示中的標記的數(shù)量挽荡。在生成候選項后,模型使用公式(2)所描述的鏈規(guī)則對候選項進行評分即供。

3)Next-k生成定拟,每個項目只有一個標記。在這種情況下逗嫡,推薦列表是使用Next-K過程(算法2)生成的青自。在每次迭代中,該模型將用戶的交互序列與已經(jīng)生成的推薦序列連接起來驱证,并生成下一個最有可能的項目延窜。

4 實驗

4.1 整體效果


圖5 不同模型在Movielens上的效果對比

???圖5表現(xiàn)了不同模型在Movielens上的效果對比,以及GPTRec使用NextK策略的效果抹锄。?可以看出逆瑞,GPTRec-TopK的結(jié)果與SASRec和BERT4Rec的結(jié)果相似,如NDCG@10為0.146伙单,優(yōu)于SASRec的結(jié)果(0.108获高,+35%),但與BERT4Rec的結(jié)果相比(0.152吻育,-4%)相當(dāng)念秧。通過召回@10指標測量的結(jié)果也遵循相同的模式: GPTRec的召回@10達到0.254,略低于BERT4Rec的結(jié)果(0.282)布疼,但優(yōu)于SASRec的結(jié)果(0.199)摊趾。總的來說游两,我們可以說GPTRec-TopK的結(jié)果與BERT4Rec相當(dāng)砾层,并且優(yōu)于SASRec。觀察GPTRec-TopK比SASRec表現(xiàn)更優(yōu)贱案,當(dāng)GPTRec在具有Top-K生成策略的單項標記模式下使用時梢为,它與SASRec的主要區(qū)別是損失函數(shù)(GPTRec中的交叉熵vs。SASRec中的二值交叉熵)轰坊,這證實了交叉熵損失對于下一個項目的建議更好。另外祟印,可以看到GPTRec-NextK的性能比其他模型更差肴沫。這并不奇怪:我們認為該方法可能需要更復(fù)雜的調(diào)優(yōu)技術(shù),如強化學(xué)習(xí)蕴忆,以便在下一代k模式中表現(xiàn)良好颤芬。然而,從表中可以看出,該模型實現(xiàn)的NDCG@10與SASRec的非常相似站蝠,這意味著該模型可以作為進一步調(diào)優(yōu)的強起點汰具。

4.2 多標記數(shù)的消融實驗


圖6 多標記令牌的效果對比
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菱魔,隨后出現(xiàn)的幾起案子留荔,更是在濱河造成了極大的恐慌,老刑警劉巖澜倦,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聚蝶,死亡現(xiàn)場離奇詭異,居然都是意外死亡藻治,警方通過查閱死者的電腦和手機碘勉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩卵,“玉大人验靡,你說我怎么就攤上這事〕冢” “怎么了胜嗓?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矾屯。 經(jīng)常有香客問我兼蕊,道長,這世上最難降的妖魔是什么件蚕? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任孙技,我火速辦了婚禮,結(jié)果婚禮上排作,老公的妹妹穿的比我還像新娘牵啦。我一直安慰自己,他們只是感情好妄痪,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布哈雏。 她就那樣靜靜地躺著,像睡著了一般衫生。 火紅的嫁衣襯著肌膚如雪裳瘪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天罪针,我揣著相機與錄音彭羹,去河邊找鬼。 笑死泪酱,一個胖子當(dāng)著我的面吹牛派殷,可吹牛的內(nèi)容都是我干的还最。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毡惜,長吁一口氣:“原來是場噩夢啊……” “哼拓轻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起经伙,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扶叉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后橱乱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辜梳,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年泳叠,在試婚紗的時候發(fā)現(xiàn)自己被綠了作瞄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡危纫,死狀恐怖宗挥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情种蝶,我是刑警寧澤契耿,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站螃征,受9級特大地震影響搪桂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盯滚,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一踢械、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魄藕,春花似錦内列、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寝姿,卻和暖如春交排,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饵筑。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工埃篓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翻翩。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓都许,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嫂冻。 傳聞我的和親對象是個殘疾皇子胶征,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容