自然语言处理---迁移学习

fasttext介绍

  • 作为NLP工程领域常用的工具包,fasttext有两大作用:进行文本分类、训练词向量。
  • 在保持较高精度的情况下,快速的进行训练和预测是fasttext的最大优势。
  • fasttext优势的原因:
    • fasttext工具包中内含的fasttext模型具有十分简单的网络结构。
    • 使用fasttext模型训练词向量时使用层次softmax结构,来提升超多类别下的模型性能。
    • 由于fasttext模型过于简单无法捕捉词序特征,因此会进行n-gram特征提取以弥补模型缺陷提升精度。

fasttext文本分类

文本分类概念

文本分类的是将文档(例如电子邮件,帖子,文本消息,产品评论等)分配给一个或多个类别。当今文本分类的实现多是使用机器学习方法从训练数据中提取分类规则以进行分类,因此构建文本分类器需要带标签的数据。

文本分类种类

  • 二分类:文本被分类到两个类别中,往往这两个类别是对立面,比如:判断一句评论是好评还是差评。
  • 单标签多分类:文本被分入到多个类别中,且每条文本只能属于某一个类别(即被打上某一个标签),比如:输入一个人名,判断它是来自哪个国家的人名。
  • 多标签多分类:文本被分入到多个类别中,但每条文本可以属于多个类别(即被打上多个标签),比如:输入一段描述,判断可能是和哪些兴趣爱好有关,一段描述中可能即讨论了美食,又太讨论了游戏爱好。

文本分类的过程

  • 第一步: 获取数据
  • 第二步: 训练集与验证集的划分
  • 第三步: 训练模型
  • 第四步: 使用模型进行预测并评估
  • 第五步: 模型调优
    • 1 原始数据处理

    • 2 数据处理后进行训练并测试

    • 3 增加训练轮数

    • 4 调整学习率

    • 5 增加n-gram特征

    • 6 修改损失计算方式

    • 7 自动超参数调优

    • 8 实际生产中多标签多分类问题的损失计算方式

  • 第六步: 模型保存与重加载

训练词向量

用向量表示文本中的词汇(或字符)是现代机器学习中最流行的做法,这些向量能够很好的捕捉语言之间的关系,从而提升基于词向量的各种NLP任务的效果。

训练词向量的过程

  • 第一步:获取数据
  • 第二步:训练词向量
  • 第三步:模型超参数设定
  • 第四步:模型效果检验
  • 第五步:模型的保存与重加载

词向量迁移 

  • 使用在大型语料库上已经进行训练完成的词向量模型
  • fasttext工具中可以提供的可迁移的词向量:
    • fasttext提供了157种语言的在CommonCrawl和Wikipedia语料上进行训练的可迁移词向量模型,它们采用CBOW模式进行训练,词向量维度为300维。可通过该地址查看具体语言词向量模型:Word vectors for 157 languages · fastText
    • fasttext提供了294种语言的在Wikipedia语料上进行训练的可迁移词向量模型,它们采用skipgram模式进行训练,词向量维度同样是300维。可通过该地址查看具体语言词向量模型:Wiki word vectors · fastText

进行词向量迁移

  • 第一步:下载词向量模型压缩的bin.gz文件
  • 第二步:解压bin.gz文件到bin文件
  • 第三步:加载bin文件获取词向量
  • 第四步:利用邻近词进行效果检验

迁移学习

1.1 预训练模型(Pretrained model)

  • 一般情况下预训练模型都是大型模型,具备复杂的网络结构,众多的参数量,以及在足够大的数据集下进行训练而产生的模型。在NLP领域,预训练模型往往是语言模型,因为语言模型的训练是无监督的,可以获得大规模语料,同时语言模型又是许多典型NLP任务的基础,如机器翻译,文本生成,阅读理解等,常见的预训练模型有BERT、GPT、 roBERTa、transformer-XL等。

1.2 微调(Fine-tuning)

  • 根据给定的预训练模型,改变它的部分参数或者为其新增部分输出结构后,通过在小部分数据集上训练,来使整个模型更好的适应特定任务.

1.3 微调脚本(Fine-tuning script)

  • 实现微调过程的代码文件。这些脚本文件中,应包括对预训练模型的调用,对微调参数的选定以及对微调结构的更改等,同时,因为微调是一个训练过程,它同样需要一些超参数的设定,以及损失函数和优化器的选取等,因此微调脚本往往也包含了整个迁移学习的过程。
  • 关于微调脚本的说明:
    • 一般情况下,微调脚本应该由不同的任务类型开发者自己编写,但是由于目前研究的NLP任务类型(分类,提取,生成)以及对应的微调输出结构都是有限的,有些微调方式已经在很多数据集上被验证是有效的,因此微调脚本也可以使用已经完成的规范脚本。

