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

问题描述

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

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 (将#修改为@)