一、迁移学习的概念

1.预训练模型(Pretrained model)

定义: 简单来说别人训练好的模型。一般预训练模型具备复杂的网络模型结构;一般是在大量的语料下训练完成的。

2.微调(Fine-tuning)

定义:一般是对预训练语言模型,进行垂直领域数据的微调,可以将预训练模型的参数全部微调或者部分微调或者不微调,但是一般我们在做任务的时候,会在预训练模型后加入自定义网络,自定义网络模型的参数需要训练。

3.迁移学习的两种方式

① 开箱即用: 当预训练模型的任务和我们要做的任务相似时,可以直接使用预训练模型来解决对应的任务。
② 微调: 进行垂直领域数据的微调,一般在预训练网络模型后,加入自定义网络,自定义网络模型的参数需要训练,但是预训练模型的参数可以全部微调或者部分微调或者不微调。

二、fasttaxt工具介绍

1.作用

作为NLP工程领域常用的工具包, fasttext有两大作用:

① 进行文本分类
② 训练词向量

2.fasttext工具包的优势

在保持较高精度的情况下, 能够快速的进行训练和预测。

原因:
① fasttext工具包中内含的fasttext模型具有十分简单的网络结构。
② 使用fasttext模型训练词向量时使用层次softmax结构, 来提升超多类别下的模型性能。
③ 由于fasttext模型过于简单无法捕捉词序特征, 因此会进行n-gram特征提取以弥补模型缺陷提升精度。

3.安装方法

pip install fasttext

三、fasttext文本分类

1.文本分类介绍

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

2.文本分类种类

① 二分类

文本被分类两个类别中, 往往这两个类别是对立面。

二分类中输出层神经元有两种情况:
Ⅰ:只有一个神经元:该情况使用sigmoid激活函数;输出一个0到1范围的值,根据输出值是否大于0.5,预测正反类,当大于等于0.5是预测为正类,反之为反类;交叉熵损失函数使用二分类交叉熵,形式为
−[y log( p )+(1−y)log(1−p)],其中y是真实值标签(0或1),p是模型预测的属于正类的概率。
Ⅱ:使用两个神经元:通常使用Softmax函数;输出两个加和为1的概率,取最大的概率作为预测结果;交叉熵损失函数使用多分类交叉熵,在这里插入图片描述
其中yi是真实标签的one-hot编码,pi是模型预测的对应类别的概率。

② 单标签多分类

文本被分到多个类别中, 且每条文本只能属于某一个类别(即一个标签)。

③ 多标签多分类

文本被分到多个类别中, 但每条文本可以属于多个类别(即多个标签)。

3.Fasttext模型架构

FastText 模型架构和 Word2Vec 中的 CBOW 模型很类似,,不同之处在于,FastText 预测标签, 而 CBOW 模型预测中间词。
模型架构分为三层:
输入层: 是对文档embedding之后的向量, 包含N-gram特征
隐藏层: 是对输入数据的求和平均
输出层: 是文档对应的label

4.文本分类的过程

第一步: 获取数据
第二步: 训练集与验证集的划分
第三步: 训练模型

import fasttext
# 对分割好的训练集进行训练
model = fasttext.train_supervised('./fasttext_data/cooking.train')

第四步: 使用模型进行预测并评估

result1 = model.predict("Which baking dish is best to bake a banana bread ?")
print(result1)
valid_result = model.test('./fasttext_data/cooking.valid')
print(f'valid_result--》{valid_result}')

第五步: 模型调优
第六步: 模型保存与重加载

# 1.清洗数据后,再进行训练和验证
def dm01_clearn_data():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt')valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'清洗数据后,valid_result--》{valid_result}')# 2 : 增加训练轮次
def dm02_add_epoch():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'增加训练轮次后,valid_result--》{valid_result}')# 3: 改变学习率
def dm03_change_lr():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'改变学习率后,valid_result--》{valid_result}')# 4: 添加ngram
def dm04_add_ngram():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0, wordNgrams=2)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'添加ngram后,valid_result--》{valid_result}')# 5: 改变loss-->层次softmax
def dm05_change_loss():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0, wordNgrams=2,loss='hs')valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'改变loss-->层次softmax后,valid_result--》{valid_result}')# 6:自动寻找最优超参数
def dm06_auto_find_best_param():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt',autotuneValidationFile='./fasttext_data/cooking_pre_valid.txt',autotuneDuration=60)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'自动模型超参数调优之后的模型表现--》{valid_result}')
# 7. 多标签多分类变成多个二分类
def dm07_ova():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=50, lr=0.2, wordNgrams=2, loss='ova')# 在验证集上查看模型的表现valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'修改成ova之后的模型表现--》{valid_result}')	# 模型的保存:model.save_model('cooking_model1.bin')# 模型重加载model = fasttext.load_model('cooking_model1.bin')result1 = model.predict("Why not put knives in the dishwasher?", threshold=0.001, k=-1)print(f'result1--》{result1}')

