微信文章排版好看一些,在这里:https://mp.weixin.qq.com/s?__biz=MzIyNTY1MDUwNQ==&mid=2247483961&idx=1&sn=fce33e824138db158454a229de97ed3a&chksm=e87d301fdf0ab9095d07f44de50dc6066ed8f9291dff1dc5ffe622508526a1e1a7d6d88f14e7&token=1568735511&lang=zh_CN#rd

其他NLP文章合集在github:https://github.com/DA-southampton/NLP_ability

正文

问:如何判断“今天你吃饭了”和“今天去哪里吃饭”这两个句子的相似度?

上面这个问题,就是我们为什么需要句子向量的原因。

神经网络或者其他的机器学习方法很难直接对中文进行处理,我们需要对句子使用一定的方法进行数字化或者向量化。

我在讲词向量的时候,说了一个很好的比喻,向量化的过程就非常的类似计算机把我们的输入转为二进制以便处理的过程。只不过二进制的转化我们是可以规定,而向量化的过程根据我们任务不同目标不同,有着多种方法。

我简单花了一个概述图,大家可以看一下(看我简介,隔壁后台回复「句向量」获取对应的思维导图):

1.基线模型

1.1 基于统计的词袋模型

One-hot 模型简单来说就是单词出现的位置为1,不出现的位置为0,形如[1,1,1,0,1],来将句子向量化。

TF-IDF 使用到了单词在句子中出现的词频和在所有文档中出现的频率。相比于One-hot,增加了单词重要性这个维度的特征,所以效果一般来说比One-hot要好。

1.2 基于词向量的词袋模型

为什么使用词向量这个特征?相较于One-hot和TF-IDF,词向量能够提取语义信息。

对词向量最简单的操作就是求平均获取句子的表征。对于词向量,一般可以使用Word2vec/Fasttext/Glove。后期Bert出现之后,我们也可以使用Bert的最后一层(或者某一层)的输出作为词向量。但是效果有待商榷。

简单求均值简单粗暴,优化方法就是使用各种方法进行加权求均值。我们可以使用TF-IDF对词向量做加权求和获得句子的表征。为了简便,我们也可以去掉TF,只是使用IDF做加权求和。

对于SIF模型,它分为两个步骤。首先使用平滑倒词频为权重求和,随后减去所有句子的共有信息,获得的结果作为句子表征。

对于Power Mean 均值模型,它引入了幂均值改进加权求均值,通过修改不同的P值拼接不同的句子向量得到最后的句子表征。

以上都属于我们词袋模型求得句子向量。词袋模型存在一个最大问题,就是忽略了或者没有那么重视句子的语序问题,不管你是不是有用到词向量。

1.3基于任务

我们来看一下基于任务的,分为RNN和CNN。

举个简单的例子,我们使用RNN和CNN做文本分类任务,然后使用最后一个时刻或者最后一层(或者你使用其他方式)作为句子的向量。

这种方式很好,但是存在的问题就是句子向量的表达严重依赖任务形式。

我们用文本分类训练出现的句子向量如果还是用在文本分类任务,效果可能还不错,但是如果用在情感分析任务上,可能就一塌糊涂。

这是因为我们的模型是依赖于任务的,文本分类模型侧重点和情感分类的侧重点是不同的,导致模型参数也应该是不相同的。所以基于任务的句子向量模型迁移性比较差。

2. 无监督模型

无监督模型最大的好处就是可以不使用标签数据。这一点真的很重要。

当然我想提一点就是我这里说的无监督模型是做的是端到端。其实本质上,我们使用基于词袋的模型,也属于无监督模型。

仔细想一下是不是这个道理,词袋模型同样没有使用到标签数据。

拉回来,我们说端到端的无监督模型。主要谈两个:Skip-Thought Vectors 和 Quick-Thought Vectors。

Skip-Thought Vectors 模型输入为三个连续的句子,然后使用Encoder-Decoder模型,输入中间的句子,分别生成上一个句子和下一个句子。这个过程非常类似于Word2vec。

Quick-Thought Vectors 是对Skip-Thought Vectors 的改进。首先说为啥需要改进,最大的原因就是 Skip-Thought Vectors 太慢了。

首先它是一个生成任务。生成任务在预测阶段很难并行。其次他是做了两个生成任务,一个是上一个句子的生成,一个是下一个句子的生成。

Quick-Thought Vectors把生成任务改为了分类任务,Decoder从一组句子中选择出正确的上/下一个句子。

3. 有监督模型

InferSent模型注意两个细节点就可以。首先就是使用的是自然语言推理(NLI)数据集上训练 Sentence Embedding。

这一点其实很重要,作者是认为从这个数据集上训练出来的词向量是可以很好的被迁移到别的任务上的。

其次使用的是LSTM或者其他模型对句子进行编码,作者在论文中对不同编码模型有详细比较。

