MaartenGr/KeyBERT
Minimal keyword extraction with BERT
KeyBERT – 使用 BERT 嵌入的关键词提取
是什么 – 一个极小的 Python 库,可将任意文本文档转换为最具代表性的词语或短语列表。它通过以下方式实现:
- 从 BERT 风格的模型(例如 Sentence-Transformer)获取 文档 嵌入。
- 获取文本中每个候选 n-gram 的嵌入。
- 根据候选项与文档嵌入的余弦相似度进行排序。
由于繁重的工作由预训练语言模型完成,您只需几行代码,无需模型训练即可使用。
核心功能
| 功能 | 说明 |
|---|---|
| 零训练关键词提取 | 使用现成的 BERT 嵌入;只需 pip install keybert 并调用 extract_keywords。 |
| 可自定义 n-gram 长度 | keyphrase_ngram_range 允许您请求单个词、2-gram、3-gram 等。 |
| 多样性控制 | use_maxsum(最大和距离)和 use_mmr(最大边际相关性)可让您在相关性与多样性之间权衡。 |
| 多种嵌入后端支持 | 支持 Sentence-Transformers、Flair、spaCy、Gensim、TensorFlow-Hub 的 Universal Sentence Encoder,或轻量级 Model2Vec 基础设置。 |
| 基于 LLM 的提取(KeyLLM) | 可选包装器,将文本发送至 OpenAI 聊天模型并返回其关键词建议。 |
| 高亮显示 | 快速可视化原始文档中的提取关键词。 |
快速开始
pip install keybert # 核心包
pip install keybert[flair] # 可选后端(flair, spacy, gensim, use)
from keybert import KeyBERT
doc = "Supervised learning is the machine learning task of learning a function …"
kw_model = KeyBERT() # 默认使用小型英文 Sentence-Transformer
keywords = kw_model.extract_keywords(doc)
print(keywords) # [('learning', 0.46), ('algorithm', 0.45), …]
更改 n-gram 大小: kw_model.extract_keywords(doc, keyphrase_ngram_range=(1,2))
添加多样性: kw_model.extract_keywords(doc, use_mmr=True, diversity=0.7)
高亮: kw_model.extract_keywords(doc, highlight=True)
何时使用
- 文档摘要 – 从报告、文章或研究论文中提取最显著的术语。
- 搜索引擎索引 – 生成用于快速查找的标签。
- 下游 NLP 的预处理 – 将关键词输入聚类、推荐或主题建模管道。
- 快速原型开发 – 无需训练自定义关键词模型;一行代码即可开箱即用。
局限性
- 质量取决于嵌入模型 – 性能较差的 Transformer 会产生噪声关键词。
- Max-sum / MMR 是组合性的 – 为保证合理运行时间,
nr_candidates必须保持较小。 - LLM 模式需要外部 API 密钥并产生费用。
- 无内置多语言分词 – 需要多语言嵌入模型(例如
paraphrase-multilingual-MiniLM-L12-v2)。
进一步阅读与资源
- Medium 文章:Keyword extraction with BERT(README 中的链接)。
- 完整文档:https://maartengr.github.io/KeyBERT/
- 引用:
@misc{grootendorst2020keybert, …}
KeyBERT 是现代 BERT 嵌入与经典关键词提取任务之间的实用、低代码桥梁,是任何需要从文本中快速获取可解释标签的人的得力工具。
相关
- 项目
- 项目
- 项目
- 项目