前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作年轻人的第一个python包【fastbm25】

制作年轻人的第一个python包【fastbm25】

作者头像
朴素人工智能
发布2022-11-29 16:31:45
6480
发布2022-11-29 16:31:45
举报
文章被收录于专栏:朴素人工智能朴素人工智能

最近做题的时候用到了bm25的文本匹配算法。我自己两年前就实现了一版。

https://github.com/zhusleep/fastbm25

我这个版本之前还没发到pypi,因此用起来比较麻烦。不能直接pip install **。而github上已有的bm25相关package都是低速版本,我的版本是有倒排索引来加速计算bm25得分的。因此今天把自己的库发到pypi了。过程相当顺利,没有审查,几分钟就制作好了。感叹国外的基础设施真是优秀!

使用方法

代码语言:javascript
复制
pip install fastbm25

关于如何把自己的包发到pypi,我是参考了这个帖子。

如何发布自己的 python 包?- 掘金juejin.cn/post/6844903950550827022

fastbm25做了什么?

The fast bm25 algorithm for text match optimized by reverted index. So the complexity will be no more than O(N(log N)). (利用倒排索引加速的bm25文本匹配算法,从一堆数据中寻找最相似的文本)

使用方法

1 从文档库中寻找k个最相似的文档; 如果是英文的话需要先分词

代码语言:javascript
复制
from fastbm25 import fastbm25

corpus = [
    "How are you !",
    "Hello Jack! Nice to meet you!",
    "I am from China, I like math."
]
tokenized_corpus = [doc.lower().split(" ") for doc in corpus]
model = fastbm25(tokenized_corpus)
query = "where are you from".lower().split()
result = model.top_k_sentence(query,k=1)
print(result)

The result is list of tuple like [('I am from China, I like math.', 2, -0.06000000000000001)]

对于中文输入不用分词,可以使用这个方法

代码语言:javascript
复制
from fastbm25 import fastbm25

corpus = [
    "张三考上了清华",
    "李四考上了北大",
    "我烤上了地瓜.",
    "我们都有光明的未来."
]
model = fastbm25(corpus)
query = "我考上了大学"
result = model.top_k_sentence(query,k=1)
print(result)

[('李四考上了北大', 1, 1.21)]

2 根据已有的文档库,计算任意两个文档之间的相似度;(这两个文档不必事先出现在文档库中)

代码语言:javascript
复制
from fastbm25 import fastbm25
corpus = [
    "How are you !",
    "Hello Jack! Nice to meet you!",
    "I am from China, I like math."
]
tokenized_corpus = [doc.lower().split(" ") for doc in corpus]
model = fastbm25(tokenized_corpus)
document_a = "where are you from".lower().split()
document_b = "where are you".lower().split()

result = model.similarity_bm25(document_a,document_b)
print(result)

> 1.944187075527278

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朴素人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • fastbm25做了什么?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档