Universal Sentence Encoder 使用多任务,通过在不同的数据集和不同的任务上同时训练,动态地适应各种的 NLP 任务。Encoder使用两种模型,一个是Transformer,是为了获取更高的精度,另一个是DAN (Deep Averaging Network)为了获得更快的速度。

写文不易,点个在看或者赞让更多人看到吧,谢谢。

cnn 句向量_快速理解句向量模型,深度好文,一定要看相关推荐

  1. r dataframe 转成向量_快速掌握R语言中类SQL数据库操作技巧

    在数据分析中,往往会遇到各种复杂的数据处理操作:分组.排序.过滤.转置.填充.移动.合并.分裂.去重.找重.填充等操作.这时候R语言就是一个很好的选择:R可以高效地.优雅地解决数据处理操作.(本章节为 ...

  2. 随机生成元素升序向量_推荐系统中用户向量的表示学习

    随着深度学习在推荐系统中的应用,embedding成为绕不开的话题.无论是召回还是排序阶段,均应用到embedding技术.目前已经有很多文章在讨论item的embedding如何生成,本文希望讨论u ...

  3. cnn风格迁移_快速图像风格迁移思想在无线通信中的另类应用:算法拟合

    在本文中,并不是介绍最新的一些论文,而是回顾自己在很早(半年前?)读过的几篇文章.[1]Learning to optimize: Training deep neural networks for ...

  4. c++用数组初始化向量_用C ++初始化向量

    c++用数组初始化向量 In this article, we'll take a look at some of the ways to initialize a vector in C++. Th ...

  5. pythonn说句心里话_《说句心里话》笑力满格 “战神”常远颠覆自我

    现场照 搜狐娱乐讯 上周日晚,大型星素挑战竞技秀<笑声传奇>继续播出,传统笑匠与新锐笑匠实力PK,众喜剧团队大放异彩,奉献十足笑料,收获现场观众一致好评.开心麻花常远携团队再度来袭,挑战& ...

  6. factorybean 代理类不能按照类型注入_快速理解Spring中的FactoryBean接口

    1.前提概要 很多java开发者在使用Spring框架中都见过后缀为FactoryBean的类,比如Mybatis-Spring中的SqlSessionFactoryBean.说到这里就不得不提Bea ...

  7. java单例模式理解_快速理解Java中的五种单例模式

    解法一:只适合单线程环境(不好) packagetest;/***@authorxiaoping **/ public classSingleton {private static Singleton ...

  8. python异步回调实现原理_快速理解Python异步编程的基本原理

    第一个例子 假设你需要用电饭煲煮饭,用洗衣机洗衣服,给朋友打电话让他过来吃饭.其中,电饭煲需要30分钟才能把饭煮好,洗衣机需要40分钟才能把衣服洗好,朋友需要50分钟才能到你家.那么,是不是你需要在这 ...

  9. 文档词频矩阵_论文理解:从词嵌入到文档距离

    论文作者简介 本论文第一作者Matt J. Kusner是牛津大学的副教授,致力于设计适应现实世界问题需求的新机器学习模型(例如,fair algorithms, discrete generativ ...

最新文章

  1. Deformable 可变形的DETR
  2. 还有人不懂分布式锁的实现就把这篇文章丢给他
  3. [LeetCode]--290. Word Pattern
  4. hdu1572 水搜索
  5. 【五校联考7day2】QYQ的图
  6. 国内首次 Istio Meetup 来了,主流社区专家邀你来共聊
  7. SpringSecurity分布式整合之验证认证的过滤器
  8. 零拷贝(Zero Copy)
  9. flink的web ui中五颜六色的方块是什么意思?
  10. 云计算openstack介绍
  11. 分配大小为0的内存和0值进行比较
  12. python websocket异步高并发_python – WebSocket聊天异步示例崩溃
  13. Arduino基本知识(marlin固件配置)
  14. vnc远程桌面,vnc远程桌面使用教程图解
  15. linux tcp 113错误,linux系统报tcp_mark_head_lost错误的处理方法
  16. java excel相同的合并_Java使用Apache POI合并Excel连续相同内容的单元格
  17. 小红书笔记下沉的方法和技巧
  18. 主动雷达和被动雷达的区别
  19. 若依RuoYi-Vue前后端项目启动流程
  20. CentOS7下载安装nginx

热门文章

  1. Centos7安装开启BBR加速
  2. 架构师的职责是什么?
  3. Java程序设计基础【10】
  4. Linux多线程(线程互斥与线程锁)
  5. Android悬浮窗原理解析(Window)[源码]
  6. form表单AJAX提交
  7. design pattern : Facade
  8. 嵌入式驱动程序(5-5)点灯大师⑤之TM1668
  9. 分布式定时任务(XXL_JOB)
  10. 2范数和F范数的区别