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維向量的相似度,用同樣的方式,可以算出多維向量的相似度,也就是可以計算多個詞與文檔的相關性。

相關文章

Elasticsearch全文搜索與TF/IDF

推薦引擎演算法 – 猜你喜歡的東西