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


      搜索引擎可以說目前所有互聯網應用里技術含量最高的一種。盡管應用形式比較簡單:用戶輸入查詢詞,搜索引擎返回搜索結果。但是,搜索引擎需要達到的目標:更全、更快、更准。如何讓搜索結果更准確始終是搜索引擎的一大難題。

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

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

一、網絡爬蟲

  系統的數據,需要從幾個專業網站進行抓取。嘗試了幾個爬蟲,最后選取heritrix最為我們的爬蟲框架,選取它的原因主要是感覺配置項雖然多,但是比較靈活,特別適合我們的要求。當然,爬從技術組也自己嘗試實現了一個爬蟲,主要是爬取地址比較固定幾種數據。

二、詞庫的建立

  詞庫初步分為專業主題詞、行業普通詞庫、一般通用詞庫、廢詞庫、還有用於感情分析的詞庫。

專業詞庫的實現前期是采取人工的方式來處理的,並制作了若干的輔助工具,供專業人員來挑選、合並、刪除主題詞的操作。

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

三、引擎的搭建

  通過對采集的數據進行去噪、分段、特征提取,然后把相應的數據導入到solr里。

四、推薦算法

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

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

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

表示兩個特征項的相似度。

我們定義一下距離公式

 

我們對於每個文檔的特征項,兩兩求出特征項的相似度。通過這個距離公式

我們可以得出,對於每一個分類,以這些特征項為頂點,以相似度距離為邊,就構

成了如下的無向圖。

     (lawnet

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

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

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

  一種PRIM算法。

  第二種算法:先通過floyd算法,算出任意兩點的最短距離,作為一個邊;這些邊就組合成一個集合。然后給任意的頂點,從這個邊集合里找出包含這個頂點的前N個最小邊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM