我在要进行情感分析的数据集中有三列(类0
,1
,2
):
text thing sentiment
但是问题是我只能在text
或thing
上训练数据,并得到预测的sentiment
。有没有一种方法可以同时训练text
和thing
上的数据,然后预测sentiment
?
|text thing sentiment
0 | t1 thing1 0
. |
. |
54| t1 thing2 2
此示例告诉我们,情感也应取决于thing
。如果我尝试将两列串联在一起,然后再尝试,但这将是不正确的,因为我们不会在模型中将两列之间的关系给予任何考虑。
我的测试集包含两列test
和thing
,我必须根据这两列上受过训练的模型来预测情绪。
现在我正在使用tokenizer
,然后使用下面的模型:
model = Sequential()
model.add(Embedding(MAX_NB_WORDS, EMBEDDING_DIM, input_length=X.shape[1]))
model.add(SpatialDropout1D(0.2))
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
有关如何进行操作或使用哪种模型或编码操作的任何指针?
答案 0 :(得分:1)
您可能希望转向Keras功能API并训练多输入模型。
根据Keras的创建者FrançoisCHOLLET在他的书 Python深度学习[Manning,2017] (第7章,第1节)中:
某些任务需要多模式输入:它们合并来自不同输入源的数据,并使用不同种类的神经层处理每种类型的数据。想象一下一个深度学习模型,该模型尝试使用以下输入来预测二手服装的最可能市场价格:用户提供的元数据(例如商品的品牌,年龄等),用户提供的元数据文字说明和图片。如果只有元数据可用,则可以对其进行一次热编码,然后使用密集连接的网络来预测价格。如果只有文本描述可用,则可以使用RNN或一维convnet。如果只有图片,则可以使用2D卷积网络。但是如何同时使用这三个呢?天真的方法是训练三个单独的模型,然后对它们的预测进行加权平均。但这可能不是最优的,因为模型提取的信息可能是多余的。更好的方法是使用可以同时查看所有可用输入方式的模型(具有三个输入分支的模型)共同学习更准确的数据模型。
答案 1 :(得分:1)
在这种情况下,我认为Concatenate功能是解决问题的方法,其总体思路应如下。请根据您的用例进行调整。
### whatever preprocessing you may want to do
text_input = Input(shape=(1, ))
thing_input = Input(shape=(1,))
### now bring them together
merged_inputs = Concatenate(axis = 1)([text_input, thing_input])
### sample output layer
output = Dense(3)(merged_inputs)
### pass your inputs and outputs to the model
model = Model(inputs = [text_input, thing_input], outputs = output)
答案 2 :(得分:0)
您必须将多列作为列表,然后在对原始数据进行嵌入和预处理后合并进行训练。 示例:
train = pd.read_csv('COVID19 multifeature Emotion - 50 data.csv', nrows=49)
# This dataset has two text column field and different class level
X_train_doctor_opinion = train["doctor-opinion"].str.lower()
X_train_patient_opinion = train["patient-opinion"].str.lower()
X_train = list(X_train_doctor_opinion) + list(X_train_patient_opinion))
然后预处理和嵌入