get_topic_info()方法返回一个包含列Representative_Docs的数据框,在其中我们将文档内容作为字符串找到。我如何将它们链接回训练集?我可以检索它们在训练文档列表中的索引吗?
get_topic_info()
Representative_Docs
cig3rfwq1#
遗憾的是,如果不将文档本身与代表性文档进行匹配,这是不容易实现的。除此之外,您可以查看内部 _extract_representative_docs 函数,该函数创建代表性文档。它返回了许多事物,其中包括我认为的索引。
_extract_representative_docs
rqenqsqc2#
代表文档是特殊的(例如聚类中心或类似的)还是仅仅是来自该主题的随机文档样本?
eanckbw93#
它们是通过从每个聚类中随机抽取一个子集(500个文档)并计算它们的c-TF-IDF表示来计算的。然后,它们与主题c-TF-IDF矩阵的余弦相似度进行计算。选择最相似的文档并应用一定的多样性以防止重复。您可以在此处找到完整代码:BERTopic/bertopic/_bertopic.py第3441行 in 62e97dd| | def_extract_representative_docs(self, |
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)附加回原始文档
document_ids = document_df['Doc_ID']
document_ids.reset_index(drop=True, inplace=True)
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结果附加回原始文档数据框,对于每个单独的文档(行)。
new_df = pd.merge(document_ids, topics_df, left_index=True, right_index=True, how='inner')
reset_index()
docs.index()
ivqmmu1c5#
这种方法有什么问题?:我没有看到任何错误,但这可能有效。请注意,我故意展示了 _extract_representative_docs 方法,因为它不需要匹配字符串。这里的预处理应该不相关,因为我们只对返回的索引感兴趣,然后可以将它们与您在处理之前使用的原始文档进行匹配。
5条答案
按热度按时间cig3rfwq1#
遗憾的是,如果不将文档本身与代表性文档进行匹配,这是不容易实现的。除此之外,您可以查看内部
_extract_representative_docs
函数,该函数创建代表性文档。它返回了许多事物,其中包括我认为的索引。rqenqsqc2#
代表文档是特殊的(例如聚类中心或类似的)还是仅仅是来自该主题的随机文档样本?
eanckbw93#
它们是通过从每个聚类中随机抽取一个子集(500个文档)并计算它们的c-TF-IDF表示来计算的。然后,它们与主题c-TF-IDF矩阵的余弦相似度进行计算。选择最相似的文档并应用一定的多样性以防止重复。您可以在此处找到完整代码:
BERTopic/bertopic/_bertopic.py
第3441行 in 62e97dd
| | def_extract_representative_docs(self, |
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)附加回原始文档
---或另一种方法---
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结果附加回原始文档数据框,对于每个单独的文档(行)。ivqmmu1c5#
这种方法有什么问题?:
我没有看到任何错误,但这可能有效。请注意,我故意展示了
_extract_representative_docs
方法,因为它不需要匹配字符串。这里的预处理应该不相关,因为我们只对返回的索引感兴趣,然后可以将它们与您在处理之前使用的原始文档进行匹配。