字符级中文Albert语言模型(pytorch)预训练

摘要

网上所公布的中文预训练模型基本采用了词级别的形式,表现出来就是在输入预处理阶段,中文先被分词,然后嵌入为向量。对于领域类的文本处理,分词的预处理反而依赖分词工具,对于术语词语存在被意外切分的情况,直接破坏原有语义。因此曾经在研究生期间,针对领域类的自然语言处理,尝试用字符级别的形式训练Albert语言模型,下游任务指标也有一定的提升。
本文将以字符级别对Albert语言模型进行预训练,并进行应用。

模型准备

本文的albert模型使用如下命令进行下载:

git clone https://github.com/lonePatient/albert_pytorch

然后安装好必要的依赖。

(新的模型不需要了)停用分词预处理

对项目中的model/tokenization_albert.py文件的convert_by_vocab函数,直接改为:

def convert_by_vocab(vocab,itmes):
	if '[UNK]' in vocab:#字符转换成id
	      return vocab.get(items,vocab['[UNK]'])
  else:#id转换成字符
	      return vocab[items]

语料、字典准备

生成字典

第一步需要自己准备中文语料,然后处理语料,先生成字典:

#添加必需的'[CLS]'、'[SEP]'和100个保留字符(用于后期根据需要扩展)
vocab = ['[CLS]'] + ['[unused{}]'.format(i) for i in range(100)]+['[SEP]','[UNK]']
with open('xxxx.txt','r',encoding='utf8') as f:
	vocab += list(set(f.read())
	#可以适当根据需要对低频字符进行剔除
	with open('vocab.txt','w',encoding='utf8') as vocabFile:
		vocabFile.write('\n'.join(vocab))

语料预处理

python prepare_lm_data_mask.py --data_dir=dataset --vocab_path=vocab.txt  --output_dir=ouputs --do_data
#data_dir为数据目录,其中corpus目录存放原始语料文本,train目录为生成的用于预训练的数据
#vocab_path
#file_num
#output_dir
#do_data

你可能感兴趣的:(NLP,语言模型,python,nlp,语言模型)