KeyBERT adalah teknik ekstraksi kata kunci yang minimal dan mudah digunakan yang memanfaatkan penyematan BERT untuk membuat kata kunci dan frasa kunci yang paling mirip dengan dokumen.
Posting media yang sesuai dapat ditemukan di sini.
Kembali ke ToC
Meskipun sudah ada banyak metode yang tersedia untuk pembuatan kata kunci (misalnya, Rake, YAKE!, TF-IDF, dll.) Saya ingin membuat metode yang sangat mendasar namun ampuh untuk mengekstraksi kata kunci dan frasa kunci. Di sinilah KeyBERT berperan! Yang menggunakan penyematan BERT dan kesamaan kosinus sederhana untuk menemukan sub-frasa dalam dokumen yang paling mirip dengan dokumen itu sendiri.
Pertama, penyematan dokumen diekstraksi dengan BERT untuk mendapatkan representasi tingkat dokumen. Kemudian, penyematan kata diekstraksi untuk kata/frasa N-gram. Terakhir, kami menggunakan kesamaan kosinus untuk menemukan kata/frasa yang paling mirip dengan dokumen. Kata-kata yang paling mirip kemudian dapat diidentifikasi sebagai kata-kata yang paling menggambarkan keseluruhan dokumen.
KeyBERT sama sekali tidak unik dan dibuat sebagai metode cepat dan mudah untuk membuat kata kunci dan frasa unik. Meskipun ada banyak makalah dan solusi hebat di luar sana yang menggunakan penyematan BERT (misalnya, 1, 2, 3, ), saya tidak dapat menemukan solusi berbasis BERT yang tidak harus dilatih dari awal dan dapat digunakan untuk pemula ( koreksi saya jika saya salah! ). Jadi, tujuannya adalah pip install keybert
dan paling banyak 3 baris kode yang digunakan.
Kembali ke ToC
Instalasi dapat dilakukan menggunakan pypi:
pip install keybert
Anda mungkin ingin menginstal lebih banyak tergantung pada transformator dan backend bahasa yang akan Anda gunakan. Instalasi yang mungkin dilakukan adalah:
pip install keybert[flair]
pip install keybert[gensim]
pip install keybert[spacy]
pip install keybert[use]
Contoh yang paling minimal dapat dilihat di bawah ini untuk ekstraksi kata kunci:
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 )
Anda dapat mengatur keyphrase_ngram_range
untuk mengatur panjang kata kunci/frasa kunci yang dihasilkan:
>> > 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 )]
Untuk mengekstrak frasa kunci, cukup setel keyphrase_ngram_range
ke (1, 2) atau lebih tinggi, bergantung pada jumlah kata yang Anda inginkan dalam frasa kunci yang dihasilkan:
>> > 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 )]
Kita dapat menyorot kata kunci dalam dokumen hanya dengan mengatur highlight
:
keywords = kw_model . extract_keywords ( doc , highlight = True )
CATATAN : Untuk gambaran lengkap tentang semua model trafo yang mungkin, lihat kalimat-transformator. Saya akan menyarankan "all-MiniLM-L6-v2"
untuk dokumen berbahasa Inggris atau "paraphrase-multilingual-MiniLM-L12-v2"
untuk dokumen multibahasa atau bahasa lainnya.
Untuk mendiversifikasi hasil, kami mengambil 2 x top_n kata/frasa yang paling mirip dengan dokumen. Kemudian, kita ambil semua kombinasi top_n dari 2 x kata top_n dan mengekstrak kombinasi yang paling tidak mirip satu sama lain berdasarkan kesamaan kosinus.
>> > 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 )]
Untuk mendiversifikasi hasil, kita dapat menggunakan Maximal Margin Relevance (MMR) untuk membuat kata kunci/frasa kunci yang juga didasarkan pada cosine kesamaan. Hasil dengan keragaman tinggi :
>> > 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 )]
Hasil dengan keragaman rendah :
>> > 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 mendukung banyak model penyematan yang dapat digunakan untuk menyematkan dokumen dan kata:
Klik di sini untuk ikhtisar lengkap tentang semua model penyematan yang didukung.
Kalimat-Transformer
Anda dapat memilih model apa pun dari sentence-transformers
di sini dan meneruskannya melalui KeyBERT dengan model
:
from keybert import KeyBERT
kw_model = KeyBERT ( model = 'all-MiniLM-L6-v2' )
Atau pilih model SentenceTransformer dengan parameter Anda sendiri:
from keybert import KeyBERT
from sentence_transformers import SentenceTransformer
sentence_model = SentenceTransformer ( "all-MiniLM-L6-v2" )
kw_model = KeyBERT ( model = sentence_model )
Bakat
Flair memungkinkan Anda memilih hampir semua model penyematan yang tersedia untuk umum. Bakat dapat digunakan sebagai berikut:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
Anda dapat memilih apa saja? model transformator di sini.
Kembali ke ToC
Dengan KeyLLM
Anda baru dapat melakukan ekstraksi kata kunci dengan Large Language Model (LLM). Anda dapat menemukan dokumentasi lengkapnya di sini tetapi ada dua contoh yang umum dengan metode baru ini. Pastikan untuk menginstal paket OpenAI melalui pip install openai
sebelum Anda memulai.
Pertama, kita bisa meminta OpenAI langsung untuk mengekstrak kata kunci:
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 )
Ini akan menanyakan model ChatGPT apa pun dan memintanya mengekstrak kata kunci dari teks.
Kedua, kita dapat menemukan dokumen yang kemungkinan besar memiliki kata kunci yang sama dan hanya mengekstrak kata kunci tersebut. Ini jauh lebih efisien daripada menanyakan kata kunci untuk setiap dokumen. Kemungkinan besar ada dokumen yang memiliki kata kunci yang sama persis. Melakukannya sangatlah mudah:
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 )
Anda dapat menggunakan parameter threshold
untuk memutuskan seberapa mirip dokumen yang dibutuhkan agar dapat menerima kata kunci yang sama.
Untuk mengutip KeyBERT dalam karya Anda, silakan gunakan referensi bibtex berikut:
@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 }
}
Di bawah ini, Anda dapat menemukan beberapa sumber daya yang digunakan untuk pembuatan KeyBERT tetapi yang terpenting, ini adalah sumber daya yang luar biasa untuk membuat model ekstraksi kata kunci yang mengesankan:
Makalah :
Repo Github :
MMR : Pemilihan kata kunci/frasa kunci dimodelkan setelah:
CATATAN : Jika Anda menemukan repo paper atau github yang memiliki implementasi penyematan BERT yang mudah digunakan untuk ekstraksi kata kunci/frasa kunci, beri tahu saya! Saya akan memastikan untuk menambahkan referensi ke repo ini.