问:从文中 Figure5 展示的图片来看,每一行的词可以看出存在一些语义或形式方面的共同之处,但是列向量之间很难看出有什么共性体现。那么关于列向量的作用如何理解?这是否跟网络的结构有关系? 答:这个问题很有意思,一开始我看到 Figure5 中的例子时,并没有想太多,很多论文中都有类似的展示,作者一般会把其中效果比较好的,可解释性比较强的部分拿出来给大家展示。所以一开始,我默认作者只是选择性把同一行语义相关性比较强的例子拿出来了,而同一列语义相关性比较强的则没有拿出来。 事实上,本文模型中的行向量和列向量作用确实有所不同,LightRNN 是先通过预测下一个词的行数来确定下一个词的大体范围,再预测下一个词的列数来确定下一个词具体是什么。也正是因为这个先后过程,导致了同一行的词语具有语义上的相似之处(范围相接近)。举个栗子来说,Barack Obama was born on <wt>,对于这个句子,预测下一个词 wt 的时候,模型会首先预测它的行数,这一行中会出现大量的时间类词语,接下来通过前文和行向量,模型再进一步预测 wt 的列数来确定是哪一个时间,August。上面简单解释了下行向量和列向量作用的不同之处,同时也说明了同一行之间语义相似会使模型效果更好。归根结底,真正使行中词语聚类的原因是通过 Bootstrap 过程来对词语重分配导致的,重分配词语来最小化损失函数,会倾向于使同一类词语聚集在一行。 问:除了梯度下降训练 Embedding 参数外,还需要不断地用 MCMF 重分配词语在二维表中的位置。是否有一些其他的策略可以改进或者加快这个训练过程? 答:这主要是因为二维表中的词语采用随机初始化的分配方式,随机分配的如果不合适的话,同一行词语之间彼此毫无语义关联,会使模型在预测下一个词行数的时候就产生较大分歧,导致了第一轮训练困难的情况。因此,第一次分配二维表中的词语时,或许可以提前采用一些手段做些预处理。类似于用预训练的 word embedding 来聚类,把同一类的词分配在同一个行里。或者用一些 Topic Model 把相同主题的词语分配在同一行,都有可能加快训练过程。其他的地方,例如重分配词语位置的方法,以及行列向量的组合方式等都有可能有改进的空间,这些地方我目前还没有太好的想法,大家等下自由交流阶段也可以多提提自己的想法 。 问:在词表很大的情况下,也就是说无法在内存当中存下每个词在词表中的概率的情况下,怎么高效地重分配词表呢,分配词表的算法不取全局最优解对最终的影响估计有多大呢,有没有什么形式化的表示可以说明影响的大小呢 ? 答:实际上我之前也想过这个问题,因为在重分配的过程中,每个词在词表的概率占用的空间还是很大的,是 O(V^2)。不过相对于显存来说,鉴于内存实在是比较便宜,这个问题的影响一般应该不大。内存如果放不下而采用从硬盘读写的方法,应该会极大地降低模型训练速度,反倒得不偿失。而重分配过程中,实际上分配词表的方法一直都不是最优解。首先本文采用的是一个 1/2 近似的 MCMF 算法,并不能达到最优解。其次,本文中的优化目标函数实际上也并不能真正的使模型在固定 Embedding 的情况下,Loss 最小。因为本文一直基于一个假设,便是每次只改动一个词语的位置,计算对应的 Loss。而当所有位置都变化的情况下,前文的表示已经改变,也不能再用之前已经训练好的 RNN 的状态来计算 loss 了。这也是我之前说的,重分配词语位置的方法还可以改进的原因,但对于具体的改进方法,目前我还没有什么好的想法。欢迎大家等一下详细来讨论。 问:这篇文章的做法是将一个词拆分成一个 table 中的行列向量的表示,并分别预测行部份和列部分,那如果我将一个词表示成 table 中行列向量的拼接,一次性地预测和输入,效果会怎样呢,在实验前有没有一些理论上的依据可以评估呢。 答:这是我之前提到的另一个改进的可能了,改进行列向量的组合方式。你提出的这种方法,输出预测部分,将输出的结果分割,然后分别预测行列号。在没有实验之前,很难评价效果是好是坏。但是我个人不是很认可这种处理方式。因为这样缺少了一步我觉得比较关键的过程,即通过前文和行来预测列。行列交替预测有两个优点,一个是缩小搜索空间。另一方面是可以通过词语重分配使相近词语处于同一行,增强 rare word 的表示能力。 (责任编辑:本港台直播) |