1.4 两种迁移方式

  • 直接使用预训练模型,进行相同任务的处理,不需要调整参数或模型结构,这些模型开箱即用。但是这种情况一般只适用于普适任务,如:fasttest工具包中预训练的词向量模型。另外,很多预训练模型开发者为了达到开箱即用的效果,将模型结构分各个部分保存为不同的预训练模型,提供对应的加载方法来完成特定目标。
  • 更加主流的迁移学习方式是发挥预训练模型特征抽象的能力,然后再通过微调的方式,通过训练更新小部分参数以此来适应不同的任务。这种迁移方式需要提供小部分的标注数据来进行监督学习。
  • 关于迁移方式的说明:
    • 直接使用预训练模型的方式,已经在fasttext的词向量迁移中学习。接下来的迁移学习实践将主要讲解通过微调的方式进行迁移学习。

NLP中的标准数据集

GLUE由纽约大学,华盛顿大学,Google联合推出,涵盖不同NLP任务类型,截止至2020年1月其中包括11个子任务数据集,成为衡量NLP研究发展的衡量标准。

 CoLA数据集文件样式

  • 数据集释义:CoLA(The Corpus of Linguistic Acceptability,语言可接受性语料库)纽约大学发布的有关语法的数据集。
  • 本质:是对一个给定句子,判定其是否语法正确的单个句子的**文本二分类任务**。

SST-2数据集文件样式

  • 数据集释义:SST-2(The Stanford Sentiment Treebank,斯坦福情感树库),单句子分类任务,包含电影评论中的句子和它们情感的人类注释。
  • 本质:句子级别的**二分类任务**。

MRPC数据集文件样式

  • 数据集释义:MRPC(The Microsoft Research Paraphrase Corpus,微软研究院释义语料库),相似性和释义任务,是从在线新闻源中自动抽取句子对语料库,并人工注释句子对中的句子是否在语义上等效。
  • 本质:句子级别的**二分类任务**。

STS-B数据集文件样式

  • 数据集释义:STSB(The Semantic Textual Similarity Benchmark,语义文本相似性基准测试)。
  • 本质:回归任务/句子对的文本五分类任务。

QQP数据集文件样式

  • 数据集释义:QQP(The Quora Question Pairs,Quora问题对数集),相似性和释义任务,是社区问答网站Quora中问题对的集合。
  • 本质:句子对的**二分类任务**。

(MNLI/SNLI)数据集文件样式

  • 数据集释义:
    • MNLI(The Multi-Genre Natural Language Inference Corpus, 多类型自然语言推理数据库)。
  • 本质:句子对的**三分类任务**。

 (QNLI/RTE/WNLI)数据集文件样式

  • 数据集释义:
    • QNLI(Qusetion-answering NLI,问答自然语言推断),自然语言推断任务。QNLI是从另一个数据集The Stanford Question Answering Dataset(斯坦福问答数据集, SQuAD 1.0)[3]转换而来的。
    • RTE(The Recognizing Textual Entailment datasets,识别文本蕴含数据集),自然语言推断任务,它是将一系列的年度文本蕴含挑战赛的数据集进行整合合并而来的。
    • WNLI(Winograd NLI,Winograd自然语言推断),自然语言推断任务,数据集来自于竞赛数据的转换。
  • 本质:QNLI是二分类任务,RTE是二分类任务,WNLI是二分类任务。
  • QNLI, RTE, WNLI三个数据集的样式基本相同。

NLP中的预训练模型

1.1 BERT及其变体

  • bert-base-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在小写的英文文本上进行训练而得到.
  • bert-large-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在小写的英文文本上进行训练而得到.
  • bert-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在不区分大小写的英文文本上进行训练而得到.
  • bert-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在不区分大小写的英文文本上进行训练而得到.
  • bert-base-multilingual-uncased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在小写的102种语言文本上进行训练而得到.
  • bert-large-multilingual-uncased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共340M参数量, 在小写的102种语言文本上进行训练而得到.
  • bert-base-chinese: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在简体和繁体中文文本上进行训练而得到.

1.2 GPT

  • openai-gpt: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 由OpenAI在英文语料上进行训练而得到.

1.3 GPT-2及其变体

  • gpt2: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共117M参数量, 在OpenAI GPT-2英文语料上进行训练而得到.
  • gpt2-xl: 编码器具有48个隐层, 输出1600维张量, 25个自注意力头, 共1558M参数量, 在大型的OpenAI GPT-2英文语料上进行训练而得到.

