作者丨苏剑林

单位丨追一科技

研究方向丨NLP,神经网络

个人主页丨kexue.fm

这篇文章介绍一个发表在 NeurIPS 2019 的做词向量和句向量的模型 JoSE(Joint Spherical Embedding),论文名字是 Spherical Text Embedding。JoSE 模型思想上和方法上传承自 Doc2Vec,评测结果更加漂亮,但写作有点故弄玄虚之感。不过笔者决定写这篇文章,是因为觉得里边的某些分析过程有点意思,可能会对一般的优化问题都有些参考价值。

论文链接:https://arxiv.org/abs/1911.01196

优化目标

在思想上,这篇文章基本上跟 Doc2Vec 是一致的:为了训练句向量,把句子用一个 id 表示,然后把它也当作一个词,跟句内所有的词都共现,最后训练一个 Skip Gram 模型,训练的方式都是基于负采样的。跟 Doc2Vec 不一样的是,JoSE 将全体向量的模长都归一化了(也就是只考虑单位球面上的向量),然后训练目标没有用交叉熵,而是用 hinge loss:

其中 u 是“中心词”的词向量,v 是“上下文词”的词向量,它们分别来自两套词向量空间,d 则是当前句的句向量,而 u′ 负采样得到的“中心词”词向量,最后的 m>0 是一个常数。以前做相似度模型的读者应该能很轻松读懂这个优化目标的含义,它就是希望句子内的“词-词-句”打分 cos(u,v)+cos(u,d) 要高于“词-随机词-句”打分 cos(u′,v)+cos(u′,d),但不需要太高,只要高出 m 就行了。

假定 u,v,d 都已经归一化的情况下,那么目标 (1) 就是(每个向量被假设为列向):

梯度下降

目标 (1) 或 (2) 其实并没有什么新鲜之处,跟大多数词向量的目标类似,都是用内积衡量词的相关性,只不过这里的向量归一化过,所以内积就是 cos ,至于 hinge loss 和交叉熵孰优孰劣,我倒觉得不会有什么太大差别。

事实上,笔者觉得文章比较有意思的是它后面对梯度的几何分析,在这里笔者用自己的话重复一下求解过程。设 x 是全体 u, v, d 向量中的其中一个,然后假设现在固定所有的其他向量,只优化 x ,设总的 loss 为 f(x),那这个优化过程有两种描述方式:

也就是说,我们可以将这个问题理解为带有约束 ||x||=1 的 f(x) 最小化问题,也可以通过设 x=θ/||θ|| 将它转化为无约束的 f(θ/||θ||) 最小化问题。由于带约束的优化问题我们不熟悉,所以只好按照后一种方式来理解。

跟复杂模型不同的是,词向量算是一个比较简单的模型,所以我们最好手动求出它的梯度形式,然后编写对应函数进行梯度下降来优化,而不借助于一些自动求导工具。对于 f(θ/||θ||),我们不难求得:

其中已经对部分变量进行了 x=θ/||θ|| 的替换,根据上述结果,梯度下降的迭代公式为:

其中是当前时刻的学习率,而因子 1/||θ|| 由于只是个标量,所以被整合到学习率中了。然后我们也可以写出:

再次将 1/||θ|| 整合到学习率中,我们可以得到只有的更新公式:

更新量修正

至此,上述内容都是很常规的推导,而接下来就是我说的比较有意思的地方了。首先有:

可以看到,实际上就是向量方向上的投影分量,而整个 g 其实就是一个与垂直的向量,如下图示:

▲ 梯度的几何图示

在上图中,红色向量代表,蓝色向量代表,如果没有 ||x||=1 这个约束的话,那更新量应该直接由决定,但是因为有了约束,所以更新量由决定。然而,有下面两种不同的,都可能导致同一个 g:

▲ 第一种情况,∇xf(x)跟x的方向很靠近

▲ 第二种情况,∇xf(x)跟x的方向几乎相反

第一种情况的的方向跟很靠近,第二种情况则相反,但它们的 g 是一致的。前面说了,如果没有约束的话,才是梯度,换言之就是合理的更新方向;现在有了约束,虽然不能指出最合理的梯度方向,但直觉来看,它应该还是跟更新量有关的。

