【博学谷学习记录】超强总结,用心分享丨人工智能 自然语言处理 迁移学习部分笔记

FastText

作用

  • 进行文本分类
  • 训练词向量

优势

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

安装

pip install fasttext

文本分类

种类
  • 二分类
  • 单标签多分类
  • 多标签多分类
过程
  1. 第一步: 获取数据
  2. 第二步: 训练集与验证集的划分
  3. 第三步: 训练模型
  4. 第四步: 使用模型进行预测并评估
  5. 第五步: 模型调优
    • 思路:
    • 数据再次清洗
    • 增加训练轮数
    • 调整学习率
    • 增加n-gram特征
    • 调整损失计算方式
    • 自动参数调优
  6. 第六步: 模型保存与重加载

训练词向量

过程:

  1. 获取数据
  2. 训练词向量
  3. 模型超参数设定
  4. 模型效果检验
  5. 模型的保存与重加载

方法:

# 在训练词向量过程中, 我们可以设定很多常用超参数来调节我们的模型效果, 如:
# 无监督训练模式: 'skipgram' 或者 'cbow', 默认为'skipgram', 在实践中,skipgram模式在利用子词方面比cbow更好.
# 词嵌入维度dim: 默认为100, 但随着语料库的增大, 词嵌入的维度往往也要更大.
# 数据循环次数epoch: 默认为5, 但当你的数据集足够大, 可能不需要那么多次.
# 学习率lr: 默认为0.05, 根据经验, 建议选择[0.01,1]范围内.
# 使用的线程数thread: 默认为12个线程, 一般建议和你的cpu核数相同.

model = fasttext.train_unsupervised('data/fil9', "cbow", dim=300, epoch=1, lr=0.1, thread=8)

词向量迁移

可迁移词向量

  • fasttext提供了157种语言的在CommonCrawl和Wikipedia语料上进行训练的可迁移词向量模型, 它们采用CBOW模式进行训练, 词向量维度为300维. 可通过该地址查看具体语言词向量模型: https://fasttext.cc/docs/en/crawl-vectors.html
  • fasttext提供了294种语言的在Wikipedia语料上进行训练的可迁移词向量模型, 它们采用skipgram模式进行训练, 词向量维度同样是300维. 可通过该地址查看具体语言词向量模型: https://fasttext.cc/docs/en/pretrained-vectors.html

迁移学习

预训练模型(Pretrained model)
微调(Fine-tuning)
微调脚本(Fine-tuning script)
两种迁移方式:

  • 直接使用预训练模型(适合普适任务)
  • 预训练模型+微调

标准数据集

GLUE

  • CoLA 数据集
  • SST-2 数据集
  • MRPC 数据集
  • STS-B 数据集
  • QQP 数据集
  • MNLI 数据集
  • SNLI 数据集
  • QNLI 数据集
  • RTE 数据集
  • WNLI 数据集
  • diagnostics数据集(官方未完善)

预训练模型

BERT
GPT
GPT-2
Transformer-XL
XLNet
XLM
RoBERTa
DistilBERT
ALBERT
T5
XLM-RoBERTa

加载和使用预训练模型的步骤
  1. 确定需要加载的预训练模型并安装依赖包.
  2. 加载预训练模型的映射器tokenizer.
  3. 加载带/不带头的预训练模型.
  4. 使用模型获得输出结果.

Example

import torch
from transformers import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForSequenceClassification, \
    AutoModelForQuestionAnswering

from transformers import logging
logging.set_verbosity_error()

mirror = 'https://mirrors.tuna.tsinghua.edu.cn/help/hugging-face-models/'

def load_AutoQA():

    # 1 加载 tokenizer
    # 加载的预训练模型的名字
    model_name = 'bert-base-chinese'
    tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese",mirror=mirror)

    # 2 加载model
    qa_model = AutoModelForQuestionAnswering.from_pretrained(model_name)

    # 3 使用
    # 使用带有问答模型头的模型进行输出时, 需要使输入的形式为句子对
    # 第一条句子是对客观事物的陈述
    # 第二条句子是针对第一条句子提出的问题
    # 问答模型最终将得到两个张量,
    # 每个张量中最大值对应索引的分别代表答案的在文本中的起始位置和终止位置
    input_text1 = "我家的小狗是黑色的"
    input_text2 = "我家的小狗是什么颜色的呢?"

    # 映射两个句子
    indexed_tokens = tokenizer.encode(input_text1, input_text2)
    print("句子对的indexed_tokens:", indexed_tokens)

    # 输出结果: [101, 2769, 2157, 4638, 2207, 4318, 3221, 7946, 5682, 4638, 102, 2769, 2157, 4638, 2207, 4318, 3221, 784, 720, 7582, 5682, 4638, 1450, 136, 102]
    #
    # 用0,1来区分第一条和第二条句子
    segments_ids = [0] * 11 + [1] * 14

    # 转化张量形式
    segments_tensors = torch.tensor([segments_ids])
    tokens_tensor = torch.tensor([indexed_tokens])

    # 使用带有问答模型头的预训练模型获得结果
    with torch.no_grad():
        start_logits, end_logits = qa_model(tokens_tensor, token_type_ids=segments_tensors, return_dict=False)

    print("带问答模型头的模型输出结果:", (start_logits, end_logits))
    print("带问答模型头的模型输出结果的尺寸:", (start_logits.shape, end_logits.shape))  # (torch.Size([1, 25]), torch.Size([1, 25]))



if __name__ == '__main__':
    load_AutoQA()

输出在这里插入图片描述

心得:已经了解些基本概念,还需要实践加深印象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏晓星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值