日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于python的搜索引擎论文_技术分享 - 基于python构建搜索引擎系列——(四)检索模型...

發布時間:2024/4/11 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于python的搜索引擎论文_技术分享 - 基于python构建搜索引擎系列——(四)检索模型... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

構建好倒排索引之后,就可以開始檢索了。

檢索模型有很多,比如向量空間模型、概率模型、語言模型等。其中最有名的、檢索效果最好的是基于概率的BM25模型。

給定一個查詢Q和一篇文檔d,d對Q的BM25得分公式為:

公式中變量含義如下:

qtf:查詢中的詞頻

tf:文檔中的詞頻

ld:文檔長度

avg_l:平均文檔長度

N:文檔數量

df:文檔頻率

b,k1,k3:可調參數

這個公式看起來很復雜,我們把它分解一下,其實很容易理解。第一個公式是外部公式,一個查詢Q可能包含多個詞項,比如“蘋果手機”就包含“蘋果”和“手機”兩個詞項,我們需要分別計算“蘋果”和“手機”對某個文檔d的貢獻分數w(t,d),然后將他們加起來就是整個文檔d相對于查詢Q的得分。

第二個公式就是計算某個詞項t在文檔d中的得分,它包括三個部分。第一個部分是詞項t在查詢Q中的得分,比如查詢“中國人說中國話”中“中國”出現了兩次,此時qtf=2,說明這個查詢希望找到的文檔和“中國”更相關,“中國”的權重應該更大,但是通常情況下,查詢Q都很短,而且不太可能包含相同的詞項,所以這個因子是一個常數,我們在實現的時候可以忽略。

第二部分類似于TFIDF模型中的TF項。也就是說某個詞項t在文檔d中出現次數越多,則t越重要,但是文檔長度越長,tf也傾向于變大,所以使用文檔長度除以平均長度ld/avg_l起到某種歸一化的效果,k1和b是可調參數。

第三部分類似于TFIDF模型中的IDF項。也就是說雖然“的”、“地”、“得”等停用詞在某文檔d中出現的次數很多,但是他們在很多文檔中都出現過,所以這些詞對d的貢獻分并不高,接近于0;反而那些很稀有的詞如”糖尿病“能夠很好的區分不同文檔,這些詞對文檔的貢獻分應該較高。

所以根據BM25公式,我們可以很快計算出不同文檔t對查詢Q的得分情況,然后按得分高低排序給出結果。

下面是給定一個查詢句子sentence,根據BM25公式給出文檔排名的函數:

defresult_by_BM25(self,sentence):

seg_list=jieba.lcut(sentence,cut_all=False)

n,cleaned_dict=self.clean_list(seg_list)

BM25_scores={}

fortermincleaned_dict.keys():

r=self.fetch_from_db(term)

ifrisNone:

continue

df=r[1]

w=math.log2((self.N-df+0.5)/(df+0.5))

docs=r[2].split('\n')

fordocindocs:

docid,date_time,tf,ld=doc.split('\t')

docid=int(docid)

tf=int(tf)

ld=int(ld)

s=(self.K1*tf*w)/(tf+self.K1*(1-self.B+self.B*ld/self.AVG_L))

ifdocidinBM25_scores:

BM25_scores[docid]=BM25_scores[docid]+s

else:

BM25_scores[docid]=s

BM25_scores=sorted(BM25_scores.items(),key=operator.itemgetter(1))

BM25_scores.reverse()

iflen(BM25_scores)==0:

return0,[]

else:

return1,BM25_scores

首先將句子分詞得到所有查詢詞項,然后從數據庫中取出詞項對應的倒排記錄表,對記錄表中的所有文檔,計算其BM25得分,最后按得分高低排序作為查詢結果。

類似的,我們還可以對所有文檔按時間先后順序排序,越新鮮的新聞排名越高;還可以按新聞的熱度排序,越熱門的新聞排名越高。

關于熱度公式,我們認為一方面要兼顧相關度,另一方面也要考慮時間因素,所以是BM25打分和時間打分的一個綜合。

比較有名的熱度公式有兩個,一個是Hacker News的,另一個是Reddit的,他們的公式分別為:

可以看出,他們都是將新聞/評論的一個原始得分和時間組合起來,只是一個用除法,一個用加法。所以我們也依葫蘆畫瓢,”自創“了一個簡單的熱度公式:

用BM25得分加上新聞時間和當前時間的差值的倒數,k1k1和k2k2也是可調參數。

按時間排序和按熱度排序的函數和按BM25打分排序的函數類似,這里就不貼出來了,詳細情況可以看我的項目News_IR_Demo。

至此,搜索引擎的搜索功能已經實現了,你可以試著修改./web/search_engine.py的第167行的關鍵詞,看看搜索結果是否和你預想的排序是一樣的。不過由于我們的數據量只有1000個新聞,并不能涵蓋所有關鍵詞,更多的測試可以留給大家線下完成。

總結

以上是生活随笔為你收集整理的基于python的搜索引擎论文_技术分享 - 基于python构建搜索引擎系列——(四)检索模型...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。