1.4 Transformer-XL

  • transfo-xl-wt103: 编码器具有18个隐层, 输出1024维张量, 16个自注意力头, 共257M参数量, 在wikitext-103英文语料进行训练而得到.

1.5 XLNet及其变体

  • xlnet-base-cased: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共110M参数量, 在英文语料上进行训练而得到.
  • xlnet-large-cased: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共240参数量, 在英文语料上进行训练而得到.

1.6 XLM

  • xlm-mlm-en-2048: 编码器具有12个隐层, 输出2048维张量, 16个自注意力头, 在英文文本上进行训练而得到.

1.7 RoBERTa及其变体

  • roberta-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共125M参数量, 在英文文本上进行训练而得到.
  • roberta-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共355M参数量, 在英文文本上进行训练而得到.

1.8 DistilBERT及其变体

  • distilbert-base-uncased: 基于bert-base-uncased的蒸馏(压缩)模型, 编码器具有6个隐层, 输出768维张量, 12个自注意力头, 共66M参数量.
  • distilbert-base-multilingual-cased: 基于bert-base-multilingual-uncased的蒸馏(压缩)模型, 编码器具有6个隐层, 输出768维张量, 12个自注意力头, 共66M参数量.

1.9 ALBERT

  • albert-base-v1: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共125M参数量, 在英文文本上进行训练而得到.
  • albert-base-v2: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共125M参数量, 在英文文本上进行训练而得到, 相比v1使用了更多的数据量, 花费更长的训练时间.

1.10 T5及其变体

  • t5-small: 编码器具有6个隐层, 输出512维张量, 8个自注意力头, 共60M参数量, 在C4语料上进行训练而得到.
  • t5-base: 编码器具有12个隐层, 输出768维张量, 12个自注意力头, 共220M参数量, 在C4语料上进行训练而得到.
  • t5-large: 编码器具有24个隐层, 输出1024维张量, 16个自注意力头, 共770M参数量, 在C4语料上进行训练而得到.

1.11 XLM-RoBERTa及其变体

  • xlm-roberta-base: 编码器具有12个隐层, 输出768维张量, 8个自注意力头, 共125M参数量, 在2.5TB的100种语言文本上进行训练而得到.
  • xlm-roberta-large: 编码器具有24个隐层, 输出1027维张量, 16个自注意力头, 共355M参数量, 在2.5TB的100种语言文本上进行训练而得到.

预训练模型说明

  • 所有上述预训练模型及其变体都是以transformer为基础,只是在模型结构如神经元连接方式,编码器隐层数,多头注意力的头数等发生改变,这些改变方式的大部分依据都是由在标准数据集上的表现而定,因此对于使用者而言,不需要从理论上深度探究这些预训练模型的结构设计的优劣,只需要在自己处理的目标数据上,尽量遍历所有可用的模型对比得到最优效果即可。

加载和使用预训练模型

  • 加载和使用预训练模型的工具
    • 在这里使用transformers工具进行模型的加载和使用。
    • 这些预训练模型由世界先进的NLP研发团队huggingface提供。
  • 加载和使用预训练模型的步骤
    • 第一步:确定需要加载的预训练模型并安装依赖包。
    • 第二步:加载预训练模型的映射器tokenizer。
    • 第三步:加载带/不带头的预训练模型。
      • 这里的'头'是指模型的任务输出层,选择加载不带头的模型,相当于使用模型对输入文本进行特征表示。
      • 选择加载带头的模型时,有三种类型的'头'可供选择,AutoModelForMaskedLM (语言模型头),AutoModelForSequenceClassification (分类模型头), AutoModelForQuestionAnswering (问答模型头)。
      • 不同类型的'头',可以使预训练模型输出指定的张量维度。如使用'分类模型头',则输出尺寸为(1,2)的张量,用于进行分类任务判定结果。
  • 第四步:使用模型获得输出结果。
    • 使用不带头的模型进行输出
    • 使用带有语言模型头的模型进行输出
    • 使用带有分类模型头的模型进行输出
    • 使用带有问答模型头的模型进行输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01-React入门

React概述 react是什么? React用于构建用户界面的JS库。是一个将数据渲染为HTML视图的开源JS库。 为什么学? 1.原生JS操作DOM繁琐,效率低 2.使用JS直接操作DOM,浏览器会进行大量的重绘重排 3.原生JS没有组件化编码方案,代码…

2024 王道考研-数据结构

第二章 线性表算法题(线性表的顺序表示) 二、综合应用题 01.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位 置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 算法思想:搜索整个顺序表&#xf…

Python之PyMySQL操作详解

