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