我想对德国警方新闻文章进行分类,并对所犯罪行的种类进行自动分类/聚类。到目前为止,我没有得到很好的结果。通常,标题很能说明问题,但有时并没有那么明显,所以我需要包含主要文章,以便对所有文章进行适当的聚类。
然而,标题是一个很好的指标,我不想把它扔掉。我可以简单地将标题和主要文章中的单词结合起来,但我认为标题应该有更多的权重。有人知道如何做到这一点吗?
我想对德国警方新闻文章进行分类,并对所犯罪行的种类进行自动分类/聚类。到目前为止,我没有得到很好的结果。通常,标题很能说明问题,但有时并没有那么明显,所以我需要包含主要文章,以便对所有文章进行适当的聚类。
然而,标题是一个很好的指标,我不想把它扔掉。我可以简单地将标题和主要文章中的单词结合起来,但我认为标题应该有更多的权重。有人知道如何做到这一点吗?
把更多的重量放在标题上。
例如,如果您使用 tf-idf,您首先分别计算标题和正文的 tf-idf 向量。然后,您只需将两个向量相加并重新调整为单位长度,即可将它们组合成一个向量。即使标题要短得多,这也会将 50% 的权重放在标题上。
这里的一个想法是训练两个不同的循环网络,然后合并它们的输出,然后再有一些密集层。通过这种方式,模型可以学习标题和故事的不同信息,如下所示:
from keras.layers.core import Dense, Activation
from keras.layers import concatenate, LSTM
modela = Sequential()
modela.add(LSTM(100,input_shape=(headline_len,1)))
modela.add(Activation('relu'))
modela.add(Dense(50))
modelb = Sequential()
modelb.add(LSTM(100,input_shape=(story_len,1)))
modelb.add(Activation('relu'))
modelb.add(Dense(50))
merged_output = concatenate([modela.output, modelb.output])
model_combined = Sequential()
model_combined.add(Activation('relu'))
model_combined.add(Dense(50))
model_combined.add(Activation('relu'))
model_combined.add(Dense(1))
model_combined.add(Activation('linear'))
final_model = Model([modela.input, modelb.input], model_combined(merged_output))
final_model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['mae'])
像这样,但你的架构可能会有所不同。