放牧代码和思想
专注自然语言处理、机器学习算法
    This thing called love. Know I would've. Thrown it all away. Wouldn't hesitate.

CS224n研究热点1 一个简单但很难超越的Sentence Embedding基线方法

目录

这门课会不定期地让TA介绍一些课程相关的最前沿研究,与课程进度并非流畅衔接,所以单独做笔记。这次是第二节课中场休息时,由Danqi Chen带来的五分钟小讲座:

hankcs.com 2017-06-07 下午4.07.18.png

句子Embedding动机

虽然这节课一直在讲词向量可以编码词的意思,但自然语言处理真正关心的是整个句子的意思。

hankcs.com 2017-06-07 下午4.07.53.png

如果我们能够拿到句子的向量表示,则可以方便地用内积计算相似度:

hankcs.com 2017-06-07 下午4.08.24.png

还可以在这些句子向量之上构建分类器做情感分析:

hankcs.com 2017-06-07 下午4.08.42.png

已有方法

具体怎么由词向量到句向量呢?有很多种方法,比如词袋模型中简单地线性运算:

hankcs.com 2017-06-07 下午4.09.14.png

在后面的课程中,将会用recurrent neural network、recursive neural network,CNN来做同样的事情。

hankcs.com 2017-06-07 下午4.09.29.png

新方法

但今天要介绍的这篇普林斯顿大学的论文却剑走偏锋,采用了一种简单的无监督方法。这种方法简单到只有两步:

hankcs.com 2017-06-07 下午4.09.53.png

第一步,对句子中的每个词向量,乘以一个独特的权值。这个权值是一个常数$\alpha$除以$\alpha$与该词语频率的和,也就是说高频词的权值会相对下降。求和后得到暂时的句向量。

然后计算语料库所有句向量构成的矩阵的第一个主成分$u$,让每个句向量减去它在$u$上的投影(类似PCA)。其中,一个向量$v$在另一个向量$u$上的投影定义如下:

$$\text{Proj}_u v=\frac{u u^Tv}{\Vert u \Vert^2}$$

概率论解释

其原理是,给定上下文向量,一个词的出现概率由两项决定:作为平滑项的词频,以及上下文:

hankcs.com 2017-06-07 下午4.10.26.png

其中第二项的意思是,有一个平滑变动的上下文随机地发射单词。

效果

hankcs.com 2017-06-07 下午4.13.14.png

在句子相似度任务上超过平均水平,甚至超过部分复杂的模型。在句子分类上效果也很明显,甚至是最好成绩。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » CS224n研究热点1 一个简单但很难超越的Sentence Embedding基线方法

评论 7

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #4

    有论文的名字么?我想具体看下论文

    scall6年前 (2018-05-10)回复
  2. #3

    我看了文章的源代码,有些疑问:文章伪代码中的uuT在具体实现的时候竟然是u和uT的点乘,结果是一个向量而不是一个标量,这个源代码是不是和文章的伪代码有出入呢?

    CGddu6年前 (2018-01-28)回复
    • $u u^T$得到的是一个仿射矩阵,实际上在做向量投影,请参考上文修改。

      hankcs6年前 (2018-01-29)回复
  3. #2

    我想知道怎么搜索到他们所提到的论文的源代码

    TinKIng6年前 (2017-11-02)回复
  4. #1

    我刚刚写完 CS224n(2017 winter) 的三个大作业(最近期末考试留了一个 project 准备一周以后再搞)。讲义中提到了很多 NMT 的模型,严重的勾起了我的好奇心,但是又没有相关的大作业,所以我想要六月底开始看些论文尝试利用 TensorFlow 实现,不知道您有没有兴趣组队。

    小鱼7年前 (2017-06-07)回复
    • 好的呀,不过NMT是第九课,我上完可能有点晚了。无论如何,欢迎联系我。

      hankcs7年前 (2017-06-07)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》