Parsing 从句子中寻找有意义的子句

Parsing 从句子中寻找有意义的子句,parsing,artificial-intelligence,nlp,machine-learning,grammar,Parsing,Artificial Intelligence,Nlp,Machine Learning,Grammar,有没有办法找到一个句子中所有仍然有意义且至少包含一个主语、动词和谓语/宾语的子句 例如,如果我们有这样一句话,“我下个月将在奥斯汀的SXSW举办一个NLP研讨会”。我们可以从这句话中提取以下有意义的子句:“我要做一个研讨会”,“我要做一个关于NLP的研讨会”,“我要在SXSW做一个关于NLP的研讨会”,“我要在SXSW做一个研讨会”,“我要在奥斯汀做一个研讨会”,“我下个月要做一个关于NLP的研讨会”等等 请注意,这里没有推断出的句子(例如,“下个月在SXSW将有一个NLP研讨会”。虽然这是事实

有没有办法找到一个句子中所有仍然有意义且至少包含一个主语、动词和谓语/宾语的子句

例如,如果我们有这样一句话,“我下个月将在奥斯汀的SXSW举办一个NLP研讨会”。我们可以从这句话中提取以下有意义的子句:“我要做一个研讨会”,“我要做一个关于NLP的研讨会”,“我要在SXSW做一个关于NLP的研讨会”,“我要在SXSW做一个研讨会”,“我要在奥斯汀做一个研讨会”,“我下个月要做一个关于NLP的研讨会”等等

请注意,这里没有推断出的句子(例如,“下个月在SXSW将有一个NLP研讨会”。虽然这是事实,但我们不需要将其作为问题的一部分。)。所有生成的句子都是给定句子的一部分

我们如何解决这个问题?我在考虑创建带注释的训练数据,该数据为训练数据集中的每个句子都有一组合法的子句子。然后编写一些监督学习算法生成模型


我对NLP和机器学习很陌生,所以如果你们能提出一些解决这个问题的方法,那就太好了。

一种方法是使用PCFG之类的解析器。试图仅仅训练一个模型来检测“子内容”可能会受到数据稀疏性的影响。此外,我怀疑你是否能写下一个真正干净明确的子句子定义,如果你不能定义它,你就不能让注释者为它注释。

有一篇题为Hickl等人的论文,讨论了话语承诺(子句子)的提取。本文描述了他们的算法,这些算法在某种程度上是根据规则操作的。他们将其用于RTE,并且在输出中可能有一些最低程度的扣除。文本简化可能是一个需要关注的相关领域。

您可以使用由提供的依赖项解析器。 句子的折叠输出如下所示

nsubj(going-3, I-1)
xsubj(do-5, I-1)
aux(going-3, am-2)
root(ROOT-0, going-3)
aux(do-5, to-4)
xcomp(going-3, do-5)
det(seminar-7, a-6)
dobj(do-5, seminar-7)
prep_on(seminar-7, NLP-9)
prep_at(do-5, -11)
prep_in(do-5, Austin-13)
amod(month-15, next-14)
tmod(do-5, month-15)
最后5个句子输出是可选的。您可以删除一个或多个对您的句子不重要的部分。
大多数可选部分属于介词和修饰语,例如:prep\u-in、prep\u-do、advmod、tmod等。看

例如,如果从输出中删除所有修改器,则将获得

我将在奥斯汀的SXSW做一个关于NLP的研讨会

下面的文章处理来自Stanford解析器的依赖项,并构造简单子句(文本简化)


请参见在线演示-

在您的示例中,您是否也希望看到诸如“我要去”和“我是”之类的琐碎的子内容?“我下个月要去奥斯汀”怎么样?@Adrian McCarthy:“我下个月要去奥斯汀”会出现在问题中描述的“推断句子”中。这里不需要这些,因为它们意味着对输入句子进行语义处理,据我所知,这样做的目的只是从原文中包括/排除各种限定介词短语的组合。@Adrian McCarthy:你提出了一个很好的观点。子句“我要去奥斯汀”在某种程度上介于推导句和“严格”子句之间。但是,由于要求只列出严格在句子中找到的子句子,我们将跳过这句话。@mjv:事实上,不,我的示例不需要语义来推断句子。解决问题的一种方法是列举所有可能的子字符串,并测试每个子字符串是否符合语法。这会发现“我下个月要去奥斯汀。”如果你想从所需的子句中省略这样一个句子,那么我们需要对你所追求的内容有一个更精确的定义。我认为解决这个问题的一个方法是,子句必须包含主句的主动词(“在本例中是do”)作为子句本身的主动词。我承认,这个问题的定义并不像上面所说的那样精确。谢谢你链接到这篇文章。它似乎很有趣,而且与我问的问题有关,但它并没有给我列出所有可能的句子。我的意思是,它可能隐藏在依赖输出中,但我需要一种系统的方法来提取这些句子。当然没有。但你可以提取所有可能的句子。首先列出所有可选部件。然后尝试所有组合来删除这些可选部分。是否有保证它将始终生成语法和语义上有效的句子?只要删除可选部分,这些句子就应该在语法和语义上都有效。现在的问题是如何定义哪些是可选的,哪些不是。如何定义哪些零件是可选的?例如,对于“我将会见上个月在纽约就NLP做了精彩演讲的软件工程师”这句话,哪些部分是可选的,哪些部分不是?你是说只有介词和修饰语依赖关系是可选的吗?如果是,原因是什么?项目是否有机会开源?