在第一种情况下,方向差得比较远,意味着这种情况下更新量应该大一些;而第二种情况下,方向比较一致,而我们只关心的方向,不关心它的模长,所以按理说这种情况下更新量应该小一些。

所以,哪怕这两种情况下 g 都一样,我们还是需要有所区分,一个很自然的想法是:既然的方向的一致性会对更新量的大小有所影响,所以不妨用:

来调节更新量,这个调节因子正好满足“方向越一致,调节因子越小”的特性。这个自然的想法就导致了最终的更新公式:

故弄玄虚

有意思的地方讲完了,下面讲一下没有意思的地方了。对 NLP 有稍微深入一点了解的读者(看过 Word2Vec 的数学原理,推导过常规模型的梯度)应该会觉得,上面前两节内容并没有什么很深奥的内容,第三节的几何解释和学习率调节有点新颖,但也是有迹可循的内容。不过要是去看原论文的话,那感觉可能就完全不一样了,作者用“概率分布”、“黎曼流形上的优化”等语言,把上述本该比较容易理解的内容,描述得让人云里雾里,深有故弄玄虚之感。

首先,我最不理解的一点是,作者在一开始就做了一个不合理的假设(将词向量连续化),然后花了不少篇幅来论证对应着 Von Mises–Fisher 分布。然后呢?就没有然后了,后面的所有内容跟这个 Von Mises–Fisher 分布可以说没有半点关系,所以不理解作者写这部分内容的目的是什么。

接着,在优化那部分,作者说带约束 ||x||=1 的 f(x) 最小化问题不能用梯度下降,所以只能用“黎曼梯度下降”,然后就开始“炫技”了:先说说黎曼流形,然后给出一般的指数映射,再然后给出黎曼梯度,一波高端操作下来,最后却只保留了一个大家都能懂的方案: x=θ/||θ||。这时我就很“服气”了,虽然作者的逻辑和推导都没有毛病,但是一波操作下来最后却给看众一个 x=θ/||θ|| 的朴素结果,那为什么不一开始就直接讨论 f(x=θ/||θ||) 的优化呢?非得要去黎曼流形上面把普通读者绕晕?

此外,我说的比较有意思的部分,就是更新量的几何解释以及得到的调节因子,作者也说得挺迷糊的。总之,笔者认为,论文的理论推导部分,很多地方都充斥着很多不必要的专业术语,无端加深了普通看众的理解难度。

最后强调一下,笔者从来不反对“一题多解”,也不反对将简单的内容深化、抽象化,因为“深化”、“抽象化”确实也可能获得更全面的认识,或者能显示各个分支之间的联系。但是这种“深化”、“抽象化”应该要建立在一个大多数人都能理解的简单解的基础上进行的,而不是为了“深化”、“抽象化”而特意舍去了大多数人能理解的简单解。

实验结果

吐槽归吐槽,在实验部分,JoSE 做得还是很不错的。首先给出了 JoSE 的高效的 C 语言实现。

https://github.com/yumeng5/Spherical-Text-Embedding

我试用了一下,训练确实很快速,训练好的词/句向量结果可以用 gensim 的 KeyedVectors 加载。另外我还看了一下源代码,很简练清晰,也方便做二次修改。至于实验结果,论文给出的词/句向量评测上面,JoSE 也是比较领先的:

▲ 词相似度评测

▲ 文本聚类评测

文章总结

本文分享了一个发表在 NeurIPS 2019 的文本向量模型 JoSE,着重讲了一下笔者觉得有启发性的部分,并用自己的方法给出了推导过程。JoSE 可以认为是 Doc2Vec 的自然变种,在细微之处做了调整,并且在优化方法上提出了作者自己的见解,除却一些疑似故弄玄虚的地方之外,还不失为一个可圈可点的工作。

点击以下标题查看作者其他文章:

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 | 阅读原文 | 查看作者博客

