识别一个句子的主题

时间:2017-08-28 09:27:28

标签: python nlp text-analysis

我一直在探索NLP技术,目的是确定调查评论的主题(然后我将其与情绪分析结合使用)。我想做一些高级别的声明,例如“10%的受访者对客户经理做出了积极的评论(+情绪)”。

我的方法使用了Named Entity Recognition (NER)。现在我正在使用真实数据,我可以看到一些复杂性和与识别句子主语相关的细微差别。以下是主题为客户经理的5个句子示例。我已将命名实体以粗体显示以用于演示目的。

  1. 我们的客户经理很棒,他总是更加努力!
  2. 史蒂夫我们的客户经理很棒,他总是更加努力!
  3. 史蒂夫我们的关系经理很棒,他总是额外的 英里<!/ LI>
  4. 史蒂文很棒,他总是加倍努力!
  5. 史蒂夫史密斯很棒,他总是加倍努力!
  6. 我们的业务mgr 。很棒,他总是更加努力!
  7. 我看到三个挑战增加了我的任务的复杂性

    1. 同义词:客户经理vs关系经理vs业务管理员。这在某种程度上是针对特定领域的,并且随着调查目标受众的不同而不同。
    2. 缩写:经理。 vs经理
    3. 歧义 - “Steven”是否是“Steve Smith”&amp;因此 “客户经理”。
    4. 其中同义词问题是最常见的问题,其次是歧义问题。基于我所看到的,缩写问题在我的数据中并不常见。

      是否有任何NLP技术能够以相对较高的置信度帮助解决这些问题?

3 个答案:

答案 0 :(得分:2)

据我所知,你所谓的&#34;主题&#34; 是给出一个句子的实体,在你的例子中,史蒂夫是一个句子经理。

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

(依赖关系)解析

由于您并不是指具有严格语法意义的主题, user7344209 基于依赖性解析建议的方法可能无法帮助您。在诸如&#34;我喜欢Steve&#34;这样的句子中,语法主题是&#34; I&#34;,尽管你可能想找到&#34; Steve&#34;作为&#34;主题&#34;。

命名实体识别

你已经使用了这个,并且检测史蒂夫等人的名字会很棒。我不太确定的是&#34;客户经理&#34;的例子。 Daniel提供的输出和我自己使用Stanford CoreNLP的测试都没有将其识别为命名的实体 - 这是正确的,它实际上不是命名的实体:

enter image description here

更广泛的内容,例如建议的提及标识可能会更好,但它基本上标记了每个可能过于宽泛的名词短语。如果我理解正确,您希望每个句子找到一个主题。

核心参考分辨率

Coreference Resolution是检测&#34; Steve&#34;的关键技术。以及&#34;客户经理&#34;是同一个实体。例如,斯坦福CoreNLP有module这样的。

为了在你的例子中使用它,你必须让它一次处理几个句子,因为你想找到它们之间的链接。以下是您的一些示例的(简短版本)示例:

enter image description here

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

  • Steve&lt; - &gt;史蒂夫史密斯
  • Steve我们的客户经理&lt; - &gt;他&lt; - &gt;我们的客户经理
  • 我们的&lt; - &gt;我们的
  • 额外英里&lt; - &gt;额外的一英里

鉴于前两个链和一些后处理,你可以发现所有四个语句都是关于同一个实体。

语义相似性

对于帐户,业务和关系经理,我发现尽管条款不同,CoreNLP共享解析器实际上已经找到了链。

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

有些方法是:

  • 查找同义词库中的同义词,例如Wordnet - 例如使用nltk(python)显示here
  • 更好,根据WordNet中定义的关系计算相似性度量 - 例如使用SEMILAR(Java)
  • 使用单词的连续表示来计算相似度,例如基于LSA或LDA - 也可以使用SEMILAR
  • 使用更近期的神经网络式词汇嵌入,例如word2vecGloVe - 后者可以轻松用于spacy(python)

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

答案 1 :(得分:1)

如果您没有太多要训练的数据,您可以尝试使用依赖关系分析工具并提取已识别出SUBJECT的依赖关系对象(如果使用{{3},通常使用 nsubj })。

答案 2 :(得分:1)

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

提及 - 检测输出也可能有用: enter image description here

关于第2点,涉及缩写,这是一个难题。但是我们这里有entity-similarity模块可能有用。这会考虑honorifics等内容。

关于你的第3点,共同参考问题,试试coref模块: enter image description here

以上数据来自这里的演示:http://deagol.cs.illinois.edu:8080