一、SASRec簡介
SASRec是一種僅基於序列信息進行推薦的深度神經網路模型。相比於其他推薦演算法,SASRec有較高的準確率和效率,同時能夠處理長時序列數據。
SASRec最初由Wang等人在2018年發表在ICDM上,它的主要思想是將序列數據看作序列交互模式, 每個交互都提供一些期望和隱式反饋。SASRec通過使用自注意力機制替代掉傳統的卷積或RNN模型,從而避免了序列信息丟失的問題。
二、SASRec的架構與演算法實現
1.架構
SASRec的架構主要由兩部分組成:序列-序列網路(SSN)和非線性全連接層。SSN是一個基於自注意力機制的深度神經網路,其主要作用是對序列交互模式進行建模併產生預測結果。非線性全連接層作為輸出層,將SSN的最後一層隱藏狀態轉化為目標項的預測結果。
class SASRec(nn.Module):
def __init__(self, item_size, dim, num_heads, num_blocks, max_len, dropout):
super(SASRec, self).__init__()
self.item_size = item_size
self.dim = dim
self.num_heads = num_heads
self.num_blocks = num_blocks
self.max_len = max_len
self.item_embeddings = nn.Embedding(item_size, dim, padding_idx=0)
self.pos_embedding = nn.Embedding(max_len, dim)
self.transformer_blocks = nn.ModuleList(
[TransformerBlock(dim, num_heads, dropout) for _ in range(num_blocks)])
self.dropout = nn.Dropout(dropout)
self.fc = nn.Linear(dim, item_size)
def forward(self, items, seq_len):
# items: B x L
# seq_len: B
item_embs = self.item_embeddings(items)
pos = torch.arange(self.max_len - 1, -1, -1.).to(items.device)
pos_embs = self.pos_embedding(pos)
embs = item_embs + pos_embs
mask = get_mask(seq_len, self.max_len)
h = embs
for transformer in self.transformer_blocks:
h = transformer(h, mask)
h = self.dropout(h[:, 0, :])
output = self.fc(h)
return output
2.演算法實現
SASRec的演算法實現基於Pytorch深度學習框架,由若干個模塊組成,包括TransformerBlock、PositionwiseFeedForward、MultiHeadAttention以及SASRec本體模塊。
class TransformerBlock(nn.Module):
def __init__(self, dim, num_heads, dropout):
super(TransformerBlock, self).__init__()
self.attn_layer_norm = nn.LayerNorm(dim)
self.ffn_layer_norm = nn.LayerNorm(dim)
self.ffn = PositionwiseFeedForward(dim, dropout)
self.attn = MultiHeadAttention(num_heads, dim, dropout)
self.dropout = nn.Dropout(dropout)
def forward(self, x, mask):
# x: B x L x H
# mask: B x L
# self-attention
h = self.attn_layer_norm(x)
h, _ = self.attn(h, h, h, mask)
h = self.dropout(h) + x
# feed forward
o = self.ffn_layer_norm(h)
o = self.dropout(self.ffn(o)) + h
return o
三、SASRec的優缺點
1.優點
(1)SASRec直接依賴於序列數據,可以更加充分地利用序列中隱藏的用戶興趣信息。
(2)SASRec通過自注意力機制對長序列進行建模和處理,可以有效地保留序列中的重要信息,提取有用的特徵。
(3)SASRec的訓練效率相比於其他深度學習演算法較高,而且其預測效果優秀。
2.缺點
(1)對於非序列信息存在的情況,SASRec的效果可能不如其他的推薦演算法。
(2)SASRec的用戶興趣建模受限於序列長度,如果序列過短或過長,其預測效果可能會受到影響。
四、SASRec的應用
SASRec目前已經在多個推薦系統中得到了應用,例如Amazon和Netflix等。此外,基於SASRec提出的多個改進演算法,如SR-Transformer,也在不斷探索中應用於實際的推薦場景。
五、總結
SASRec是一種基於序列信息的高效推薦演算法,其核心思想是使用自注意力機制進行序列建模並進行預測。SASRec具有較高的準確性和處理能力,在推薦系統的實際應用中具有廣闊的前景。
原創文章,作者:CRRNS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369063.html
微信掃一掃
支付寶掃一掃