1.1 认识文本预处理
学习目标
文本预处理及其作用
- 文本语料在输送给模型前一般需要一系列的预处理工作, 才能符合模型输入的要求, 如: 将文本转化成模型需要的张量, 规范张量的尺寸等, 而且科学的文本预处理环节还将有效指导模型超参数的选择, 提升模型的评估指标.
文本预处理中包含的主要环节
- 文本处理的基本方法
- 文本张量表示方法
- 文本语料的数据分析
- 文本特征处理
- 数据增强方法
文本处理的基本方法
- 分词
- 词性标注
- 命名实体识别
文本张量表示方法
- one-hot编码
- Word2vec
- Word Embedding
文本语料的数据分析
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
文本特征处理
- 添加n-gram特征
- 文本长度规范
数据增强方法
- 回译数据增强法
重要说明
- 在实际生产应用中, 我们最常使用的两种语言是中文和英文, 因此, 文本预处理部分的内容都将针对这两种语言进行讲解.
1.2 文本处理的基本方法
学习目标
- 了解什么是分词, 词性标注, 命名实体识别及其它们的作用.
- 掌握分词, 词性标注, 命名实体识别流行工具的使用方法.
什么是分词
- 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程.
- 举个栗子:
1 | 工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 |
- 分词的作用:
- 词作为语言语义理解的最小单元, 是人类理解文本语言的基础. 因此也是AI解决NLP领域高阶任务, 如自动问答, 机器翻译, 文本生成的重要基础环节.
- 流行中文分词工具jieba:
- 愿景: “结巴”中文分词, 做最好的 Python 中文分词组件.
jieba的特性:
支持多种分词模式
- 精确模式
- 全模式
- 搜索引擎模式
支持中文繁体分词
支持用户自定义词典
- jieba的安装:
1 | pip install jieba |
- jieba的使用:
精确模式分词:
- 试图将句子最精确地切开,适合文本分析.
1 | import jieba |
全模式分词:
- 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能消除 歧义.
1 | import jieba |
搜索引擎模式分词:
- 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词.
1 | import jieba |
中文繁体分词:
- 针对中国香港, 台湾地区的繁体文本进行分词.
1 | import jieba |
使用用户自定义词典:
添加自定义词典后, jieba能够准确识别词典中出现的词汇,提升整体的识别准确率.
- 词典格式: 每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒.
- 词典样式如下, 具体词性含义请参照附录: jieba词性对照表, 将该词典存为userdict.txt, 方便之后加载使用.
1 | 云计算 5 n |
1 | import jieba |
- 流行中英文分词工具hanlp:
- 中英文NLP处理工具包, 基于tensorflow2.0, 使用在学术界和行业中推广最先进的深度学习技术.
- hanlp的安装:
1 | # 使用pip进行安装 |
- 使用hanlp进行中文分词:
1 | import hanlp |
- 使用hanlp进行英文分词:
1 | # 进行英文分词, 英文分词只需要使用规则即可 |
什么是命名实体识别
- 命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.
- 顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.
- 举个栗子:
1 | 鲁迅, 浙江绍兴人, 五四新文化运动的重要参与者, 代表作朝花夕拾. |
- 命名实体识别的作用:
- 同词汇一样, 命名实体也是人类理解文本的基础单元, 因此也是AI解决NLP领域高阶任务的重要基础环节.
- 使用hanlp进行中文命名实体识别:
1 | >>> import hanlp |
- 使用hanlp进行英文命名实体识别:
1 | import hanlp |
什么是词性标注
- 词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.
- 顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.
- 举个栗子:
1 | 我爱自然语言处理 |
- 词性标注的作用:
- 词性标注以分词为基础, 是对文本语言的另一个角度的理解, 因此也常常成为AI解决NLP领域高阶任务的重要基础环节.
- 使用jieba进行中文词性标注:
1 | >>> import jieba.posseg as pseg |
- 使用hanlp进行中文词性标注:
1 | import hanlp |
- 使用hanlp进行英文词性标注:
1 | import hanlp |
小节总结
- 学习了什么是分词:
- 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程.
- 学习了分词的作用:
- 词作为语言语义理解的最小单元, 是人类理解文本语言的基础. 因此也是AI解决NLP领域高阶任务, 如自动问答, 机器翻译, 文本生成的重要基础环节.
- 学习了流行中文分词工具jieba:
- 支持多种分词模式: 精确模式, 全模式, 搜索引擎模式
- 支持中文繁体分词
- 支持用户自定义词典
- 学习了jieba工具的安装和分词使用.
- 学习了流行中英文分词工具hanlp及其安装和分词使用.
- 学习了什么是命名实体识别:
- 命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.
- 顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.
- 命名实体识别的作用:
- 同词汇一样, 命名实体也是人类理解文本的基础单元, 因此也是AI解决NLP领域高阶任务的重要基础环节.
- 学习了使用hanlp进行命名实体识别.
- 学习了什么是词性标注:
- 词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.
- 顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.
- 学习了词性标注的作用:
- 词性标注以分词为基础, 是对文本语言的另一个角度的理解, 因此也常常成为AI解决NLP领域高阶任务的重要基础环节.
- 学习了使用jieba和hanlp进行词性标注.
1.3 文本张量表示方法
学习目标
- 了解什么是文本张量表示及其作用.
- 掌握文本张量表示的几种方法及其实现.
什么是文本张量表示
- 将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示.
- 举个栗子:
1 | [ ] |
- 文本张量表示的作用:
- 将文本表示成张量(矩阵)形式,能够使语言文本可以作为计算机处理程序的输入,进行接下来一系列的解析工作.
- 文本张量表示的方法:
- one-hot编码
- Word2vec
- Word Embedding
什么是one-hot词向量表示
- 又称独热编码,将每个词表示成具有n个元素的向量,这个词向量中只有一个元素是1,其他元素都是0,不同词汇元素为0的位置不同,其中n的大小是整个语料中不同词汇的总数.
- 举个栗子:
1 | [ ]` |
- onehot编码实现:
- 进行onehot编码:
1 | # 导入用于对象保存与加载的joblib |
- 输出效果:
1 | 鹿晗 的one-hot编码为: [1, 0, 0, 0, 0, 0] |
- onehot编码器的使用:
1 |
|
- 输出效果:
1 | 李宗盛 的one-hot编码为: [1, 0, 0, 0, 0, 0] |
- one-hot编码的优劣势:
- 优势:操作简单,容易理解.
- 劣势:完全割裂了词与词之间的联系,而且在大语料集下,每个向量的长度过大,占据大量内存.
- 说明:
- 正因为one-hot编码明显的劣势,这种编码方式被应用的地方越来越少,取而代之的是接下来我们要学习的稠密向量的表示方法word2vec和word embedding.
什么是word2vec
- 是一种流行的将词汇表示成向量的无监督训练方法, 该过程将构建神经网络模型, 将网络参数作为词汇的向量表示, 它包含CBOW和skipgram两种训练模式.
- CBOW(Continuous bag of words)模式:
- 给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用上下文词汇预测目标词汇.
- 分析:
- 图中窗口大小为9, 使用前后4个词汇对目标词汇进行预测.
- CBOW模式下的word2vec过程说明:
- 假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope can set,因为是CBOW模式,所以将使用Hope和set作为输入,can作为输出,在模型训练时, Hope,can,set等词汇都使用它们的one-hot编码. 如图所示: 每个one-hot编码的单词与各自的变换矩阵(即参数矩阵3x5, 这里的3是指最后得到的词向量维度)相乘之后再相加, 得到上下文表示矩阵(3x1).
- 接着, 将上下文表示矩阵与变换矩阵(参数矩阵5x3, 所有的变换矩阵共享参数)相乘, 得到5x1的结果矩阵, 它将与我们真正的目标矩阵即can的one-hot编码矩阵(5x1)进行损失的计算, 然后更新网络参数完成一次模型迭代.
- 最后窗口按序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示.
- skipgram模式:
- 给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用目标词汇预测上下文词汇.
- 分析:
- 图中窗口大小为9, 使用目标词汇对前后四个词汇进行预测.
- skipgram模式下的word2vec过程说明:
- 假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope can set,因为是skipgram模式,所以将使用can作为输入 ,Hope和set作为输出,在模型训练时, Hope,can,set等词汇都使用它们的one-hot编码. 如图所示: 将can的one-hot编码与变换矩阵(即参数矩阵3x5, 这里的3是指最后得到的词向量维度)相乘, 得到目标词汇表示矩阵(3x1).
- 接着, 将目标词汇表示矩阵与多个变换矩阵(参数矩阵5x3)相乘, 得到多个5x1的结果矩阵, 它将与我们Hope和set对应的one-hot编码矩阵(5x1)进行损失的计算, 然后更新网络参数完成一次模 型迭代.
- 最后窗口按序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵即参数矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示.
使用fasttext工具实现word2vec的训练和使用
- 第一步: 获取训练数据
- 第二步: 训练词向量
- 第三步: 模型超参数设定
- 第四步: 模型效果检验
- 第五步: 模型的保存与重加载
- 第一步: 获取训练数据
1 | # 在这里, 我们将研究英语维基百科的部分网页信息, 它的大小在300M左右 |
- 查看原始数据:
1 | $ head -10 data/enwik9 |
- 原始数据处理:
1 |
|
- 查看预处理后的数据:
1 | # 查看前80个字符 |
- 第二步: 训练词向量
1 |
|
- 查看单词对应的词向量:
1 | # 通过get_word_vector方法来获得指定词汇的词向量 |
- 第三步: 模型超参数设定
1 | # 在训练词向量过程中, 我们可以设定很多常用超参数来调节我们的模型效果, 如: |
- 第四步: 模型效果检验
1 | # 检查单词向量质量的一种简单方法就是查看其邻近单词, 通过我们主观来判断这些邻近单词是否与目标单词相关来粗略评定模型效果好坏. |
- 第五步: 模型的保存与重加载
1 | # 使用save_model保存模型 |
什么是word embedding(词嵌入)
- 通过一定的方式将词汇映射到指定维度(一般是更高维度)的空间.
- 广义的word embedding包括所有密集词汇向量的表示方法,如之前学习的word2vec, 即可认为是word embedding的一种.
- 狭义的word embedding是指在神经网络中加入的embedding层, 对整个网络进行训练的同时产生的embedding矩阵(embedding层的参数), 这个embedding矩阵就是训练过程中所有输入词汇的向量表示组成的矩阵.
以一个案例演示狭义的word_embedding的生成过程
- word embedding的可视化分析:
- 通过使用tensorboard可视化嵌入的词向量.
1 | # 导入torch和tensorboard的摘要写入方法 |
- 在终端启动tensorboard服务:
1 | $ tensorboard --logdir runs --host 0.0.0.0 |
- 浏览器展示并可以使用右侧近邻词汇功能检验效果:
小节总结
- 学习了什么是文本张量表示:
- 将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示.
- 学习了文本张量表示的作用:
- 将文本表示成张量(矩阵)形式,能够使语言文本可以作为计算机处理程序的输入,进行接下来一系列的解析工作.
- 学习了文本张量表示的方法:
- one-hot编码
- Word2vec
- Word Embedding
- 什么是one-hot词向量表示:
- 又称独热编码,将每个词表示成具有n个元素的向量,这个词向量中只有一个元素是1,其他元素都是0,不同词汇元素为0的位置不同,其中n的大小是整个语料中不同词汇的总数.
- 学习了onehot编码实现.
- 学习了one-hot编码的优劣势:
- 优势:操作简单,容易理解.
- 劣势:完全割裂了词与词之间的联系,而且在大语料集下,每个向量的长度过大,占据大量内存.
- 学习了什么是word2vec:
- 是一种流行的将词汇表示成向量的无监督训练方法, 该过程将构建神经网络模型, 将网络参数作为词汇的向量表示, 它包含CBOW和skipgram两种训练模式.
- 学习了CBOW(Continuous bag of words)模式:
- 给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用上下文词汇预测目标词汇.
- 学习了CBOW模式下的word2vec过程说明:
- 假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope you set,因为是CBOW模式,所以将使用Hope和set作为输入,you作为输出,在模型训练时, Hope,set,you等词汇都使用它们的one-hot编码. 如图所示: 每个one-hot编码的单词与各自的变换矩阵(即参数矩阵3x5, 这里的3是指最后得到的词向量维度)相乘之后再相加, 得到上下文表示矩阵(3x1).
- 接着, 将上下文表示矩阵与变换矩阵(参数矩阵5x3, 所有的变换矩阵共享参数)相乘, 得到5x1的结果矩阵, 它将与我们真正的目标矩阵即you的one-hot编码矩阵(5x1)进行损失的计算, 然后更新网络参数完成一次模型迭代.
- 最后窗口按序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示.
- 学习了skipgram模式:
- 给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用目标词汇预测上下文词汇.
- 学习了skipgram模式下的word2vec过程说明:
- 假设我们给定的训练语料只有一句话: Hope can set you free (愿你自由成长),窗口大小为3,因此模型的第一个训练样本来自Hope you set,因为是skipgram模式,所以将使用you作为输入 ,hope和set作为输出,在模型训练时, Hope,set,you等词汇都使用它们的one-hot编码. 如图所示: 将you的one-hot编码与变换矩阵(即参数矩阵3x5, 这里的3是指最后得到的词向量维度)相乘, 得到目标词汇表示矩阵(3x1).
- 接着, 将目标词汇表示矩阵与多个变换矩阵(参数矩阵5x3)相乘, 得到多个5x1的结果矩阵, 它将与我们hope和set对应的one-hot编码矩阵(5x1)进行损失的计算, 然后更新网络参数完成一次模 型迭代.
- 最后窗口按序向后移动,重新更新参数,直到所有语料被遍历完成,得到最终的变换矩阵即参数矩阵(3x5),这个变换矩阵与每个词汇的one-hot编码(5x1)相乘,得到的3x1的矩阵就是该词汇的word2vec张量表示.
- 学习了使用fasttext工具实现word2vec的训练和使用:
- 第一步: 获取训练数据
- 第二步: 训练词向量
- 第三步: 模型超参数设定
- 第四步: 模型效果检验
- 第五步: 模型的保存与重加载
- 学习了什么是word embedding(词嵌入):
- 通过一定的方式将词汇映射到指定维度(一般是更高维度)的空间.
- 广义的word embedding包括所有密集词汇向量的表示方法,如之前学习的word2vec, 即可认为是word embedding的一种.
- 狭义的word embedding是指在神经网络中加入的embedding层, 对整个网络进行训练的同时产生的embedding矩阵(embedding层的参数), 这个embedding矩阵就是训练过程中所有输入词汇的向量表示组成的矩阵.
- 通过一个案例: 新闻主题分类任务, 演示狭义的word_embedding的生成过程.
- 学习了word embedding的可视化分析:
- 通过使用tensorboard可视化嵌入的词向量.
- 在终端启动tensorboard服务.
- 浏览器展示并可以使用右侧近邻词汇功能检验效果.
1.4 文本数据分析
学习目标
- 了解文本数据分析的作用.
- 掌握常用的几种文本数据分析方法.
- 文本数据分析的作用:
- 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
- 常用的几种文本数据分析方法:
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
- 说明:
- 我们将基于真实的中文酒店评论语料来讲解常用的几种文本数据分析方法.
- 中文酒店评论语料:
- 属于二分类的中文情感分析语料, 该语料存放在”./cn_data”目录下.
- 其中train.tsv代表训练集, dev.tsv代表验证集, 二者数据样式相同.
- train.tsv数据样式:
1 | sentence label |
- train.tsv数据样式说明:
- train.tsv中的数据内容共分为2列, 第一列数据代表具有感情色彩的评论文本; 第二列数据, 0或1, 代表每条文本数据是积极或者消极的评论, 0代表消极, 1代表积极.
获得训练集和验证集的标签数量分布
1 |
|
- 训练集标签数量分布:
- 验证集标签数量分布:
- 分析:
- 在深度学习模型评估中, 我们一般使用ACC作为评估指标, 若想将ACC的基线定义在50%左右, 则需要我们的正负样本比例维持在1:1左右, 否则就要进行必要的数据增强或数据删减. 上图中训练和验证集正负样本都稍有不均衡, 可以进行一些数据增强.
获取训练集和验证集的句子长度分布
1 |
|
- 训练集句子长度分布:
- 验证集句子长度分布:
- 分析:
- 通过绘制句子长度分布图, 可以得知我们的语料中大部分句子长度的分布范围, 因为模型的输入要求为固定尺寸的张量,合理的长度范围对之后进行句子截断补齐(规范长度)起到关键的指导作用. 上图中大部分句子长度的范围大致为20-250之间.
获取训练集和验证集的正负样本长度散点分布
1 | # 绘制训练集长度分布的散点图 |
- 训练集上正负样本的长度散点分布:
- 验证集上正负样本的长度散点分布:
- 分析:
- 通过查看正负样本长度散点图, 可以有效定位异常点的出现位置, 帮助我们更准确进行人工语料审查. 上图中在训练集正样本中出现了异常点, 它的句子长度近3500左右, 需要我们人工审查.
获得训练集与验证集不同词汇总数统计
1 | # 导入jieba用于分词 |
- 输出效果:
1 | 训练集共包含不同词汇总数为: 12147 |
获得训练集上正负的样本的高频形容词词云
1 | # 使用jieba中的词性标注功能 |
- 训练集正样本形容词词云:
- 训练集负样本形容词词云:
获得验证集上正负的样本的形容词词云
1 | # 获得验证集上正样本 |
- 验证集正样本形容词词云:
- 验证集负样本形容词词云:
- 分析:
- 根据高频形容词词云显示, 我们可以对当前语料质量进行简单评估, 同时对违反语料标签含义的词汇进行人工审查和修正, 来保证绝大多数语料符合训练标准. 上图中的正样本大多数是褒义词, 而负样本大多数是贬义词, 基本符合要求, 但是负样本词云中也存在”便利”这样的褒义词, 因此可以人工进行审查.
小节总结
- 学习了文本数据分析的作用:
- 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
- 学习了常用的几种文本数据分析方法:
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
- 学习了基于真实的中文酒店评论语料进行几种文本数据分析方法.
- 获得训练集和验证集的标签数量分布
- 获取训练集和验证集的句子长度分布
- 获取训练集和验证集的正负样本长度散点分布
- 获得训练集与验证集不同词汇总数统计
- 获得训练集上正负的样本的高频形容词词云
1.5 文本特征处理
学习目标
- 了解文本特征处理的作用.
- 掌握实现常见的文本特征处理的具体方法.
- 文本特征处理的作用:
- 文本特征处理包括为语料添加具有普适性的文本特征, 如:n-gram特征, 以及对加入特征之后的文本语料进行必要的处理, 如: 长度规范. 这些特征处理工作能够有效的将重要的文本特征加入模型训练中, 增强模型评估指标.
- 常见的文本特征处理方法:
- 添加n-gram特征
- 文本长度规范
什么是n-gram特征
- 给定一段文本序列, 其中n个词或字的相邻共现特征即n-gram特征, 常用的n-gram特征是bi-gram和tri-gram特征, 分别对应n为2和3.
- 举个栗子:
1 | 假设给定分词列表: ["是谁", "敲动", "我心"] |
- 提取n-gram特征:
1 | # 一般n-gram中的n取2或者3, 这里取2为例 |
- 调用:
1 | input_list = [1, 3, 2, 1, 5, 3] |
- 输出效果:
1 | # 该输入列表的所有bi-gram特征 |
文本长度规范及其作用
- 一般模型的输入需要等尺寸大小的矩阵, 因此在进入模型前需要对每条文本数值映射后的长度进行规范, 此时将根据句子长度分布分析出覆盖绝大多数文本的合理长度, 对超长文本进行截断, 对不足文本进行补齐(一般使用数字0), 这个过程就是文本长度规范.
- 文本长度规范的实现:
1 | from keras.preprocessing import sequence |
- 调用:
1 | # 假定x_train里面有两条文本, 一条长度大于10, 一天小于10 |
- 输出效果:
1 | [[ 5 32 55 63 2 21 78 32 23 1] |
小节总结
- 学习了文本特征处理的作用:
- 文本特征处理包括为语料添加具有普适性的文本特征, 如:n-gram特征, 以及对加入特征之后的文本语料进行必要的处理, 如: 长度规范. 这些特征处理工作能够有效的将重要的文本特征加入模型训练中, 增强模型评估指标.
- 学习了常见的文本特征处理方法:
- 添加n-gram特征
- 文本长度规范
- 学习了什么是n-gram特征:
- 给定一段文本序列, 其中n个词或字的相邻共现特征即n-gram特征, 常用的n-gram特征是bi-gram和tri-gram特征, 分别对应n为2和3.
- 学习了提取n-gram特征的函数: create_ngram_set
- 学习了文本长度规范及其作用:
- 一般模型的输入需要等尺寸大小的矩阵, 因此在进入模型前需要对每条文本数值映射后的长度进行规范, 此时将根据句子长度分布分析出覆盖绝大多数文本的合理长度, 对超长文本进行截断, 对不足文本进行补齐(一般使用数字0), 这个过程就是文本长度规范.
- 学习了文本长度规范的实现函数: padding
1.6 文本数据增强
学习目标
- 了解文本数据增强的作用.
- 掌握实现常见的文本数据增强的具体方法.
- 常见的文本数据增强方法:
- 回译数据增强法
什么是回译数据增强法
- 回译数据增强目前是文本数据增强方面效果较好的增强方法, 一般基于google翻译接口, 将文本数据翻译成另外一种语言(一般选择小语种),之后再翻译回原语言, 即可认为得到与与原语料同标签的新语料, 新语料加入到原数据集中即可认为是对原数据集数据增强.
- 回译数据增强优势:
- 操作简便, 获得新语料质量高.
- 回译数据增强存在的问题:
- 在短文本回译过程中, 新语料与原语料可能存在很高的重复率, 并不能有效增大样本的特征空间.
- 高重复率解决办法:
- 进行连续的多语言翻译, 如: 中文–>韩文–>日语–>英文–>中文, 根据经验, 最多只采用3次连续翻译, 更多的翻译次数将产生效率低下, 语义失真等问题.
- 回译数据增强实现:
1 | # 假设取两条已经存在的正样本和两条负样本 |
- 输出效果:
1 | 中间翻译结果: |
小节总结
- 学习了常见的文本数据增强方法:
- 回译数据增强法
- 学习了什么是回译数据增强法:
- 回译数据增强目前是文本数据增强方面效果较好的增强方法, 一般基于google翻译接口, 将文本数据翻译成另外一种语言(一般选择小语种),之后再翻译回原语言, 即可认为得到与与原语料同标签的新语料, 新语料加入到原数据集中即可认为是对原数据集数据增强.
- 学习了回译数据增强优势:
- 操作简便, 获得新语料质量高.
- 学习了回译数据增强存在的问题:
- 在短文本回译过程中, 新语料与原语料可能存在很高的重复率, 并不能有效增大样本的特征空间.
- 学习了高重复率解决办法:
- 进行连续的多语言翻译, 如: 中文–>韩文–>日语–>英文–>中文, 根据经验, 最多只采用3次连续翻译, 更多的翻译次数将产生效率低下, 语义失真等问题.
- 学习了回译数据增强实现.
附录
- jieba词性对照表:
1 | - a 形容词 |
- hanlp词性对照表:
1 | 【Proper Noun——NR,专有名词】 |