Elasticsearch全文检索与余弦相似度
- 2019 年 10 月 6 日
- 笔记
一、单个词语的全文搜索
见 《Elasticsearch全文搜索与TF/IDF》https://my.oschina.net/stanleysun/blog/1594220
二、多个词语的全文搜索
向量空间模型
向量空间模型提供了一种对文档进行多词查询对方法,返回值就是一个数字,它表示相关度。这个模型,将文档和查询当作向量。
一个向量就是一个一维数组,比如[2, 3.5, 5, 2.1]。在向量里面,每个数字都是一个词语对TF-IDF权重. TF-IDF的解释参见我的另一篇文章《Elasticsearch全文搜索与TF/IDF》https://my.oschina.net/stanleysun/blog/1594220
举例
假如现在我要在文档中搜索“Python语言”,系统会如何处理呢?
Python是一个非常用词,权重高一点,比如5;语言是一个常用词,权重低一点,比如2;那么,我们就可以将这个词组转变为一个二维向量 [5,2]。 可以用图表示:
假设我们有3个文档,分别是
1. Python语言基础
2. Python的高级应用
3. 各种编程语言的比较
我们可以对每一个文档创建相似的向量,向量中包含“Python”和“语言”两个维度。
文档1: Python, 语言 —— [5, 2]
文档2: Python, _____ —— [5, 0]
文档3: ____, 语言 —— [0, 2]
我们比较查询向量和3个文档向量后,可以发现,查询向量的夹角最小,也就是说文档1最接近我们的查询。
另外,根据中学知识我们知道,夹角越小,余弦值越大。因此,我们可以用余弦值来表示相似度。
上面是2维向量的相似度,用同样的方式,可以算出多维向量的相似度,也就是可以计算多个词与文档的相关性。
相关文章