BERT具有训练,开发,测试,预测模式

时间:2020-03-11 19:20:39

标签: classification bert-language-model

我正在用BERT执行文本分类任务。我基本上是在使用run_classifier.py。 此代码使用train.tsv和dev.tsv(带有标签)微调BERT,并使用test.tsv(不带有标签)进行预测。但是,我需要使用train-dev-test拆分来训练模型(训练集),计算超参数和损失函数(开发集)并评估性能(测试集)。作为常规的train-dev-test拆分,所有标签都包括在内。 我也有第四个未标记的数据集以进行预测。您是否知道任何以4种模式(train-dev-test-prediction)实现BERT的存储库?

1 个答案:

答案 0 :(得分:0)

我们可以定义一个方法,该方法可以获取到不同数据集的路径,并返回转换后的数据集,可用于培训,测试和验证目的。关键是transformation方法。

以下是为IMDB情绪分析生成测试和培训的代码段(使用keras-bert)。请注意load_data进行转换。

dataset = tf.keras.utils.get_file(
    fname="aclImdb.tar.gz", 
    origin="http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz", 
    extract=True,
)

token_dict = {}
with codecs.open(vocab_path, 'r', 'utf8') as reader:
    for line in reader:
        token = line.strip()
        token_dict[token] = len(token_dict)

tokenizer = Tokenizer(token_dict)

def load_data(path, tagset):
    global tokenizer
    indices, sentiments = [], []
    for folder, sentiment in tagset:
        folder = os.path.join(path, folder)
        for name in tqdm(os.listdir(folder)):
            with open(os.path.join(folder, name), 'r') as reader:
                  text = reader.read()
            ids, segments = tokenizer.encode(text, max_len=SEQ_LEN)
            indices.append(ids)
            sentiments.append(sentiment)
  
    items = list(zip(indices, sentiments))
    np.random.shuffle(items)
    indices, sentiments = zip(*items)
    indices = np.array(indices)
    mod = indices.shape[0] % BATCH_SIZE
    if mod > 0:
        indices, sentiments = indices[:-mod], sentiments[:-mod]
    return [indices, np.zeros_like(indices)], np.array(sentiments)
  
train_path = os.path.join(os.path.dirname(dataset), 'aclImdb', 'train')
test_path = os.path.join(os.path.dirname(dataset), 'aclImdb', 'test')

tagset = [('neg', 0), ('pos', 1)]
id_to_labels = {0: 'negative', 1: 'positive'}
train_x, train_y = load_data(train_path, tagset)
test_x, test_y = load_data(test_path, tagset)

有关输入和输出以及完整实现(以及通常使用BERT微调的文本分类)的详细信息,请参见: Text Classification Using BERT Fine Tuning: Understandinginput to keras-bert 。它具有适用于20个新闻组的二进制,多类和多标签文本分类,IMDB情绪分析和有毒评论分类的有效的Google Colab GPU实施,并使用单独的训练和测试集。