增量训练lightgbm模型,深度学习模型

1. 机器学习-增量训练方法(机器学习-增量训练方法 - 知乎

包含:sklearn, lightgbm增量训练方法。

2. 深度学习模型增量训练

增量训练主要面临的问题:当增量训练时,主要解决的是新增加的训练样本中的新词问题。如果对新增加的新词不做index映射的话,会直接处理成OOV。

原词表有一份数据: old_word2id = {"OOV": 0, "I": 1, "AM": 2}

现在增量在训练的时候,有一条新的训练样本,例如: I LOVE CHINA, LOVE 和 CHINA 没有出现在 old_word2id 词表里,怎么将LOVE 和 CHINA添加进词表呢(这个好像只要更新词表即可)? 以及LOVE 和 CHINA相对应的emb怎么加进到 model的word_emb中呢?

我是用torch训练的深度模型,处理方式是:

# 1. 对新增的词语映射为新的index,即将映射词表变为:
"""
old_word2id = {"OOV": 0, "I": 1, "AM": 2}
"""

new_word2id = {"OOV": 0, "I": 1, "AM": 2, "LOVE": 3, "CHINA":4}



# 2. 为新增的词语赋予一个随机的初始embedding,即将底层词语embedding矩阵改为:
"""
# old_word_emb矩阵代表已经训练完成的 ”OOV“,”I“, ”AM“ 三个词的embedding
old_word_emb = np.array([[0.11, -0.21, 0.32, 0.51, 0.12], \
                         [-0.2, 1.039, 0.21, 0.42, 0.71], \
                         [0.24, 8.039, 1.91, 3.02, -0.2]
                        ])
"""

# new_word_emb矩阵的前3行代表已经训练完成的 ”OOV“,”I“, ”AM“ 三个词的embedding
# new_word_emb矩阵的后2行代表随机初始化的 ”LOVE“,”CHINA“ 两个词的embedding
new_word_emb = np.array([[0.11, -0.21, 0.32, 0.51, 0.12], \
                         [-0.2, 1.039, 0.21, 0.42, 0.71], \
                         [0.24, 8.039, 1.91, 3.02, -0.2], \
                         [0.24, 8.039, 1.91, 3.02, -0.2], \
                         [0.24, 8.039, 1.91, 3.02, -0.2], \
                         ])


# 3. 怎么将新的 new_word_emb 在要增量训练的模型中生效呢?

train_model = torch.load(old_train_model_path, map_location=torch.device('cpu'))

train_model.embedding.weight = torch.nn.Parameter(
        torch.tensor(np.array(new_word_emb), dtype=torch.float32), \
        requires_grad=True)

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
train_model.to(device)

下面用新数据对train_model做正常的模型训练即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值