Project Icon

KeyBERT

BERT驱动的智能关键词提取工具

KeyBERT是一款利用BERT嵌入技术的关键词提取工具。它通过计算文档和短语的嵌入表示之间的余弦相似度,识别出最能代表文档内容的关键词和短语。该工具支持Sentence-Transformers、Flair和Spacy等多种嵌入模型,适用于广泛的文本分析场景。KeyBERT还集成了Max Sum Distance和Maximal Marginal Relevance等算法,以提升结果多样性。此外,它还能与大型语言模型协同工作,为用户提供灵活高效的关键词提取方案。

PyPI - Python PyPI - 许可证 PyPI - PyPi 构建 在 Colab 中打开

KeyBERT

KeyBERT 是一种简单易用的关键词提取技术,它利用 BERT 嵌入来创建与文档最相似的关键词和关键短语。

相关的中等文章可以在这里找到。

目录

  1. 关于项目
  2. 入门 2.1. 安装 2.2. 基本用法 2.3. 最大和距离 2.4. 最大边际相关性 2.5. 嵌入模型
  3. 大型语言模型

1. 关于项目

返回目录

虽然已经有许多可用的关键词生成方法(例如,RakeYAKE!,TF-IDF 等),但我想创建一个非常基础但功能强大的方法来提取关键词和关键短语。这就是 KeyBERT 的由来!它使用 BERT 嵌入和简单的余弦相似度来找到文档中与整个文档最相似的子短语。

首先,使用 BERT 提取文档嵌入以获得文档级表示。然后,为 N-gram 词/短语提取词嵌入。最后,我们使用余弦相似度找到与文档最相似的词/短语。最相似的词可以被识别为最能描述整个文档的词。

KeyBERT 并非独一无二,它被创建为一种快速简便的方法来生成关键词和关键短语。虽然已经有许多优秀的论文和解决方案使用 BERT 嵌入(例如,123),但我找不到一个基于 BERT 的解决方案,它不需要从头开始训练,并且可以供初学者使用(如果我错了请纠正我!)。因此,目标是 pip install keybert 和最多 3 行代码就能使用。

2. 入门

返回目录

2.1. 安装

可以使用 pypi 进行安装:

pip install keybert

根据您将使用的转换器和语言后端,您可能需要安装更多内容。可能的安装有:

pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]

2.2. 用法

以下是提取关键词的最简单示例:

from keybert import KeyBERT

doc = """
         监督学习是机器学习的一项任务,旨在学习一个函数,
         该函数根据示例输入-输出对将输入映射到输出。它从
         由一组训练示例组成的标记训练数据中推断出一个函数。
         在监督学习中,每个示例都是一对,包括一个输入对象
         (通常是向量)和一个期望的输出值(也称为监督信号)。
         监督学习算法分析训练数据并产生一个推断函数,
         该函数可用于映射新的示例。最佳情况下,算法将能够
         正确确定未见实例的类别标签。这要求学习算法以
         "合理"的方式从训练数据推广到未见情况(参见归纳偏差)。
      """
kw_model = KeyBERT()
keywords = kw_model.extract_keywords(doc)

您可以设置 keyphrase_ngram_range 来设置结果关键词/关键短语的长度:

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 1), stop_words=None)
[('学习', 0.4604),
 ('算法', 0.4556),
 ('训练', 0.4487),
 ('类别', 0.4086),
 ('映射', 0.3700)]

要提取关键短语,只需将 keyphrase_ngram_range 设置为 (1, 2) 或更高,具体取决于您希望结果短语中包含的词数:

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 2), stop_words=None)
[('学习算法', 0.6978),
 ('机器学习', 0.6305),
 ('监督学习', 0.5985),
 ('算法分析', 0.5860),
 ('学习函数', 0.5850)]

我们可以通过简单地设置 highlight 来突出显示文档中的关键词:

keywords = kw_model.extract_keywords(doc, highlight=True)

注意:有关所有可能的转换器模型的完整概述,请参见 sentence-transformer。 对于英文文档,我建议使用 "all-MiniLM-L6-v2",对于多语言文档或任何其他语言,建议使用 "paraphrase-multilingual-MiniLM-L12-v2"

2.3. 最大和距离

为了使结果多样化,我们选取与文档最相似的 2 x top_n 个词/短语。然后,我们从这 2 x top_n 个词中选取所有 top_n 组合,并提取彼此余弦相似度最低的组合。

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(3, 3), stop_words='english',
                              use_maxsum=True, nr_candidates=20, top_n=5)
[('训练示例集', 0.7504),
 ('泛化训练数据', 0.7727),
 ('需要学习算法', 0.5050),
 ('监督学习算法', 0.3779),
 ('学习机器学习', 0.2891)]

2.4. 最大边际相关性

为了使结果多样化,我们可以使用最大边际相关性(MMR)来创建关键词/关键短语,这也是基于余弦相似度的。高度多样化的结果:

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(3, 3), stop_words='english',
                              use_mmr=True, diversity=0.7)
[('算法泛化训练', 0.7727),
 ('未见实例标签', 0.1649),
 ('新示例最优', 0.4185),
 ('确定类别标签', 0.4774),
 ('监督学习算法', 0.7502)]

低度多样化的结果:

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(3, 3), stop_words='english',
                              use_mmr=True, diversity=0.2)
[('算法泛化训练', 0.7727),
 ('监督学习算法', 0.7502),
 ('学习机器学习', 0.7577),
 ('学习算法分析', 0.7587),
 ('学习算法泛化', 0.7514)]

2.5. 嵌入模型

KeyBERT支持多种可用于嵌入文档和词语的嵌入模型:

  • Sentence-Transformers
  • Flair
  • Spacy
  • Gensim
  • USE

点击这里查看所有支持的嵌入模型的完整概述。

Sentence-Transformers
你可以从这里选择任何sentence-transformers模型, 并通过KeyBERT的model参数传递:

from keybert import KeyBERT
kw_model = KeyBERT(model='all-MiniLM-L6-v2')

或者选择一个带有自定义参数的SentenceTransformer模型:

from keybert import KeyBERT
from sentence_transformers import SentenceTransformer

sentence_model = SentenceTransformer("all-MiniLM-L6-v2")
kw_model = KeyBERT(model=sentence_model)

Flair
Flair允许你选择几乎任何公开可用的嵌入模型。Flair可以如下使用:

from keybert import KeyBERT
from flair.embeddings import TransformerDocumentEmbeddings

roberta = TransformerDocumentEmbeddings('roberta-base')
kw_model = KeyBERT(model=roberta)

你可以在这里选择任何🤗 transformers模型。

3. 大型语言模型

回到目录

通过KeyLLM,你现在可以使用大型语言模型(LLM)进行关键词提取。你可以在这里找到完整文档,但这里有两个常见的使用这种新方法的例子。在开始之前,请确保通过pip install openai安装OpenAI包。

首先,我们可以直接要求OpenAI提取关键词:

import openai
from keybert.llm import OpenAI
from keybert import KeyLLM

# 创建你的LLM
client = openai.OpenAI(api_key=MY_API_KEY)
llm = OpenAI(client)

# 将其加载到KeyLLM中
kw_model = KeyLLM(llm)

这将查询任何ChatGPT模型并要求它从文本中提取关键词。

其次,我们可以找到可能具有相同关键词的文档,并仅为这些文档提取关键词。 这比为每个单独的文档询问关键词要高效得多。很可能有些文档具有完全相同的关键词。这样做很简单:

import openai
from keybert.llm import OpenAI
from keybert import KeyLLM
from sentence_transformers import SentenceTransformer

# 提取嵌入
model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(MY_DOCUMENTS, convert_to_tensor=True)

# 创建你的LLM
client = openai.OpenAI(api_key=MY_API_KEY)
llm = OpenAI(client)

# 将其加载到KeyLLM中
kw_model = KeyLLM(llm)

# 提取关键词
keywords = kw_model.extract_keywords(MY_DOCUMENTS, embeddings=embeddings, threshold=.75)

你可以使用threshold参数来决定文档需要多相似才能获得相同的关键词。

引用

要在你的工作中引用KeyBERT,请使用以下bibtex引用:

@misc{grootendorst2020keybert,
  author       = {Maarten Grootendorst},
  title        = {KeyBERT: Minimal keyword extraction with BERT.},
  year         = 2020,
  publisher    = {Zenodo},
  version      = {v0.3.0},
  doi          = {10.5281/zenodo.4461265},
  url          = {https://doi.org/10.5281/zenodo.4461265}
}

参考文献

以下是用于创建KeyBERT的几个资源,但最重要的是,这些是创建令人印象深刻的关键词提取模型的优秀资源:

论文:

GitHub仓库:

MMR: 关键词/关键短语的选择是仿照以下模型:

注意: 如果你发现有论文或GitHub仓库提供了易于使用的BERT嵌入实现用于关键词/关键短语提取,请告诉我!我会确保在这个仓库中添加引用。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号