一、文本表示
1、为什么需要文本表示
文字是人类认知过程中产生的高层认知抽象实体,我们需要将其转换为神经网络可以处理的数据类型。
2、文本表示的形式
类比于语音图像,我们希望可以将文字或单词转换为向量。
3、文本表示的方法
3.1 one-hot表示
one-hot即独立热词,词语被表示成一个维度为词表大小的向量,这个向量中只有一个维度是1其他位置都是0.假如词表中只有四个个词“奥巴马”、“特朗普”、“宣誓”、“就职”,那么他们将被表示为:
奥巴马:[1 0 0 0]
特朗普:[0 1 0 0]
宣誓: [0 0 1 0]
就职: [0 0 0 1]
one-hot表示的优点是简单易用,但是有着致命的缺点:
- 如果一个词表有十万个单词,那么就需要十万维的向量来表示每一个单词,而每个向量只有一位是1,在储存上造成大量浪费,在深度学习场景中容易受到维度灾难的困扰。
- 奥巴马和特朗普都是美国总统,而one-hot表示出的两个向量是正交向量,也就是他们之间毫无关系,这显然是丢失了相关语义信息。
因此我们需要更好的表示方法。
3.2分布式表示
为了克服one-hot的缺点,。Dagan和Schütze等人提出了分布式表示方法。
其理论基础就是上下文相似的词,其语义也相似,这和我们的认知是一致的,当我们在阅读文章时发现不认识的字,也会通过上下文来猜测字的含义。比如:
昨天奥巴马宣誓就职
昨天特朗普宣誓就职
如果两个词可以互换,那么它们的语义就是相似的,所以奥巴马和特朗普应该具有相似的语义。
分布式表示方法要做的就是利用上下文信息把每一个词映射成一个维度固定的短向量,这样在它们所构成的向量空间中,每个词都是一个点,就可以通过距离来判断语义的相似度。
3.2.1基于矩阵的分布式表示
这类方法需要构建一个“词-上下文”矩阵,从矩阵中获取词的表示。在“词-上下文”矩阵中,每行对应一个词,每列表示一种不同的上下文,矩阵中的每个元素对应相关词和上下文的共现次数。在这种表示下,矩阵中的一行,就成为 了对应词的表示,这种表示描述了该词的上下文的分布。比如:
I love monkeys
Apes and monkeys love bananas
窗口值设为2
Co-occurrence matrix | I | love | monkeys | and | apes | bananas |
---|---|---|---|---|---|---|
I | 0 | 1 | 1 | 0 | 0 | 0 |
love | 1 | 0 | 2 | 1 | 0 | 1 |
monkeys | 1 | 2 | 0 | 1 | 1 | 1 |
and | 0 | 1 | 1 | 0 | 1 | 0 |
apes | 0 | 0 | 1 | 1 | 0 | 0 |
bananas | 0 | 1 | 1 | 0 | 0 | 0 |
此时的bananas的词向量就是[0 1 1 0 0 0]
- 在窗口值为2点情况下,共现矩阵中已经含有大量的0,如果我们增大窗口值,共现矩阵就会更加稀疏。此外我们发现
the monkey
的共现次数很多,而这仅仅因为the
本身就被大量使用。因此研究人员提出了多种加权和平滑方法,最常用的有tf-idf、PMI和直接取log。 - 通常原始矩阵是高维且稀疏的,因此需要使用一些降维技术做进一步的处理,比如奇异值分解(SVD)、非负矩阵分解(NMF)、典型关联分析(CanonicalCorrelationAnalysis,CCA) HellingerPCA(HPCA)。
3.2.2基于神经网络的分布式式表示
语言模型简介
语言模型可以对一段文本出现的概率进行估计,估计的概率越大,表明这句话越有可能是‘人话’。
概率计算公式如下:
![](https://img.haomeiwen.com/i9725643/2525f910d7c28cff.png)
这里有一个问题,如果一句话很长,那么下式的概率估算会非常困难:
![](https://img.haomeiwen.com/i9725643/925f4fb352579d1a.png)
这时我们引入n元模型(n-gram),就是只考虑中心词附近的n个词,对条件概率做了如下近似
![](https://img.haomeiwen.com/i9725643/7813172fe47ea3a7.png)
当n=1表明每个词都是独立的,完全不利用上下文信息。而n的值越大表示利用的上下文信息越多。但n的值一般取3,因为n的取值过大,会增大计算量还会造成大量中心词和上下文共现的次数为零的情况出现。这局限了我们不能更充分的利用上下文。
而使用神经网络来训练语言模型,就可以突破这种局限。当网络训练成功,其中参数就是我们想要的词向量。
神经网络语言模型
提到神经网络语言模型,首先要理清两个名词
- word Embedding:翻译为词嵌入,是一组语言模型和特征学习技术的总称,目的就是把单词映射成向量。
- word2vec:Google公司在2013年提出的一个工具包,至今被广泛使用。它是基于神经网络模型对word Embedding的实现。其中包含了CBOW和Skip-gram两个语言模型。
神经网络的结构很简单,只是一个浅层网络,中间只有一层隐藏层。
Word2Vec网络结构
首先来看CBOW模型,它的核心思想是根据上下文来预测中心词,例如:
昨天特朗普宣誓就职:将全力交还给美国人民
可以近似理解为将特朗普
和就职
作为输入,那么神经网络会输出宣誓
。
那么神经网络到底是如何工作的呢?下面就是神经网络的本质-矩阵的运算
![](https://img.haomeiwen.com/i9725643/7435d550caa6e5c3.png)
将特朗普
和就职
表示成one-hot形式输入进神经网络,经过一系列运算输出一个向量,不断优化参数矩阵W,使最后输出的向量与宣誓
的one-hot表示相同,此时W的每一列对应一个词的词向量。
此时我们发现,用W的每一列表示单词,它的维数是4,而使用ont-hot表示的向量维数是9,有效的降低了维数。
同时词向量还具有了语义信息,一种直观的感觉,特朗普
和奥巴马
附近大概率会出现白宫
、美国
等词,那么把白宫
、美国
作为上下文输入进网络,能得到特朗普
也能得到奥巴马
,这样训练出的两个词的词向量一定会是相近的。事实也正是如此:
![](https://img.haomeiwen.com/i9725643/165d012786d17aed.jpg)
另外一个有趣的现象是king + man - women = queen
词向量在有了语义信息后,做加减法也有了意义。
![](https://img.haomeiwen.com/i9725643/424e76c3f9a92775.jpg)
skip-gram模型的核心思想与CBOW相反,它是利用中心词来预测上下文
引用
Word embeddings: how to transform text into numbers
word2vec 中的数学原理详解
词嵌入来龙去脉
Word Embedding与Word2Vec
word2vec概述