成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

BM25Retriever 支持中文嗎?

發(fā)布于 2024-6-6 11:27
瀏覽
0收藏

llama_index 的BM25Retriever 基于Rank-BM25[1]的Okapi BM25。

Rank-BM25, 兩行代碼實現搜索引擎

Rank-BM25? 提供了多種BM25算法, 如Okapi BM25?, BM25L?, BM25+等。它的使用也非常簡單

安裝

pip install rank_bm25

初始化

以Okapi BM25為例

from rank_bm25 import BM25Okapi

corpus = [
    "Hello there good man!",
    "It is quite windy in London",
    "How is the weather today?"
]
# 分詞使用空格
tokenized_corpus = [doc.split(" ") for doc in corpus]

bm25 = BM25Okapi(tokenized_corpus)

查詢(文檔排名)

query = "windy London"
tokenized_query = query.split(" ")

doc_scores = bm25.get_scores(tokenized_query)
# array([0.        , 0.93729472, 0.        ])

??:Rank-BM25 不做任何文本預處理。如果想要做諸如轉換為小寫、停用詞移除、詞干提取等操作,需要自己實現。所以如果要進行處理中文,就需要用到專業(yè)的中文分詞器了。

中文分詞器

分詞器是自然語言處理(NLP)中非常重要的工具,它們將連續(xù)的文本字符串分割成有意義的單元,通常是單詞或短語。中文分詞器的實現很多,如 jieba,SnowNLP,THULAC?, HanLP? 等,可以根據需要選擇,這里就以 jieba 為例。

安裝

pip install nltk jieba

下載停用詞

import nltk
nltk.download('stopwords')

import jieba
from typing import List

def chinese_tokenizer(text: str) -> List[str]:
    tokens = jieba.lcut(text)
    return [token for token in tokens if token not in stopwords.words('chinese')]

corpus = [
    "床前明月光",
    "疑是地上霜",
    "舉頭望明月",
    "低頭思故鄉(xiāng)",
]
tokenized_corpus = [chinese_tokenizer(doc) for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus)
query = "床前明月光"
tokenized_query = chinese_tokenizer(query)

doc_scores = bm25.get_scores(tokenized_query)
doc_scores
# array([1.8621931, 0.       , 0.       , 0.       ])

BM25Retriever

BM25Retriever? 基于 Rank-BM25?,可以指定分詞方法,如果不指定,則使用默認的tokenize_remove_stopwords。

from nltk.stem import PorterStemmer

def tokenize_remove_stopwords(text: str) -> List[str]:
    # lowercase and stem words
    text = text.lower()
    stemmer = PorterStemmer()
    words = list(simple_extract_keywords(text))
    return [stemmer.stem(word) for word in words]

如果想使用前面定義的chinese_tokenizer, 只需這樣做

from llama_index.retrievers.bm25 import BM25Retriever
from llama_index.core import Document
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.response.notebook_utils import display_source_node

documents = [Document(text="床前明月光"),
             Document(text="疑是地上霜"),
             Document(text="舉頭望明月"),
             Document(text="低頭思故鄉(xiāng)")]

splitter = SentenceSplitter(chunk_size=1024)
nodes = splitter.get_nodes_from_documents(documents)

retriever = BM25Retriever.from_defaults(
    nodes=nodes,
    similarity_top_k=2,
    tokenizer=chinese_tokenizer
)

nodes = retriever.retrieve("故鄉(xiāng)")
for node in nodes:
    display_source_node(node)

BM25Retriever 支持中文嗎?-AI.x社區(qū)

已知問題

昨天介紹了 DuckDBRetriever , 它基于DuckDB fts,于是不可避免地有以下幾個缺點,

1. 不支持中文

2. 不能增量更新,只能重建索引BM25Retriever 的缺點是不能持久化,只能全部加載內存中。

有沒有既可以持久化,又支持中文分詞,并且可以對索引進行增加和刪除的呢?

