用于处理序列的2种基本的深度学习算法分别是循环神经网络RNN (recurrent neural network) 和一维卷积神经网络(1D convnet)。这些算法的应用包括:
- 文档分类和时间序列分类,比如识别文章的主题或书的作者;
- 时间序列对比,比如估测两个文档或两支股票行情的相关程度;
- 序列到序列的学习,比如将英语翻译成法语;
- 情感分析,比如将推文或电影评论的情感划分为正面或负面;
- 时间序列预测,比如根据某地最近的天气数据来预测未来天气。
字符序列和单词序列是最常用的序列数据之一,但最常见的是单词级处理。深度学习用于NLP是将模式识别应用于单词、句子和段落。深度学习模型不会接收原始文本作为输入,只能处理数值张量。文本向量化vectorize就是将文本转换为数值张量的过程。常用方法如下:
- 将文本分割为单词,并将每个单词转换为一个向量。
- 将文本分割为字符,并将每个字符转换为一个向量。
- 提取单词或字符的 n-gram,并将每个 n-gram 转换为一个向量。n-gram 是多个连续单词或字符的集合(n-gram 之间可重叠)。
================================================================
词袋是一种不保存顺序的分词方法(生成的标记组成一个集合,而不是一个序列,舍弃了句子的总体结构),因此它往往被用于浅层的语言处理模型,而不是深度学习模型。提取 n-gram 是一种特征工程,深度学习不需要这种死板而又不稳定的方法,并将其替换为分层特征学习。在使用轻量级的浅层文本处理模型时(比如 logistic 回归和随机森林),n-gram 是一种功能强大、不可或缺的特征工程工具。
===============================================================
- 标记token --- 将文本分解而成的单元(单词、字符或n-gram)
- 分词tokenization ---- 将文本分解成标记的过程
===============================================================
所有文本向量化过程都是应用某种分词方案,然后将数值向量与生成的标记相关联。这些向量组合成序列张量,被输入到DNN中。将向量与标记相关联的方法有很多种。其中2种主要的方法:one-hot 编码( one-hot encoding)与标记嵌入(token embedding, 通常只用于单词,为词嵌入)。
1. one-hot编码
One-hot编码是将标记转换为向量的最常用、最基本的方法。定义:将每个单词与一个唯一的整数索引相关联,然后将这个整数索引i转换为长度N的二进制向量(N是词表大小),这个向量只有第i 个元素是1,其余元素都是0,得到的向量是二进制的、稀疏的(绝大部分元素都是0)、维度很高的(维度大小等于词表的单词个数)。同时也有对应的字符级的one-hot编码。Keras的内置函数可以对原始文本数据进行单词或字符级的one-hot编码。
One-hot编码的一种变体是所谓的one-hot散列技巧( one-hot hashing trick) ---将单词散列编码为固定长度的向量,通常用一个非常简单的散列函数来实现。如果词表中唯一标记的数量太大而无法直接处理,就可以使用这种技巧。
优点:避免了维护一个显式的单词索引,从而节省内存并允许数据的在线编码(即在读取完所有数据之前,就可以立刻生成标记向量)
缺点:散列冲突(hash collision)即2个不同的单词可能具有相同的散列值,随后任何机器学习模型观察这些散列值,都无法区分它们所对应的单词。如果散列空间的维度大于散列的唯一标记个数,散列冲突的可能性会减少。
2. 词嵌入word embedding
使用密集的词向量(word vector),低维的浮点数向量。常见的词向量维度是256、512或1024, 而One-hot编码的词向量通常是 >=20000 。
获取词嵌入有2种方法:
1. 在完成主任务(比如文档分类或情感预测)的同时学习词嵌入。在这种情况下,一开始是随机的词向量,然后对这些词向量进行学习,其学习方式与学习神经网络的权重相同&#x