随机删除:随机删除文本中的N个词汇。
python3 code/augment.py --input=content.txt --output=content_aug.txt --num_aug=3 --alpha=0.05EDA输入 我们需要使用以上命令的时候,这里需要将自己的数据变换成EDA输入(即上面命令的content.txt)的形式,我这边写了一个df转成输入的txt的python函数。
import pandas as pd def transfer_input_data(df_small,content = 'content',label = 'result',output = 'tag.txt'): """将输入数据转成eda输入的形式label+\t+sentence""" df_small.reset_index(inplace = True) with open(output,'w',encoding='utf8') as file: for i in range(len(df_small)): label_i = df_small.loc[i,label] doc_i = df_small.loc[i,content] line = str(label_i) + '\t' + doc_i + '\n' file.write(line) print('write completed!')EDA输出 我这边将EDA输出的txt(即上面命令的content_aug.txt)转成了df,代码如下:
def transfer_argumentedTxt2csv(argument_txt,content = 'content'): # 将eda生成的增强后的数据转成df label = [] sentence = [] with open(argument_txt, 'r', encoding='utf8') as file: lines = file.readlines() for line in lines: label_i, sent_i = line.split('\t') label.append(label_i) sent_i = sent_i.replace(' ', '') sent_i = sent_i.replace('\n', '') sentence.append(sent_i) df = pd.DataFrame({content:sentence,'result':label}) return df三. NER任务的数据增强
数据处理
整片文章的亮点其实是在数据处理的过程,作者很有意思的将BIOSE标签挪到每个字的前面,当然这里对O标签对应的字不做处理。这样就能将字和标签一同训练,从而很好的拿到标签和字前后呼应的高概率标签和字。
#!/bin/bash input_dir_path=$1 model_dir_path=$2 # 堆代码 duidaima.com # 1. 标注数据线性化 cd tools python3 preprocess.py --train_file ../$input_dir_path/train.txt \ --test_file ../$input_dir_path/test.txt --dev_file ../$input_dir_path/val.txt \ --vocab_size 30000 # 2. 训练语言模型 cd ../lstm-lm python3 train.py --train_file ../tools/train.lin.txt \ --valid_file ../tools/val.lin.txt --model_file ../$model_dir_path/model.pt \ --emb_dim 300 --rnn_size 512 --gpuid 0 --epochs 300daga_generate.sh脚本:
#!/bin/bash output_dir_path=$1 model_dir_path=$2 gen_sentence_num=$3 # 1. 数据生成 cd lstm-lm python3 generate.py --model_file ../$model_dir_path/model.pt \ --out_file ../$output_dir_path/out.txt --num_sentences $gen_sentence_num \ --temperature 1.0 --seed 3435 --max_sent_length 128 --gpuid 0 # 2. 数据还原 cd ../tools python3 line2cols.py --inp_file ../$output_dir_path/out.txt \ --out_file ../$output_dir_path/augment.txt