gpt4 book ai didi

python - 使用 keras 进行情感分析,包括中性推文

转载 作者:行者123 更新时间:2023-11-30 22:11:17 25 4
gpt4 key购买 nike

我正在 python 中使用 keras 进行情感分析项目,使用 CNN 和 word2vec 作为嵌入方法,我想检测积极、消极和中性推文(在我的语料库中,我考虑了带有 0 标签的所有消极推文,积极 = 1 和中性 = 2)。由于我是这个领域的新手,我有一些问题,这是我的代码的一部分:***假设 X-train 和 X-test 包含推文,Y-train 和 Y-test 包含推文的标签。

 if i < train_size:
if labels[index] == 0 :
Y_train[i, :] = [1.0, 0.0]

elif labels[index] == 1 :
Y_train[i, :] = [0.0, 1.0]
else:
Y_train[i, :] = [1.0, 1.0]

else:

if labels[index] == 0 :
Y_test[i - train_size, :] = [1.0, 0.0]
elif labels[index] == 1 :
Y_test[i - train_size, :] = [0.0, 1.0]
else:
Y_test[i - train_size, :] = [1.0, 1.0]

在上面的代码中,您会看到我考虑了相关标签是否为 0(if labels[index] == 0 :) 作为负数,我将 [1.0, 0.0] 放入某个特定列表中,如果标签为 1(if labels[index] == 1 :) 我把 [0.0, 1.0] 作为积极的推文,否则(如果 labels[index] == 2 :) 作为中性我把 [1.0, 1.0] 所以只要考虑我的逻辑部分我提到的代码没问题。

这是我的 keras 模型:

model = Sequential()
model.add(Conv1D(32, kernel_size=3, activation='elu',
padding='same', input_shape=
(max_tweet_length,vector_size)))
model.add(Conv1D(32, kernel_size=3, activation='elu',
padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu',
padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu',
padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(32, kernel_size=2, activation='elu',
padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu',
padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu',
padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu',
padding='same'))
model.add(Dropout(0.25))
model.add(Dense(256, activation='tanh'))
model.add(Dense(256, activation='tanh'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(2, activation='sigmoid'))

因此,为了预测新的输入,我有以下代码:

sentiment = model.predict(np.array(a),batch_size=1,verbose = 2)[0]
if(np.argmax(sentiment) == 0):
print("negative")
print('the label is')
print(np.argmax(sentiment))
elif (np.argmax(sentiment) == 1):
print("positive")
print('the label is')
print(np.argmax(sentiment))
elif (np.argmax(sentiment) ==2):
print("neutral")
print('the label is')
print(np.argmax(sentiment))

我的问题包含两部分:我想知道这样的预测是真的吗?据我所知,我认为标签 2 代表中性推文,因此我考虑 if (np.argmax(sentiment) ==2) then print中性 - 这对于预测来说是否合乎逻辑或可以接受?

我的意思是我考虑为训练和测试集中的中性推文分配 [0.1, 1.0],所以如果我在预测部分将 2 视为中性,这有什么意义吗??

非常感谢

<小时/>

****对于回归来说,以这种方式改变我的训练和测试代码是真的吗?将 0,1,2 视为我的语料库中的极性

  if i < train_size:
if labels[index] == 0 :
Y_train[i, :] = [1.0, 0.0]

elif labels[index] == 1 :
Y_train[i, :] = [0.0, 1.0]
elif labels[index]==2
Y_train[i, :] = [0.5, 0.5]

else:

if labels[index] == 0 :
Y_test[i - train_size, :] = [1.0, 0.0]
elif labels[index] == 1 :
Y_test[i - train_size, :] = [0.0, 1.0]
else:
Y_test[i - train_size, :] = [0.5, 0.5]

然后设置“sigmoid”进行激活:

model.add(Dense(256, activation='tanh'))
model.add(Dense(256, activation='tanh'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(2, activation='sigmoid'))

我可以按照上面提到的方式预测我的输入推文吗?

 if (np.argmax(sentiment) ==2):
print("neutral")
print('the label is')
print(np.argmax(sentiment))

*****如果我使用word2vec进行嵌入并在语料库中将0,1,2视为极性,我可以这样设置标签吗?

 if i < train_size:
if labels[index] == 0 :
Y_train[i, :] = [1.0, 0.0,0.0]

elif labels[index] == 1 :
Y_train[i, :] = [0.0, 1.0,0.0]
else:
Y_train[i, :] = [0.0, 0.0,1.0]

else:

if labels[index] == 0 :
Y_test[i - train_size, :] = [1.0, 0.0,0.0]
elif labels[index] == 1 :
Y_test[i - train_size, :] = [0.0, 1.0,0.0]
else:
Y_test[i - train_size, :] = [0.0, 0.0,1.0]

然后进行编译:

model.compile(loss='categorical_crossentropy',
optimizer=Adam(lr=0.0001, decay=1e-6),
metrics=['accuracy'])

感谢您的耐心等待

最佳答案

我不建议以这种方式标记数据,因为定义损失函数来正确激励学习将非常困难。以下是更标准的方法。

<强>1。分类

按原样标记您的数据:简单的 0,1,2。您可以将它们标记为 one-hot vectors :

[1., 0., 0.]  # liberal
[0., 1., 0.] # neutral
[0., 0., 1.] # conservative

并使用categorical_crossentropy损失函数,或者简单地将标签传递为 012 并使用 sparse_categorical_crossentropy损失函数。两者的行为方式应该相同。无论哪种方式,请在输出层上使用 3 个神经元并进行 softmax 激活。

<强>2。回归

将情绪标签视为从 01 的回归任务,其中 0 位于左侧,1 > 在右侧,0.5。这样,您的模型将被训练来连续预测推文的政治意识形态 - 这可能对您来说很有趣。如果您选择这一路线,请使用一个带有 sigmoid 激活的输出神经元。

<小时/>

此外,如果有任何帮助的话,我为类(class)项目做了政治情绪。我使用 RNN 而不是 1D 卷积 - here无论如何都是代码。

关于python - 使用 keras 进行情感分析,包括中性推文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51462264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com