我正在尝试使用elasticsearch作为搜索服务器,我的任务是构建一个"语义"搜索功能.从短文本短语如"我有爆管",系统应该推断出用户正在搜索水管工并返回所有在elasticsearch中索引的管道工.
这可以直接在像elasticsearch这样的搜索服务器中完成,还是必须使用自然语言处理(NLP)工具,例如Maui Indexer.我手头的任务,文本分类的确切术语是什么?虽然给定的文本非常短,因为它是一个搜索短语.
ffr*_*end 69
可能存在具有不同实现复杂性的若干方法.
最简单的方法是创建主题列表(如管道),附加单词包(如"管道"),通过大多数关键字识别搜索请求并仅在指定主题中搜索(您可以topic在弹性搜索文档中添加字段并设置它+在搜索期间是强制性的).
当然,如果您有大量文档,手动创建主题列表和单词包非常耗时.您可以使用机器学习来自动执行某些任务.基本上,在单词和/或文档之间进行距离测量以自动发现主题(例如通过数据聚类)并将查询分类到这些主题之一就足够了.这些技术的混合也可能是一个不错的选择(例如,您可以手动创建主题并为其分配初始文档,但使用分类进行查询分配).看一下维基百科关于潜在语义分析的文章,以便更好地理解这个想法.还要注意有关数据聚类和文档分类的2篇链接文章.是的,Maui Indexer可能会成为这样的好帮手工具.
最后,您可以尝试构建一个"理解"该短语含义的引擎(不仅仅使用术语频率)并搜索适当的主题.最有可能的是,这将涉及自然语言处理和基于本体的知识库.但实际上,这个领域仍在积极研究中,如果没有以前的经验,你很难实现这样的东西.
小智 5
您可能想探索https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/。
\n\n它结合了semantic networks和distributional semantics。
\n\n\n当大多数开发人员需要词嵌入时,他们首先考虑的也是唯一的地方就是 word2vec,这是一种来自 Google 的神经网络算法,可以根据分布语义计算词嵌入。也就是说,它学习根据句子中的其他单词来预测句子中的单词,而嵌入是做出最佳预测的单词的表示。但即使在数 TB 的文本之后,单词含义的某些方面您也无法仅从分布语义中学习。
\n
一些结果
\n\n\n\nConceptNet 5.5 中内置的 ConceptNet Numberbatch 词嵌入比以前的任何系统都能更好地解决这些 SAT 类比问题。它的正确率是 56.4%。最好的可比先前系统,Turney\xe2\x80\x99s SuperSim (2013),获得了 54.8%。我们\xe2\x80\x99在SAT类比\xe2\x80\x94上越来越接近\xe2\x80\x9c人类水平\xe2\x80\x9d表现,而特别聪明的人当然可以答对更多问题,大学申请者的平均录取率为57.0%。
\n