确定句子的主题

Identifying the subject of a sententce

我一直在探索 NLP 技术,目标是确定调查评论的主题(然后我将其与情绪分析结合使用)。我想发表高水平的陈述,例如“10% 的调查受访者对客户经理做出正面评价(+ 情绪)”。

我的方法用过Named Entity Recognition (NER)。现在我正在处理真实数据,我开始了解与识别句子主题相关的一些复杂性和细微差别。这里有 5 个主语是客户经理的句子示例。出于演示目的,我已将命名实体加粗。

  1. 我们的客户经理很棒,他总是加倍努力!
  2. 史蒂夫我们的客户经理很棒,他总是加倍努力!
  3. 史蒂夫我们的关系经理很棒,他总是加倍努力 英里!
  4. Steven 很棒,他总是走得更远!
  5. Steve Smith 很棒,他总是走得更远!
  6. 我们的业务经理。很棒,他总是走得更远!

我发现三个挑战增加了我的任务的复杂性

  1. 同义词:客户经理、客户经理、业务经理。这在某种程度上是特定领域的,并且往往会因调查目标受众而异。
  2. 缩写:经理。对经理
  3. 歧义 - “Steven”是否是“Steve Smith”,因此是 “客户经理”。

其中同义词问题是最常见的问题,其次是歧义问题。根据我所见,缩写问题在我的数据中并不常见。

是否有任何 NLP 技术可以帮助以相对较高的置信度处理这些问题?

如果您没有太多数据要训练,您可能可以尝试依赖分析工具并提取已识别 SUBJECT 的依赖对(通常是 nsubj 如果您使用 Stanford Parser).

我喜欢你使用 NER 的方法。这是我在我们的系统中看到的您输入的内容:

提及检测输出也可能有用:

关于你的第2点,涉及缩写,这是一个难题。但是我们有 entity-similarity module here that might be useful. This takes into account things like honorifics 等等

关于你的第三点,共同参考问题,试试 coref 模块:

顺便说一句,上面的数字来自这里的演示:http://deagol.cs.illinois.edu:8080

据我所知,你所说的 "subject" 是,给定一个句子,一个陈述的实体 - 在你的例子中,史蒂夫客户经理。

基于这个假设,这里有一些技巧以及它们如何帮助您:

(依赖)解析

因为你的意思不是严格语法意义上的主语,所以 user7344209 基于 依赖解析 建议的方法可能不会'帮不了你。在像 "I like Steve" 这样的句子中,语法主语是 "I",尽管您可能希望找到 "Steve" 作为 "subject"。

命名实体识别

您已经在使用它了,它会很好地检测诸如 Steve 等人的名字。我不太确定的是 "account manager" 的例子。 Daniel 提供的输出和我自己使用 Stanford CoreNLP 进行的测试都没有将其识别为 named 实体——这是正确的,它确实不是 named[=77] =]实体:

更广泛的东西,例如建议的 提及标识 可能会更好,但它基本上标记了每个可能太宽泛的名词短语。如果我没理解错的话,你想在每个句子中找到 一个 个主题。

共指分辨率

共指消解是检测"Steve"和"account manager"是同一个实体的关键技术。例如,Stanford CoreNLP 有这样的 module

为了让它在你的例子中起作用,你必须让它同时处理几个句子,因为你想找到它们之间的联系。这是您的一些示例的示例(简短版本):

可视化有点乱,但基本上找到了以下共指链:

  • 史蒂夫 <-> 史蒂夫史密斯
  • Steve 我们的客户经理 <-> 他 <-> 我们的客户经理
  • 我们的 <-> 我们的
  • 多一英里 <-> 多一英里

鉴于前两个链和一些 post-processing,您可以发现所有四个语句都是关于同一个实体的。

语义相似度

在客户、业务和客户经理的情况下,我发现 CoreNLP 指代解析器实际上已经找到了链,尽管术语不同。

更一般地说,如果您认为共指解析器不能很好地处理同义词和释义,您也可以尝试包括语义相似性的度量。 NLP 中有很多关于预测两个短语是否同义的工作。

一些方法是:

  • 在 Wordnet 等词库中查找同义词 - 例如使用 nltk (python) 如图所示 here
  • 更好的是,根据 WordNet 中定义的关系计算相似性度量 - 例如使用 SEMILAR (Java)
  • 使用单词的连续表示来计算相似度,例如基于 LSA 或 LDA - 也可以使用 SEMILAR
  • 使用更新的 neural-network-style 词嵌入,例如 word2vec or GloVe - the latter are easily usable with spacy (python)

使用这些相似性度量的一个想法是识别两个句子中的实体,然后在两个句子中的实体之间进行成对比较,如果一对相似性高于阈值,则将其视为同一实体。