BERTopic 如何检索代表性文档的索引?

093gszye  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(88)

get_topic_info()方法返回一个包含列Representative_Docs的数据框,在其中我们将文档内容作为字符串找到。我如何将它们链接回训练集?我可以检索它们在训练文档列表中的索引吗?

cig3rfwq

cig3rfwq1#

遗憾的是,如果不将文档本身与代表性文档进行匹配,这是不容易实现的。除此之外,您可以查看内部 _extract_representative_docs 函数,该函数创建代表性文档。它返回了许多事物,其中包括我认为的索引。

rqenqsqc

rqenqsqc2#

代表文档是特殊的(例如聚类中心或类似的)还是仅仅是来自该主题的随机文档样本?

eanckbw9

eanckbw93#

它们是通过从每个聚类中随机抽取一个子集(500个文档)并计算它们的c-TF-IDF表示来计算的。然后,它们与主题c-TF-IDF矩阵的余弦相似度进行计算。选择最相似的文档并应用一定的多样性以防止重复。您可以在此处找到完整代码:
BERTopic/bertopic/_bertopic.py
第3441行 in 62e97dd
| | def_extract_representative_docs(self, |

2nbm6dog

2nbm6dog4#

这个方法有什么问题?:
-- 创建一个单列的Pandas DataFrame;在BERTopic之前,将唯一的文档ID分配给上游
-- 每个文档(行)都有自己的唯一Doc_ID键
document_ids = document_df['Doc_ID']
-- 将Pandas索引重置,以确保DataFrame的索引从零开始
document_ids.reset_index(drop=True, inplace=True)
-- 计算嵌入模型
-- 对文档执行BERTopic
-- 将结果主题(簇ID)附加回原始文档

topics_df = pd.DataFrame(topics, column=['Topics'])
documents_ids['Topics'] = topics_df

---或另一种方法---
new_df = pd.merge(document_ids, topics_df, left_index=True, right_index=True, how='inner')
-- 将'new_df'与原始documents_df进行LEFT JOIN,连接键为Doc_ID
....等
我提出这种方法是因为,在我的情况下,我的文档实际上经过了数据准备和过滤过程,其中一些文档行(句子)没有在下游的BERTopic中被处理。这解释了reset_index()步骤,因为原始的顺序索引在整个过程中被中断和分隔,而BERTopic簇索引没有被中断。
话虽如此,我还是好奇docs.index()函数是否也可以用于将BERTopic结果附加回原始文档数据框,对于每个单独的文档(行)。

ivqmmu1c

ivqmmu1c5#

这种方法有什么问题?:
我没有看到任何错误,但这可能有效。请注意,我故意展示了 _extract_representative_docs 方法,因为它不需要匹配字符串。这里的预处理应该不相关,因为我们只对返回的索引感兴趣,然后可以将它们与您在处理之前使用的原始文档进行匹配。

相关问题