据我了解,给定一个句子,您所说的“主题”是作出声明的实体-在您的示例中,客户经理史蒂夫(Steve).
基于此假设,以下是一些技巧及其对您的帮助:
(依赖项)解析
由于您不是严格意义上的主题,因此user7344209建议的基于依赖项解析的方法可能对您没有帮助.在诸如“我喜欢史蒂夫”的句子中,语法主题是“我”,尽管您可能希望将“史蒂夫”作为“主题”.
命名实体识别
您已经使用过此功能,这将非常适合检测Steve等人的名字.我不太确定的是“客户经理”的示例. Daniel提供的输出以及我自己使用Stanford CoreNLP进行的测试均未将其标识为命名实体-正确,它实际上不是命名实体:
诸如建议的提及识别之类的较宽泛的内容可能会更好,但它基本上标记了每个名词性短语,可能太宽泛了.如果我理解正确,则希望每个句子找到一个主题.
共指解析
共指解析是检测“史蒂夫”和“客户经理”是同一实体的关键技术.斯坦福CoreNLP例如具有module.
为了使它在您的示例中起作用,您必须让它一次处理几个句子,因为您想找到它们之间的链接.这是您的某些示例的示例(简短版本):
可视化有点混乱,但是它基本上找到了以下共指链:
>史蒂夫史蒂夫·史密斯
>史蒂夫(Steve)我们的客户经理他我们的客户经理
>我们的我们的
>额外英里额外的英里
给定前两个链以及一些后期处理,您可以弄清楚所有四个语句都是关于同一实体的.
语义相似度
对于客户,业务和客户关系经理,我发现尽管条款不同,但CoreNLP共引用解析器实际上已经找到了链.
更一般而言,如果您认为共引用解析器不能很好地处理同义词和释义,则还可以尝试包括语义相似性度量.在NLP中,关于预测两个短语是否是同义词的工作很多.
一些方法是:
>在词库(例如Wordnet)中查找同义词-例如使用nltk(python)如图所示here
>更好地,基于WordNet中定义的关系计算相似性度量-例如使用SEMILAR(Java)
>使用连续的单词表示来计算相似度,例如基于LSA或LDA-也可以使用SEMILAR
>使用更新的神经网络风格的词嵌入,例如word2vec或GloVe-后者可轻松地与spacy(python)一起使用
使用这些相似性度量的想法是识别两个句子中的实体,然后在两个句子中的实体之间进行成对比较,如果一对相似度高于阈值,则认为它是在欺骗同一实体.