搜索引擎-一種提示詞推薦算法

      搜索引擎能夠說目前全部互聯網應用裏技術含量最高的一種。儘管應用形式比較簡單:用戶輸入查詢詞,搜索引擎返回搜索結果。可是,搜索引擎須要達到的目標:更全、更快、更準。如何讓搜索結果更準確始終是搜索引擎的一大難題。算法

  公司最近在開發某行業的垂直搜索引擎,我做爲該項目組的核心成員主要是負責核心算法的研究工做。我也是剛開始接觸這個行業,目前還處於摸索階段,還有很長的路要走。網絡

言歸正傳,先談一下這個項目的背景。這個項目是一個行業性質的垂直搜索引擎。用戶分爲兩大類:普通用戶、專業用戶。整個項目分爲:爬蟲技術組,引擎組,大數據分析組和算法組。引擎的爬蟲、詞庫的創建和引擎的選型都不是本文的重點,就一筆帶過,重點在於推薦算法的設計。框架

1、網絡爬蟲工具

  系統的數據,須要從幾個專業網站進行抓取。嘗試了幾個爬蟲,最後選取heritrix最爲咱們的爬蟲框架,選取它的緣由主要是感受配置項雖然多,可是比較靈活,特別適合咱們的要求。固然,爬從技術組也本身嘗試實現了一個爬蟲,主要是爬取地址比較固定幾種數據。大數據

2、詞庫的創建網站

  詞庫初步分爲專業主題詞、行業普通詞庫、通常通用詞庫、廢詞庫、還有用於感情分析的詞庫。搜索引擎

專業詞庫的實現前期是採起人工的方式來處理的,並製做了若干的輔助工具,供專業人員來挑選、合併、刪除主題詞的操做。spa

後面幾種詞庫的實現,是先選用了搜狗等幾種輸入法的詞庫庫爲基礎,在這些詞庫的基礎上對爬蟲爬出來的文檔進行向量化。設計

3、引擎的搭建3d

  經過對採集的數據進行去噪、分段、特徵提取,而後把相應的數據導入到solr裏。

4、推薦算法

  當用戶輸入關鍵詞查詢的時候,如何讓用戶查詢更準確呢?咱們設想,針對用戶的輸入,咱們若是能給出若干個和用戶輸入的關鍵詞類似度很近的詞,以這些做爲查詢條件,若是咱們的算法足夠好,搜索出來的結果會大大增長檢索的準確度。下面給出具體的算法思路:

從向量化的角度來看,每一篇文檔都對應一個向量,其中表示特徵項i.

是一個向量由詞、詞的位置、TF等義項來肯定的。對於版本1,咱們只取了詞、詞的位置。咱們先用分類規則,把文檔分紅若干類,基於每一類進行以下計算:

表示兩個特徵項的類似度。

咱們定義一下距離公式

 

咱們對於每一個文檔的特徵項,兩兩求出特徵項的類似度。經過這個距離公式

咱們能夠得出,對於每個分類,以這些特徵項爲頂點,以類似度距離爲邊,就構

成了以下的無向圖。

     (lawnet

  類比於wordnet和知網的hownet咱們稱這個無向圖,爲lawnet

  那咱們的設想問題就轉化爲:選取任意一個頂點,找出若干個(譬如10個)由這些頂點組成的最小生成樹或者邊權之和最小的最小子圖。這是一個局部最優的隨機問題。也就是說,咱們只須要知足用戶承認的體驗程度便可,若是機率爲90%,也就是說,當用戶輸入10000次,咱們能成功給出9000次的提示詞就好了。

目前的解法我嘗試了兩種:

  一種PRIM算法。

  第二種算法:先經過floyd算法,算出任意兩點的最短距離,做爲一個邊;這些邊就組合成一個集合。而後給任意的頂點,從這個邊集合裏找出包含這個頂點的前N個最小邊。

相關文章
相關標籤/搜索