KeyBERT は、BERT 埋め込みを利用してドキュメントに最も類似したキーワードとキーフレーズを作成する、最小限で使いやすいキーワード抽出技術です。
対応するメディア投稿はここで見つけることができます。
目次に戻る
キーワード生成にはすでに多くの方法 (Rake、YAKE!、TF-IDF など) が利用可能ですが、私はキーワードとキーフレーズを抽出するための非常に基本的でありながら強力な方法を作成したいと考えていました。ここでKeyBERTの出番です!これは、BERT 埋め込みと単純なコサイン類似度を使用して、文書自体に最も類似した文書内のサブフレーズを見つけます。
まず、BERT を使用してドキュメントの埋め込みが抽出され、ドキュメント レベルの表現が取得されます。次に、N グラムの単語/フレーズの単語埋め込みが抽出されます。最後に、コサイン類似度を使用して、ドキュメントに最も類似した単語/フレーズを見つけます。最も類似した単語が、文書全体を最もよく表す単語として特定されます。
KeyBERT は決してユニークなものではなく、キーワードやキーフレーズを作成するための迅速かつ簡単な方法として作成されました。 BERT 埋め込み (例: 1、2、3、) を使用する優れた論文やソリューションは数多くありますが、ゼロからトレーニングする必要がなく、初心者でも使用できる BERT ベースのソリューションは見つかりませんでした。 (間違っていたら訂正してください! )。したがって、目標はpip install keybert
と最大 3 行のコードの使用でした。
目次に戻る
インストールは pypi を使用して実行できます。
pip install keybert
使用するトランスフォーマーと言語バックエンドに応じて、さらにインストールする必要がある場合があります。可能なインストールは次のとおりです。
pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]
キーワードの抽出に関する最も最小限の例を以下に示します。
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 ()
keywords = kw_model . extract_keywords ( doc )
keyphrase_ngram_range
を設定して、結果のキーワード/キーフレーズの長さを設定できます。
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 1 , 1 ), stop_words = None )
[( 'learning' , 0.4604 ),
( 'algorithm' , 0.4556 ),
( 'training' , 0.4487 ),
( 'class' , 0.4086 ),
( 'mapping' , 0.3700 )]
キーフレーズを抽出するには、結果のキーフレーズに含める単語の数に応じて、 keyphrase_ngram_range
(1, 2) 以上に設定するだけです。
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 1 , 2 ), stop_words = None )
[( 'learning algorithm' , 0.6978 ),
( 'machine learning' , 0.6305 ),
( 'supervised learning' , 0.5985 ),
( 'algorithm analyzes' , 0.5860 ),
( 'learning function' , 0.5850 )]
highlight
を設定するだけで、文書内のキーワードを強調表示できます。
keywords = kw_model . extract_keywords ( doc , highlight = True )
注: 考えられるすべてのトランスフォーマー モデルの完全な概要については、文章トランスフォーマーを参照してください。英語のドキュメントの場合は"all-MiniLM-L6-v2"
、多言語ドキュメントまたはその他の言語の場合は"paraphrase-multilingual-MiniLM-L12-v2"
のいずれかを推奨します。
結果を多様化するために、ドキュメントに最も類似した上位 n 個の単語/フレーズを 2 つ選択します。次に、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 )
[( 'set training examples' , 0.7504 ),
( 'generalize training data' , 0.7727 ),
( 'requires learning algorithm' , 0.5050 ),
( 'supervised learning algorithm' , 0.3779 ),
( 'learning machine learning' , 0.2891 )]
結果を多様化するために、最大マージン関連性 (MMR) を使用して、同じくコサイン類似性に基づくキーワード/キーフレーズを作成できます。多様性の高い結果:
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 3 , 3 ), stop_words = 'english' ,
use_mmr = True , diversity = 0.7 )
[( 'algorithm generalize training' , 0.7727 ),
( 'labels unseen instances' , 0.1649 ),
( 'new examples optimal' , 0.4185 ),
( 'determine class labels' , 0.4774 ),
( 'supervised learning algorithm' , 0.7502 )]
多様性が低い結果:
>> > kw_model . extract_keywords ( doc , keyphrase_ngram_range = ( 3 , 3 ), stop_words = 'english' ,
use_mmr = True , diversity = 0.2 )
[( 'algorithm generalize training' , 0.7727 ),
( 'supervised learning algorithm' , 0.7502 ),
( 'learning machine learning' , 0.7577 ),
( 'learning algorithm analyzes' , 0.7587 ),
( 'learning algorithm generalize' , 0.7514 )]
KeyBERT は、ドキュメントや単語の埋め込みに使用できる多くの埋め込みモデルをサポートしています。
サポートされているすべての埋め込みモデルの完全な概要については、ここをクリックしてください。
センテンストランスフォーマー
ここでsentence-transformers
から任意のモデルを選択し、それをmodel
を使用して KeyBERT に渡すことができます。
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 を使用すると、公開されているほぼすべての埋め込みモデルを選択できます。フレアは次のように使用できます。
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
どれでも選択できます?トランスフォーマーモデルはこちら。
目次に戻る
KeyLLM
使用すると、ラージ言語モデル (LLM) を使用してキーワード抽出を新たに実行できるようになります。完全なドキュメントはここにありますが、この新しい方法に共通する例が 2 つあります。開始する前に、 pip install openai
を通じて OpenAI パッケージをインストールしてください。
まず、OpenAI にキーワードを抽出するよう直接依頼できます。
import openai
from keybert . llm import OpenAI
from keybert import KeyLLM
# Create your LLM
client = openai . OpenAI ( api_key = MY_API_KEY )
llm = OpenAI ( client )
# Load it in KeyLLM
kw_model = KeyLLM ( llm )
これにより、任意の ChatGPT モデルがクエリされ、テキストからキーワードを抽出するように求められます。
2 番目に、同じキーワードが含まれる可能性が高い文書を見つけて、それらのキーワードのみを抽出できます。これは、すべてのドキュメントに対してキーワードを尋ねるよりもはるかに効率的です。まったく同じキーワードを含むドキュメントが存在する可能性があります。これを行うのは簡単です。
import openai
from keybert . llm import OpenAI
from keybert import KeyLLM
from sentence_transformers import SentenceTransformer
# Extract embeddings
model = SentenceTransformer ( 'all-MiniLM-L6-v2' )
embeddings = model . encode ( MY_DOCUMENTS , convert_to_tensor = True )
# Create your LLM
client = openai . OpenAI ( api_key = MY_API_KEY )
llm = OpenAI ( client )
# Load it in KeyLLM
kw_model = KeyLLM ( llm )
# Extract keywords
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 : キーワード/キーフレーズの選択は以下をモデルにしました。
注: キーワード/キーフレーズ抽出用の BERT 埋め込みの使いやすい実装が記載されている論文または github リポジトリを見つけたら、お知らせください。このリポジトリへの参照を必ず追加します。