JoSE:球面上的词向量和句向量相关推荐

  1. NLP词向量和句向量方法总结及实现

    目前各种词向量是很多的,很有必要做一个综合性的总结.在CSDN上一看已经有作者做过这部分的工作了.觉得写的非常棒,于是就转载过来了,原文地址:NLP词向量和句向量方法总结及实现,具体内容如下: 一.W ...

  2. NLP深入学习——什么是词向量和句向量(Word Embedding and Sentence Embedding)

    词向量(Word Embedding) 词向量(Word embedding),又叫Word嵌入式自然语言处理(NLP)中的一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向 ...

  3. 词嵌入、句向量等方法汇总

    在cips2016出来之前,笔者也总结多类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一章中总结的 ...

  4. 句向量 Sentence Embedding

    句向量 Sentence Embedding 摘要 本文主要对句向量的发展和relate work介绍一下,可以看作一个简单的综述内容,句向量在NLP中有着很重要的作用,同时在许多NLP实际任务中会类 ...

  5. 句向量的表示(上)—无监督

    参考:https://www.cnblogs.com/llhthinker/p/10335164.html 目录 1)基于词向量的词袋模型 - 平均词向量与TFIDF加权平均词向量 - SIF加权平均 ...

  6. 闲聊机器人实例三:python实现小姜机器人(检索式chatbot_sentence_vec_by_word_词向量句向量)

    word2vec词向量构建生成句向量,再计算相似度,匹配问答库中的标准问题. 小姜机器人.python.tensorflow.chatbot.dialog.fuzzywuzzy.检索式.生成式.聊天. ...

  7. 词向量表示和句向量、文章向量计算方法

    本文介绍一种计算句向量和文章向量的方法及参考代码,自然语言处理的第一步即是要进行文本的向量化,包括获得词向量,句向量或者文章向量,以便输入各种机器学习模型或者深度学习模型. 词向量 可以笼统的认为词向 ...

  8. NLP之路-Deep Learning in NLP (一)词向量和语言模型

     from: http://licstar.net/archives/328 这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领域中应用的理解和总结,在此分享.其中必 ...

  9. Doc2Vec句向量模型PV-DM与PV-DBOW的理解

    1. PV-DM 在我们的句(Paragraph)向量模型中,每一个句子都被映射成一个独立的向量,这个句向量作为矩阵 的一列:同时,每一个词也被映射成一个独立的向量,这个词向量作为矩阵 的一列.对这个 ...

最新文章

  1. Java 时间和日期类型的 Hibernate 映射
  2. LLC 逻辑链路控制
  3. NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
  4. 这些棘手的Java面试题,答案你都知道吗?
  5. ltp︱基于ltp的无监督信息抽取模块
  6. 后现代婚礼机器人显神通_机器人+无人机 江西新余智能消防显“神通”
  7. 五方面入手精选数据库审计产品
  8. [C++]类的继承与派生
  9. Axure(软件下载安装与使用)——成为产品经理的必修课
  10. 应用系统开发--银行系统
  11. pdf editor android,MaxiPDF PDF editor builder
  12. 条件数、奇异值与海森矩阵
  13. 推荐一个 Linux 刻盘工具 gcdw(转)
  14. Windows10系统下对于鲁大师一类捆绑流氓软件的解决方法
  15. 负离子空气净化器哪个牌子好,空气净化器科普
  16. Self-assessment Checklists of HSK
  17. 首页大广告展示——淘淘商城(十六)
  18. 前端树形图(未完成完善,会持续更新)
  19. 用Java语言开发物联网设备应用(5)
  20. python篮球弹跳训练方法_弹跳训练的正确方法,90%人都不知道|NBA球队弹跳训练解密...

热门文章

  1. c++ 类 A类调用B类
  2. Java 判断字符串第一位和最后一位,并截取
  3. 单链表之头插法的理解!
  4. bzoj2140: 稳定婚姻
  5. python之路_文件操作解析
  6. oracle创建数据库步骤
  7. 【C#】调度程序进程已挂起,但消息仍在处理中;
  8. [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件...
  9. [翻译]load-on-startup 元素的作用
  10. 转载:【Data Management】PhotoLocations源程序