2011年4月17日,星期日

半监督的LDA:第二部分

在我的 以前的帖子 我提出了半监督LDA的想法:在语料库上构建主题模型,其中一些文档具有关联的标签,但大多数文档没有关联的标签。目的是提取主题,该主题由语料库中的所有文本告知(例如,无监督的LDA),但也可以预测观察到的标签(如有监督的LDA)。我的一些初步结果看起来很有希望。

该方法

我的方法是基于 光盘LDA (及其表弟 标有LDA)。 光盘LDA修改了原始LDA,以便文档类标签$ y_d $可以将原始文档主题$ z $重新映射为转换后的主题$ u $,然后控制单词发射概率。这是DiscLDA论文中的板岩表示,
对于那些代数思考的人,这是生成模型的描述。
  1. 绘制主题比例$ \ theta | \ alpha \ sim \ mbox {Dir}(\ alpha)$。
  2. 绘制单词发射向量$ \ phi | \ beta \ sim \ mbox {Dir}(\ beta)$。
  3. 绘制类标签$ y | \ pi \ sim p(y | \ pi)$来自某些先前的分发。
  4. 每个字
    1. 绘制主题分配$ z_n | \ theta \ sim \ mbox {Mult}(\ theta)$。
    2. 绘制转换后的主题分配$ u_n | z_n,T,y \ sim \ mbox {Mult}(T ^ y_ {u_n,z_n})$。
    3. 画字$ w_n | z_n,\ phi_ {1:K} \ sim \ mbox {Mult}(\ phi_ {z_n})$。
接下来的$ T $矩阵固定为块零和块对角线的混合,基本上是为1)一些在所有类标签上共享的主题$ k_1 $和2)一些$ | Y | k_0 $个主题,每个类别标签会获得$ k_0 $个主题,该主题保留与该特定类别标签\ [
T ^ y = \ begin {pmatrix}
0&I_ {k_0} 1_ {y = 1} \\
\ vdots和\ vdots \\
0&I_ {k_0} 1_ {y = | Y |} \\
I_ {k_1}&0
\ end {pmatrix}。
\]请注意,存在$(k_0 + k_1)$可能的$ z $和$(| Y | k_0 + k_1)$可能的$ u $。此外,单个$ z_i $会与一个独立于$ y $的单个$ u $或由$ y $索引的一组$ | Y | $可能的$ u $关联。实施时,我发现根据映射\ [
u ^ y_z = \ begin {cases} z& z <k_1 \\ z + k_0(y-1)&z \ geq k_1 \ end {cases},
\]机械地暗示更改$ y $会导致一组$ k_0 $主题被“切换”。

尽管就学习算法的速度和可扩展性而言,在线变式贝叶斯算法目前是山丘之王,但我发现Gibbs采样相对容易推理和实现,因此我继续这样做。假设观察到文档$ d_i $的标签$ y_ {d_i} $,Gibbs采样器与无监督LDA基本上相同,\ [
p(z_i = j | w,z _ {-i},y)\ propto \ frac {n ^ {(w_i)} _ {-i,u ^ {y_ {d_i}} _ j} + \ beta} {n ^ {(\ cdot)} _ {-i,u ^ {y_ {d_i}} _ j} + W \ beta} \ frac {n ^ {(d_i)} _ {-i,u ^ {y_ {d_i}} _ j } + \ alpha} {n ^ {(d_i)} _ {-i,\ cdot} +(k_0 + k_1)\ alpha}。
\]如果在$ u $变量上将抽样概念化,则这是单标签情况下标签LDA的结果:Gibbs抽样器与原始LDA相同,只是只允许在给定的可行主题之间进行转换文件标签。

