我们可以定义一种方法,该方法获取不同数据集的路径并返回可用于训练、测试和验证目的的转换后的数据集。关键是transformation 方法。
下面是一个为 IMDB 情感分析生成测试和训练的 sn-p(使用 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 实现,并使用单独的训练和测试集。