KRED: Knowledge-Aware Document Representation for News Recommendations
2020/12/10
著者
https://gyazo.com/71f0b6c6a4f7b058a87933243d34dc4c
読んだモチベーション
グラフに興味あり
テキストが少なめな場合に,どうやって他のリソースを追加すればいいか知りたいお気持ち
どんなもの?
任意の記事ベクトルと知識ベースを利用して様々な用途に使用できる記事ベクトルを作成する
ニュースには多くのエンティティが含まれているが,ニュースによって重要なエンティティは異なる
Knowledge-aware Representation Ennhancement model for news Documents(KRED)
user2item・item2item・新しいニュースの人気予測・新しいニュースのカテゴリ予測・新しいニュースのローカルニュース検出などマルチタスクを解く
先行研究と比べてどこがすごい?
既存手法との違い
任意の文書ベクトル作成手法が使える
<=> DKN は KCNN に依存する
タイトル・本文・メタデータなど,ニュースに含まれるすべてのデータが利用できる
<=> DKN はニュースタイトルのみ入力とする
事前学習されたベクトルを使うことで,高速に知識ベースを考慮した文書ベクトルが計算可能
技術や手法のキモはどこ?
KRED の全体図
https://gyazo.com/8e581af338a9eb8e5be22c05367ebe5a
KRED は3つのコンポーネントからなる
Entity Representation Layer
Context Embedding Layer
Information Distillation Layer
Entity Representation Layer
https://gyazo.com/5ba8d2b99b772ee5eafeee10a5a930fb
文書に出現したエンティティ h に注目して,知識ベース上の周辺構造をベクトルにする(KGAT)
https://gyazo.com/f3b473a6c2e8ba3fe15c3da6555ad310
ニュースの本文は使わない
https://gyazo.com/c7184aae0cff4166b53a355cfcf38c39
エンティティのベクトルとその周辺に存在するエンティティのベクトルを concat する
e_h, e_t は TransE で学習されたベクトル
TransE は h + r = t となるようにベクトルを学習する手法
エンティティと関係がベクトル化される
$ \pi(h, r, t) は e_h の知識ベース上の周辺構造をまとめるためのアテンション
計算効率のため1-ホップのノードのみまとめる
Context Embedding Layer
https://gyazo.com/54167cdd5bd5c3e835527869f27e6209
ニュースに出現したエンティティの位置や頻度をベクトル化する
ニュース本文は使わずエンティティの出現情報のみ使う
位置
タイトル or 本文のどちらに出現したかを表すベクトル
頻度
頻度に対応するベクトル
頻度の上限は20
カテゴリ
知識ベース上のカテゴリに対応するベクトル
をエンティティベクトル足し込む
https://gyazo.com/edff2ebd90203ca442e2c6e0deae0df2
Information Distillation Layer
https://gyazo.com/3c7eb09e1426b0c15363d1e0a6df3c64
ニュースに出現したエンティティベクトルをまとめる
transformer の機構を使用して,ベクトルをマージする
(matmul でなく,query と key を concat しているけど)
https://gyazo.com/701800fd205115bf89d19ecaeb6b5b7a
v_d は document vector
$ \pi(h, v) はニュースに出現したエンティティをまとめるためのアテンション
最後に document vector と concat して, Knowledge-aware Document Vector を作る
https://gyazo.com/521020a241005fc21f79f5d34f7e1282
MTL
マルチタスク学習を採用して,タスクごとに補完し合うことを期待
https://gyazo.com/44406db952cf85305ffa264b651a86d8
user2item
attentive pooling でユーザの見たニュースの KDV をマージ
ネガティブサンプリングして,正しいペアの確率を最大化
item2item
ネガティブサンプリングして,正しいペアの類似度を最大化
category classification/popularity prediction/local news detection
それぞれのタスクは分類問題なので,目的関数としてクロスエントロピーを利用する
https://gyazo.com/4e6f55c71bcddac209ab8d50d357c51d
どうやって有効だと検証した?
MSN ニュースのログを利用
https://gyazo.com/56ec9561599b78dcf2b1495e906bb9c6
Microsoft Satori
モデル
https://gyazo.com/61ae9f76953e471e0031c397d3166efd
DV + entity は entity を KRED でマージするのではなく,エンティティベクトルを attentive pooling でまとめたもの
user2item
https://gyazo.com/ecb5632efcfe4994bd521697bbc75eb0
知識を入れることで改善が見られる( +entity ありなし)
KRED によるまとめ方のほうが attentive pooling よりも良い(KRED と +entity)
MTL > single-task
item2item
https://gyazo.com/ed55708e62e1449b58ddcc0a2db2bc25
同じユーザが2つのニュースをクリックしたときにそのペアを正とする
LDA に比べて KRED は大幅に改善してる
速度
https://gyazo.com/8056abff8e839b7c0168fd4283dfac28
可視化
https://gyazo.com/60a2cee99e89421348770cf6d57193d0
KRED のほうがきれいにまとまっている
Calinski−Harabasz(C-H) スコアも高い
https://gyazo.com/c142012300674608a471d435ed3e4497
同じエンティティが出現する文書でも,トピックによってアテンションが違う
まとめ
知識ベースのエンティティを文書ベクトルに組み込む手法を提案(KRED)
user2item 以外に item2item や人気ニュース予測,カテゴリ分類,ローカルニュース検出の MTL を行いすべてのタスクで精度改善
今後は User 版の知識ベース活用をやる
所感
計算コストが安くて,さすが MS 運用まで考えてある
MS Satori ご存じなかったけど,MS 知識ベースも提供していてなんでもある