如何检测搜索查询是否采用问题的形式?
例如,客户可能会搜索"我如何跟踪订单"(请注意没有问号).
我猜大多数直接问题都符合特定的语法.
非常简单的猜测方法:
START WORDS = [who, what, when, where, why, how, is, can, does, do] isQuestion(sentence): sentence ends with '?' OR sentence starts with one of START WORDS
START WORDS列表可能会更长.范围是一个网站搜索框,所以我想这个列表不需要包含太多的单词.
有没有一个库能比我简单的猜测方法做得更好?我的方法有什么改进吗?
另请参阅:如何判断句子是否是一个问题(疑问)?
在一个问题的语法分析中(通过像nltk这样的工具包获得),正确的结构将采用以下形式:
(SBARQ (WH+ (W+) ...) (SQ ...* (V+) ...*) (?))
因此,使用任何可用的语法分析器,具有嵌入式SQ(可选)的SBARQ节点的树将是输入是问题的指示符.WH +节点(WHNP/WHADVP/WHADJP)包含问题词干(who/what/when/where/why/how),SQ保存倒置短语.
即:
(SBARQ (WHNP (WP What)) (SQ (VBZ is) (NP (DT the) (NN question))) (. ?))
当然,有很多先行条款会导致解析中的错误(可以解决),以及写得很糟糕的问题.例如,这篇文章的标题"如何判断一个句子是一个问题?" 将有一个SBARQ,但不是SQ.
你将需要一种更先进的语言分析形式来实现这一目标.需要证明吗?好的...
是雌鹿吗?
有志者,事竟成.
到时候,我会跳!
为什么不.我没有任何裸麦粉粗面包.
找出一个句子是否是一个问题并不是一个最简单的任务,因为人们提问的方式很多,其中很多都不遵循语法规则.因此很难找到一个好的检测规则集.在这种情况下,我会去机器学习并使用带注释的文本语料库训练算法(创建语料库并选择一个特征集可能需要一些时间).基于机器学习的识别应该比基于规则的方法更好地回忆.这是一步一步的说明:
手动创建列车数据集:获取注释 - 如果是或不是问题,可以使用信息 - 文本集合或自己创建这样的语料库(它应该是100多个文档,许多问题不能是直截了当的问题)
找到最重要的特征 - 提取部分演讲,5W1H(什么,哪个,......,如何),在每个句子中获取动词的位置,以及在识别问题时有用的其他内容
基于提取的信息为每个特征句子(您需要两者,正面和负面示例)创建矢量,例如,
| 具有 ?| 第二个位置的动词| 有5W1H | 句子中的第一个位置是5W1H | ...... | 句子长度| 是一个问题|
使用向量训练机器学习算法,例如MaximumEntropy,SVM(您可以使用Wekka或Knime)
使用训练过的算法进行问题识别.
如果需要(新问题示例),请重复步骤.
要识别问题句子的起始单词,你应该通过一个大的文本语料库来查找以a结尾的句子?
,并找出你在那些中找到的最常见的起始单词.
你错过了一些想到的东西包括WHICH,AM,ARE,WAS,WERE,MAY,MIGHT,CAN,COULD,WILL,SHALL,WOULD,SHOULD,HAS,HAVE,HAD和DID.或许也可以和WHEN一起去.还要考虑IN,AT,TO,FROM和ON,加上UNDER和OVER.所有这些都取决于您拥有的查询系统类型以及您希望为用户提供的自然语言查询的自由度.
同样的,你应该检查该人在相同的光已经作出所有自己的查询,发现其中他们的问题其实不结束在?
帮助识别那些类似哪个没有.
那应该找到很多疑问; 当务之急也有可能吗?
根据您想要获得的花哨程度,您可以考虑使用Wordnet之类的东西作为词性标注的开始.它主要用于同义词集,包括hypernym,hyponym,holonym和meronym信息,但我相信它还会包含你正在寻找的其他信息.
维基百科有几篇关于问答和自然语言搜索引擎的文章.两者都有您可能会关注的参考.您也可以浏览这些PDF文件:
"走向数据库的自然语言接口理论"
"自然语言问题回答:从这里看"
"自然语言问答模型在文献检索系统中的应用".
最后,麻省理工学院的START自然语言问答系统似乎很有趣.
为了支持JohnFx的答案,情况变得更糟.以下是明显的问题:
你有任何问题吗?
这个答案是否足够
一个问题,那是什么
然后你会发现用户开始输入以下类型的查询:
我想知道有什么问题.
这甚至是个问题吗?从语法上讲,不,但它确实值得一个很容易被称为答案的回复.(这些类型的查询可能很常见,具体取决于您的用户群.)
结论:如果你不打算以特殊的,语言上复杂的方式处理问题(例如使用自然语言生成构建直接答案),那么识别它们可能甚至都不是很有趣.从查询中挑选正确的关键字可能会更有价值.