首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以加快熊猫的功能,从它的索引位置从列表中提取出来?

有没有一种方法可以加快熊猫的功能,从它的索引位置从列表中提取出来?
EN

Stack Overflow用户
提问于 2022-06-25 10:50:30
回答 1查看 56关注 0票数 1

我正在使用一些机器学习,从SBERT python模块中计算出最常见的K个字符串,给出输入复制和目标语料库(在本例中是100 K和100 K的大小)。

该模块相当健壮,比较完成得非常快,返回给我一个字典列表,其中包含格式中每个输入字符串的最类似的比较:

{Corpus ID : Similarity_Score}

然后,我可以用用作索引的查询字符串列表将其封装在一个dataframe中。给我一个格式的数据文件:

Query_String | Corpus_ID | Similarity_Score

然而,我的方法的主要时间接收器是将语料库ID与语料库中的字符串匹配,因此我知道输入对应的字符串是什么。我目前的解决方案是将熊猫apply与pandarallel模块结合使用:

代码语言:javascript
复制
def retrieve_match_text(row, corpus_list):

    dict_obj = row['dictionary']

    corpus_id = dict_obj['corpus_id'] #corpus ID is an integer representing the index of a list
    score = dict_obj['score']

    matched_corpus_keyword = corpus_list[corpus_id] #list index lookup (speed this up)

    return [matched_corpus_keyword, score]

.....
.....

# expand the dictionary into two columns and match the corpus KW to its ID
output_df[['Matched Corpus KW', 'Score']] = output_df.parallel_apply(
                            lambda x: pd.Series(retrieve_match_text(x, sentence_list_2)), axis=1)

对于一个100 K的输入语料库,与另一个100 K大小的语料库相比,这需要大约2分钟的时间。然而,我正在处理的是一个几百万的语料库,所以这里任何速度的进一步提高都是受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-25 12:20:33

如果我正确地阅读了这个问题,您将看到列: Query_String和字典(这是正确的吗?)

然后corpus_id和分数存储在那本字典里。

你对熊猫的第一个目标应该是以熊猫友好的方式工作。避免嵌套字典,直接将值存储在列中。在那之后,你可以使用高效的熊猫操作。

索引列表对你来说不是很慢。如果您正确地这样做,它可以是一个完整的表合并/连接,并且不需要任何缓慢的逐行应用和字典查找。

第一步。如果你这样做:

代码语言:javascript
复制
target_corpus = pd.Series(sentence_list_2, name="target_corpus")

然后,您有一个索引系列的一个语料库(以前的“列表查找”)。

步骤2.在主数据帧中获取scorecorpus_id

步骤3.使用pd.merge连接corpus_id上的输入语料库和target_corpus索引,并使用how="left" (只有与现有corpus_id匹配的项是相关的)。这应该是一个有效的方法,这是一个完整的数据操作。

开发并测试解决方案和一个小子集(1K),以快速迭代,然后增长。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72753242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档