对于我们构建的应用程序,我们使用简单的单词预测统计模型(如Google Autocomplete)来指导搜索。
它使用从大量相关文本文档中收集的一系列ngrams。通过考虑之前的N-1个单词,它表明了5个最可能的"接下来的单词"按概率降序排列,使用Katz back-off。
我们希望将其扩展为预测短语(多个单词)而不是单个单词。但是,当我们预测一个短语时,我们宁愿不显示它的前缀。
例如,考虑输入the cat
。
在这种情况下,我们希望进行the cat in the hat
之类的预测,而不是the cat in
&不是the cat in the
。
假设:
我们无法访问过去的搜索统计信息
我们没有标记的文字数据(例如,我们不知道词性)
进行这类多字预测的典型方法是什么?我们尝试过较长短语的乘法和加法加权,但我们的权重是任意的,适合我们的测试。
答案 0 :(得分:4)
对于这个问题,您需要定义您认为有效完成的内容 - 然后应该可以提出解决方案。
在你给出的例子中,"帽子中的猫"比#34;中的猫要好得多。我可以把它解释为,"它应该以名词结尾#34;或者"它不应该以过于常见的词语结束"。
您已限制使用"标记的文字数据"但是您可以使用预训练模型(例如NLTK,spacy,StanfordNLP)来猜测词性,并尝试将预测限制为仅完成名词短语(或以名词结尾的序列)。请注意,您不一定需要标记所有输入模型的文档,而只需标记您在自动完成数据库中保留的那些短语。
或者,您可以避免以停用词(或非常高频率的词)结尾的完成。两者都是" in" """在几乎所有英文文档中都会出现单词,因此您可以通过实验找到一个频率截止值(不能在超过50%的文档中出现的单词结尾),以帮助您进行过滤。你也可以看一下短语 - 如果这个短语的结尾作为一个较短的短语非常普遍,那么标记它就没有意义,因为用户可以自己提出它。 / p>
最终,你可以创建一组标签好的和坏的实例,并尝试根据单词特征创建一个受监督的重新排名 - 上述两个想法都可能是监督模型中的强大功能(文档频率= 2 ,pos tag = 1)。这通常是带有数据的搜索引擎可以做到的。请注意,您不需要搜索统计信息或用户,只需愿意为几百个查询标记前5个完成项。建立正式评估(可以以自动方式运行)可能有助于在将来尝试改进系统时。任何时候你观察到一个糟糕的完成,你可以将它添加到数据库并做一些标签 - 随着时间的推移,监督的方法会变得更好。