Top2Vec

Top2Vec

自动化主题检测和语义搜索的创新技术

Top2Vec是一种创新的主题建模和语义搜索算法。它能自动检测文本主题,生成主题、文档和词向量的联合嵌入。该算法无需停用词列表和词形还原,可处理短文本,并提供内置搜索功能。通过识别文档密集聚类,Top2Vec为文本分析和信息检索提供了强大的解决方案。

Top2Vec主题建模语义搜索机器学习自然语言处理Github开源项目

更新:

  • 新增预训练的transformer模型
  • 通过传递可调用对象到embedding_model来使用任何嵌入模型的能力
  • 长文档的分块选项
  • 通过设置ngram_vocab=True在主题中使用短语

Top2Vec

Top2Vec是一种用于主题建模语义搜索的算法。它能自动检测文本中存在的主题,并生成联合嵌入的主题、文档和词向量。一旦你训练了Top2Vec模型,你就可以:

  • 获取检测到的主题数量。
  • 获取主题。
  • 获取主题大小。
  • 获取层次化主题。
  • 通过关键词搜索主题。
  • 通过主题搜索文档。
  • 通过关键词搜索文档。
  • 寻找相似词。
  • 寻找相似文档。
  • 通过RESTful-Top2Vec暴露模型

有关其工作原理的更多详细信息,请参阅论文

优势

  1. 自动找出主题数量。
  2. 不需要停用词列表。
  3. 无需词干提取/词形还原。
  4. 适用于短文本。
  5. 创建联合嵌入的主题、文档和词向量。
  6. 内置搜索功能。

它是如何工作的?

该算法的假设是,许多语义相似的文档表明存在一个潜在的主题。第一步是创建文档和词向量的联合嵌入。一旦文档和词被嵌入到向量空间中,算法的目标就是找到文档的密集聚类,然后识别哪些词吸引了这些文档聚集在一起。每个密集区域就是一个主题,而吸引文档到密集区域的词就是主题词。

算法步骤:

1. 使用Doc2VecUniversal Sentence EncoderBERT Sentence Transformer创建联合嵌入的文档和词向量。

相似的文档会被放置在彼此附近,并靠近最能区分它们的词。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/c04265a4-ea0b-4369-9c4d-0ae91e8ece09.svg?sanitize=true" alt="" width=600 height="whatever"> </p>

2. 使用UMAP创建文档向量的低维嵌入。

高维空间中的文档向量非常稀疏,降维有助于找到密集区域。每个点代表一个文档向量。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/1ed989c5-795b-419b-9920-98944669f954.png" alt="" width=700 height="whatever"> </p>

3. 使用HDBSCAN找到文档的密集区域。

彩色区域是文档的密集区域。红色点是不属于特定聚类的离群点。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/778c025d-0a8b-4225-af2c-6514d0e6a63c.png" alt="" width=700 height="whatever"> </p>

4. 对于每个密集区域,计算原始维度中文档向量的质心,这就是主题向量。

红色点是离群文档,不用于计算主题向量。紫色点是属于密集区域的文档向量,用于计算主题向量。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/de14dc20-6b67-47d6-ab6e-5913208649ba.svg?sanitize=true" alt="" width=600 height="whatever"> </p>

5. 找出与结果主题向量最接近的n个词向量。

按接近程度排序的最接近词向量成为主题词。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/1aecd99d-3971-4e43-afff-fbe1c382f8c2.svg?sanitize=true" alt="" width=600 height="whatever"> </p>

安装

安装Top2Vec的简单方法是:

pip install top2vec

要安装预训练的通用句子编码器选项:

pip install top2vec[sentence_encoders]

要安装预训练的BERT句子转换器选项:

pip install top2vec[sentence_transformers]

要安装索引选项:

pip install top2vec[indexing]

使用

from top2vec import Top2Vec model = Top2Vec(documents)

重要参数:

  • documents:输入语料库,应该是字符串列表。

  • speed:此参数将决定模型训练的速度。 'fast-learn'选项是最快的,但会生成最低质量的向量。'learn'选项会学习更好质量的向量,但需要更长的训练时间。'deep-learn'选项会学习最佳质量的向量,但需要大量的训练时间。

  • workers:用于训练模型的工作线程数量。更多的线程会导致更快的训练。

