هذه مكتبة مبنية على محولات Pytorch و Unggingface لقياس الفجوة بين النص العصبي والنص البشري مع مقياس Mauve ، الذي تم تقديمه في ورقة Neups 2021 (جائزة الورق المتميزة) وورقة JMLR 2023.
Mauve هو مقياس للفجوة بين النص العصبي والنص البشري. يتم حسابه باستخدام الاختلافات Kullback -Leibler (KL) بين توزيعات النصين في مساحة تضمين كمية لنموذج لغة كبير. يمكن أن يحدد MAUVE الاختلافات في الجودة الناشئة عن أحجام النماذج وخوارزميات فك التشفير.
سمات :
يمكن العثور على مزيد من التفاصيل أدناه.
لكي تقوم البرامج النصية بإعادة إنتاج التجارب في الورقة ، يرجى الاطلاع على هذا المستودع.
للتثبيت المباشر ، قم بتشغيل هذا الأمر من المحطة الخاصة بك:
pip install mauve-text
إذا كنت ترغب في تحرير أو المساهمة في MAUVE ، فيجب عليك التثبيت من المصدر
git clone [email protected]:krishnap25/mauve.git
cd mauve
pip install -e .
تتطلب بعض الوظائف المزيد من الحزم. يرجى الاطلاع على المتطلبات أدناه.
يقوم أمر التثبيت أعلاه بتثبيت المتطلبات الرئيسية ، وهي:
numpy>=1.18.1scikit-learn>=0.22.1faiss-cpu>=1.7.0tqdm>=4.40.0بالإضافة إلى ذلك ، إذا كنت ترغب في استخدام التميز داخل Mauve ، فأنت بحاجة إلى التثبيت يدويًا:
torch>=1.1.0 : التعليماتtransformers>=3.2.0 : ببساطة تشغيل pip install transformers بعد تثبيت Pytorch (تعليمات مفصلة) دع p_text و q_text كل منهما قائمة بالسلاسل ، حيث تكون كل سلسلة جيلًا كاملًا (بما في ذلك السياق). للحصول على أفضل الممارسات ، يحتاج Mauve إلى بضعة آلاف من الأجيال على الأقل لكل من p_text و q_text (تستخدم الورقة 5000 لكل منها). بالنسبة إلى العرض التوضيحي الخاص بنا ، نستخدم 100 جيل لكل وقت تشغيل سريع.
لإظهار وظائف هذه الحزمة على بعض البيانات الحقيقية ، يوفر هذا المستودع بعض الوظائف لتنزيل واستخدام بيانات العينة في مجلد ./examples
دعنا نستخدم تنزيل بعض مراجعات منتجات Amazon بالإضافة إلى أجيال الماكينة ، التي توفرها مجموعة بيانات GPT-2 من خلال تشغيل هذا الأمر في قذيفة ~ 17m في الحجم):
python examples/download_gpt2_dataset.py
يتم تنزيل البيانات في مجلد ./data . يمكننا تحميل البيانات (100 عينة من 5000 المتاحة) في بيثون
from examples import load_gpt2_dataset
p_text = load_gpt2_dataset ( 'data/amazon.valid.jsonl' , num_examples = 100 ) # human
q_text = load_gpt2_dataset ( 'data/amazon-xl-1542M.valid.jsonl' , num_examples = 100 ) # machineيمكننا الآن حساب MAUVE على النحو التالي (لاحظ أن هذا يتطلب تثبيت محولات Pytorch و HF).
import mauve
# call mauve.compute_mauve using raw text on GPU 0; each generation is truncated to 256 tokens
out = mauve . compute_mauve ( p_text = p_text , q_text = q_text , device_id = 0 , max_text_length = 256 , verbose = False )
print ( out . mauve ) # prints 0.9917 يقوم هذا التنزيل الأول GPT-2 الكبير الرمزي والنموذج الذي تم تدريبه مسبقًا (إذا لم تقم بتنزيله بالفعل). حتى لو كان لديك النموذج غير متصل بالإنترنت ، فإنه يستغرق ما يصل إلى 30 ثانية لتحميل النموذج في المرة الأولى. out الآن يحتوي على الحقول:
out.mauve : نقاط mauve ، رقم بين 0 و 1. تشير القيم الكبيرة إلى أن P و Q أقرب.out.frontier_integral : Frontier Integral ، رقم بين 0 و 1. تشير القيم الأصغر إلى أن P و Q أقرب.out.mauve_star و out.frontier_integral_star : إصداراتها المقابلة محسوبة بتنعيم Krichevsky-Trofimov. انظر ورقة JMLR 2023 حول سبب هذا يمكن أن يكون ذلك مفضلاً.out.divergence_curve : a numpy.ndarray من الشكل (M ، 2) ؛ ارسمها مع matplotlib لعرض منحنى الاختلافout.p_hist : توزيع منفصل ، وهو نسخة كمية من توزيع النص p_textout.q_hist : كما هو مذكور أعلاه ، ولكن مع q_textيمكنك رسم منحنى الاختلاف باستخدام
# Make sure matplotlib is installed in your environment
import matplotlib . pyplot as plt
plt . plot ( out . divergence_curve [:, 1 ], out . divergence_curve [:, 0 ]) لكل نص (في كل من p_text و q_text ) ، يستخدم MAUVE داخليًا الحالة المخفية terimal من GPT-2 كبيرة كتمثيل ميزة. بالطبع ، يمكن أيضًا استخدام LLMs الأكثر حداثة. بشكل عام ، كلما كان التضمينات أفضل ، كان أداء MAUVE أفضل.
هناك طرق متعددة لاستخدام هذه الحزمة. على سبيل المثال ، يمكنك استخدام حالات مخفية مخبأة مباشرة (لا يتطلب ذلك تثبيت محولات Pytorch و HF):
# call mauve.compute_mauve using features obtained directly
# p_feats and q_feats are `np.ndarray`s of shape (n, dim)
# we use a synthetic example here
import numpy as np
p_feats = np . random . randn ( 100 , 1024 ) # feature dimension = 1024
q_feats = np . random . randn ( 100 , 1024 )
out = mauve . compute_mauve ( p_features = p_feats , q_features = q_feats )لاحظ أنه يمكن استخدام API لتقييم الطرائق الأخرى مثل الصور أو الصوت مع MAUVE.
يمكنك أيضًا حساب MAUVE باستخدام تمثيل Tokenized (BPE) باستخدام مفردات GPT-2 (على سبيل المثال ، تم الحصول عليها من استخدام مكالمة صريحة إلى transformers.GPT2Tokenizer ).
# call mauve.compute_mauve using tokens on GPU 1
# p_toks, q_toks are each a list of LongTensors of shape [1, length]
# we use synthetic examples here
import torch
p_toks = [ torch . LongTensor ( np . random . choice ( 50257 , size = ( 1 , 32 ), replace = True )) for _ in range ( 100 )]
q_toks = [ torch . LongTensor ( np . random . choice ( 50257 , size = ( 1 , 32 ), replace = True )) for _ in range ( 100 )]
out = mauve . compute_mauve ( p_tokens = p_toks , q_tokens = q_toks , device_id = 1 , max_text_length = 1024 ) لعرض رسائل التقدم ، تمرير في الوسيطة verbose=True إلى mauve.compute_mauve . يمكنك أيضًا استخدام نماذج مختلفة كمدخلات لـ p و q و Eg p عبر p_text و q عبر q_features .
يأخذ mauve.compute_mauve الوسائط التالية
p_features : numpy.ndarray من الشكل (n ، د) ، حيث n هو عدد الأجيالq_features : numpy.ndarray من الشكل (n ، د) ، حيث n هو عدد الأجيالp_tokens : قائمة الطول n ، كل إدخال هو torch.longtensor من الشكل (1 ، الطول) ؛ يمكن أن يختلف الطول بين الأجيالq_tokens : قائمة الطول n ، كل إدخال هو torch.longtensor من الشكل (1 ، الطول) ؛ يمكن أن يختلف الطول بين الأجيالp_text : قائمة طول n ، كل إدخال عبارة عن سلسلةq_text : قائمة الطول n ، كل إدخال عبارة عن سلسلةnum_buckets : حجم الرسم البياني لتحديد خيارات P و Q.pca_max_data : تشير بيانات الرقم إلى استخدام أبعاد PCA قبل التجميع. إذا -1 ، استخدم جميع البيانات. الافتراضي -1kmeans_explained_var : مقدار تباين البيانات للحفاظ على تقليل الأبعاد بواسطة PCA. الافتراضي 0.9kmeans_num_redo : عدد المرات لإعادة التجميع K-Means (أفضل هدف هو الاحتفاظ). الافتراضي 5kmeans_max_iter : الحد الأقصى لعدد تكرارات K-Means. الافتراضي 500featurize_model_name : اسم النموذج الذي يتم الحصول عليه من الميزات. استخدم 'gpt2-large' الافتراضي واحد من ['gpt2', 'gpt2-medium', 'gpt2-large', 'gpt2-xl'] .device_id : جهاز للتميز. قم بتزويد معرف GPU (على سبيل المثال 0 أو 3) لاستخدام GPU. إذا لم يتم العثور على وحدة معالجة الرسومات مع هذا المعرف ، فاستخدم وحدة المعالجة المركزيةmax_text_length : الحد الأقصى لعدد الرموز التي يجب مراعاتها. الافتراضي 1024divergence_curve_discretization_size : عدد النقاط التي يجب مراعاتها في منحنى الاختلاف. الافتراضي 25mauve_scaling_factor : "C" من الورقة. الافتراضي 5.verbose : إذا كان صحيحًا (افتراضيًا) ، فطبع تحديثات وقت التشغيلseed : بذرة عشوائية لتهيئة مهام مجموعة K -Means.batch_size : حجم الدُفعة لاستخراج الميزة. ملاحظة: يمكن أن تكون p و q ذات أطوال مختلفة ، ولكن يوصى بأن تكون بنفس الطول.
أفضل طريقة للاتصال بالمؤلفين في حالة وجود أي أسئلة أو توضيحات (حول الحزمة أو الورقة) هي إثارة مشكلة على GitHub. نحن لسنا قادرين على الرد على الاستفسارات عبر البريد الإلكتروني.
إذا وجدت أي أخطاء ، فيرجى إثارة مشكلة على Github. إذا كنت ترغب في المساهمة ، فيرجى إرسال طلب سحب. نحن نشجع وتقييم المساهمات المجتمعية للغاية.
بعض الميزات التي سيكون من الجيد أن تكون هي:
يختلف MAUVE تمامًا عن معظم المقاييس الشائعة ، لذا فيما يلي بعض الإرشادات حول الاستخدام الصحيح لـ MAUVE:
المقارنات النسبية :
model1 و model2 أفضل في توليد التوزيع البشري ، فيمكننا مقارنة MAUVE(text_model1, text_human) و MAUVE(text_model2, text_human) .MAUVE(text_model1, text_human) استنادًا إلى المقاييس المفرطة المحددة أدناه ، ولكن تظل الاتجاهات النسبية كما هي.عدد الأجيال :
عدد المجموعات (حجم التقدير) :
num_buckets ليكون 0.1 * عدد العينات.الغوف كبير جدًا أو صغير جدًا :
mauve_scaling_parameter في القيمة المطلقة لدرجة mauve ، دون تغيير الترتيب النسبي بين الطرق المختلفة. الغرض الرئيسي من هذه المعلمة هو المساعدة في التفسير.mauve_scaling_factor . (ملاحظة: هذا يزيد أيضًا من الانحراف المعياري للماول).mauve_scaling_factor .يستغرق الركض وقتًا طويلاً للغاية لتشغيله :
num_buckets . تتساقط وقت تشغيل خوارزمية التجميع كمربع لعدد المجموعات. بمجرد أن يتجاوز عدد المجموعات 500 ، يبدأ التجميع حقًا في التباطؤ. في هذه الحالة ، قد يكون من المفيد تعيين عدد المجموعات إلى 500 من خلال تجاوز الافتراضي (وهو num_data_points / 10 ، لذا استخدم هذا عندما يكون عدد العينات لكل من P و Q أكثر من 5000).kmeans_num_redo إلى 1 ، وإذا لم ينجح هذا ، kmeans_max_iter إلى 100 . هذا يمكّن التجميع من الركض بشكل أسرع على حساب إعادة التجميع الأسوأ.تباين Mauve كبير بالنسبة إلى الاختلافات التي نحاول تحديدها :
إذا وجدت هذه الحزمة مفيدة ، أو كنت تستخدمها في بحثك ، فيرجى الاستشهاد بالأوراق التالية:
@article{pillutla-etal:mauve:jmlr2023,
title={{MAUVE Scores for Generative Models: Theory and Practice}},
author={Pillutla, Krishna and Liu, Lang and Thickstun, John and Welleck, Sean and Swayamdipta, Swabha and Zellers, Rowan and Oh, Sewoong and Choi, Yejin and Harchaoui, Zaid},
journal={JMLR},
year={2023}
}
@inproceedings{pillutla-etal:mauve:neurips2021,
title={MAUVE: Measuring the Gap Between Neural Text and Human Text using Divergence Frontiers},
author={Pillutla, Krishna and Swayamdipta, Swabha and Zellers, Rowan and Thickstun, John and Welleck, Sean and Choi, Yejin and Harchaoui, Zaid},
booktitle = {NeurIPS},
year = {2021}
}
@inproceedings{liu-etal:mauve-theory:neurips2021,
title={{Divergence Frontiers for Generative Models: Sample Complexity, Quantization Effects, and Frontier Integrals}},
author={Liu, Lang and Pillutla, Krishna and Welleck, Sean and Oh, Sewoong and Choi, Yejin and Harchaoui, Zaid},
booktitle={NeurIPS},
year={2021}
}
تم دعم هذا العمل من قبل NSF DMS-2134012 ، NSF CCF-2019844 ، NSF DMS-2023166 ، برنامج DARPA MCS من خلال NIWC Pacific (N66001-19-2-4031) ، برنامج CIFAR "التعلم" في الآلات "، A Qualcomn Innovation Awards و Creemble.