Huggingface基本使用

本文介绍了如何使用transformers库中的BertTokenizer进行文本编码,包括基本的编码、增强编码、批量编码以及字典操作。同时,展示了datasets库的使用,如加载数据、数据处理、保存和加载数据集,以及数据集的各种操作。最后,讨论了如何利用datasets库的metrics模块进行评价指标的计算。
摘要由CSDN通过智能技术生成

目录

0.install 

1.tokenizer

2.datasets

3.metrics


0.install 

!pip install transformers
!pip install datasets

1.tokenizer

from transformers import BertTokenizer

#加载预训练字典和分词方法
tokenizer = BertTokenizer.from_pretrained(
    pretrained_model_name_or_path='bert-large-uncased',
    cache_dir=None,
    force_download=False,
)

sents = [
    'If I could,I surely would.',
    'May there be enough clouds in your life to make a beautiful sunset.',
    'The worst way to miss someone is to be sitting right beside them knowing you can not have them.',
    'No pains,no gains.',
    'Life is like a box of chocolates, you never know what you are going to get.',
]

tokenizer, sents

#编码两个句子
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,
)
print(out)
tokenizer.decode(out)

#增强的编码函数
out = tokenizer.encode_plus(
    text=sents[0],
    text_pair=sents[1],

    #当句子长度大于max_length时,截断
    truncation=True,

    #一律补零到max_length长度
    padding='max_length',
    max_length=30,
    add_special_tokens=True,

    #可取值tf,pt,np,默认为返回list
    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,

    #返回offset_mapping 标识每个词的起止位置,这个参数只能BertTokenizerFast使用
    #return_offsets_mapping=True,

    #返回length 标识长度
    return_length=True,
)

#input_ids 就是编码后的词
#token_type_ids 第一个句子和特殊符号的位置是0,第二个句子的位置是1
#special_tokens_mask 特殊符号的位置是1,其他位置是0
#attention_mask pad的位置是0,其他位置是1
#length 返回句子长度
for k, v in out.items():
    print(k, ':', v)

tokenizer.decode(out['input_ids'])

#批量编码句子
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,
    #可取值tf,pt,np,默认为返回list
    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,
    #返回offset_mapping 标识每个词的起止位置,这个参数只能BertTokenizerFast使用
    #return_offsets_mapping=True,
    #返回length 标识长度
    return_length=True,
)
#input_ids 就是编码后的词
#token_type_ids 第一个句子和特殊符号的位置是0,第二个句子的位置是1
#special_tokens_mask 特殊符号的位置是1,其他位置是0
#attention_mask pad的位置是0,其他位置是1
#length 返回句子长度
for k, v in out.items():
    print(k, ':', v)
tokenizer.decode(out['input_ids'][0]), tokenizer.decode(out['input_ids'][1])

#批量编码成对的句子
out = tokenizer.batch_encode_plus(
    batch_text_or_text_pairs=[(sents[0], sents[1]), (sents[2], sents[3])],
    add_special_tokens=True,

    #当句子长度大于max_length时,截断
    truncation=True,

    #一律补零到max_length长度
    padding='max_length',
    max_length=30,

    #可取值tf,pt,np,默认为返回list
    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,

    #返回offset_mapping 标识每个词的起止位置,这个参数只能BertTokenizerFast使用
    #return_offsets_mapping=True,

    #返回length 标识长度
    return_length=True,
)

#input_ids 就是编码后的词
#token_type_ids 第一个句子和特殊符号的位置是0,第二个句子的位置是1
#special_tokens_mask 特殊符号的位置是1,其他位置是0
#attention_mask pad的位置是0,其他位置是1
#length 返回句子长度
for k, v in out.items():
    print(k, ':', v)

tokenizer.decode(out['input_ids'][0])

#获取字典
zidian = tokenizer.get_vocab()
type(zidian), len(zidian), 'love' in zidian,

(dict, 30522, True)

2.datasets

from datasets import load_dataset
#加载数据
#注意:如果你的网络不允许你执行这段的代码,则直接运行【从磁盘加载数据】即可,我已经给你准备了本地化的数据文件
#转载自seamew/ChnSentiCorp
dataset = load_dataset(path='lansinuote/ChnSentiCorp')
dataset

#保存数据集到磁盘
dataset.save_to_disk(dataset_dict_path='./data/ChnSentiCorp')
#从磁盘加载数据
from datasets import load_from_disk
dataset = load_from_disk('./data/ChnSentiCorp')
#取出训练集
dataset = dataset['train']
#查看一个数据
dataset[3]

 {'text': '1.接电源没有几分钟,电源适配器热的不行. 2.摄像头用不起来. 3.机盖的钢琴漆,手不能摸,一摸一个印. 4.硬盘分区不好办.', 'label': 0}

#排序
#未排序的label是乱序的
print(dataset['label'][:10])
#排序之后label有序了
sorted_dataset = dataset.sort('label')
print(sorted_dataset['label'][:10])
print(sorted_dataset['label'][-10:])

 [1, 1, 0, 0, 1, 0, 0, 0, 1, 1] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

#shuffle
#打乱顺序
shuffled_dataset = sorted_dataset.shuffle(seed=40)
shuffled_dataset['label'][:10]

[1, 1, 1, 0, 0, 1, 1, 1, 1, 1]

#select
select=dataset.select([0, 10, 20, 30, 40, 50])
select,select[2]

#filter
def f(data):
    return data['text'].startswith('使用')

start_with_ar = dataset.filter(f)
len(start_with_ar), start_with_ar['text']

#train_test_split, 切分训练集和测试集
dataset.train_test_split(test_size=0.3)
#shard
#把数据切分到4个桶中,均匀分配
dataset.shard(num_shards=4, index=0)
#rename_column
dataset.rename_column('text', 'textA')

Dataset({ features: ['textA', 'label'], num_rows: 9600 }) 

#map
def f(data):
    data['text'] = 'My sentence: ' + data['text']
    return data

datatset_map = dataset.map(f)
datatset_map['text'][:5]

#set_format
dataset.set_format(type='torch', columns=['label'])
dataset[0]

 {'label': tensor(1)}

#导出为csv格式 
dataset = load_dataset(path='lansinuote/ChnSentiCorp', split='train')
dataset.to_csv(path_or_buf='./data/ChnSentiCorp.csv')

#加载csv格式数据
csv_dataset = load_dataset(path='csv',data_files='./data/ChnSentiCorp.csv',split='train')
csv_dataset[20]

 {'text': '非常不错,服务很好,位于市中心区,交通方便,不过价格也高!', 'label': 1}

#导出为json格式
dataset = load_dataset(path='lansinuote/ChnSentiCorp', split='train')
dataset.to_json(path_or_buf='./data/ChnSentiCorp.json')

#加载json格式数据
json_dataset = load_dataset(path='json',data_files='./data/ChnSentiCorp.json',split='train')
json_dataset[20]

{'text': '非常不错,服务很好,位于市中心区,交通方便,不过价格也高!', 'label': 1} 

3.metrics

from datasets import list_metrics
#列出评价指标
metrics_list = list_metrics()
len(metrics_list), metrics_list

from datasets import load_metric
#加载一个评价指标
metric = load_metric('glue', 'mrpc')
print(metric.inputs_description)

#计算一个评价指标
prediction = [0,1,0,1,1]  #预测
reference = [0,1,1,1,1]   #参考
final_score = metric.compute(predictions=prediction, references=reference)
final_score

{'accuracy': 0.8, 'f1': 0.8571428571428571}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值