KeyBERT เป็นเทคนิคการแยกคีย์เวิร์ดเพียงเล็กน้อยและใช้งานง่าย ซึ่งใช้ประโยชน์จากการฝัง BERT เพื่อสร้างคีย์เวิร์ดและคีย์วลีที่คล้ายกับเอกสารมากที่สุด
สามารถดูโพสต์สื่อที่เกี่ยวข้องได้ที่นี่
กลับไปที่ ToC
แม้ว่าจะมีวิธีการมากมายอยู่แล้วสำหรับการสร้างคีย์เวิร์ด (เช่น Rake, YAKE!, TF-IDF ฯลฯ) ฉันต้องการสร้างวิธีการพื้นฐานแต่ทรงพลังในการแยกคีย์เวิร์ดและคีย์วลี นี่คือจุดที่ KeyBERT เข้ามา! ซึ่งใช้การฝัง BERT และความคล้ายคลึงโคไซน์อย่างง่ายเพื่อค้นหาวลีย่อยในเอกสารที่คล้ายกับเอกสารนั้นมากที่สุด
ขั้นแรก การฝังเอกสารจะถูกแยกด้วย BERT เพื่อให้ได้การแสดงระดับเอกสาร จากนั้น การแยกคำที่ฝังไว้สำหรับคำ/วลี N-gram สุดท้ายนี้ เราใช้ความคล้ายคลึงโคไซน์เพื่อค้นหาคำ/วลีที่คล้ายกับเอกสารมากที่สุด คำที่คล้ายกันมากที่สุดสามารถระบุได้ว่าเป็นคำที่อธิบายเอกสารทั้งหมดได้ดีที่สุด
KeyBERT ไม่ได้มีเอกลักษณ์เฉพาะตัวแต่อย่างใด และถูกสร้างขึ้นมาเพื่อให้เป็นวิธีที่ง่ายและรวดเร็วในการสร้างคำสำคัญและวลีสำคัญ แม้ว่าจะมีเอกสารและวิธีแก้ปัญหาที่ยอดเยี่ยมมากมายที่ใช้การฝัง BERT (เช่น 1, 2, 3, ) แต่ฉันไม่พบโซลูชันที่ใช้ BERT ซึ่งไม่จำเป็นต้องได้รับการฝึกอบรมตั้งแต่เริ่มต้นและสามารถใช้สำหรับผู้เริ่มต้นได้ ( แก้ไขฉันถ้าฉันผิด! ) ดังนั้นเป้าหมายคือ pip install keybert
และโค้ดที่ใช้งานได้สูงสุด 3 บรรทัด
กลับไปที่ ToC
การติดตั้งสามารถทำได้โดยใช้ 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"
สำหรับเอกสารหลายภาษาหรือภาษาอื่น ๆ
ในการกระจายผลลัพธ์ เราจะนำคำ/วลีที่คล้ายกันมากที่สุด 2 x top_n มาไว้ในเอกสาร จากนั้น เราจะนำชุดค่าผสม top_n ทั้งหมดจากคำ 2 x 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 )]
เพื่อกระจายผลลัพธ์ เราสามารถใช้ Maximal Margin Relevance (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
ที่นี่และส่งผ่าน 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 ช่วยให้คุณสามารถเลือกโมเดลการฝังเกือบทุกรูปแบบที่เปิดเผยต่อสาธารณะ ไหวพริบสามารถใช้ได้ดังนี้:
from keybert import KeyBERT
from flair . embeddings import TransformerDocumentEmbeddings
roberta = TransformerDocumentEmbeddings ( 'roberta-base' )
kw_model = KeyBERT ( model = roberta )
คุณสามารถเลือกอันไหนก็ได้ ? โมเดลหม้อแปลงอยู่ที่นี่
กลับไปที่ ToC
ด้วย KeyLLM
คุณสามารถดำเนินการแยกคำหลักใหม่ด้วย Large Language Models (LLM) คุณสามารถดูเอกสารฉบับเต็มได้ที่นี่ แต่มีสองตัวอย่างที่ใช้กันทั่วไปในวิธีการใหม่นี้ ตรวจสอบให้แน่ใจว่าได้ติดตั้งแพ็คเกจ OpenAI ผ่าน pip install 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 และขอให้แยกคำหลักออกจากข้อความ
ประการที่สอง เราสามารถค้นหาเอกสารที่มีแนวโน้มว่าจะมีคำหลักเดียวกัน และแยกเฉพาะคำหลักสำหรับสิ่งเหล่านั้นเท่านั้น วิธีนี้จะมีประสิทธิภาพมากกว่ามากหากถามคีย์เวิร์ดสำหรับเอกสารทุกฉบับ อาจมีเอกสารที่มีคำหลักเหมือนกันทุกประการ การทำเช่นนี้ตรงไปตรงมา:
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 แต่ที่สำคัญที่สุดคือแหล่งข้อมูลที่น่าทึ่งสำหรับการสร้างแบบจำลองการแยกคำหลักที่น่าประทับใจ:
เอกสาร :
Repos Github :
MMR : การเลือกคำสำคัญ/วลีสำคัญถูกจำลองหลังจาก:
หมายเหตุ : หากคุณพบเอกสารหรือ repo github ที่มีการใช้งานการฝัง BERT ที่ใช้งานง่ายสำหรับการแยกคำหลัก/วลีสำคัญ โปรดแจ้งให้เราทราบ! ฉันจะตรวจสอบให้แน่ใจว่าได้เพิ่มการอ้างอิงไปยัง repo นี้