lda2vec分为两部分,一部分是利用skip-grams做词向量表示,另一部分是文档向量表示。
1.词向量表示——skip-gram——得到word vector
在扫描语料的时候,提取移动窗口内成对的枢轴词和目标词。每对中的枢轴词用来预测附近的目标词。
每个枢轴词由一个固定长度的稠密分布式向量表示。
如果这个枢轴词是German,被预测的相邻词就是French或Spanish。但是如果这个文档是关于航空的,我们就会创建一个与airline这个词语词向量相似的文档向量。然后我们不会再对单独预测German这类词,而是预测与German和airline两个词都相关的词语,比如Lufthansa, Condor, Flugdienst这类词。
2.文档向量表示——得到document vector
为语料库中的每个文档随机初始化一个潜在向量。文档的权重是通过softmax转化出来的权重,用来生成文档比例。
生成的结果是由概率组成的向量,表示这个文档的主题41%的概率是topic0,26%的概率是topic1, 34%的概率是topic3.
每一个主题有一个分布式的表示向量,与词向量在同一个空间。每个主题不一定都是从预料中抽取的词语,有可能是与其他词语语义相似。比如,一个主题向量可能类似于词语pitching, catcher, braves,但是其他的主题向量可能与Jesus,God, faith等词有关。
每一个文档向量都是主题向量的加权和。
计算负采样损失的目的是区分观察到的上下文目标对(German+document, airline)和负采样对(German + document, bear
)。
文档占比是同时初始化的。经过训练,Dirichlet似然函数损失值会变成稀疏矩阵。对于文档占比向量中的每个元素来说,损失值很容易计算。
3.context vector = word vector + document vector
context vector 上下文向量
4.Mixing LDA + word2vec = lda2vec
lda2vec结合了word2vec的强大功能和LDA的可解释性。他进行了三个改变:
(1)结合了全局文档主题与局部词语形式结合。(Combining global document themes with local word patterns)
(2)使词向量变得稠密,但使文档向量变得稀疏。(Dense word vectors but sparse document vectors)
(3)将两种模型混合,使可解释性更高。(Mixture models for interpretability)
参考文献:https://multithreaded.stitchfix.com/blog/2016/05/27/lda2vec/#topic=38&lambda=1&term=