مكتبة Scikit-Learn الصديقة لشرح النماذج/البيانات النصية وتوجيهها.
أيضا مجموعة من الأدوات المساعدة للبدء مع البيانات النصية.
دفاتر التجريبية
نمذجة قابلة للتفسير/التوجيه
| نموذج | مرجع | الإخراج | وصف |
|---|---|---|---|
| تري | ،؟ ،؟ ، ، ، | توضيح + التوجيه | يولد شجرة من المطالبات توجيه LLM ( مسؤول ) |
| iPrompt | ،؟ ،؟ ، | توضيح + التوجيه | يولد موجه ذلك يشرح الأنماط في البيانات ( رسمية ) |
| Autoprompt | ㅤㅤ ،؟ ،؟ | توضيح + التوجيه | ابحث عن مطالبة باللغة الطبيعية باستخدام خطوات المدخلات |
| D3 | ،؟ ،؟ ، | توضيح | اشرح الفرق بين توزيعين |
| Sasc | ㅤㅤ ،؟ ،؟ | توضيح | اشرح وحدة نصين سوداء باستخدام LLM ( مسؤول ) |
| أغسطس الخطي | ،؟ ،؟ ، | نموذج خطي | تناسب نموذج خطي أفضل باستخدام LLM لاستخراج التضمينات ( رسمية ) |
| أغسطس | ،؟ ،؟ ، | شجرة القرار | تناسب شجرة قرار أفضل باستخدام LLM لتوسيع الميزات ( رسمية ) |
| Qaemb | ،؟ ،؟ ، | يمكن شرحه التضمين | توليد التضمينات القابلة للتفسير من خلال طرح أسئلة LLMS ( رسمية ) |
| كان | ،؟ ،؟ ، | صغير شبكة | قم بتناسب شبكة Kolmogorov-Arnold 2 طبقات |
Demo Notebooks Doc؟ رمز مرجعي؟ ورقة البحث
⌛ نخطط لدعم خوارزميات أخرى قابلة للتفسير مثل RLPrompt و CBMS و NBDT. إذا كنت تريد المساهمة في خوارزمية ، فلا تتردد في فتح العلاقات العامة؟
المرافق العامة
| نموذج | مرجع |
|---|---|
| غلاف LLM | اتصل بسهولة LLMs مختلفة |
| غلاف مجموعة البيانات | قم بتنزيل مجموعات بيانات المعانقة المعالجة الحد الأدنى |
| كيس من ngrams | تعلم نموذجًا خطيًا من ngrams |
| خطي finetune | Finetune طبقة خطية واحدة على رأس LLM تضمينات |
التثبيت : pip install imodelsx (أو ، لمزيد من التحكم ، استنساخ وتثبيت من المصدر)
العروض التوضيحية : شاهد دفاتر الملاحظات التجريبية
from imodelsx import TreePromptClassifier
import datasets
import numpy as np
from sklearn . tree import plot_tree
import matplotlib . pyplot as plt
# set up data
rng = np . random . default_rng ( seed = 42 )
dset_train = datasets . load_dataset ( 'rotten_tomatoes' )[ 'train' ]
dset_train = dset_train . select ( rng . choice (
len ( dset_train ), size = 100 , replace = False ))
dset_val = datasets . load_dataset ( 'rotten_tomatoes' )[ 'validation' ]
dset_val = dset_val . select ( rng . choice (
len ( dset_val ), size = 100 , replace = False ))
# set up arguments
prompts = [
"This movie is" ,
" Positive or Negative? The movie was" ,
" The sentiment of the movie was" ,
" The plot of the movie was really" ,
" The acting in the movie was" ,
]
verbalizer = { 0 : " Negative." , 1 : " Positive." }
checkpoint = "gpt2"
# fit model
m = TreePromptClassifier (
checkpoint = checkpoint ,
prompts = prompts ,
verbalizer = verbalizer ,
cache_prompt_features_dir = None , # 'cache_prompt_features_dir/gp2',
)
m . fit ( dset_train [ "text" ], dset_train [ "label" ])
# compute accuracy
preds = m . predict ( dset_val [ 'text' ])
print ( ' n Tree-Prompt acc (val) ->' ,
np . mean ( preds == dset_val [ 'label' ])) # -> 0.7
# compare to accuracy for individual prompts
for i , prompt in enumerate ( prompts ):
print ( i , prompt , '->' , m . prompt_accs_ [ i ]) # -> 0.65, 0.5, 0.5, 0.56, 0.51
# visualize decision tree
plot_tree (
m . clf_ ,
fontsize = 10 ,
feature_names = m . feature_names_ ,
class_names = list ( verbalizer . values ()),
filled = True ,
)
plt . show () from imodelsx import explain_dataset_iprompt , get_add_two_numbers_dataset
# get a simple dataset of adding two numbers
input_strings , output_strings = get_add_two_numbers_dataset ( num_examples = 100 )
for i in range ( 5 ):
print ( repr ( input_strings [ i ]), repr ( output_strings [ i ]))
# explain the relationship between the inputs and outputs
# with a natural-language prompt string
prompts , metadata = explain_dataset_iprompt (
input_strings = input_strings ,
output_strings = output_strings ,
checkpoint = 'EleutherAI/gpt-j-6B' , # which language model to use
num_learned_tokens = 3 , # how long of a prompt to learn
n_shots = 3 , # shots per example
n_epochs = 15 , # how many epochs to search
verbose = 0 , # how much to print
llm_float16 = True , # whether to load the model in float_16
)
- - - - - - - -
prompts is a list of found natural - language prompt strings from imodelsx import explain_dataset_d3
hypotheses , hypothesis_scores = explain_dataset_d3 (
pos = positive_samples , # List[str] of positive examples
neg = negative_samples , # another List[str]
num_steps = 100 ,
num_folds = 2 ,
batch_size = 64 ,
)هنا ، نوضح وحدة بدلاً من مجموعة بيانات
from imodelsx import explain_module_sasc
# a toy module that responds to the length of a string
mod = lambda str_list : np . array ([ len ( s ) for s in str_list ])
# a toy dataset where the longest strings are animals
text_str_list = [ "red" , "blue" , "x" , "1" , "2" , "hippopotamus" , "elephant" , "rhinoceros" ]
explanation_dict = explain_module_sasc (
text_str_list ,
mod ,
ngrams = 1 ,
)استخدم هذه مجرد نموذج مثل Scikit-Learn. أثناء التدريب ، تتناسب مع ميزات أفضل عبر LLMS ، ولكن في وقت الاختبار فهي سريعة للغاية وشفافة تمامًا.
from imodelsx import AugLinearClassifier , AugTreeClassifier , AugLinearRegressor , AugTreeRegressor
import datasets
import numpy as np
# set up data
dset = datasets . load_dataset ( 'rotten_tomatoes' )[ 'train' ]
dset = dset . select ( np . random . choice ( len ( dset ), size = 300 , replace = False ))
dset_val = datasets . load_dataset ( 'rotten_tomatoes' )[ 'validation' ]
dset_val = dset_val . select ( np . random . choice ( len ( dset_val ), size = 300 , replace = False ))
# fit model
m = AugLinearClassifier (
checkpoint = 'textattack/distilbert-base-uncased-rotten-tomatoes' ,
ngrams = 2 , # use bigrams
)
m . fit ( dset [ 'text' ], dset [ 'label' ])
# predict
preds = m . predict ( dset_val [ 'text' ])
print ( 'acc_val' , np . mean ( preds == dset_val [ 'label' ]))
# interpret
print ( 'Total ngram coefficients: ' , len ( m . coefs_dict_ ))
print ( 'Most positive ngrams' )
for k , v in sorted ( m . coefs_dict_ . items (), key = lambda item : item [ 1 ], reverse = True )[: 8 ]:
print ( ' t ' , k , round ( v , 2 ))
print ( 'Most negative ngrams' )
for k , v in sorted ( m . coefs_dict_ . items (), key = lambda item : item [ 1 ])[: 8 ]:
print ( ' t ' , k , round ( v , 2 )) import imodelsx
from sklearn . datasets import make_classification , make_regression
from sklearn . metrics import accuracy_score
import numpy as np
X , y = make_classification ( n_samples = 5000 , n_features = 5 , n_informative = 3 )
model = imodelsx . KANClassifier ( hidden_layer_size = 64 , device = 'cpu' ,
regularize_activation = 1.0 , regularize_entropy = 1.0 )
model . fit ( X , y )
y_pred = model . predict ( X )
print ( 'Test acc' , accuracy_score ( y , y_pred ))
# now try regression
X , y = make_regression ( n_samples = 5000 , n_features = 5 , n_informative = 3 )
model = imodelsx . kan . KANRegressor ( hidden_layer_size = 64 , device = 'cpu' ,
regularize_activation = 1.0 , regularize_entropy = 1.0 )
model . fit ( X , y )
y_pred = model . predict ( X )
print ( 'Test correlation' , np . corrcoef ( y , y_pred . flatten ())[ 0 , 1 ])تسهل ملاءمة خطوط الأساس التي تتبع API Sklearn.
from imodelsx import LinearFinetuneClassifier , LinearNgramClassifier
# fit a simple one-layer finetune on top of LLM embeddings
m = LinearFinetuneClassifier (
checkpoint = 'distilbert-base-uncased' ,
)
m . fit ( dset [ 'text' ], dset [ 'label' ])
preds = m . predict ( dset_val [ 'text' ])
acc = ( preds == dset_val [ 'label' ]). mean ()
print ( 'validation acc' , acc )API Easy لاتصال نماذج اللغة المختلفة مع التخزين المؤقت (أكثر خفيفة الوزن من Langchain).
import imodelsx . llm
# supports any huggingface checkpoint or openai checkpoint (including chat models)
llm = imodelsx . llm . get_llm (
checkpoint = "gpt2-xl" , # text-davinci-003, gpt-3.5-turbo, ...
CACHE_DIR = ".cache" ,
)
out = llm ( "May the Force be" )
llm ( "May the Force be" ) # when computing the same string again, uses the cacheAPI لتحميل مجموعات البيانات المعانقة مع المعالجة الأساسية الأساسية.
import imodelsx . data
dset , dataset_key_text = imodelsx . data . load_huggingface_dataset ( 'ag_news' )
# Ensures that dset has a split named 'train' and 'validation',
# and that the input data is contained for each split in a column given by {dataset_key_text}