Sequence2Sequence
文章目录
想要真正理解什么是Seq2Seq,那么便从最基本的词语到句子开始吧~
怎样理解词向量
什么是词语
在百度上是这样解释词语的含义的,组成语言文章的最小结构形式单元
什么是词向量
有了上面词语
的概念后,那么又有很多朋友问了,词语我知道但是词向量
是什么呀?
其实,词向量就是词语的另一种表示方式,因为我们在后面要将这些词语交给电脑处理,让它们帮我们分析理解,但是电脑就是一个冰冷的计算天才,它说:”1+1我知道等于多少,但是一加一我不知道等于几“,这就意味着计算机也需要用自己理解的一种语言来进行运算,词向量就是计算机所能理解的语言
怎样转化成词向量
词向量
:计算机所能理解的语言——文字数字化
那么,将文字转化为向量有哪些方法呢?
1.one-hot
具体了解 ➡️ 文本张量的表示方法之one-hot编码
one-hot
俗称独热编码
,准备一个很大的向量,将该文字对应的位置表示成1,其余位置表示成0
e.g.
假设一篇文章有10000字,它其中有5000个互不相同的词语,那么该词向量的总长度为5000,用n来表示该向量,该文章含有苹果,香蕉等词语
n = [0,0,0,0...0],len(n) = 5000
苹果 = [1,0,0...0]
香蕉 = [0,1,0...0]
...
2.w2v
具体了解 ➡️ 文本张量的表示方法之word2vec
w2v
的完整写法是Word2vector
,从上面的one-hot我们也可以看出为什么会出现w2v,因为one-hot实在是太浪费空间了,那么大的一个向量所占用的就只有1个位置,并且它的浪费率随着词汇量的增大而增大,而w2v很好地弥补了这个缺点,它将每个词表示成一个定长的向量,并使得这些向量能较好地表达不同词之间的相似和类比关系
e.g.
假设一篇文章有10000字,它其中有5000个互不相同的词语,用长度为100的向量来表示该向量n,该文章含有苹果,香蕉等词语
n = [0,0,0,0...0],len(n) = 100
苹果 = [1.32,2.12,-2.43...1.99]
香蕉 = [3.20,1.11,7.38...-9.10]
常见的训练模式
CBOW((Continuous Bag of Words))
它的基本理论就是根据两边的词来预测中间的词
它的基本理论就是根据中间的词来预测两边
3.Word-Emdedding
具体了解 ➡️ 文本张量的表示方法之word-embedding可视化分析
Word-Emdedding
的方式就是找到一个映射或者函数,将词语在一个新的空间上的进行表达
e.g.
假设一篇文章有10000字,该文章含有下雨,香蕉等词语
将所有词语在空间中表示出来
词向量能做什么
通过上面怎么表示词向量后,大家应该对词向量有所了解了,那么我们这么大费周章地把它表示出来具体有什么用呢?
下面我来讲一讲
我们将词语表示成的词向量大多都是一个数组形式的向量,在二维平面中我们知道一个点需要(x,y)来表示,两个点之间的连线叫做距离,在三维空间中,一个点需要(x,y,z)来表示,两个点之间的连线为下图中黄色虚线
假设每一个蓝色的圆圈为我们最后词向量所表示的点,如下图,那么它们彼此之间的连线代表什么呢?
通过观察我们看出来具有相同含义的词语它们之间关联性很强,所以它们的距离往往很近,而那些不同含义的词语则离得很远,而在训练过程中有些词出现的频率很高,难免在词向量的表示过程中被拽来拽去,所以那些越靠近原点的词语,即任何和它相关的词语都拽不动它,说明它很有可能是中性词,如你,我,它…
总结
说了那么多,那么来总结一下吧~
- 可以知道词语之间的相关性
- 可以在词向量上实现某种加减,得到新的相关性词汇,如N(男)-N(女) = N(狗)-N(?)
- 当最主要的是用于下面的句向量
怎样理解句向量
前面我们学习了怎样将词语表示成词向量,可是有时候我们发现一个词语有时候不能很好的表达一个句子的意思
举个例子:
你现在要去吃饭吗?
要,但是我们得先完成任务。
假如我们用词向量来表示这个句子,很有可能机器就理解成现在要去吃饭了,但是真正的含义是等一会儿去吃饭
这就说明有时候机器理解词向量的意思并不是我们希望它理解的意思
我们需要的是它能够站在整个句子上去理解意思,即我们需要找到一种方法,将这些离散的词向量,加工成句向量
怎样将词向量转变为句向量
猜想1 句向量相加 ❌
词向量相加的话,我们依旧是在词向量的空间上理解句子,如果句子和词语是有本质区别的事物(就像我们刚刚举的例子一样),那么它们所属的空间应该也不同
如果直接使用加法,就没有办法创造出一个全新的空间
猜想2 句向量相乘 ⭕️
我们的确可以用乘法来转移空间属性,比如使用线性代数的方法,让一个空间的向量在另一个空间以不同形式表达
我们现在最常见的方案就是使用神经网络做这样的复杂乘法运算来实现空间转移
这个过程类似压缩
的过程,将大量复杂的信息压缩成少而有用的信息,通过这个途径找到信息的精华部分
句向量有什么作用
通过上面的猜想我们得到了句向量,那么有了这个句子的理解,我们可以干什么呢?
句向量,一个融合了诸多个词向量的向量,可以解释成多种多样的信息
如果说encoding是编码,是压缩,那么decoding就是解码,是解压。与传统的压缩解压不同,我们不仅能解压出原始的文件,我们还能基于这种计算机压缩过的理解,转化成更多数字化形式
如下图,将我爱莫烦python转化为句向量后,我们可以将这个句向量扩展为和它语义相近的句子,莫烦最棒
什么是Seq2Seq
通过上面的理解我们知道了,Encoder负责理解上文,Decoder负责将思考怎么样在理解的句子的基础上做任务
在上面的基础上,我们将要了解在自然语言处理中风靡一时的Seq2Seq框架
Decoder
是解压器,但是它并不是将压缩好的信息还原,而是解压成另外一种形式,换一种表达方式
RNN中的框架
N-M
特点
- 输入N个数据,输出M个数据
- 由解码器和译码器组成,被称为Seq2Seq
- 实际上是由N-1和1-N模型组成
使用场景
- 机器阅读
- 机器翻译
示意图
![img](https://img-blog.csdnimg.cn/img_convert/a37d9b3b57895d5cfaf0e618cefd86b2.png)
具体了解 ➡️ 利用seq2seq框架做翻译任务