• huggingface加载预训练模型部分API笔记


    1.加载预训练模型的词表和tokenizer

    # huggingface使用
    from transformers import BertTokenizer
    
    # 加载预训练字典和分词方法,本地路径
    tokenizer = BertTokenizer.from_pretrained(
        pretrained_model_name_or_path='E:/bert-base-chinese',
        cache_dir=None,
        force_download=False,
    )
    
    sents = [
        '选择珠江花园的原因就是方便。',
        '笔记本的键盘确实爽。',
        '房间太小。其它都一般。',
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.使用预训练语言模型来编码句子

    # 编码两个句子
    out = tokenizer.encode(
        text=sents[0],
        text_pair=sents[1],  # 一次编码一个句子对
    
        # 当句子长度大于max_length时,截断
        truncation=True,
    
        # 一律补pad到max_length的长度
        padding='max_length',
        add_special_tokens=True,
        max_length=30,
        return_tensors=None,  # 不指定返回的数据类型,默认是list类型
    )
    #print(out)
    
    print(tokenizer.decode(out))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.批量编码句子

    #  批量编码句子
    out = tokenizer.batch_encode_plus(
        batch_text_or_text_pairs=[sents[0],sents[1]],
        add_special_tokens=True,
        # 句子长度大于max_length时,截断
        truncation=True,
        # 一律补零到max_length的长度
        padding='max_length',
        max_length=15,
        # 返回值类型
        return_tensors=None,
        # 返回token_type_ids
        return_token_type_ids=True,
        # 返回attention_mask
        return_attention_mask=True,
        # 返回special_tokens_mask特殊符号标识
        return_special_tokens_mask=True,
        # 返回length标识长度
        return_length=True,
    )
    
    for k,v in out.items():
        print(k, ':', v)
    
    #  一次编码多条句子
    print(tokenizer.decode(out['input_ids'][0]))
    print(tokenizer.decode(out['input_ids'][1]))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4.预训练语言模型的词表操作:增加新词、增加新符号

    # 获取tokenizer中的字典,也可以说是词表
    zidian = tokenizer.get_vocab()
    
    print('月光' in zidian)
    
    # 向词表中添加新词,“月光”被编码为一个token
    tokenizer.add_tokens(new_tokens=['月光'])
    
    # 向词表中添加新符号
    tokenizer.add_special_tokens({'eos_token': '[EOS'})
    
    zidian = tokenizer.get_vocab()
    print('月光' in zidian)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.dataset的API

    from datasets import load_dataset
    
    # 加载csv格式数据
    csv_dataset = load_dataset(
        path='csv',
        data_files='./data/ChnSentiCorp.csv',
        split='train'
    )
    print(csv_dataset[2])
    
    
    # 加载json格式数据
    json_dataset = load_dataset(
        path='json',
        data_files='./data/ChnSentiCorp.json',
        split='train'
    )
    print(json_dataset[2])
    
    
    # 从磁盘加载数据
    from datasets import load_from_disk
    # 参数是文件夹路径
    dataset = load_from_disk('./data/ChnSentiCorp/train')
    print(dataset)
    # datasets的排序
    sorted_dataset = dataset.sort('label')
    print(sorted_dataset['label'][:10])
    print(sorted_dataset['label'][-10:])
    # dataset的打乱
    shffled_dataset = sorted_dataset.shuffle(seed=42)
    print(shffled_dataset['label'][:10])
    
    # dataset的选择
    print(dataset.select([0,10,20,30,40,50]))
    
    # dataset的过滤,参数是一个定义的函数
    def f(data):
        return data['text'].startswith('选择')
    start_with_ar = dataset.filter(f)
    print(start_with_ar['text'])
    
    
    # # dataset的切分训练集和测试集
    dataset.train_test_split(test_size=0.1)
    # dataset把数据均匀分配到桶中,取第index份
    dataset.shard(num_shards=4, index=0)
    
    
    # dataset重命名列
    dataset.rename_column('text','textA')
    # 移除列
    dataset.remove_columns(['text'])
    # 列数据格式转化
    dataset.set_format(type='torch', columns=['label'])
    
    
    # dataset中的map函数
    def f(data):
        data['text'] = 'My sentence:' + data['text']
    dataset_map = dataset.map(f)
    
    dataset_map['text'][:5]
    
    # 把数据保存到磁盘上
    dataset.save('路径')
    
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
  • 相关阅读:
    我的创作纪念日
    【C++】linux下的gdb程序调试
    【libevent】异步UDP
    【算法训练营】 - ①① 暴力递归
    JAVA并发编程--4.3理解CountDownLatch
    [python 刷题] 217 Contains Duplicate
    分享一波Redis常见面试题
    金仓数据库兼容Oracle exp/imp的导出导入工具手册(3. exp/imp工具介绍)
    【深度学习】PyTorch框架(3):优化与初始化
    个人博客系统的设计与实现
  • 原文地址:https://blog.csdn.net/weixin_44021274/article/details/133323926