利用NLP和elasticsearch进行语义search
我正在试验elasticsearch作为search服务器,我的任务是构build一个“语义”searchfunction。 从一个简短的短语如“我有爆pipe”系统应该推断用户正在search一个水pipe工,并返回在elasticsearch索引的所有pipe道工。
这可以直接在像elasticsearch这样的search服务器上完成,还是必须使用像Maui Indexer这样的自然语言处理(NLP)工具。 我手边的任务,文本分类的确切术语是什么? 虽然给定的文字很短,因为它是一个search短语。
可能有几种方法具有不同的实现复杂性。
最简单的方法是创build主题列表 (如pipe道),附上单词包 (如“pipe道”),用大多数关键字标识search请求,并只在指定主题中search(可以将字段topic
添加到弹性search文档中,在search过程中将其设置为必填项+
)。
当然,如果你有很多文件,手动创build话题列表和文字包是非常耗时的。 您可以使用机器学习来自动化一些任务。 基本上,在单词和/或文档之间进行距离测量就足以自动发现主题(例如通过数据聚类 )并将查询分类到这些主题中的一个。 这些技术的混合也可能是一个不错的select(例如,您可以手动创build主题并为其分配初始文档,但使用分类进行查询分配)。 看看维基百科有关潜在语义分析的文章,以更好地理解这个想法。 同时关注数据聚类和文档分类中的两篇链接文章。 是的, 茂宜索引可能成为这样的好帮手工具。
最后,您可以尝试构build一个“理解”短语含义的引擎(不仅仅是使用词频)并search适当的主题。 这很可能涉及自然语言处理和基于本体的知识库 。 但事实上,这个领域还处于积极的研究阶段,没有以前的经验,实现这样的东西很难。
您可能需要探索https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/ 。
它结合了semantic networks
和distributional semantics
。
当大多数开发人员需要文字embedded时,他们所看到的第一个也许是唯一的地方是word2vec,这是一个来自Google的neural networkalgorithm,用于从分布式语义计算文字embedded。 也就是说,它学习从句子中的词汇中预测词汇,而embedded词汇则是词汇的expression,从而做出最好的预测。 但是,即使在TB以后,文字的意义方面,你也不会从分布式语义单独学习。
一些结果
ConceptNet 5.5内置的Conceptb Numberbatch字embeddedfunction比以前的任何系统都更好地解决了这些SAT类比问题。 它得到了56.4%的问题是正确的。 Turney的SuperSim(2013)与之前最好的系统相比,达到了54.8%。 而且我们越来越接近于SAT类比的“人类”performance – 而特别聪明的人类当然可以得到更多的问题,普通大学申请者得到57.0%。