使用NLP和Elasticsearch进行语义搜索
nlp
4
0

我正在尝试使用Elasticsearch作为搜索服务器,我的任务是构建“语义”搜索功能。从诸如“我有爆管”这样的短文字短语,系统应该推断出用户正在搜索管道工,并返回所有在Elasticsearch中索引的管道工。

可以直接在诸如elasticsearch之类的搜索服务器中完成此操作,还是必须使用诸如Maui Indexer之类的自然语言处理(NLP)工具。我手头的任务,文本分类的确切术语是什么?尽管给定的文本很短,因为它是一个搜索短语。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

可能有几种方法具有不同的实现复杂性。

最简单的方法是创建主题列表 (例如管道),附加单词袋 (例如“管道”),通过大多数关键字标识搜索请求并仅在指定主题中搜索(您可以将字段topic添加到弹性搜索文档中,在搜索过程中使用+将其设置为必填项)。

当然,如果您有大量文档,则手动创建主题列表和单词袋非常耗时。您可以使用机器学习来自动化一些任务。基本上,在单词和/或文档之间具有距离度量足以自动发现主题(例如,通过数据聚类 )并将查询分类为这些主题之一就足够了。混合使用这些技术也是一个不错的选择(例如,您可以手动创建主题并为其分配初始文档,但可以使用分类进行查询分配)。查看Wikipedia上有关潜在语义分析的文章,以更好地理解该思想。也要注意有关数据聚类文档分类的两篇链接文章。是的, Maui Indexer可以通过这种方式成为很好的帮助工具。

最后,您可以尝试构建一个引擎,以“理解”该短语的含义(而不仅仅是使用频率),并搜索适当的主题。最有可能的是,这将涉及自然语言处理基于本体的知识库 。但实际上,该领域仍在积极研究中,如果没有以前的经验,那么您将很难实现这样的目标。

收藏
评论

您可能需要探索https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/

它结合了semantic networksdistributional semantics

当大多数开发人员需要单词嵌入时,他们看到的第一个(也是唯一可能出现的地方)就是word2vec,这是Google的一种神经网络算法,可根据分布语义来计算单词嵌入。也就是说,它学会从周围的其他单词预测句子中的单词,并且嵌入是做出最佳预测的单词的表示。但是,即使在数TB的文本之后,单词含义的某些方面您也不会仅仅从分布语义学中学习。

一些结果

内置在ConceptNet 5.5中的ConceptNet Numberbatch单词嵌入比任何以前的系统都能更好地解决这些SAT类比。正确答案为56.4%。同类最佳的同类最佳系统,Turneyy的SuperSim(2013)获得了54.8%。而且,我们在SAT类比上越来越接近“人类水平”的表现—尽管特别聪明的人当然可以正确回答更多的问题,但普通大学申请者的平均回答是57.0%。

收藏
评论

语义搜索基本上是具有意义的搜索。 Elasticsearch默认使用JSON序列化,将有意义的搜索应用于JSON,您需要对其进行扩展以支持通过JSON-LD的边缘关系。然后,您可以在JSON-LD模式上应用语义分析,以将歧义管道工实体和爆裂管道上下文作为主题,谓词,对象关系来进行单词歧义处理。 Elasticsearch的语义搜索支持非常弱,但是您可以使用分面搜索和单词袋解决它。您可以为词库索引建立词库模式索引,然后对句子中的文本短语进行语义匹配。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号