训练好的模型可以保存和加载。

model.save("filename") model = Top2Vec.load("filename")

更多信息请查看API指南

预训练嵌入模型 <a name="pretrained"></a>

默认情况下,将使用Doc2Vec生成联合词和文档嵌入。但是,还有预训练的embedding_model选项用于生成联合词和文档嵌入:

  • universal-sentence-encoder
  • universal-sentence-encoder-multilingual
  • distiluse-base-multilingual-cased
from top2vec import Top2Vec model = Top2Vec(documents, embedding_model='universal-sentence-encoder')

对于大型数据集和词汇非常独特的数据集,doc2vec可能会产生更好的结果。这将从头开始训练一个doc2vec模型。这种方法与语言无关。但是,多种语言不会对齐。

使用通用句子编码器选项会快得多,因为这些是预训练的高效模型。通用句子编码器选项建议用于较小的数据集。它们也是英语或多语言模型覆盖的语言的大型数据集的好选择。它也建议用于多语言数据集。

distiluse-base-multilingual-cased预训练句子转换器建议用于多语言数据集和多语言通用句子编码器未覆盖的语言。转换器比通用句子编码器选项明显慢。

有关universal-sentence-encoderuniversal-sentence-encoder-multilingualdistiluse-base-multilingual-cased的更多信息。

引用

如果你想在你的工作中引用Top2Vec,这是当前的参考:

@article{angelov2020top2vec, title={Top2Vec: Distributed Representations of Topics}, author={Dimo Angelov}, year={2020}, eprint={2008.09470}, archivePrefix={arXiv}, primaryClass={cs.CL} }

示例

训练模型

在20newsgroups数据集上训练Top2Vec模型。

from top2vec import Top2Vec from sklearn.datasets import fetch_20newsgroups newsgroups = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes')) model = Top2Vec(documents=newsgroups.data, speed="learn", workers=8)

获取主题数量

这将返回Top2Vec在数据中发现的主题数量。

>>> model.get_num_topics() 77

获取主题大小

这将返回与每个主题最相似的文档数量。主题按大小降序排列。

topic_sizes, topic_nums = model.get_topic_sizes()

返回:

  • topic_sizes:与每个主题最相似的文档数量。

  • topic_nums:将返回每个主题的唯一索引。

获取主题

这将按大小降序返回主题。

topic_words, word_scores, topic_nums = model.get_topics(77)

返回:

  • topic_words:对于每个主题,返回前50个词,按与主题的语义相似度排序。

  • word_scores:对于每个主题,返回前50个词与主题的余弦相似度得分。

  • topic_nums:将返回每个主题的唯一索引。

搜索主题

我们将搜索与medicine最相似的主题。

topic_words, word_scores, topic_scores, topic_nums = model.search_topics(keywords=["medicine"], num_topics=5)

返回:

  • topic_words:对于每个主题,返回前50个词,按与主题的语义相似度排序。

  • word_scores:对于每个主题,返回前50个词与主题的余弦相似度得分。

  • topic_scores:对于每个主题,将返回与搜索关键词的余弦相似度。

  • topic_nums:将返回每个主题的唯一索引。

>>> topic_nums [21, 29, 9, 61, 48] >>> topic_scores [0.4468, 0.381, 0.2779, 0.2566, 0.2515]

主题21是与"medicine"最相似的主题,余弦相似度为0.4468。(值可以从最不相似的0到最相似的1)

生成词云

使用主题编号,你可以生成词云。我们将为与我们的"医学"主题搜索最相似的前5个主题生成词云。

topic_words, word_scores, topic_scores, topic_nums = model.search_topics(keywords=["medicine"], num_topics=5) for topic in topic_nums: model.generate_topic_wordcloud(topic)
<img src="https://yellow-cdn.veclightyear.com/ab5030c0/2e7bb4c2-dc13-4fd7-9970-d3e30afa62d2.png" alt="" width=700 height="whatever"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/7047a167-7afb-4729-9daf-5751659210f7.png" alt="" width=700 height="whatever"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/354d4273-cbbe-4349-8cfe-87f452d5f70f.png" alt="" width=700 height="whatever"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/5d374f30-0c95-41d3-8d6b-5bd37c5728bd.png" alt="" width=700 height="whatever"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/ffa4b6c3-dedb-486b-8277-774870136463.png" alt="" width=700 height="whatever">

