我正在尝试使用elasticsearch作为搜索服务器,我的任务是构建一个“语义”搜索功能。从像“我有一个爆裂的管道”这样的短文本短语中,系统应该推断用户正在搜索一个管道工,并返回在elasticsearch中索引的所有管道工。
这可以直接在elasticsearch这样的搜索服务器中完成吗,或者我是否必须使用自然语言处理(NLP)工具,例如Maui Indexer。我手头的任务文本分类的确切术语是什么?尽管给定的文本非常短,因为它是搜索短语。
发布于 2012-01-08 10:28:35
可能有几种方法具有不同的实现复杂性。
最简单的方法是创建list of topic (如管道),附加bag of words (如“”),通过大多数关键字识别搜索请求,并仅在指定的主题中搜索(您可以在弹性搜索文档中添加字段topic,并在搜索过程中使用+将其设置为必填项)。
当然,如果你有很多文档,手动创建主题列表和词袋是非常耗时的。您可以使用机器学习自动执行某些任务。基本上,只需测量单词和/或文档之间的距离就可以自动发现主题(例如,通过data clustering),并将将查询分类到这些主题之一。这些技术的混合也可能是一个很好的选择(例如,您可以手动创建主题并将初始文档分配给它们,但使用分类来进行查询分配)。看看维基百科在上的文章,以更好地理解这个想法。还请注意data clustering和document classification上的两篇链接文章。是的,通过这种方式,Maui Indexer可能会成为很好的助手工具。
最后,您可以尝试构建一个引擎来“理解”短语的含义(而不仅仅是使用词频),并搜索适当的主题。最有可能的是,这将涉及自然语言处理和基于本体的知识库。但事实上,这个领域仍在积极研究中,如果没有以前的经验,你将很难实现这样的东西。
发布于 2016-11-22 02:52:56
您可能想探索一下https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/。
它结合了semantic networks和distributional semantics。
当大多数开发人员需要单词嵌入时,他们第一个也可能是唯一的地方是word2vec,这是谷歌的一个神经网络算法,它从分布语义计算单词嵌入。也就是说,它学习从周围的单词中预测句子中的单词,而嵌入是做出最佳预测的单词的表示。但是,即使在数‘t的文本之后,您也无法仅从分布语义中了解词义的某些方面。
一些结果
ConceptNet Numberbatch word embeddings内置于ConceptNet 5.5中,比任何以前的系统都能更好地解决这些ConceptNet类比问题。它获得了56.4%的问题正确。之前最具可比性的系统,特尼的SuperSim (2013),获得了54.8%的支持率。在SAT的类比测试中,我们越来越接近“人类水平”的表现--虽然特别聪明的人当然可以答对更多的问题,但大学申请者的平均答题率为57.0%。
发布于 2019-01-25 07:13:32
语义搜索基本上是有意义的搜索。Elasticsearch默认使用JSON序列化,要将有意义的搜索应用于JSON,您需要扩展它以通过JSON-LD支持边缘关系。然后,您可以将您的语义分析应用于JSON-LD模式,以消除单词、管道工实体和爆裂管道上下文作为主语、谓语、宾语关系的歧义。Elasticsearch的语义搜索支持非常弱,但你可以使用分面搜索和词袋来绕过它。您可以为管道术语的同义词库架构建立索引,然后对句子中的文本短语进行语义匹配。
https://stackoverflow.com/questions/8772692
复制相似问题