四、NLP中的常用预训练模型

当下NLP中流行的预训练模型: BERT、GPT 、GPT-2 、Transformer-XL 、XLNet 、RoBERTa 、DistilBERT、 ALBERT。
上述预训练模型及其变体都是以transformer为基础,只是在模型结构如神经元连接方式,编码器隐层数,多头注意力的头数等发生改变,这些改变方式的大部分依据都是由在标准数据集上的表现而定。

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参数量, 在简体和繁体中文文本上进行训练而得到。

2.GPT/GPT-2

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

3.Transformer-XL

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

4.XLNet及其变体

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

5.RoBERTa及其变体

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

6.DistilBERT及其变体

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

7.ALBERT

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

五、Transformers库使用

1.Transformers库介绍

Huggingface Transformers 是基于一个开源基于 transformer 模型结构提供的预训练语言库。它支持 Pytorch,Tensorflow2.0,并且支持两个框架的相互转换。Transformers 提供了NLP领域大量state-of-art的 预训练语言模型结构的模型和调用框架。
框架支持了最新的各种NLP预训练语言模型,使用者可快速的进行模型调用,并且支持模型further pretraining 和 下游任务fine-tuning。

2.Transformers库三层应用结构

· 管道(Pipline)方式:高度集成的极简使用方式,只需要几行代码即可实现一个NLP任务。

· 自动模型(AutoMode)方式:可载入并使用BERTology系列模型。

· 具体模型(SpecificModel)方式:在使用时,需要明确指定具体的模型,并按照每个BERTology系列模型中的特定参数进行调用,该方式相对复杂,但具有较高的灵活度。

自定义下游任务网络模型的作用和实现方式:
在这里插入图片描述

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

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

相关文章

Ubuntu 安装

文章目录硬件准备下载 Ubuntu 镜像创建可启动 USB从 USB 驱动器启动安装 Ubuntu不要忘记更新!用了十多年的笔记本,手边正好有个500G的固态,准备换上。考虑到机器的硬件配置,现在使用windows10实在是有点卡,ubuntu却刚好…

【46】MFC入门到精通——MFC显示实时时间,获取系统当前时间GetCurrentTime()、获取本地时间GetLocalTime()

文章目录1 MFC获取时间方法方法一:获取系统当前时间GetCurrentTime()方法二:获取本地时间GetLocalTime()使用GetTickCount()获取程序运行时间2 MFC显示实时时间 使用方法2.1 获取时间2.2 类向导 添加定时器函数 OnTimer2.3 初始化 设置定时器2.4 定时器函…

Linux717 SWAP扩容;逻辑卷条带化

root192.168.235.20s password:┌────────────────────────────────────────────────────────────────────┐│ • MobaXterm 20.0 • ││ …

人类社会发展过程中的熵增定律

引子研究美国罗斯福新政期间的法案为什么会对美国经济恢复起作用?与千金买马骨和移木赏金之间的区别与联系?以下为豆包 AI回答一、罗斯福新政法案对美国经济起作用的原因罗斯福新政(1933-1939年)通过一系列政策应对大萧条&#x…

Spring-AI系列-入门篇-核心概念、组件和生产要素

原文-Spring AI知识库,欢迎大家评论互动 师父领进门,修行靠自己。 Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design an…

从浏览器到服务器:TCP 段的网络传输之旅

本文以简化的网络架构为例,详细介绍了当你在浏览器中输入网址(例如www.google.com)并按下回车键后,TCP段的完整传输过程。我们将探讨DNS解析、ARP、TCP/IP封装、PAT和路由如何协同工作,将数据从个人电脑通过局域网和广…

HCIE - 云计算拿下后的职业选择如何规划?

Hello!大家好,小编是一名专注 IT 领域的资深探索家。我们聊聊HCIE - 云计算,这个认证作为华为认证体系中云计算领域的专家级认证,标志着持有者具备企业级云架构设计、复杂云平台运维及跨场景技术落地能力。但认证本身只是职业进阶…

1-创建Vue3项目