如果未观察到$ y_ {d_i} $,我可以将其集成。但是为了便于实施,我决定也对Gibbs进行抽样,\ [
p(y_d = k | w,z,y _ {-d})\ propto p(w_d | w _ {-d},y_d = k,z,y _ {-d})p(y_d = k | z,y_ { -d})。
\]第一项是给定所有文档的所有主题和标签分配以及其他文档中所有单词的文档$ d $的单词序列的可能性。这是由\ [
p(w_d | w _ {-d},y_d = k,z,y _ {-d})\ propto \ prod _ {\ {i | d_i = d,z_i \ geq k_1 \}} \ frac {n ^ {(w_i)} _ {-d,u ^ k_ {z_i}} + \ beta} {n ^ {(\ cdot)} _ {-d ,u ^ k_ {z_i}} + W \ beta}。
\]内容如下:对于文档$ d $中的每个单词,计算在所有其他文档$ n ^ {(w_i)} _ {-d,u中将其分配给主题$ u ^ k_ {z_i} $的次数^ k_ {z_i}} $,计算在所有其他文档$ n ^ {(\ cdot)} _ {-d,u ^ k_ {z_i中,将任何单词分配给主题$ u ^ k _ {z_i} $的次数}} $,并应用Dirichlet-多项式共轭。基本上,就$ u $变量而言:每组基于标签的主题对文档中单词的解释程度如何?请注意,共同的主题会给可能性带来相同的因素,因此,优化产品只能取代特定于标签的主题。特别是如果文档仅使用常见主题,则在此术语中不会偏爱任何标签。

第二项$ p(y_d = k | z,y _ {-d})= p(y_d = k | y _ {-d})$是文档标签的先前(观察文档文本)分布。在在线设置中,文档标签上的先前分布取决于先前观察到的文档标签是合理的,但是在批处理Gibbs采样器中,要求用户在类标签上指定固定的多项式分布即$ p( y_ {d_i} = k | y _ {-d_i})= p_k $。

它行得通吗?

最初的动机是提取特征以构建更好的分类器,因此表达此问题的最佳方法是:``使用半监督的LDA所产生的特征比通过运行无监督的LDA所获得的特征(1)都更适合分类在所有数据上或2)在标记的数据子集上运行受监督的LDA。''我仍在努力回答这个问题。

然而,技术``运作''还有另一种感觉。由于无标签数据大大超过了有标签数据,因此我担心的是半监督方法实际上会退化为无监督方法。我有一些数据表明情况并非如此。

设置如下:我大约有200万个``文档'',其中每个文档都是特定Twitter个人资料所关注的一组人。根据Mechanical Turk的结果,我大约将这些文件中的1%标记为男性或女性。如上所述,我已经有了一个初步的Gibbs采样器实现,同时查看了两个统计信息:每个采样主题的平均对数概率和每个观察到的文档标签的平均对数概率。通常,我希望随着系统学习单词的连贯性,话题概率会随着时间的推移而提高。但是,标签概率发生了什么?如果解释文档文本的压力压倒了符合观察标签的压力,则随着时间的推移,观察到的标签可能会变得不太可能。我特别担心这一点,因为我选择了Gibbs的捷径,对未观察到的标签进行采样,而不是将它们整合在一起。

这是我的数据的典型运行结果。 (可悲的是,在笔记本电脑上花了半天时间才能生成此输出。)
在第一次遍历数据时,标签基本上是随机分配给未标签的数据,并且文档似乎相互抵消,因此观察到的标签非常适合(平均$ \ log(p)\ approx -0.02 $类似于$ p \大约98 \%$)。平均标签对数概率仅在观察到的标签上计算;因此,在这一点上,这些主题并不擅长预测文档中的标记,但它们却擅长预测观察到的标签。随着采样器最初进行,主题概率增加,但标签概率降低。当我第一次观看大批量生产的产品时,我发现自己被弄砸了,最终标签被完全洗掉了。但是最终,采样器开始很好地解释标记和观察到的标签。经过100次通过后,我最终观察到的标签仍能很好地解释,平均$ \ log(p)\ approx -0.08 $,就像$ p \ approx 92 \%$。虽然无监督的数据已经降低了模型对观察到的标签的解释能力,但从泛化的角度来看这可能是一件好事(即``内置于正则化'')。

因此,下一步是在我最初的分类问题的情况下,将此半监督的LDA与非监督的LDA和监督的LDA进行比较,以了解除我自己的娱乐之外,所有这一切是否有意义。

2条评论:

  1. 具有相似动机但可能更有效的实现方式的替代方法是使用 半监督的Searn 具有潜在结构=主题。我不'尚无任何经验证据可比较这些方法。

    回复删除