网站毕业设计开题报告,山西网站建设运营公司,网站制作文件,淘宝网页设计尺寸文#xff5c;苏剑林#xff08;追一科技#xff09; 编 | 小轶可能有些读者最近会留意到ICLR 2021的论文Can a Fruit Fly Learn Word Embeddings?#xff0c;文中写到它是基于仿生思想#xff08;仿果蝇的嗅觉回路#xff09;做出来的一个二值化词向量模型。其实论文的… 文苏剑林追一科技 编 | 小轶可能有些读者最近会留意到ICLR 2021的论文Can a Fruit Fly Learn Word Embeddings?文中写到它是基于仿生思想仿果蝇的嗅觉回路做出来的一个二值化词向量模型。其实论文的算法部分并不算难读可能整篇论文读下来大家的最主要疑惑就是“这东西跟果蝇有什么关系”、“作者真是从果蝇里边受到启发的”等等。本文就让我们来追寻一下该算法的来龙去脉试图回答一下这个词向量模型是怎么跟果蝇搭上关系的。▲果蝇图片来自Google搜索论文题目Can a Fruit Fly Learn Word Embeddings?论文链接:https://arxiv.org/pdf/2101.06887.pdfArxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0224】 下载论文PDF~BioWord原论文并没有给该词向量模型起个名字为了称呼上的方便这里笔者就自作主张将其称为“BioWord”了。总的来说论文内容大体上有三部分给每个n-gram构建了一个词袋表示向量对这些n-gram向量执行BioHash算法得到所谓的二值化的静态/动态词向量“拼命”讲了一个故事。其中BioHash我们稍后再介绍总之就是一个现成的向量二值化算法。从这三点可以看出其实整个词向量模型本身跟仿生、果蝇并没有明显的关联就算有关系也应该是里边的BioHash算法的关系但这篇论文又不是提出BioHash算法的因此说过多仿生方面的东西就显得有点牵强了。下面再来详细解释一下这几点。首先给每个n-gram构建一个词袋表示向量这个做法很朴素结果是一个维的二值向量即0/1向量其中是词表大小。如下图所示前维表示上下文部分1表示上下文出现了这个词后维就是一个one hot向量表示中心词。然后作者对BioHash算法做了一点调整但没有说清楚为什么这样修改笔者也看不出如何理解这个修改BioHash之后每个n-gram的向量就映射为了一个维的0/1向量其中每个向量有固定数目的个1。▲给每个n-gram构建词袋表示最后为什么我说作者拼命讲了一个故事呢第一前面说了说过多仿生方面的东西显得牵强第二作者将BioWord跟Word2Vec、Glove等词向量模型比较效果基本上都不如它们的第三至于作为一种词向量二值化算法BioWord的效果跟已有的RandExp、LSH等相比也没有什么优势。如果只是这样那还好但是让人觉得更尴尬的是作者还强行跟BERT对比来突出自己的优势。作者先是引入了静态/动态词向量的说法如果词袋向量中前维全是0那么映射后的维向量就是该词的静态词向量如果词袋向量中前维是依赖上下文那么就称映射后的维向量是该词的类似BERT那样的动态词向量。但这概念实在是难登大雅之堂照这样说哪怕是Word2Vec求个上下文的平均词向量拼接到中心词向量上也是一个动态词向量了但这样无非就是个谈资而已实验结果也没显示出有什么优势。还有作为一个词向量模型作者还跟BERT比训练成本以突出自己的优势着实是让人尴尬了一把由此也可见作者为了讲这个故事的煞费苦心了。BioHashBioHash出自论文Bio-Inspired Hashing for Unsupervised Similarity Search[1]它是一种将向量二值化的方法跟传统的的LSH不一样的是它依赖于样本是为特定数据集量身定制的因此通常能得到效果更好、更稀疏的二值向量。给定向量集BioHash算法大致如下用K-Means将聚为类得到个向量中心每个映射为一个维0/1向量其中与距离最近的个类对应的位置为1其余为0。之所以说大致是因为算法细节上有一些出入。首先聚类过程中用的距离不是欧式距离而是归一化内积即这个做法我们之前在探究Capsule的时候也用过读者可以参考《再来一顿贺岁宴从K-Means到Capsule》[2]然后求解聚类中心的时候用的是SGD而不是常规的EM算法这一点其实笔者不大理解虽说SGD可以小批量进行对内存更友好但理论上EM算法也可以按批执行不至于爆内存最后笔者完全不理解的一点是在聚类过程中作者用的距离是归一化内积但在决定每个样本的归属的时候又以不归一化的内积为距离实在是莫名其妙。当然抛开BioHash的细节不说BioHash的效果还是很赞的所以有适当的场景的话BioHash还是值得借鉴使用的。细心的读者可能会发现BioWord和BioHash有几位作者是相同的事实上它们都产自同一个实验室由此也不难理解BioWord希望传承BioHash的初衷只不过将BioHash用于词向量构建中笔者认为无论从动机上还是论文所报告的效果上都难以称得上漂亮。FlyHash说了那么久我们还没有说到标题的问题BioWord到底跟果蝇有什么联系或者说BioHash的哪个地方体现了跟果蝇的相似性 追踪BioHash的参考文献可以发现BioHash事实上是对一个名为FlyHash的算法的改进因此要溯源的话还得找FlyHash。顾名思义FlyHash主要是受到果蝇的嗅觉回路启发而构思出来的一种新的向量二值化方法它相比常规的LSH更高效。对于不了解LSH的读者来说我们后面再补充介绍一下这里先直接介绍FlyHash。其实FlyHash跟LSH都是随机投影 二值化的思路只不过果蝇启发了一个新的优化方向高维 低激活。具体来说设原始数据FlyHash选择了一个随机二值矩阵选好后就固定了其中一般有高维经过投影后是一个维向量然后对它进行一个WTAWinner Take All赢者通吃操作来实现低激活——将最大的个元素置1其余置0这样就得到了一个有个1、个0的二值向量了就将它作为的Hash向量。由于激活值只有有限的个因此就算升维了存储和检索成本都不会加大反而效果有所提升这就是果蝇带来的高维 低激活思路的好处。FlyHash首先发表在Science的论文《A neural algorithm for a fundamental computing problem》[3]关于高维 低激活的果蝇嗅觉回路可以仔细参考这篇论文后来论文Improving Similarity Search with High-dimensional Locality-sensitive Hashing[4]又进一步完善了理论部分这两篇论文也是一脉相承的。所以现在我们可以回答怎么跟果蝇搭上关系了其实就是在二值化过程中包含了高维 低激活思想的算法我们都可以说Inspired by Fly由于FlyHash是随机投影来得到最终结果的所以它必须升到足够多维才能保证效果而BioHash针对具体数据集进行训练因此它往往不需要FlyHash那么多维而且效果还更好但BioHash也有明显的赢者通吃的思想所以也称Inspired by Fly。而BioWord使用了BioHash因此也自称Inspired by Fly了。LSH最后我们简单介绍一下LSHLocality Sensitive Hashing供不了解的读者参考。完整的LSH讲起来又可以长篇大论了这里主要提一下跟FlyHash比较密切的部分。简单来说LSH就是一个将向量二值化的算法并且二值化之后的向量能近似保持度量不变。常见的一种方案是通过随机投影来近似保持cos值的不变性从之前的文章《n维空间下两个随机向量的夹角分布》[5] 和《从几何视角来理解模型参数的初始化策略》[6]我们可以知道高维空间中任意两个高斯随机向量几乎都是正交的那么从中采样个随机数来组成一个矩阵它几乎是一个正交矩阵任意两个行/列向量近似正交但每个向量的模长不接近1。这样一来两个原始向量被一乘后就变成了两个维向量并且夹角近似不变这样一来如果检索度量是cos值那么我们可以用投影后的代替原始向量来做近似检索。更进一步我们还可以用如下的二值近似其中是符号函数将大于0的改为1小于等于0的改为-1这样就将原始向量映射为一个二值向量了。这里的目标维度一般不会比大并且由于投影的随机性我们大约可以认为结果之中1和-1都是各一半这就跟FlyHash的高维 低激活有明显区别了因为不管你将1还是将-1视为激活值数目都差不多称不上低激活。上面的介绍虽然只是一个启发性的引导但事实上背后是有严格的概率理论支撑的在《Performer用随机投影将Attention的复杂度线性化》[7]也做过相关的理论分析因此LSH是一套严谨的可量化的算法并不是纯粹拍脑袋的近似。对向量二值化之后我们就可以将它视为一个词袋模型哪怕原来的是连续型向量进而可以对它建立索引来加速检索比如倒排索引这就是向量二值化的意义了像Fiass等向量检索库都包含了LSH算法。文章小结本文对一个二值化词向量模型进行了溯源探究了它究竟是如何联系上果蝇的从中我们还可以了解到BioHash、FlyHash、LSH等向量二值化方法的思路和关联。本文也是第一次尝试倒叙式写作希望读者喜欢后台回复关键词【入群】加入卖萌屋NLP/IR/Rec与求职讨论群后台回复关键词【顶会】获取ACL、CIKM等各大顶会论文集 [1] https://arxiv.org/abs/2001.04907[2] https://kexue.fm/archives5112[3] https://science.sciencemag.org/content/358/6364/793[4] https://arxiv.org/abs/1812.01844[5] https://kexue.fm/archives7076[6] https://kexue.fm/archives7180[7] https://kexue.fm/archives7921