按主题搜索文档

我们将搜索主题48,这个主题似乎是关于科学的。

documents, document_scores, document_ids = model.search_documents_by_topic(topic_num=48, num_docs=5)

返回:

  • documents:文档列表,最相似的排在前面。
  • doc_scores:文档与主题的语义相似度。文档和主题向量的余弦相似度。
  • doc_ids:文档的唯一标识。如果没有给定标识,则为原始语料库中文档的索引。

对于每个返回的文档,我们将打印其内容、得分和文档编号。

documents, document_scores, document_ids = model.search_documents_by_topic(topic_num=48, num_docs=5) for doc, score, doc_id in zip(documents, document_scores, document_ids): print(f"文档:{doc_id},得分:{score}") print("-----------") print(doc) print("-----------") print()

文档:15227,得分:0.6322

进化既是事实也是理论。进化理论代表了科学试图解释进化事实的尝试。进化理论不提供事实;它解释事实。可以安全地假设所有科学理论既不提供也不成为事实,而是解释事实。我建议你做一些适当的一般科学阅读。对于普通人来说,关于进化的一个很好的起点是斯蒂芬·杰·古尔德的《母鸡的牙齿和马的脚趾》[第253-262页]中的"进化作为事实和理论"。这本出版物中还有许多其他有用的信息。

文档:14515,得分:0.6186

这些"科学事实"到底是什么?我从未听说过这样的东西。科学从不证明或反驳任何理论 - 历史才会。

-蒂姆

文档:9433,得分:0.5997

证明任何理论是错误的方法都是一样的。你检查理论做出的预测,并试图观察它们。如果你没有观察到,或者你观察到理论预测不会发生的事情,那么你就有了一些反对该理论的证据。如果理论无法修改以包含新的观察结果,那么你就说它是错误的。

例如,人们过去相信地球是10,000年前创造的。但是,当证据表明这个理论的预测不是真实的时候,它就被放弃了。

文档:11917,得分:0.5845

关于它是否真实的重点是,当人们想要预测时,不会浪费时间去思考现实可能是什么。在这样一个系统中,不需要考虑原子是否存在或是否有其他东西在那里使测量表明有原子。

而且,每次物理学使用新模型时,人们不必重新写一个新的存在理论。

...

通过关键词语义搜索文档

搜索与"密码学"和"隐私"在语义上相似的文档内容。

documents, document_scores, document_ids = model.search_documents_by_keywords(keywords=["cryptography", "privacy"], num_docs=5) for doc, score, doc_id in zip(documents, document_scores, document_ids): print(f"文档:{doc_id},得分:{score}") print("-----------") print(doc) print("-----------") print()

文档:16837,得分:0.6112

... 电子邮件和账户隐私、匿名性、文件加密、学术计算机政策、相关立法和参考资料、电子前沿基金会(EFF),以及与使用互联网和全球网络相关的其他隐私和权利问题。 ...

文档:16254,得分:0.5722

... 总统今天宣布了一项新计划,该计划将联邦政府与行业联合起来,通过自愿计划来提高电话通信的安全性和隐私性,同时满足执法部门的合法需求。 ...

...

相似关键词

搜索与"空间"相似的词。

words, word_scores = model.similar_words(keywords=["space"], keywords_neg=[], num_words=20) for word, score in zip(words, word_scores): print(f"{word} {score}")

空间 1.0 美国航空航天局 0.6589 航天飞机 0.5976 探索 0.5448 行星 0.5391 任务 0.5069 发射 0.4941 望远镜 0.4821 天文 0.4696 约翰逊航天中心 0.4549 艾姆斯研究中心 0.4515 卫星 0.446 站 0.4445 轨道 0.4438 太阳 0.4386 天文学 0.4378 天文台 0.4355 设施 0.4325 推进 0.4251 航空航天 0.4226

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多