【问题标题】:NLP parsing multiple questions contained in one single queryNLP 解析一个查询中包含的多个问题
【发布时间】:2018-02-12 23:37:59
【问题描述】:

如果来自用户的单个查询包含属于不同类别的多个问题,如何识别、拆分和解析它们?

例如 -

User - what is the weather now and tell me my next meeting  
Parser - {:weather => "what is the weather", :schedule => "tell me my next meeting"}  

解析器识别问题属于两个不同类别的句子部分

User - show me hotels in san francisco for tomorrow that are less than $300 but not less than $200 are pet friendly have a gym and a pool with 3 or 4 stars staying for 2 nights and dont include anything that doesnt have wifi  
Parser - {:hotels => ["show me hotels in san francisco",  
          "for tomorrow", "less than $300 but not less than $200",
          "pet friendly have a gym and a pool",
          "with 3 or 4 stars", "staying for 2 nights", "with wifi"]}

解析器只识别属于一个类别的问题,但有额外的步骤来微调答案,并创建了一个根据要采取的步骤排序的数组

据我了解,这需要句子分割器多标签分类器共同参考解析

但是我遇到的句子分割器在很大程度上依赖于语法、标点符号。

多标签分类器,就像一个训练有素的朴素贝叶斯分类器在大多数情况下都有效,但由于它们是多标签的,大多数时候为明显属于一个类别的句子输出多个类别。仅依靠数组输出来检查存在的标签会失败。

如果使用多类分类器,也可以检查可能类别的数组输出,但显然它们不能准确地告诉句子的不同部分,更不用说以何种方式进行下一步了。

作为第一步,我如何调整句子分割器以在没有任何严格语法规则的情况下正确分割句子。良好的准确性将有助于分类。

【问题讨论】:

    标签: machine-learning nlp chatbot


    【解决方案1】:

    作为第一步,我如何调整句子分词器以在没有任何严格语法规则的情况下正确分割句子。

    我建议您直接使用解析树(依赖解析器或选区解析),而不是这样做。

    这里我展示了依赖解析的输出,你可以看到这两个段是通过一个“CONJ”箭头分开的:

    (来自这里:http://deagol.cs.illinois.edu:8080/

    我会尝试的另一个解决方案是 ClausIE: https://gate.d5.mpi-inf.mpg.de/ClausIEGate/ClausIEGate?inputtext=what+is+the+weather+now+and+tell+me+my+next+meeting++&processCcAllVerbs=true&processCcNonVerbs=true&type=true&go=Extract

    【讨论】:

    • 是的,这个方法有帮助。然而,对于酒店的判决,这将变得困难。这是针对程序尚不知道查询是否包含两个或多个标签的句子。有什么想法吗?
    • 你能举个例子吗?我需要更好地理解你在说什么......
    • 需要明确的是,对于您提供演示的第一个查询,查看依赖关系树以查找是否有多个查询非常有帮助。但是对于第二个查询,酒店示例,在解析器确定查询只有一个标签之后,我们可以只提取名词短语。所以问题是,要在图表中寻找其他什么东西来确定问题有 1 个或多个查询。在 clausie - 对于第一个查询 - conj 直接出现在根目录下,因此解析器可以判断可能存在第二个标签,但在酒店示例中,conj 也以相同的方式出现.如何处理?
    • 看看这个 conj 的依赖提取 - gate.d5.mpi-inf.mpg.de/ClausIEGate/…
    • 此示例没有连词指示符,但有两个语句但不是找到答案的明显方式-gate.d5.mpi-inf.mpg.de/ClausIEGate/… -
    【解决方案2】:

    如果您想要的 segmentation 不太依赖语法,那么 chunking 就会出现。在 NLTK 书中有 a fragment on that。作者在这里采用的方法仅取决于词性标签。

    BTW Jurafsky 和 ​​Martin 的 Speech and Language processing 第 3 版在解析章节中包含有关分块的信息,并且还包含有关信息检索和聊天机器人的章节。

    【讨论】:

    • 名词短语分块只会包含某些短语。您是否建议通过分类器运行它们以查看它是同一类别还是不同类别的一部分?我认为这需要新的培训来确定解析器应该如何决定如何处理块。
    • 您要求进行细分。我建议这样做是为了找出哪些部分可以用作正确的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多