
OCTIS (การเพิ่มประสิทธิภาพและการเปรียบเทียบแบบจำลองหัวข้อนั้นง่าย) มีจุดมุ่งหมายในการฝึกอบรมวิเคราะห์และเปรียบเทียบโมเดลหัวข้อซึ่งมีการประเมินพารามิเตอร์ไฮเปอร์พารามิเตอร์ที่ดีที่สุดโดยใช้วิธีการเพิ่มประสิทธิภาพแบบเบย์ งานนี้ได้รับการยอมรับในการสาธิตของ EACL2021 คลิกเพื่ออ่านกระดาษ!
สารบัญ
คุณสามารถติดตั้ง Octis ด้วยคำสั่งต่อไปนี้:
pip ติดตั้ง octis
คุณสามารถค้นหาข้อกำหนดในไฟล์ข้อกำหนด. txt
เพื่อทำความเข้าใจวิธีการใช้ Octis ได้อย่างง่ายดายเราขอเชิญคุณลองบทเรียนของเรา :)
| ชื่อ | การเชื่อมโยง |
|---|---|
| วิธีการสร้างรูปแบบหัวข้อและประเมินผลลัพธ์ (LDA บน 20NewSgroups) | |
| วิธีการเพิ่มประสิทธิภาพ hyperparameters ของโมเดลหัวข้อประสาท (CTM บน M10) |
คำแนะนำสองประการเกี่ยวกับวิธีการใช้ octis กับตัวอย่างที่เป็นประโยชน์:
การสอนเกี่ยวกับการสร้างแบบจำลองหัวข้อเกี่ยวกับเนื้อเพลง:
ในการโหลดชุดข้อมูลที่ผ่านการประมวลผลไว้แล้วอย่างใดอย่างหนึ่งดังต่อไปนี้:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . fetch_dataset ( "20NewsGroup" )เพียงใช้หนึ่งในชื่อชุดข้อมูลที่แสดงด้านล่าง หมายเหตุ: เป็นกรณีที่ไวต่อการเป็นกรณี!
| ชื่อใน Octis | แหล่งที่มา | # เอกสาร | # คำ | # ป้ายกำกับ | ภาษา |
|---|---|---|---|---|---|
| 20Newsgroup | 20Newsgroup | 16309 | 1612 | 20 | ภาษาอังกฤษ |
| bbc_news | BBC-News | 2225 | 2949 | 5 | ภาษาอังกฤษ |
| DBLP | DBLP | 54595 | ค.ศ. 1513 | 4 | ภาษาอังกฤษ |
| M10 | M10 | 8355 | 2239 | 10 | ภาษาอังกฤษ |
| dbpedia_it | dbpedia_it | 4251 | 2047 | 5 | อิตาลี |
| Europarl_it | Europarl_it | 3613 | ปี 2000 | นา | อิตาลี |
มิฉะนั้นคุณสามารถโหลดชุดข้อมูลที่กำหนดเองล่วงหน้าได้ด้วยวิธีต่อไปนี้:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "../path/to/the/dataset/folder" )พาร์ติชันสามารถเป็น "รถไฟ" สำหรับพาร์ติชันการฝึกอบรม "ทดสอบ" สำหรับการทดสอบพาร์ติชันหรือ "VAL" สำหรับพาร์ติชันการตรวจสอบความถูกต้อง ตัวอย่างของชุดข้อมูลสามารถพบได้ที่นี่: sample_dataset
ในทำนองเดียวกันกับชุดข้อมูล TensorFlow และห้องสมุด NLP ของ HuggingFace เราเพิ่งดาวน์โหลดและเตรียมชุดข้อมูลสาธารณะ เราไม่ได้โฮสต์หรือแจกจ่ายชุดข้อมูลเหล่านี้บัตรกำนัลคุณภาพหรือความยุติธรรมของพวกเขาหรืออ้างว่าคุณมีใบอนุญาตในการใช้ชุดข้อมูล มันเป็นความรับผิดชอบของคุณในการพิจารณาว่าคุณได้รับอนุญาตให้ใช้ชุดข้อมูลภายใต้ใบอนุญาตของชุดข้อมูลหรือไม่และอ้างถึงเจ้าของชุดข้อมูลที่เหมาะสมหรือไม่
หากคุณเป็นเจ้าของชุดข้อมูลและต้องการอัปเดตส่วนใดส่วนหนึ่งของมันหรือไม่ต้องการให้ชุดข้อมูลของคุณรวมอยู่ในไลบรารีนี้โปรดติดต่อผ่านปัญหา GitHub
หากคุณเป็นเจ้าของชุดข้อมูลและต้องการรวมชุดข้อมูลของคุณในไลบรารีนี้โปรดติดต่อผ่านปัญหา GitHub
หากต้องการประมวลผลชุดข้อมูลล่วงหน้านำเข้าคลาสการประมวลผลล่วงหน้าและใช้วิธี preprocess_dataset
import os
import string
from octis . preprocessing . preprocessing import Preprocessing
os . chdir ( os . path . pardir )
# Initialize preprocessing
preprocessor = Preprocessing ( vocabulary = None , max_features = None ,
remove_punctuation = True , punctuation = string . punctuation ,
lemmatize = True , stopword_list = 'english' ,
min_chars = 1 , min_words_docs = 0 )
# preprocess
dataset = preprocessor . preprocess_dataset ( documents_path = r'..corpus.txt' , labels_path = r'..labels.txt' )
# save the preprocessed dataset
dataset . save ( 'hello_dataset' )สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการประมวลผลล่วงหน้าโปรดดูตัวอย่างตัวอย่างการประมวลผลล่วงหน้าในโฟลเดอร์ตัวอย่าง
ในการสร้างแบบจำลองให้โหลดชุดข้อมูลที่ประมวลผลล่วงหน้าตั้งค่าโมเดลไฮเปอร์พารามิเตอร์และใช้ train_model() เพื่อฝึกอบรมโมเดล
from octis . dataset . dataset import Dataset
from octis . models . LDA import LDA
# Load a dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "dataset_folder" )
model = LDA ( num_topics = 25 ) # Create model
model_output = model . train_model ( dataset ) # Train the modelหากชุดข้อมูลถูกแบ่งพาร์ติชันคุณสามารถ:
| ชื่อ | การดำเนินการ |
|---|---|
| CTM (Bianchi et al. 2021) | https://github.com/milanlproc/contextualized-topic-models |
| ETM (Dieng et al. 2020) | https://github.com/adjidieng/etm |
| HDP (Blei et al. 2004) | https://radimrehurek.com/gensim/ |
| LDA (Blei et al. 2003) | https://radimrehurek.com/gensim/ |
| LSI (Landauer et al. 1998) | https://radimrehurek.com/gensim/ |
| NMF (Lee and Seung 2000) | https://radimrehurek.com/gensim/ |
| Neurallda (Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
| Prodlda (Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
หากคุณใช้หนึ่งในการใช้งานเหล่านี้ตรวจสอบให้แน่ใจว่าได้อ้างถึงกระดาษที่ถูกต้อง
หากคุณใช้โมเดลและต้องการอัปเดตส่วนใดส่วนหนึ่งของมันหรือไม่ต้องการให้โมเดลของคุณรวมอยู่ในห้องสมุดนี้โปรดติดต่อผ่านปัญหา GitHub
หากคุณใช้โมเดลและต้องการรวมโมเดลของคุณไว้ในห้องสมุดนี้โปรดติดต่อผ่านปัญหา GitHub มิฉะนั้นหากคุณต้องการรวมโมเดลด้วยตัวเองให้ดูส่วนต่อไปนี้
ในการประเมินแบบจำลองให้เลือกตัวชี้วัดและใช้วิธี score() ของคลาสเมตริก
from octis . evaluation_metrics . diversity_metrics import TopicDiversity
metric = TopicDiversity ( topk = 10 ) # Initialize metric
topic_diversity_score = metric . score ( model_output ) # Compute score of the metricการจำแนกประเภท :
- F1-SCORE:
F1Score(dataset)- ความแม่นยำ:
PrecisionScore(dataset)- เรียกคืน:
RecallScore(dataset)- ความแม่นยำ:
AccuracyScore(dataset)
ตัวชี้วัดการเชื่อมโยงกัน :
- UMass Coherence:
Coherence(measure='u_mass')- C_V การเชื่อมโยงกัน:
Coherence(measure='c_v')- UCI Coherence:
Coherence(measure='c_uci')- NPMI การเชื่อมโยงกัน:
Coherence(measure='c_npmi')- คำเชื่อมต่อแบบฝังคำที่
WECoherencePairwise()- Centroid การเชื่อมโยงกับการฝังคำ:
WECoherenceCentroid()
ตัวชี้วัดความหลากหลาย :
- ความหลากหลายของหัวข้อ:
TopicDiversity()- invertedrbo:
InvertedRBO()- การจับคู่ invertedrbo ที่ใช้การฝังคำ:
WordEmbeddingsInvertedRBO()- Invertedrbo centroid:
WordEmbeddingsInvertedRBOCentroid()- อัตราต่อรองบันทึก:
LogOddsRatio()- Kullback-Liebler Divergence:
KLDivergence()
ตัวชี้วัดความคล้ายคลึงกัน :
- การทับซ้อนที่มีอาการลำเอียงอันดับ:
RBO()- การจับคู่ RBO แบบฝังคำ:
WordEmbeddingsRBOMatch()- RBO centroid ที่ใช้การฝังคำ:
WordEmbeddingsRBOCentroid()- ความคล้ายคลึงกันแบบคู่ที่ใช้ในการฝังคำ:
WordEmbeddingsPairwiseSimilarity()- Centroid ที่มีความคล้ายคลึงกันของ Word Embeddings:
WordEmbeddingsCentroidSimilarity()- คำที่ใช้ถ่วงน้ำหนักที่ใช้ถ่วงน้ำหนัก:
WordEmbeddingsWeightedSumSimilarity()- ความคล้ายคลึงกันของ jaccard pairwise:
PairwiseJaccardSimilarity()
หัวข้อตัวชี้วัดความสำคัญ :
- ชุด KL:
KL_uniform()- KL Vacuous:
KL_vacuous()- พื้นหลัง KL:
KL_background()
แบบจำลองที่สืบทอดมาจากคลาส AbstractModel ที่กำหนดไว้ใน octis/models/model.py ในการสร้างโมเดลของคุณเองในชั้นเรียนของคุณจะต้องแทนที่เมธอด TRAIN_MODEL (ชุดข้อมูล, ชุดข้อมูล, HyperParameters) ซึ่งต้องใช้วัตถุชุดข้อมูลอย่างน้อยและพจนานุกรมของพารามิเตอร์ไฮเปอร์พารามิเตอร์เป็นอินพุตและควรส่งคืนพจนานุกรมด้วยเอาต์พุตของโมเดลเป็นเอาต์พุต
เพื่อให้เข้าใจได้ดีขึ้นว่าโมเดลทำงานอย่างไรลองดูการใช้งาน LDA ขั้นตอนแรกในการพัฒนาแบบจำลองที่กำหนดเองคือการกำหนดพจนานุกรมของค่าไฮเปอร์พารามิเตอร์เริ่มต้น:
hyperparameters = { 'corpus' : None , 'num_topics' : 100 , 'id2word' : None , 'alpha' : 'symmetric' ,
'eta' : None , # ...
'callbacks' : None }การกำหนดค่า hyperparameters เริ่มต้นช่วยให้ผู้ใช้สามารถทำงานกับชุดย่อยของพวกเขาโดยไม่ต้องกำหนดค่าให้กับแต่ละพารามิเตอร์
ขั้นตอนต่อไปนี้คือการแทนที่ train_model ():
def train_model ( self , dataset , hyperparameters = {}, top_words = 10 ):วิธี LDA ต้องการชุดข้อมูลพจนานุกรม HyperParameters และอาร์กิวเมนต์พิเศษ (ไม่บังคับ) ที่ใช้ในการเลือกจำนวนคำที่สำคัญที่สุดสำหรับแต่ละหัวข้อ
ด้วยค่าเริ่มต้น HyperParameters ตัวที่อยู่ในอินพุตและชุดข้อมูลที่คุณควรจะเขียนโค้ดของคุณเองและส่งกลับเป็นพจนานุกรมที่มีอย่างน้อย 3 รายการ:
หากโมเดลของคุณรองรับการฝึกอบรม/ทดสอบพาร์ติชันควรกลับมา:
ในการเพิ่มประสิทธิภาพโมเดลคุณต้องเลือกชุดข้อมูลตัวชี้วัดและพื้นที่ค้นหาของไฮเปอร์พารามิเตอร์เพื่อปรับให้เหมาะสม สำหรับประเภทของ hyperparameters เราใช้ประเภท scikit-optimize (https://scikit-optimize.github.io/stable/modules/space.html)
from octis . optimization . optimizer import Optimizer
from skopt . space . space import Real
# Define the search space. To see which hyperparameters to optimize, see the topic model's initialization signature
search_space = { "alpha" : Real ( low = 0.001 , high = 5.0 ), "eta" : Real ( low = 0.001 , high = 5.0 )}
# Initialize an optimizer object and start the optimization.
optimizer = Optimizer ()
optResult = optimizer . optimize ( model , dataset , eval_metric , search_space , save_path = "../results" # path to store the results
number_of_call = 30 , # number of optimization iterations
model_runs = 5 ) # number of runs of the topic model
#save the results of th optimization in a csv file
optResult . save_to_csv ( "results.csv" )ผลลัพธ์จะให้ค่าที่ดีที่สุดของตัวชี้วัดด้วยการกำหนดค่าไฮเปอร์พารามิเตอร์ที่สอดคล้องกันและค่าไฮเปอร์พารามิเตอร์และค่าตัวชี้วัดสำหรับการทำซ้ำแต่ละครั้งของการเพิ่มประสิทธิภาพ ในการแสดงข้อมูลนี้คุณต้องตั้งค่าแอตทริบิวต์ 'พล็อต' ของ Bayesian_optimization เป็น TRUE
คุณสามารถค้นหาเพิ่มเติมได้ที่นี่: Optimizer Readme
Octis รวมถึงอินเทอร์เฟซกราฟิกที่ใช้งานง่ายสำหรับการสร้างการตรวจสอบและดูการทดลอง ตามมาตรฐานการใช้งานของชุดข้อมูลโมเดลและตัวชี้วัดแดชบอร์ดจะอัปเดตโดยอัตโนมัติและอนุญาตให้คุณใช้การใช้งานที่กำหนดเองของคุณเอง
ในการเรียกใช้แดชบอร์ดคุณต้องโคลน repo ในขณะที่อยู่ในไดเรกทอรีโครงการเรียกใช้คำสั่งต่อไปนี้:
python OCTIS/dashboard/server.pyเบราว์เซอร์จะเปิดขึ้นและคุณจะถูกนำไปยังแดชบอร์ด ในแดชบอร์ดคุณสามารถ:
งานนี้ได้รับการยอมรับในการสาธิตของ EACL 2021! คลิกเพื่ออ่านกระดาษ! หากคุณตัดสินใจใช้ทรัพยากรนี้โปรดอ้างอิง:
@Inproceedings {Terragni2020Octis
title = {{octis}: การเปรียบเทียบและการปรับให้เหมาะสมกับโมเดลหัวข้อนั้นง่าย!},
ผู้แต่ง = {Terragni, Silvia และ Fersini, Elisabetta และ Galuzzi, Bruno Giovanni และ Tropeano, Pietro และ Candelieri, Antonio},
ปี = {2021}
BookTitle = {การดำเนินการของการประชุมครั้งที่ 16 ของบทยุโรปของสมาคมเพื่อการคำนวณภาษาศาสตร์: การสาธิตระบบ}
เดือน = เม.ย.
ปี = "2021"
Publisher = "สมาคมเพื่อการคำนวณภาษาศาสตร์"
url = "https://www.aclweb.org/anthology/2021.eacl-demos.31"
หน้า = "263--270"
-
@inproceedings {dblp: conf/clic-it/ternagnif21,
ผู้แต่ง = {Silvia Terragni และ Elisabetta Fersini}
editor = {Elisabetta Fersini และ Marco Passarotti และ Viviana Patti}
title = {{octis 2.0: การปรับให้เหมาะสมและเปรียบเทียบโมเดลหัวข้อในภาษาอิตาลี
ง่ายกว่า!}}
booktitle = {การดำเนินการของการประชุมที่แปดอิตาลีเกี่ยวกับภาษาศาสตร์เชิงคำนวณ
Clic-it 2021, มิลาน, อิตาลี, 26-28 มกราคม, 2022},
series = {{ceur} การประชุมเชิงปฏิบัติการ}
volume = {3033}
publisher = {ceur-ws.org}
ปี = {2021}
url = {http://ceur-ws.org/vol-3033/paper55.pdf}
-
แพ็คเกจนี้ถูกสร้างขึ้นด้วย CookieCutter และเทมเพลตโครงการ Audreyr/CookieCutter-Pypackage ต้องขอบคุณนักพัฒนาทุกคนที่เปิดตัวการใช้งานโมเดลหัวข้อของพวกเขา ขอขอบคุณเป็นพิเศษไปที่ Tenggaard ที่ช่วยเราค้นหาข้อบกพร่องมากมายในช่วงต้น Octis รุ่นแรก