如何将BM25Okapi对象值保存到文件?

我们正在进行信息检索任务,需要根据查询对研究论文进行排序。

在清理数据并创建数据框后,我们已经对论文文本进行了分词处理,并需要将结果保存到文件中。

import sys#tokenized_corpus = [doc.split(" ") for doc in corpus]corpus = list(df.body_text)tokenized_corpus1 = [doc.split(" ") for doc in corpus[:20000]]tokenized_corpus2 = [doc.split(" ") for doc in corpus[20000:40000]]#tokenized_corpus3 = [doc.split(" ") for doc in corpus[40000:]]tokenized_corpus = tokenized_corpus1 + tokenized_corpus2 # + tokenized_corpus3 

上面的单元格创建了分词后的语料库。

with open('file.csv', 'w', newline='', encoding="utf-8") as f:    writer = csv.writer(f)    writer.writerows(tokenized_corpus)

然后我们将数据保存到.csv文件中。

之后,我们调用BM25Okapi方法

bm25 = BM25Okapi(tokenized_corpus)

由于这一步耗时过长且消耗数千兆字节的内存(经常导致错误),我们希望保存结果,以便不必每次都重新调用函数。

为了根据结果检索,我们使用了以下步骤。

query = "coronavirus origin"tokenized_query = query.split(" ")doc_scores = bm25.get_scores(tokenized_query)doc_scores

我无法将BM25对象的值保存到文件中,并且在源代码中没有看到任何相关方法。我应该怎么做?


回答:

问题问得不对。我们需要做的是保存对象,而不仅仅是BM25Okapi的结果。

所以,解决方案如下:

import pickle#To save bm25 objectwith open('bm25result', 'wb') as bm25result_file:    pickle.dump(bm25, bm25result_file)

然后,读取对象数据:

#to read bm25 objectwith open('bm25result', 'rb') as bm25result_file:    bm25result = pickle.load(bm25result_file)

详细描述可以在这篇文章中找到

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注