创建Vue3项目前提 已安装 18.3 或更高版本的 Node.js vue 官网 https://vuejs.org/ 创建一个 Vue 应用 ① 新建项目目录,使用 VSCode 打开 VSCode 可安装 Vue-Official 插件协助开发 ② 执行 create vue 指令创建 vue 应用 npm create vuelatest这一指令将…

Codex,Copilot 是什么

Codex是什么 Codex 是 OpenAI 研发的一款专注于代码生成的大型语言模型,它可以根据自然语言描述自动编写程序代码,在软件开发、自动化测试等领域展现出了强大的应用潜力。下面为你详细介绍: 1. 核心功能 代码生成:Codex 能够依据自然语言指令生成代码,像函数、类或者完整…

Typecho插件开发:自定义表单验证规则addRule实战指南

文章目录 Typecho表单验证进阶:为插件和主题添加自定义addRule验证规则 引言 一、Typecho表单验证基础 1.1 Typecho表单系统概述 1.2 addRule方法解析 二、自定义验证规则实现 2.1 创建自定义验证类 2.2 注册自定义验证规则 2.3 使用自定义验证规则 三、高级验证场景实现 3.1 …

数据分布是如何影响目标检测精度的

文章目录一、研究背景与目标模型效果提升数据集优化二、研究问题明细各方向的关联性与核心逻辑1. 高质量数据集的高效筛选与主动学习应用2. 基于推理结果的数据补充与增强方向优化3. 多类别场景下目标尺度与模型精度的关联性4. 损失函数与数据增强对精度的量化影响5. 目标类型专…

Python 网络爬虫 —— 代理服务器

一、会话(Session)(一)核心逻辑HTTP 本身无记忆,每次请求独立。会话(Session) 就是为解决这问题,让客户端(浏览器)和服务器 “记住” 交互状态(比…

Vue在线预览Excel和Docx格式文件

前提:本次示例基于Vue2.x,所用插件为Vue-Office。 一、Vue-Office 插件简介 Vue-Office 是一个一站式解决方案,支持多种 Office 文件格式的在线预览,包括: Word(.docx)Excel(.xlsx、…

提升(Boosting)及 Python 示例

咱们结合这张图,把 “提升” 想象成 “做错题本 请老师补课” 的过程:第一波数据(最上面的圆圈):“第一次作业”假设你第一次做 100 道数学题(图中圆圈里的绿点白点代表不同的题),做…

【生产实践】Linux中NAS挂载丢失后提示“过旧的文件句柄”错误解决

太长不看版: 问题:nas挂载在系统里掉了,使用df或ls访问目录提示过旧的文件句柄解决过程: 和机房联系,发现NAS服务器重启了重新执行mount发现挂不上先umount掉当前挂载,再重新执行mount命令问题解决 umount …

JUnit4

JUnit4 介绍JUnit 是 Java 编程语言的单元测试框架,用于编写和运行可重复的自动化测试。JUnit 特点:JUnit 是一个开放的资源框架,用于编写和运行测试。提供注解来识别测试方法。提供断言来测试预期结果。JUnit 测试允许你编写代码更快&#x…

Python-TCP编程-UDP编程-SocketServer-IO各种概念及多路复用-asyncio-学习笔记

序 欠4前年的一份笔记 ,献给今后的自己。 网络编程 Socket介绍 Socket套接字 Python中提供socket.py标准库,非常底层的接口库。 Socket是一种通用的网络编程接口,和网络层次没有一一对应的关系。 协议族 AF表示Address Family,用于…

Mybatis-开发一个类似mybatisplus的mybatis扩展,该怎么入手?

开发一个类似mybatisplus的mybatis扩展,该怎么入手? 要开发一个类似于 MyBatis-Plus 的 MyBatis 扩展框架,你需要从以下几个核心方面入手,逐步构建出一个功能完整、易用性强、兼容性好的增强型 MyBatis 框架。🧱 一、整…

深入了解linux系统—— 信号的捕捉

前言 信号从产生到处理,可以分为信号产生、信号保存、信号捕捉三个阶段;了解了信号产生和保存,现在来深入了解信号捕捉。 信号捕捉 对于1-31号普通信号,进程可以立即处理,也可以不立即处理而是在合适的时候处理&#x…

twikitFKS: 基于 twikit 2.3.1 的改进版本

twikitFKS: 基于 twikit 2.3.1 的改进版本 项目概述 关于 twikit twikit 是一个优秀的 Twitter API 爬虫库,它的核心优势在于无需 API Key即可访问 Twitter 功能。通过网页爬虫技术,twikit 实现了: 发布推文和媒体内容搜索推文和用户获取…