BST(Behavior Sequence Transformer)とは?Alibabaの推薦モデルの仕組み・実装・性能
BSTという略語には英国夏時間(British Summer Time)や二分探索木など複数の意味がありますが、本記事が扱うのは推薦システムのBehavior Sequence Transformerです。BSTは、Alibabaが自社ECのTaobaoで実用化し2019年(DLP-KDD/arXiv:1905.06874)に発表した、ユーザーの行動系列をTransformerで捉えるCTR予測モデルを指します。閲覧・クリック・購入といった行動を「起きた順序ごと」学習する点が、順序を捨てていた従来手法との決定的な違いです。仕組み・従来手法との差・PyTorch実装・論文で報告された実測性能までを、水増しを削って要点だけまとめます。
まとめ:この記事の結論
- BST=Behavior Sequence Transformer。AlibabaがTaobaoの推薦ランキング(Rank段)で使うCTR予測モデルで、行動系列にTransformerの自己注意を適用する。
- DINは注意機構で「どの過去行動が効くか」を重み付けするが順序は無視する。BSTはTransformerで行動の順序(系列依存)まで取り込む点が上乗せ価値。
- 位置エンコーディングはsin/cosではなく「推薦時刻とクリック時刻の差」を使う。Transformer層は1層が最良で、積むほど精度は下がった。
- 論文実測はオフラインAUC 0.7894(WDL 0.7734/DIN 0.7866を上回る)、オンラインCTR+7.57%、平均応答20ms。
- 豊富な行動ログとランキング段があるECには有効。行動系列が短い・コールドスタート主体の場面では投資に見合わないことが多い。
BST(Behavior Sequence Transformer)とは:行動系列で次の関心を予測する推薦モデル
BSTは、ユーザーが直近にとった行動の並び(行動系列)を入力にとり、「次にこのアイテムをクリックする確率」を出力する推薦向けのCTR予測モデルです。核心は、自然言語処理で成果を上げたTransformerの自己注意機構を、単語列ではなく商品ID列に適用したことにあります。単語の並びから文脈を読むのと同じ要領で、「スマホを見た→ケースを見た→充電器を見た」という行動の流れから次の関心を推定します。Alibabaの論文では推薦全体の入れ替えではなく、候補を並べ替えるランキング(Rank)段の一部として組み込まれました。
BSTが生まれた背景:WDL・DINが取りこぼした「行動の順序」
それ以前のTaobaoの主力はWDL(Wide & Deep Learning、Embedding+MLP型)で、行動履歴を集約はするものの順序情報を持ちません。続くDIN(Deep Interest Network)は注意機構を導入し「対象商品に関連の深い過去行動を強く見る」ことを可能にしましたが、これも各行動を独立に重み付けするだけで並び順は考慮しない設計でした。実際のユーザー行動は「昨日スマホを買った直後にケースを探す」のように順序に強い意味があります。この順序依存を明示的に学習させるためTransformerを持ち込んだのがBSTで、DINの注意にさらに系列モデリングを重ねた位置づけになります。
BSTのアーキテクチャ:埋め込み・位置エンコーディング・Transformer・MLP
BSTは大きく、行動系列を数値化する埋め込み層、系列を読むTransformer層、CTRを出すMLPの3段で構成されます。それぞれ実装上の勘所が異なるため分けて見ます。
埋め込み層と「時刻差」ベースの位置エンコーディング
各行動アイテムのIDと属性を埋め込みベクトルに変換し、系列の最後に予測対象アイテムを連結します。特徴的なのは位置エンコーディングで、Transformer標準のsin/cosではなく、アイテムv_iの位置をpos(v_i) = t(v_t) - t(v_i)——推薦を行う時刻t(v_t)とそのアイテムをクリックした時刻t(v_i)の差——で与えます。「いつの行動か」を実時間で持たせるこの方式が、論文の比較では標準の位置エンコーディングより高精度でした。
Transformer層(自己注意)と「1層が最良」という知見
連結した系列に自己注意(マルチヘッド、8ヘッド)を適用し、行動間の関連度を学習します。注目すべきは層数で、論文はTransformerブロックを1層(AUC 0.7894)・2層(0.7885)・3層(0.7823)で比較し、1層が最も高く、深くするほど悪化しました。機械翻訳のような長距離依存と違い、ECの行動系列は依存構造が単純で、層を積むと過学習しやすいためと説明されています。「Transformerだから深く積む」が常に正しいとは限らない実例です。
MLPとCTR予測の出力
Transformerの出力を他の特徴量(ユーザー属性・アイテム属性・文脈)と結合し、全結合3層(1024→512→256)に通します。活性化はLeakyReLU、正則化にドロップアウト(0.2)を用い、最後にシグモイドで0〜1のクリック確率を出力します。最適化はAdagrad、学習率0.01、バッチサイズ256が論文設定です。
従来手法との違い(協調フィルタリング・WDL・DIN)
順序の扱いと対象アイテムとの関連付けの観点で並べると、BSTの立ち位置が明確になります。数値は論文のオフラインAUC(Taobaoデータ)です。
| 手法 | 行動の順序 | 対象アイテムとの関連付け | オフラインAUC |
|---|---|---|---|
| 協調フィルタリング | 考慮しない | 共起・類似度ベース | ― |
| WDL(Wide & Deep) | 考慮しない | Embedding+MLP | 0.7734 |
| DIN | 考慮しない | 注意機構で重み付け | 0.7866 |
| BST | Transformerで考慮 | 自己注意+対象を系列に連結 | 0.7894 |
協調フィルタリングやコンテンツベースは実装が軽く解釈しやすい一方、順序も文脈も持ちません。推薦手法の系譜と使い分けはGenerative Recommendationと従来手法の違いも参考になります。
PyTorchによる最小実装
論文の骨子(系列末尾に対象アイテムを連結→1層Transformer→MLP)を最小構成で書くと次のようになります。実務では系列以外の特徴量もMLP前で結合します。
import torch
import torch.nn as nn
class BST(nn.Module):
def __init__(self, n_items, d_model=64, n_heads=8, max_len=20):
super().__init__()
self.item_emb = nn.Embedding(n_items, d_model, padding_idx=0)
self.pos_emb = nn.Embedding(max_len, d_model) # 時刻差を0〜max_len-1にクリップして入力
layer = nn.TransformerEncoderLayer(
d_model, n_heads, dim_feedforward=256, # FFN幅は便宜値(論文指定ではない)
dropout=0.2, batch_first=True)
self.encoder = nn.TransformerEncoder(layer, num_layers=1) # 論文はb=1が最良
self.mlp = nn.Sequential(
nn.Linear(d_model, 1024), nn.LeakyReLU(),
nn.Linear(1024, 512), nn.LeakyReLU(),
nn.Linear(512, 256), nn.LeakyReLU(),
nn.Linear(256, 1))
def forward(self, seq, pos, target):
h = self.item_emb(seq) + self.pos_emb(pos) # 行動系列+位置
tgt = self.item_emb(target).unsqueeze(1) # 予測対象アイテム
h = torch.cat([h, tgt], dim=1) # 系列末尾に連結
h = self.encoder(h)
pooled = h.mean(dim=1)
return torch.sigmoid(self.mlp(pooled)).squeeze(-1)
Transformer層やAttentionの前提知識はTransformerとは(自己注意の仕組み)を、既製実装やモデル配布の入手はHugging Faceの使い方を合わせて確認すると理解が早いです。
性能:オフラインAUCとオンラインCTRの実測値
論文が報告した数値を整理します。オフライン評価ではBSTがWDL・DINを上回り、Taobaoでの本番A/Bテストでも改善が確認されています。
| モデル | オフラインAUC | 平均応答時間(ms) |
|---|---|---|
| WDL | 0.7734 | 13 |
| DIN | 0.7866 | 16 |
| BST | 0.7894 | 20 |
オンラインではWDLを対照群としてCTRが+7.57%改善しました。応答時間は20msで、自己注意を挟んでもWDL(13ms)・DIN(16ms)から実用範囲に収まっています。AUCの絶対差は小さく見えますが、CTR予測では大規模流量下でわずかなAUC改善が収益差になり、実際この0.7894はTaobaoの本番A/Bで+7.57%のCTR改善につながっています。
BSTを採用すべき場面・避けるべき場面
BSTが効くかどうかは、行動ログの長さとランキング段の有無でほぼ決まります。導入前に自社データと照らして判断すべきです。
向く場面:ユーザーあたりの行動ログが十分に長く(数十件規模の系列が取れる)、候補を並べ替えるランキング段が既にあり、そこにms単位の推論を差し込めるEC・大規模サービス。順序に意味がある回遊型の購買行動ほど効きます。
避けるべき場面:行動系列が数件しか取れない、または新規ユーザー・新規アイテムのコールドスタートが主戦場のケース。BSTは既存の行動系列から学ぶモデルで、系列が無い相手には強みを出せません。この場合はコンテンツ特徴や共起ベースの手法を土台にし、系列が溜まってからBSTを重ねる順序が現実的です。学習・運用コスト(Transformerの推論レイテンシとGPU)に見合う流入規模が無いうちは、DINやWDLで足ります。
よくある質問
BSTとは何の略ですか?
文脈によります。IT・推薦分野ではBehavior Sequence Transformer(本記事の主題)ですが、一般には英国夏時間(British Summer Time)、データ構造の二分探索木を指すこともあります。推薦・機械学習の文脈で出てきたBSTは、ほぼBehavior Sequence Transformerと考えて差し支えありません。
DINとの違いは何ですか?
DINは注意機構で過去行動を重み付けしますが並び順は見ません。BSTはTransformerで行動の順序(系列依存)まで学習します。論文のオフラインAUCはDIN 0.7866に対しBST 0.7894で、順序を取り込んだ分の上乗せが確認されています。
Transformerは何層積むべきですか?
BSTでは1層が最良でした(AUC 1層0.7894/2層0.7885/3層0.7823)。ECの行動系列は機械翻訳ほど依存構造が複雑でないため、層を増やすと過学習で精度が落ちます。まず1層で試すのが定石です。
位置エンコーディングは通常のTransformerと同じですか?
違います。sin/cosの代わりに「推薦時刻とクリック時刻の差」pos(v_i)=t(v_t)-t(v_i)を位置として与えます。実時間の経過を持たせるこの方式が、標準の位置エンコーディングより高精度でした。
小規模データでも効果はありますか?
限定的です。BSTは十分な長さの行動系列があって初めて力を発揮します。系列が短い・データが少ない段階では、協調フィルタリングやDINなど軽量な手法のほうが費用対効果は高くなります。