@创建于:20210708
@修改于:20210708, 20221104
文章目录
1 概述
KeyBERT 是一种最小且易于使用的关键字提取技术,它利用 BERT 嵌入来创建与文档最相似的关键字和关键短语。可以在此处找到相应的媒
虽然已经有很多方法可用于关键字生成(例如,Rake、YAKE!、TF-IDF 等),但我想创建一个非常基本但功能强大的方法来提取关键字和关键短语。这就是 KeyBERT 的用武之地!它使用 BERT 嵌入和简单余弦相似度来查找文档中与文档本身最相似的子短语。
首先,使用 BERT 提取文档嵌入以获得文档级表示。然后,然后使用词嵌入模型来提取N-gram 词/短语。最后,使用余弦相似度来找到与文档最相似的单词/短语。然后可以将最相似的词识别为最能描述整个文档的词。
KeyBERT 绝不是独一无二的,它是作为创建关键字和关键短语的一种快速简便的方法而创建的。尽管有很多优秀的论文和解决方案使用了 BERT 嵌入(例如 BERT-keyphrase-extraction, BERT-Keyword-Extractor ),但我找不到一个基于 BERT 的解决方案,它不需要从头开始训练并且可以用于初学者(如我错了请纠正我!)。因此,目标是 pip install keybert 和最多使用 3 行代码。
2 方法介绍
2.1 安装
pip install keybert
2.2 KeyBERT(model)
# 该模型只有一个参数,model,默认为 'paraphrase-MiniLM-L6-v2'
__init__(self, model='paraphrase-MiniLM-L6-v2')
# 可以自己设定具体的模型名称
kw_model = KeyBERT(model="paraphrase-multilingual-MiniLM-L12-v2")
KeyBERT的参数只有一个,即预训练好的模型。
KeyBERT 0.4.0中,model默认的是 paraphrase-MiniLM-L6-v2,
KeyBERT 0.6.0中,model默认的是 all-MiniLM-L6-v2
Transformers库中的模型,在 keybert==0.6.0版本支持,0.4.0中不支持。
def __init__(self, model="all-MiniLM-L6-v2"):
"""KeyBERT initialization
Arguments:
model: Use a custom embedding model.
The following backends are currently supported:
* SentenceTransformers
* 🤗 Transformers
* Flair
* Spacy
* Gensim
* USE (TF-Hub)
You can also pass in a string that points to one of the following
sentence-transformers models:
* https://www.sbert.net/docs/pretrained_models.html
"""
2.3 extract_keywords参数介绍
extract_keywords(self,
docs: Union[str, List[str]],
candidates: List[str] = None,
keyphrase_ngram_range: Tuple[int, int] = (1, 1),
stop_words: Union[str, List[str]] = 'english',
top_n: int = 5,
min_df: int = 1,
use_maxsum: bool = False,
use_mmr: bool = False,
diversity: float = 0.5,
nr_candidates: int = 20,
vectorizer: CountVectorizer = None,
highlight: bool = False)
提示:
建议迭代单个文档,因为它们需要最少的内存。即使速度较慢,您也不太可能遇到内存错误。
多个文件:
有一个选项可以为多个文档提取关键字,这比提取多个单个文档要快。但是,这种方法假设您可以将词汇表中所有单词的词嵌入保留在内存中,这可能会很麻烦。如果您的硬件有限,我建议不要使用此选项并简单地迭代文档。
参数:
- docs:要提取关键字/关键短语的文档
- candidates:要使用的候选关键字/关键短语,而不是从文档中提取它们
- keyphrase_ngram_range:提取的关键字/关键短语的长度(以字为单位)
- stop_words:要从文档中删除的停用词
- top_n:返回前 n 个关键字/关键短语
- min_df:如果需要提取多个文档的关键字,则一个单词在所有文档中的最小文档频率
- use_maxsum: 是否使用 Max Sum Similarity 来选择keywords/keyphrases
- use_mmr:是否使用最大边际相关性(MMR)进行关键字/关键短语的选择
- diversity:如果 use_mmr 设置为 True,结果的多样性在 0 和 1 之间
- nr_candidates:如果 use_maxsum 设置为 True,要考虑的候选数
- vectorizer:从 scikit-learn 传入你自己的 CountVectorizer
- highlight:是否打印文档并突出显示其关键字/关键短语。注意:如果传递了多个文档,这将不起作用。
返回:
关键字:文档的前 n 个关键字及其各自的距离到输入文件
3、代码实践
3.1 英文示例
from keybert import KeyBERT
doc = """
Supervised learning is the machine learning task of learning a function that
maps an input to an output based on example input-output pairs. It infers a
function from labeled training data consisting of a set of training examples.
In supervised learning, each example is a pair consisting of an input object
(typically a vector) and a desired output value (also called the supervisory signal).
A supervised learning algorithm analyzes the training data and produces an inferred function,
which can be used for mapping new examples. An optimal scenario will allow for the
algorithm to correctly determine the class labels for unseen instances. This requires
the learning algorithm to generalize from the training data to unseen situations in a
'reasonable' way (see inductive bias).
"""
kw_model = KeyBERT(model='paraphrase-MiniLM-L6-v2')
print("naive ...")
keywords = kw_model.extract_keywords(doc)
print(keywords)
print("\nkeyphrase_ngram_range ...")
keywords = kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 2)
KeyBERT:基于BERT的关键字提取技术

KeyBERT是一个简单且高效的BERT基关键字提取工具,通过余弦相似度找到与文档最相似的子短语作为关键字。它可以使用多种预训练模型,包括SentenceTransformers、Transformers和Flair。此外,还提供了ZhKeyBERT用于中文文本处理。在代码实践中,展示了如何设置参数以提取不同长度的关键短语、多样化结果以及使用MMR算法提高多样性。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