BM25Retriever 支持中文嗎?-AI.x社區(qū)

BM25算法

Okapi BM25,一般簡稱 BM25 算法,在 20 世紀 70 年代到 80 年代,由英國一批信息檢索領域的計算機科學家發(fā)明。這里的 BM 是 “最佳匹配”(Best Match)的縮寫,Okapi 是第一個使用這種方法的信息獲取系統(tǒng)的名稱。在信息檢索領域,BM25 算法是工程實踐中舉足輕重的重要的 Baseline 算法。迄今為止距 BM25 的提出已經過去三十多年,但是這個算法依然在很多信息檢索的任務中表現優(yōu)異,是很多工程師首選的算法之一。

BM25(Best Match 25)是一種用于信息檢索的統(tǒng)計算法,主要用于評估搜索詞(query)和文檔之間的相關性。它基于概率檢索模型,通過計算查詢詞與文檔之間的相關性得分來對文檔進行排序。BM25算法的核心思想可以概括為以下幾點:

1.查詢詞權重(IDF):BM25使用逆文檔頻率(Inverse Document Frequency,IDF)來衡量查詢詞的重要性。IDF的計算公式為:BM25Retriever 支持中文嗎?-AI.x社區(qū)

IDF公式其中,(N)是文檔集合中的文檔總數,(n(qi))是包含查詢詞(qi)的文檔數量。IDF值越高,表示查詢詞在文檔集合中越稀有,其權重越大。

2.詞頻和文檔長度的標準化:BM25考慮到詞頻(TF)與相關性之間的關系是非線性的。為了平衡詞頻對得分的影響,引入了飽和函數和文檔長度因子。標準化后的詞頻公式為:

BM25Retriever 支持中文嗎?-AI.x社區(qū)

TF公式其中,(tf(qi, d))是查詢詞在文檔中的詞頻,(Ld)是文檔長度,(Lavg)是文檔集合中所有文檔的平均長度,(k1)和(b)是調節(jié)參數。

3.查詢詞頻率的加權:如果查詢較長,某些詞在查詢中出現頻率較高,BM25還會考慮這些詞在查詢中的頻率,通過引入另一個調節(jié)參數(k3)來調整查詢詞頻率對得分的影響。

4.最終得分計算:BM25的最終得分是查詢中每個詞與文檔相關性得分的加權和。公式為:

BM25Retriever 支持中文嗎?-AI.x社區(qū)

Score其中,(R(qi, d))是查詢詞(qi)與文檔(d)的相關性得分。

BM25算法因其簡單、高效且效果良好,在搜索引擎和信息檢索系統(tǒng)中得到了廣泛應用。它的參數(k1)、(b)和(k3)可以根據具體應用場景進行調整,以達到最佳的檢索效果。

收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 成人av色| 亚洲美女一区 | 日本成人免费网站 | 国产伦精品一区二区三区四区视频 | 天天射网站 | 国产98色在线 | 日韩 | 欧美性一区二区三区 | 国产97在线视频 | 伊人网91 | 久久久久成人精品 | 亚洲永久免费 | 亚洲一区免费 | 久久综合久久久 | 日韩视频―中文字幕 | 久久精品国产亚洲一区二区三区 | 91精品免费视频 | 久久久免费| h视频免费在线观看 | 人人叉| 国产区一区 | 国产成人综合久久 | 亚洲男人的天堂网站 | 欧洲一级毛片 | 国产日韩欧美在线一区 | 国产精品综合一区二区 | 国产探花在线精品一区二区 | 久久99精品久久久久 | 91在线精品播放 | 国产精品久久影院 | 一级欧美 | 老司机精品福利视频 | 国产中文视频 | 中文字幕不卡视频在线观看 | 日韩欧美高清 | 亚洲视频一区二区三区四区 | 久久久久国产精品午夜一区 | 欧美视频精品 | 国产高清视频一区 | 福利成人 | 综合在线视频 | 亚洲精品亚洲人成人网 |