يتطلب حجم المنشورات البحثية المتزايدة باستمرار أساليب فعالة لتنظيم المعرفة الأكاديمية. تتضمن هذه المهمة عادةً تطوير مخطط أساسي للإشراف من الفصول وتخصيص المنشورات للطبقة الأكثر صلة. في هذه المقالة ، نقوم بتنفيذ حل آلي من طرف إلى طرف باستخدام كمية التضمين وخط أنابيب نموذج لغة كبير (LLM). تبدأ دراسة الحالة الخاصة بنا بمجموعة بيانات تضم 25000 منشور Arxiv من اللغويات الحسابية (CS.CL) ، التي نشرت قبل يوليو 2024 ، والتي ننظمها بموجب مخطط جديد للصفوف.
يركز نهجنا على ثلاث مهام رئيسية: (1) التجميع غير الخاضع للإشراف لمجموعة بيانات ARXIV إلى مجموعات ذات صلة ، (2) اكتشاف الهياكل المواضيعية الكامنة داخل كل مجموعة ، و (3) إنشاء مخطط تصنيف مرشح استنادًا إلى الهياكل المواضيعية المذكورة.
في جوهرها ، تتطلب مهمة التجميع تحديد عدد كاف من الأمثلة المماثلة في مجموعة بيانات غير مسمونة . هذه مهمة طبيعية للتضمينات ، لأنها تلتقط العلاقات الدلالية في مجموعة ويمكن توفيرها كميزات إدخال لخوارزمية التجميع لإنشاء روابط التشابه بين الأمثلة. نبدأ بتحويل أزواج ( الملخص ) من مجموعة البيانات الخاصة بنا إلى تمثيل التضمينات باستخدام Jina-Embeddings-V2 ، وهو نموذج لانتباه Bert-Alibi. وتطبيق قياس الكميات العددية باستخدام كل من محولات الجملة والتنفيذ المخصص.
للتجميع ، ندير HDBSCAN في مساحة منخفضة الأبعاد ، ومقارنة النتائج باستخدام طرق تجميع leaf eom . بالإضافة إلى ذلك ، ندرس ما إذا كان استخدام (u)int8 التضمينات الكمية بدلاً من تمثيل float32 يؤثر على هذه العملية.
للكشف عن مواضيع كامنة داخل كل مجموعة من منشورات Arxiv ، نجمع بين Langchain و Pydantic مع Mistral-7B-instruct-V0.3 (و GPT-4O ، المدرجة للمقارنة) في خط LLM. ثم يتم دمج الناتج في قالب موجه مُثبّن يوجه كلود سونيت 3.5 في توليد تصنيف هرمي.
تشير النتائج إلى 35 موضوعًا للبحث الناشئ ، حيث يشتمل كل موضوع على 100 منشور على الأقل. يتم تنظيم هذه ضمن 7 فئات من الوالدين في مجال اللغويات الحاسوبية (CS.CL). قد يكون هذا النهج بمثابة خط أساس لتوليد مخططات المرشحين الهرميين تلقائيًا في فئات ARXIV عالية المستوى واستكمال التصنيفات بكفاءة ، معالجة التحدي الذي يمثله الحجم المتزايد للأدب الأكاديمي.
إكمال التصنيف للأدب الأكاديمي مع تكبير التضمين وخط الوسط LLM
التضمينات هي تمثيلات عددية للكائنات الواقعية مثل النص والصور والصوت التي تغلف المعلومات الدلالية للبيانات التي تمثلها. يتم استخدامها من قبل نماذج الذكاء الاصطناعى لفهم مجالات المعرفة المعقدة في التطبيقات المصب مثل التجميع واسترجاع المعلومات ومهام التفاهم الدلالي ، من بين أمور أخرى.
سنقوم بتخطيط ( العنوان : الملخص ) من منشورات Arxiv إلى مساحة 768 الأبعاد باستخدام Jina-Embeddings-V2 [1] ، نموذج تضمين نص مفتوح المصدر قادر على استيعاب ما يصل إلى 8192 رمزًا. يوفر هذا طول تسلسل كبير بما فيه الكفاية للعناوين والملخصات وأقسام المستندات الأخرى التي قد تكون ذات صلة. للتغلب على حد 512-token التقليدي الموجود في نماذج أخرى ، تتضمن Jina-Debeddings-V2 ثنائية الاتجاه [2] في إطار Bert. يتيح Alibi (الانتباه مع التحيزات الخطية) استقراء طول الإدخال (أي ، التسلسلات التي تتجاوز 2048 الرموز الرموز) عن طريق ترميز المعلومات الموضعية مباشرة داخل طبقة الاهتمام الذاتي ، بدلاً من إدخال التضمين الموضعي. في الممارسة العملية ، فإنه يحيز درجات الانتباه عن ركلة جزاء تتناسب مع مسافة بعيدة ، ويفضل الاهتمام المتبادل الأقوى بين الرموز القريبة.
تتمثل الخطوة الأولى لاستخدام نموذج Jina-Embeddings-V2 في تحميله من خلال محولات الجملة ، وهو إطار للوصول إلى النماذج الحديثة المتوفرة في مركز الوجه المعانقة:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer ( 'jinaai/jina-embeddings-v2-base-en' , trust_remote_code = True ) نحن الآن نرمز ( العنوان : الملخص ) أزواج من مجموعة البيانات الخاصة بنا باستخدام batch_size = 64 . هذا يسمح بالحساب المتوازي على مسرعات الأجهزة مثل وحدات معالجة الرسومات (وإن كان ذلك على حساب طلب المزيد من الذاكرة):
from datasets import load_dataset
ds = load_dataset ( "dcarpintero/arxiv.cs.CL.25k" , split = "train" )
corpus = [ title + ':' + abstract for title , abstract in zip ( ds [ 'title' ], ds [ 'abstract' ])]
f32_embeddings = model . encode ( corpus ,
batch_size = 64 ,
show_progress_bar = True )يمكن الآن حساب التشابه الدلالي بين Corpora كمنتج داخلي للتضمينات. في خريطة الحرارة التالية ، يتم تلوين كل إدخال [x ، y] بناءً على منتجات التضمين المذكورة لجمل " العنوان " المثالية [x] و [y].
التشابه الدلالي في cs.cl arxiv-titles باستخدام التضمينات
يمكن أن يكون توسيع نطاق التضمينات أمرًا صعبًا. حاليًا ، تمثل النماذج الحديثة كل تضمين كـ float32 ، والتي تتطلب 4 بايت من الذاكرة. بالنظر إلى أن نص خرائط Jina-Embeddings-V2 إلى مساحة 768 أبعاد ، فإن متطلبات الذاكرة لمجموعة البيانات الخاصة بنا ستكون حوالي 73 ميجابايت ، بدون فهارس وبيانات بيانات أخرى تتعلق بسجلات النشر:
25 , 000 embeddings * 768 dimensions / embedding * 4 bytes / dimension = 76 , 800 , 000 bytes
76 , 800 , 000 bytes / ( 1024 ^ 2 ) ≈ 73.24 MBومع ذلك ، فإن العمل مع مجموعة بيانات أكبر قد يزيد بشكل كبير من متطلبات الذاكرة والتكاليف المرتبطة بها:
| التضمين البعد | التضمين نموذج | 2.5m ملخصات Arxiv | 60.9m صفحات ويكيبيديا | 100 م التضمين |
|---|---|---|---|---|
| 384 | All-Minilm-L12-V2 | 3.57 جيجابايت | 85.26 جيجابايت | 142.88 جيجابايت |
| 768 | All-MPNET-Base-V2 | 7.15 غيغابايت | 170.52 جيجابايت | 285.76 جيجابايت |
| 768 | Jina-Embeddings-V2 | 7.15 غيغابايت | 170.52 جيجابايت | 285.76 جيجابايت |
| 1536 | Openai-text-embedding-3-small | 14.31 جيجابايت | 341.04 جيجابايت | 571.53 جيجابايت |
| 3072 | Openai-text-embedding-3-large | 28.61 غيغابايت | 682.08 جيجابايت | 1.143 تيرابايت |
تقنية المستخدمة لتحقيق توفير الذاكرة هي القياس الكمي . الحدس وراء هذا النهج هو أنه يمكننا تقديرية قيم الفاصلة العائمة عن طريق تعيين نطاقها [ f_max ، f_min ] في نطاق أصغر من أرقام النقطة الثابتة [ q_max ، q_min ] ، وتوزيع جميع القيم خطيًا بين هذه النطاقات. في الممارسة العملية ، عادة ما يقلل هذا من دقة نقطة عائمة 32 بت إلى عرض بت أقل مثل 8 بتات (القيم العددية) أو قيم 1 بت (الكمية الثنائية).
القياس الكمي للتضمين - من Float32 إلى (u) int8
من خلال رسم توزيع الترددات للتضمينات التي تم إنشاؤها بواسطة JINA ، نلاحظ أن القيم تتركز بالفعل حول نطاق ضيق نسبيًا [-2.0 ، +2.0]. هذا يعني أنه يمكننا تعيين قيم float32 بشكل فعال إلى دلاء (u)int8 دون فقدان كبير للمعلومات:
import matplotlib . pyplot as plt
plt . hist ( f32_embeddings . flatten (), bins = 250 , edgecolor = 'C0' )
plt . xlabel ( 'float-32 jina-embeddings-v2' )
plt . title ( 'distribution' )
plt . show ()أصلي Float32 توزيع Jina-Embeddings-V2
يمكننا حساب القيم الدقيقة [min, max] للتوزيع:
> >> np . min ( f32_embeddings ), np . max ( f32_embeddings )
( - 2.0162134 , 2.074683 ) الخطوة الأولى لتنفيذ القياس القياسي هي تحديد مجموعة معايرة من التضمين. نقطة البداية النموذجية هي مجموعة فرعية من التضمينات 10K ، والتي في حالتنا ستغطي ما يقرب من 99.98 ٪ من قيم التضمين float32 الأصلية. يهدف استخدام المعايرة إلى الحصول على قيم تمثيلية f_min و f_max على طول كل بعد لتقليل المشكلات النفقات الحاسوبية والمشكلات المحتملة الناجمة عن القيم المتطرفة التي قد تظهر في مجموعات البيانات الكبيرة.
def calibration_accuracy ( embeddings : np . ndarray , k : int = 10000 ) -> float :
calibration_embeddings = embeddings [: k ]
f_min = np . min ( calibration_embeddings , axis = 0 )
f_max = np . max ( calibration_embeddings , axis = 0 )
# Calculate percentage in range for each dimension
size = embeddings . shape [ 0 ]
avg = []
for i in range ( embeddings . shape [ 1 ]):
in_range = np . sum (( embeddings [:, i ] >= f_min [ i ]) & ( embeddings [:, i ] <= f_max [ i ]))
dim_percentage = ( in_range / size ) * 100
avg . append ( dim_percentage )
return np . mean ( avg )
acc = calibration_accuracy ( f32_embeddings , k = 10000 )
print ( f"Average percentage of embeddings within [f_min, f_max] calibration: { acc :.5f } %" )
> >> Average percentage of embeddings within [ f_min , f_max ] calibration : 99.98636 % يمكن تطبيق الخطوتين الثانية والثالثة من كمية القياس - مقاييس الحوسبة ونقطة الصفر ، والترميز - بسهولة مع محولات الجملة ، مما يؤدي إلى توفير ذاكرة 4x مقارنة بتمثيل float32 الأصلي. علاوة على ذلك ، سوف نستفيد أيضًا من العمليات الحسابية الأسرع حيث يمكن تنفيذ مضاعفة المصفوفة بسرعة أكبر مع الحساب الصحيح.
from sentence_transformers . quantization import quantize_embeddings
# quantization is applied in a post-processing step
int8_embeddings = quantize_embeddings (
np . array ( f32_embeddings ),
precision = "int8" ,
calibration_embeddings = np . array ( f32_embeddings [: 10000 ]),
) f32_embeddings . dtype , f32_embeddings . shape , f32_embeddings . nbytes
>> > ( dtype ( 'float32' ), ( 25107 , 768 ), 77128704 ) # 73.5 MB
int8_embeddings . dtype , int8_embeddings . shape , int8_embeddings . nbytes
>> > ( dtype ( 'int8' ), ( 25107 , 768 ), 19282176 ) # 18.3 MB
# calculate compression
( f32_embeddings . nbytes - int8_embeddings . nbytes ) / f32_embeddings . nbytes * 100
>> > 75.0من أجل الاكتمال ، نقوم بتنفيذ طريقة قياس الكمية العددية لتوضيح تلك الخطوات الثلاث:
def scalar_quantize_embeddings ( embeddings : np . ndarray ,
calibration_embeddings : np . ndarray ) -> np . ndarray :
# Step 1: Calculate [f_min, f_max] per dimension from the calibration set
f_min = np . min ( calibration_embeddings , axis = 0 )
f_max = np . max ( calibration_embeddings , axis = 0 )
# Step 2: Map [f_min, f_max] to [q_min, q_max] => (scaling factors, zero point)
q_min = 0
q_max = 255
scales = ( f_max - f_min ) / ( q_max - q_min )
zero_point = 0 # uint8 quantization maps inherently min_values to zero
# Step 3: encode (scale, round)
quantized_embeddings = (( embeddings - f_min ) / scales ). astype ( np . uint8 )
return quantized_embeddings calibration_embeddings = f32_embeddings [: 10000 ]
beta_uint8_embeddings = scalar_quantize_embeddings ( f32_embeddings , calibration_embeddings ) beta_uint8_embeddings [ 5000 ][ 64 : 128 ]. reshape ( 8 , 8 )
array ([[ 187 , 111 , 96 , 128 , 116 , 129 , 130 , 122 ],
[ 132 , 153 , 72 , 136 , 94 , 120 , 112 , 93 ],
[ 143 , 121 , 137 , 143 , 195 , 159 , 90 , 93 ],
[ 178 , 189 , 143 , 99 , 99 , 151 , 93 , 102 ],
[ 179 , 104 , 146 , 150 , 176 , 94 , 148 , 118 ],
[ 161 , 138 , 90 , 122 , 93 , 146 , 140 , 129 ],
[ 121 , 115 , 153 , 118 , 107 , 45 , 70 , 171 ],
[ 207 , 53 , 67 , 115 , 223 , 105 , 124 , 158 ]], dtype = uint8 )سنستمر في إصدار التضمينات التي تم تقديرها باستخدام محولات الجملة (يتم تضمين تنفيذنا المخصص أيضًا في تحليل النتائج):
# `f32_embeddings` => if you prefer to not use quantization
# `beta_uint8_embeddings` => to check our custom implemention
embeddings = int8_embeddings في هذا القسم ، نقوم بإسقاط من مرحلتين ( العنوان : الملخص ) تضمين أزواج من مساحتها الأصلية عالية الأبعاد (768) إلى أبعاد أقل ، وهي:
5 dimensions لتقليل التعقيد الحسابي أثناء التجميع ، و2 dimensions لتمكين التمثيل البصري في إحداثيات (x, y) .لكلا التوقعات ، نستخدم UMAP [3] ، وهي تقنية تخفيض الأبعاد الشائعة المعروفة بفعاليتها في الحفاظ على هياكل البيانات المحلية والعالمية. في الممارسة العملية ، يجعل هذا الاختيار المفضل للتعامل مع مجموعات البيانات المعقدة مع تضمينات عالية الأبعاد:
import umap
embedding_5d = umap . UMAP ( n_neighbors = 100 , # consider 100 nearest neighbors for each point
n_components = 5 , # reduce embedding space from 768 to 5 dimensions
min_dist = 0.1 , # maintain local and global balance
metric = 'cosine' ). fit_transform ( embeddings )
embedding_2d = umap . UMAP ( n_neighbors = 100 ,
n_components = 2 ,
min_dist = 0.1 ,
metric = 'cosine' ). fit_transform ( embeddings ) لاحظ أنه عندما نقوم بتطبيق مجموعة HDBSCAN في الخطوة التالية ، ستتأثر المجموعات الموجودة في كيفية الحفاظ على الهياكل المحلية UMAP. تعني قيمة n_neighbors الأصغر أن UMAP ستركز أكثر على الهياكل المحلية ، في حين تتيح قيمة أكبر التقاط المزيد من التمثيلات العالمية ، والتي قد تكون مفيدة لفهم الأنماط الإجمالية في البيانات.
يمكن الآن استخدام التضمينات المخفضة ( العنوان : الملخص ) كميزات إدخال لخوارزمية التجميع ، مما يتيح تحديد الفئات ذات الصلة بناءً على مسافات التضمين.
لقد اخترنا HDBSCAN (التجميع المكاني القائم على الكثافة الهرمية للتطبيقات مع الضوضاء) [4] ، وهي خوارزمية متكاملة متقدمة تمتد DBSCAN عن طريق التكيف مع مجموعات الكثافة المختلفة. بخلاف K-means التي تتطلب تحديد عدد المجموعات المسبقة ، فإن HDBSCAN لديها مقياس واحد فقط مهم ، n ، والذي يحدد الحد الأدنى لعدد الأمثلة التي يجب تضمينها في الكتلة.
يعمل HDBSCAN أولاً من خلال تحويل مساحة البيانات وفقًا لكثافة نقاط البيانات ، مما يجعل المناطق الكثيفة (المناطق التي تكون فيها نقاط البيانات قريبة معًا بأعداد كبيرة) أكثر جاذبية لتشكيل الكتلة. تقوم الخوارزمية بعد ذلك ببناء تسلسل هرمي من المجموعات بناءً على الحد الأدنى لحجم الكتلة الذي أنشأه الفرق n هذا يسمح لها بالتمييز بين الضوضاء (المناطق المتفرقة) والمناطق الكثيفة (المجموعات المحتملة). أخيرًا ، تكثف HDBSCAN هذا التسلسل الهرمي لاستخلاص المجموعات الأكثر ثباتًا ، وتحديد مجموعات من الكثافة والأشكال المختلفة. كطريقة قائمة على الكثافة ، يمكنه أيضًا اكتشاف القيم المتطرفة.
import hdbscan
hdbs = hdbscan . HDBSCAN ( min_cluster_size = 100 , # conservative clusters' size
metric = 'euclidean' , # points distance metric
cluster_selection_method = 'leaf' ) # favour fine grained clustering
clusters = hdbs . fit_predict ( embedding_5d ) # apply HDBSCAN on reduced UMAP يحدد cluster_selection_method كيف يختار HDBSCAN مجموعات مسطحة من التسلسل الهرمي للشجرة. في حالتنا ، يميل استخدام طريقة اختيار الكتلة eom (الفائض من الكتلة) إلى تركيبة مع تقدير كمية التضمين إلى إنشاء عدد قليل من مجموعات أكبر وأقل تحديداً. كانت هذه المجموعات تتطلب عملية إعادة توصيل أخرى لاستخراج مواضيع كامنة ذات مغزى. بدلاً من ذلك ، من خلال التبديل إلى طريقة اختيار leaf ، قمنا بتوجيه الخوارزمية لتحديد العقد الورقية من التسلسل الهرمي الكتابي ، الذي أنتج مجموعة أكثر حبيبات مقارنةً بفائض طريقة الكتلة:
HDBSCAN EOM & Leaf Clustering مقارنة باستخدام int8-embedding-Quantization
بعد إجراء خطوة التجميع ، نوضح الآن كيفية استنتاج الموضوع الكامن لكل مجموعة من خلال الجمع بين LLM مثل Mistral-7B-instruct [5] مع Pydantic و Langchain لإنشاء خط أنابيب LLM الذي يولد الإخراج في شكل منظم قابل للتناسب.
نماذج Pydantic هي فصول مستمدة من pydantic.BaseModel ، وتحديد الحقول كسمات مصنفة من النوع. فهي تشبه نظارات Dataclasses Python . ومع ذلك ، فقد تم تصميمها باختلافات خفية ولكنها مهمة تعمل على تحسين العمليات المختلفة مثل التحقق من الصحة والتسلسل وتوليد مخطط JSON . يحدد فئة Topic لدينا label اسمه. سيؤدي ذلك إلى توليد إخراج LLM بتنسيق منظم ، بدلاً من كتلة نصية حرة ، مما يسهل المعالجة والتحليل الأسهل.
from pydantic import BaseModel , Field
class Topic ( BaseModel ):
"""
Pydantic Model to generate an structured Topic Model
"""
label : str = Field (..., description = "Identified topic" )قوالب موجه Langchain عبارة عن وصفات محددة مسبقًا لترجمة إدخال المستخدم والمعلمات إلى تعليمات لنموذج اللغة. نحدد هنا موجه لمهمتنا المقصودة:
from langchain_core . prompts import PromptTemplate
topic_prompt = """
You are a helpful research assistant. Your task is to analyze a set of research paper
titles related to Natural Language Processing, and determine the overarching topic.
INSTRUCTIONS:
1. Based on the titles provided, identify the most relevant topic:
- Ensure the topic is concise and clear.
2. Format Respose:
- Ensure the title response is in JSON as in the 'OUTPUT OUTPUT' section below.
- No follow up questions are needed.
OUTPUT FORMAT:
{{"label": "Topic Name"}}
TITLES:
{titles}
""" دعونا الآن نؤسس خط أنابيب نمذجة الموضوع باستخدام لغة تعبير Langchain (LCEL) لتقديم قالبنا المطري في إدخال LLM ، وتحليل إخراج الاستدلال كما JSON :
from langchain . chains import LLMChain
from langchain_huggingface import HuggingFaceEndpoint
from langchain_core . output_parsers import PydanticOutputParser
from typing import List
def TopicModeling ( titles : List [ str ]) -> str :
"""
Infer the common topic of the given titles w/ LangChain, Pydantic, OpenAI
"""
repo_id = "mistralai/Mistral-7B-Instruct-v0.3"
llm = HuggingFaceEndpoint (
repo_id = repo_id ,
temperature = 0.2 ,
huggingfacehub_api_token = os . environ [ "HUGGINGFACEHUB_API_TOKEN" ]
)
prompt = PromptTemplate . from_template ( topic_prompt )
parser = PydanticOutputParser ( pydantic_object = Topic )
topic_chain = prompt | llm | parser
return topic_chain . invoke ({ "titles" : titles })لتمكين النموذج لاستنتاج موضوع كل مجموعة ، نقوم بتضمين مجموعة فرعية من 25 عنوانًا ورقيًا من كل مجموعة كجزء من إدخال LLM:
topics = []
for i , cluster in df . groupby ( 'cluster' ):
titles = cluster [ 'title' ]. sample ( 25 ). tolist ()
topic = TopicModeling ( titles )
topics . append ( topic . label )دعنا نخصص كل منشور Arxiv لمجموعته المقابلة:
n_clusters = len ( df [ 'cluster' ]. unique ())
topic_map = dict ( zip ( range ( n_clusters ), topics ))
df [ 'topic' ] = df [ 'cluster' ]. map ( topic_map )لإنشاء تصنيف هرمي ، نقوم بصياغة موجه لتوجيه كلود سونيت 3.5 في تنظيم موضوعات البحث المحددة المقابلة لكل مجموعة في مخطط هرمي:
from langchain_core . prompts import PromptTemplate
taxonomy_prompt = """
Create a comprehensive and well-structured taxonomy
for the ArXiv cs.CL (Computational Linguistics) category.
This taxonomy should organize subtopics in a logical manner.
INSTRUCTIONS:
1. Review and Refine Subtopics:
- Examine the provided list of subtopics in computational linguistics.
- Ensure each subtopic is clearly defined and distinct from others.
2. Create Definitions:
- For each subtopic, provide a concise definition (1-2 sentences).
3. Develop a Hierarchical Structure:
- Group related subtopics into broader categories.
- Create a multi-level hierarchy, with top-level categories and nested subcategories.
- Ensure that the structure is logical and intuitive for researchers in the field.
4. Validate and Refine:
- Review the entire taxonomy for consistency, completeness, and clarity.
OUTPUT FORMAT:
- Present the final taxonomy in a clear, hierarchical format, with:
. Main categories
.. Subcategories
... Individual topics with their definitions
SUBTOPICS:
{taxonomy_subtopics}
""" دعونا ننشئ مؤامرة مبعثر تفاعلية:
chart = alt . Chart ( df ). mark_circle ( size = 5 ). encode (
x = 'x' ,
y = 'y' ,
color = 'topic:N' ,
tooltip = [ 'title' , 'topic' ]
). interactive (). properties (
title = 'Clustering and Topic Modeling | 25k arXiv cs.CL publications)' ,
width = 600 ,
height = 400 ,
)
chart . display () وقارن نتائج التجميع باستخدام تمثيلات التضمين float32 وقياس محولات الجملة int8 :
ترتيب أوراق HDBSCAN باستخدام Float32 و int8 int8 التضمينات (تخصيص الجملة--
نقوم الآن بإجراء نفس المقارنة مع تطبيق القياس المخصص لدينا:
ترتيب أوراق HDBSCAN باستخدام Float32 & Quantived-Uint8 (تنفيذ التخصيص المخصص)
تُظهر نتائج التجميع باستخدام float32 و (u)int8 التضمينات الكمية الكمية تخطيطًا عامًا مماثلًا من مجموعات محددة جيدًا ، مما يشير إلى (1) أن خوارزمية التجميع HDBSCAN كانت فعالة في كلتا الحالتين ، و (2) تم الحفاظ على العلاقات الأساسية في البيانات بعد التقدير (باستخدام محولات الحكم وتنفيذنا المخصص).
والجدير بالذكر أنه يمكن ملاحظة أن استخدام كمية التضمين أدى إلى كلتا الحالتين في التجميع الحبيبي أكثر قليلاً (35 مجموعة مقابل 31) التي يبدو أنها متماسكة بشكل دلالي. فرضيتنا المبدئية لهذا الاختلاف هي أن القياس القياسي قد يوجه بشكل متناقض خوارزمية التجميع HDBSCAN لفصل النقاط التي تم تجميعها سابقًا معًا.
قد يكون هذا بسبب (1) الضوضاء (يمكن أن تخلق القياس الكمي اختلافات صاخبة صغيرة في البيانات ، والتي قد يكون لها نوع من تأثير التنظيم وتؤدي إلى قرارات تجميع أكثر حساسية) ، أو بسبب (2) الفرق في الدقة العددية وتغيير حسابات المسافة (يمكن أن يثير هذا اختلافات معينة بين النقاط التي كانت أقل وضوحًا في تمثيل float32 ). سيكون من الضروري إجراء مزيد من التحقيقات لفهم الآثار المترتبة على التكتل.
المخطط بأكمله متاح في Cs.Cl.Taxonomy. قد يكون هذا النهج بمثابة خط أساس لتحديد مخططات المرشحين تلقائيًا للفصول في فئات Arxiv عالية المستوى:
. Foundations of Language Models
.. Model Architectures and Mechanisms
... Transformer Models and Attention Mechanisms
... Large Language Models (LLMs)
.. Model Optimization and Efficiency
... Compression and Quantization
... Parameter-Efficient Fine-Tuning
... Knowledge Distillation
.. Learning Paradigms
... In-Context Learning
... Instruction Tuning
. AI Ethics, Safety, and Societal Impact
.. Ethical Considerations
... Bias and Fairness in Models
... Alignment and Preference Optimization
.. Safety and Security
... Hallucination in LLMs
... Adversarial Attacks and Robustness
... Detection of AI-Generated Text
.. Social Impact
... Hate Speech and Offensive Language Detection
... Fake News Detection
[...]
@article{carpintero2024
author = { Diego Carpintero},
title = {Taxonomy Completion with Embedding Quantization and an LLM-Pipeline: A Case Study in Computational Linguistics},
journal = {Hugging Face Blog},
year = {2024},
note = {https://huggingface.co/blog/dcarpintero/taxonomy-completion},
}