调试运行 Bert-Chinese-Text-Classification-Pytorch

1 数据集准备

  1. 获取train.txt文件数据: with open(path, 'r', encoding='UTF-8') as f:
  2. 获取每一行数据:for line in tqdm(f):         lin = line.strip()
  3. 保存为文本和标签: content, label = lin.split('\t')
  4. 分词,文本划分为token: config.tokenizer.tokenize(content)可以理解为 RobertaTokenizer.from_pretrained(self.bert_path).tokenize(content)
  5. 为token 拼接[CLS],是roberta用作分类任务必须需要的一个字符,[CLS]就是classification的意思,可以理解为用于下游分类的任务;

        主要应用于两类下游任务:

        (1)单文本分类任务: 对于文本分类任务,BERT模型在文本前插入一个[CLS]符号,并将与该符号对应的输出向量作为整篇文本的语义表示,用于文本分类 -- 与本文中已有的其他字词相比,这个无明显语义信息的符号会更“公平”的融合文本中各个字/词的语义信息;

        (2)语句对分类任务: 该任务的实际应用场景包括:问答(判断一个问题与一个答案是否匹配)、语句匹配(两句话是否表达同一个意思)等。 -- BERT模型除了添加[CLS]符号并将对应的输出作为文本的语义表示,还对输入两句话用一个[SEP]符号作分割,并分别对两句话附加两个不同的文本向量以作区分;

        6. 通过token获得token_ids:token_ids = config.tokenizer.convert_tokens_to_ids(token) -- 目的: 为了输入过程中的进一步输入进入bert进行位置embedding;

        7. 对不足的文本进行pad补充:

                (1) token的长度小于pad_size超参,首先对mask进行拼接,拼接为前边token_ids长度个数的1和最后补齐pad_size的0, token_ids的后半部分没有补东西,现在也把token_ids的最后补上0(vocab.txt中的第0位是[PAD]);

                (2)如果token的长度已经等于或超过了pad_size超参了,则mask设置为pad_size长度的1,同时把token_ids进行截取;

        8. train_data, dev_data, test_data整体数据处理好:vocab.txt中的角标、类别int类型,文本长度,一个待使用的mask;

        9. 对数据集划分batch,每个batch包含数据:(x, seq_len, mask), y, x是vocab.txt中的角标,y是label, 都是torch.LongTensor类型;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值