【问题标题】:Finding meaningful sub-sentences from a sentence从句子中找到有意义的子句
【发布时间】:2012-02-16 22:44:27
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 在您的示例中,您是否还想要诸如“I am going”和“I am”之类的琐碎子句? “我下个月要去奥斯汀”怎么样?
  • @Adrian McCarthy:“我下个月要去奥斯汀”将属于问题中描述的“推导句子”。这里不需要这些,因为它们意味着对输入句子的语义处理,据我了解,这个想法只是在原始文本中包含/排除各种限定介词短语的组合。
  • @Adrian McCarthy:你提出了一个很好的观点。子句“我要去奥斯汀”在一定程度上处于推断句和“严格”子句之间的边界。但由于要求只列出句子中严格找到的子句,我们将跳过这句话。
  • @mjv:实际上,不,我的示例不需要语义来推断句子。解决您的问题的一种方法是枚举所有可能的子字符串并测试每个子字符串以查看它是否符合语法。那会发现“我下个月要去奥斯汀”。如果您想从所需的子句中省略这样的句子,那么我们需要对您所追求的内容进行更准确的定义。
  • 我认为表达问题的一种方法是子句必须包含主句的主要动词(在这种情况下为“do”)作为子句本身的主要动词。我承认,问题的定义并不像所说的那样精确。

标签: parsing artificial-intelligence nlp machine-learning grammar


【解决方案1】:

Hickl 等人有一篇题为 "Using Discourse Commitments to Recognize Textual Entailment" 的论文讨论了话语承诺(子句)的提取。该论文包括对他们的算法的描述,该算法在某种程度上根据规则运行。他们将其用于 RTE,输出中可能会有一些最低程度的扣除。文本简化可能是一个值得关注的相关领域。

【讨论】:

  • 感谢本文的链接。这似乎很有趣,并且与我提出的问题有关。
【解决方案2】:

以下论文http://www.mpi-inf.mpg.de/~rgemulla/publications/delcorro13clausie.pdf 处理来自斯坦福解析器的依赖关系并构造简单的子句(文本简化)。

查看在线演示 - https://d5gate.ag5.mpi-sb.mpg.de/ClausIEGate/ClausIEGate

【讨论】:

  • 项目是否开源?
【解决方案3】:

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

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_in、prep_do、advmod、tmod 等。见Stanford Dependency Manual

例如,如果你从输出中删除所有修饰符,你会得到

我将在奥斯汀的 SXSW 举办 NLP 研讨会。

【讨论】:

  • 但它没有给我所有个可能的句子列表。我的意思是它可能隐藏在这个依赖输出中,但我需要一种系统的方法来提取这些句子。
  • 当然没有。但是你可以提取所有可能的句子。首先列出所有可选部分。然后尝试所有组合以删除那些可选部分。
  • 是否保证它会总是生成语法和语义上有效的句子?
  • 只要去掉可选部分,句子在句法和语义上都应该是有效的。现在的问题是如何定义什么是可选的,什么不是。
  • 你如何定义哪些部分是可选的?例如,对于“我要去见上个月在纽约就 NLP 做了精彩演讲的软件工程师”这句话,哪些部分是可选的,哪些部分不是?您是说只有介词和修饰语依赖关系是可选的吗?如果是,为什么会这样?
【解决方案4】:

一种方法是使用解析器,例如 PCFG。试图只训练一个模型来检测“子句”可能会受到数据稀疏的影响。另外,我怀疑你能否写出一个非常干净和明确的子句定义,如果你不能定义它,你就不能让注释者为它注释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2021-11-15
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多