微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何实现文本自动编码器进行离群值检测?

如何解决如何实现文本自动编码器进行离群值检测?

我有一个不平衡的文本数据集,具有这样的类分布:

1至11k类样本 2类-7k样本 3-4k样本 4至600级 5至400级 6-150级

我想为所有6个课程训练一个分类器。当我将所有数据放在一个模型中时,该模型仅适合前三类,因为它们的代表过多。

Atm我正在使用级联方法,有2种模型,Model 1对1 2 3和7类(这是人工类-4 5和6的组合)进行分类,并且我修剪了数据,因此所有类都有25 %表示(每类1150个样本)。当模型1将某类分类为7类时,我将转到第二个模型,该模型预测4 5 6类。因此,级联方法为M1-> M2。

这种方法给我带来了一些不错的效果,但是我想在精度上更高。由于数据量较小,并且很难学习数据类7中的大差异,因此我对模型1的准确性仅为50%(这是级联模型的瓶颈)。

我想学习有关1 2和3类文本数据的自动编码器,以便以后可以对它们进行异常检测。 我在top3类上尝试了1种使用LSTM的实现和1种使用MLM头的BERT的实现,但是在重建阶段,该模型正在预测垃圾

如何为文本实现自动编码器?

这是我的bert实现:

input_ids = layers.Input(shape=(MAX_INP_LEN,),dtype=tf.int32)
token_type_ids = layers.Input(shape=(MAX_INP_LEN,dtype=tf.int32)
attention_mask = layers.Input(shape=(MAX_INP_LEN,dtype=tf.int32)
transform_layer = model(input_ids,token_type_ids=token_type_ids,attention_mask=attention_mask)[0]
model = keras.Model(
    inputs=[input_ids,token_type_ids,attention_mask],outputs=[transform_layer]
)
loss = keras.losses.SparseCategoricalCrossentropy()
optimizer = keras.optimizers.Adam(lr=5e-6)
model.compile(optimizer=optimizer,loss=loss)

这是LSTM实现

model.add(Embedding(vocab_size,emb_size))
model.add(LSTM(emb_size,activation='relu'))
model.add(RepeatVector(input_size))
model.add(LSTM(emb_size,activation='relu',return_sequences=True))
model.add(Timedistributed(Dense(vocab_size,activation='softmax')))

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。