RNN 如何处理情感分析中的否定

问题描述 投票:0回答:1

我试图了解循环神经网络 (RNN)(例如 LSTM 或 GRU 模型或简单的 RNN)如何处理情感分析中的否定。具体来说,我很好奇这些模型如何正确解释否定改变情绪的句子,例如“这部电影不好。”

使用词嵌入+简单平均的简单模型无法正确处理否定。例如,如果“好”具有积极的情绪分数,而“坏”具有消极的情绪分数,则模型可能会通过简单地平均“不好”和“好”的分数来误解“不好”。

没有否定的例子

考虑以下带有情感词的句子:

  • “这部电影很好。”
  • “这部电影很棒。”
  • “这部电影太糟糕了。”

假设我们有以下代表情感分数的词嵌入:

  • “好”= [10]
  • “太棒了”= [12]
  • “可怕”= [-10]

中性词(假设嵌入数约为 0):

  • “该”= [0]
  • “电影”= [0]
  • “是”= [0]

对于这些句子,情绪分数的简单全局平均值效果很好:

  • “电影很好”=average([0, 0, 0, 10]) = 10 / 4 = 2.5(积极情绪)
  • “这部电影棒极了”=average([0, 0, 0, 12]) = 12 / 4 = 3(积极情绪)
  • “这部电影很糟糕”= Average([0, 0, 0, -10]) = -10 / 4 = -2.5(负面情绪)

否定示例

现在,考虑带有否定的句子:

  • “这部电影不好。”
  • “这部电影还不错。”

对于嵌入:

  • “不”= [-5]
  • “好”= [10]
  • “坏”= [-9]

简单平均可能无法正确处理这些:

  • “电影不好”=average([0, 0, 0, -5, 10]) = (0 + 0 + 0 - 5 + 10) / 5 = 5 / 5 = 1(错误为正)
  • “电影还不错”=average([0, 0, 0, -5, -9]) = (0 + 0 + 0 - 5 - 9) / 5 = -14 / 5 = -2.8 (错误的负数)

RNN 如何处理否定

直观地说,RNN 应该能够处理这个问题,因为它旨在对单词序列进行建模,捕获它们之间随时间的依赖关系。

有人能用一个具体的例子解释一下像LSTM或GRU这样的RNN模型如何正确理解和建模句子中的否定吗?具体来说,我感兴趣的是:

  • 循环连接和记忆细胞如何捕捉“不”和“好”或“不”和“坏”等词之间的关系。
  • 用数值示例来说明该过程。
nlp recurrent-neural-network sentiment-analysis
1个回答
0
投票

RNN 考虑单词的整个序列,这是相对于词袋方法的一大优势。 嵌入是 RNN 的输入,情感分数是输出; RNN 将嵌入映射到情感。嵌入本身并不代表情感。

为了训练 RNN,您需要给它整个短语的整体情绪。

  • “电影很好”= 10
  • “这部电影很棒”= 12
  • “这部电影很糟糕”= -10
  • “电影不好”=-5
  • “电影还不错”= 5

有了足够多的例子,网络将能够推断出以前从未见过的短语的情感,例如:

  • “这部电影并不可怕”=? (希望有点积极!)

RNN 内部有一个内存,它是输入历史记录的(压缩)表示。 我们可以想象当我们输入输入序列时 RNN 如何产生输出。考虑当 RNN 看到序列“电影不是……”时可能的输出。 到目前为止,这种情绪或多或少是中性的。也许模型会给它一个非常轻微的负分。 然而,RNN 现在已经看到了“不”这个词,并且会记住接下来发生的任何事情都应该被否定。

因此,如果它接下来看到一个积极的词(“这部电影不好”),它就会知道要反转情绪,并将其整体评分为负面。 相反,如果它看到一个负面词(“这部电影还不错”),它就会知道要反转情绪,并总体上给予积极的评价。

© www.soinside.com 2019 - 2024. All rights reserved.