一、PyMysql简介 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 二、PyMySQL操作详解 2.1 PyMySQL安装 pip install pymysql2.2 PyMySQL应用 2.2.1 基本使用 # codingut…

【Leetcode】 213. 打家劫舍 II ?

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚…

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例

标题sql server2014如何添加多个实例 前提(已安装sql server2014 且已有默认实例MSSQLSERVER) 添加新的实例 其实就是根据安装步骤再安装一次(区别在过程中说明) 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

介绍 Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 版本 Apache Shiro 1.2.4及以前版本中 原理 不安全的配置 默认账户在里面 Apache Shiro 1.2.4及以前版本中&#x…

C++学习之强制类型转换

强制类型转换运算符 带着三个疑问阅读: 出现的背景是什么?何时使用?如何使用? MSDN . 强制转换运算符 C中的四种强制类型转换符详解 static_cast (1) 使用场景 在基本数据类型之间转换,如把 int 转换为 char&#…

pkg-config使用

作用:pkg-config是linux中的应用程序,可以方便导入第三方模块的头文件和库文件。很多模块是支持pkg-config的,这些模块(如dpdk)在编译安装后会生成**.pc**后缀的文件,pkg-config通过pc文件可以知道模块的头…

Python 数组和列表:创建、访问、添加和删除数组元素

Python 没有内置支持数组,但可以使用 Python 列表来代替。 数组 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库。数组用于在一个变量中存储多个值: 示例&#xff0…

大数据学习(17)-mapreduce task详解

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

重生奇迹mu宠物带来不一样的体验

重生奇迹mu宠物有什么作用? 全新版本中更是推出了各种宠物,在玩游戏时还可以带着宠物,一起疯狂的刷怪等等,可以为玩家带来非常不错的游戏体验,那么下面就来给大家说说各种宠物适合做什么事情。 1、强化恶魔适合刷怪 …

java头歌-java中的异常

文章目录 第一关第二关第三关第四关 第一关 第二关 题目要求: public static void main(String[] args) {Scanner sc new Scanner(System.in);try {int num1 sc.nextInt();int num2 sc.nextInt();/********* Begin *********/System.out.println(num1/num2);}…

【SA8295P 源码分析 (四)】21 - Android GVM 虚拟网络 vlan 配置

【SA8295P 源码分析】21 - Android GVM 虚拟网络 vlan 配置 一、Android GVM 虚拟网络 vlan 配置二、网络验证三、网桥配置:让 Android GVM 可以通过 emac 访问外网四、兼容前后排车机:使用 QNX 环境变量进行区分五、动态修改 mac 地址六、VLAN原理系列文章汇总见:《【SA829…

Redis | 在Java中操作Redis

在Java中操作Redis: 第一步: pom.xml文件中导入maven依赖第二步: 在application.yml配置文件中 配置Redis数据源第三步: 编写RedisConfiguration配置类,创建RedisTemplate对象第四步: 通过RedisTemplate对象操作Redis / Redis中的数据4.1 操作“字符串St…

CNN——卷积神经网络

文章目录 多层感知机(MLP,Multilayer Perceptron)神经网络定义MLP与神经网络的异同相同之处:不同之处:总结 为什么要使用神经网络CNN卷积层:池化层:全连接层: 卷积神经网络的优势pad…

Python---while循环的执行流程 解释

使用Debug调试工具&#xff0c;查看while循环的运行流程 代码 # ① 初始化计数器 i 1 # ② 编写循环条件&#xff08;判断计数器是否达到了100&#xff09; while i < 100:print(f{i 1}、老婆大人&#xff0c;我错了)# ③ 在循环体内部更新计数器i 1 ① 代码都是顺序执行…

基于LSTM的天气预测 - 时间序列预测 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…

如何为 Elasticsearch 创建自定义连接器

了解如何为 Elasticsearch 创建自定义连接器以简化数据摄取过程。 作者&#xff1a;JEDR BLASZYK Elasticsearch 拥有一个摄取工具库&#xff0c;可以从多个来源获取数据。 但是&#xff0c;有时你的数据源可能与 Elastic 现有的提取工具不兼容。 在这种情况下&#xff0c;你可…

【深蓝学院】手写VIO第7章--VINS初始化和VIO系统--作业

0. 内容 1. T1 1. 下载EuRoc数据集&#xff08;optional&#xff09; 因为作业主要使用Ch2生成的数据&#xff0c;所以这一步也是可选的&#xff0c;但是为了整个系统的bring up&#xff0c;可以先用EuRoc数据集跑起来。 下载EuRoc数据集&#xff0c;SLAM相关数据集链接 2.…