更新:
embedding_model
来使用任何嵌入模型的能力ngram_vocab=True
在主题中使用短语Top2Vec是一种用于主题建模和语义搜索的算法。它能自动检测文本中存在的主题,并生成联合嵌入的主题、文档和词向量。一旦你训练了Top2Vec模型,你就可以:
有关其工作原理的更多详细信息,请参阅论文。
该算法的假设是,许多语义相似的文档表明存在一个潜在的主题。第一步是创建文档和词向量的联合嵌入。一旦文档和词被嵌入到向量空间中,算法的目标就是找到文档的密集聚类,然后识别哪些词吸引了这些文档聚集在一起。每个密集区域就是一个主题,而吸引文档到密集区域的词就是主题词。
<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>相似的文档会被放置在彼此附近,并靠近最能区分它们的词。
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/1ed989c5-795b-419b-9920-98944669f954.png" alt="" width=700 height="whatever"> </p>高维空间中的文档向量非常稀疏,降维有助于找到密集区域。每个点代表一个文档向量。
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/778c025d-0a8b-4225-af2c-6514d0e6a63c.png" alt="" width=700 height="whatever"> </p>彩色区域是文档的密集区域。红色点是不属于特定聚类的离群点。
<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>红色点是离群文档,不用于计算主题向量。紫色点是属于密集区域的文档向量,用于计算主题向量。
<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指南。
默认情况下,将使用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-encoder、universal-sentence-encoder-multilingual和distiluse-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个主题生成词云。
<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">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)
我们将搜索主题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()
这些"科学事实"到底是什么?我从未听说过这样的东西。科学从不证明或反驳任何理论 - 历史才会。
证明任何理论是错误的方法都是一样的。你检查理论做出的预测,并试图观察它们。如果你没有观察到,或者你观察到理论预测不会发生的事情,那么你就有了一些反对该理论的证据。如果理论无法修改以包含新的 观察结果,那么你就说它是错误的。
关于它是否真实的重点是,当人们想要预测时,不会浪费时间去思考现实可能是什么。在这样一个系统中,不需要考虑原子是否存在或是否有其他东西在那里使测量表明有原子。
...
搜索与"密码学"和"隐私"在语义上相似的文档内容。
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()
... 电子邮件和账户隐私、匿名性、文件加密、学术计算机政策、相关立法和参考资料、电子前沿基金会(EFF),以及与使用互联网和全球网络相关的其他隐私和权利问题。 ...
...
搜索与"空间"相似的词。
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 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号