DataChain هي مكتبة إطار بيانات Pythonic حديثة مصممة للذكاء الاصطناعي. لقد تم تصميمه لتنظيم بياناتك غير المنظمة في مجموعات بيانات ومناقشةها على نطاق واسع على جهازك المحلي. لا تقوم سلسلة البيانات بتجريد أو إخفاء نماذج الذكاء الاصطناعي واستدعاءات واجهة برمجة التطبيقات، ولكنها تساعد على دمجها في مكدس بيانات ما بعد الحداثة.
التخزين كمصدر للحقيقة.
قم بمعالجة البيانات غير المنظمة بدون نسخ متكررة من S3 وGCP وAzure وأنظمة الملفات المحلية.
دعم البيانات متعددة الوسائط: الصور والفيديو والنصوص وملفات PDF وJSONs وCSV والباركيه.
قم بتوحيد الملفات والبيانات التعريفية معًا في مجموعات بيانات عمودية ثابتة ومُصدرة.
خطوط أنابيب البيانات الصديقة لبيثون.
تعمل على كائنات بايثون وحقول الكائنات.
الموازاة المضمنة والحوسبة خارج الذاكرة بدون SQL أو Spark.
إثراء البيانات ومعالجتها.
قم بإنشاء بيانات تعريفية باستخدام نماذج الذكاء الاصطناعي المحلية وواجهات برمجة تطبيقات LLM.
التصفية والانضمام والتجميع حسب بيانات التعريف. البحث عن طريق تضمينات المتجهات.
قم بتمرير مجموعات البيانات إلى Pytorch وTensorflow، أو قم بتصديرها مرة أخرى إلى وحدة التخزين.
كفاءة.
التوازي وأحمال العمل خارج الذاكرة والتخزين المؤقت للبيانات.
العمليات الموجهة في حقول كائنات بايثون: المجموع، والعدد، والمتوسط، وما إلى ذلك.
البحث الأمثل عن المتجهات.
$ نقطة تثبيت سلسلة البيانات
يتكون التخزين من صور القطط والكلاب (dog.1048.jpg، cat.1009.jpg)، مشروحة بالحقيقة الأساسية واستدلالات النماذج بتنسيق "أزواج json"، حيث تحتوي كل صورة على ملف JSON مطابق مثل cat. 1009.json:
{"class": "cat"، "id": "1009"، "num_annotators": 8،"استدلال": {"class": "dog"، "confidence": 0.68} }
مثال على تنزيل الصور المستنتجة "قطة عالية الثقة" فقط باستخدام بيانات تعريف JSON:
من عمود استيراد سلسلة البيانات، DataChainmeta = DataChain.from_json("gs://datachain-demo/dogs-and-cats/*json"، object_name="meta")images = DataChain.from_storage("gs://datachain-demo" /dogs-and-cats/*jpg")images_id = Images.map(id=ملف لامدا: file.path.split('.')[-2])annotated = Images_id.merge(meta, on="id"، right_on="meta.id")likely_cats = annotated.filter((Column("meta.inference" .الثقة") > 0.93) & (Column("meta.inference.class_") == "cat"))likely_cats.export_files("high-confidence-cats/"، signal="file")
الاستدلال المجمع باستخدام نموذج المشاعر البسيط باستخدام مكتبة المحولات:
نقطة تثبيت المحولات
يقوم الكود الموجود أدناه بتنزيل الملفات السحابية، ويطبق وظيفة محددة من قبل المستخدم على كل واحد منها. يتم بعد ذلك نسخ كافة الملفات ذات المشاعر الإيجابية المكتشفة إلى الدليل المحلي.
من المحولات استيراد خط أنابيب من سلسلة البيانات import DataChain، Columnclassifier = Pipeline("sentiment-analogy"،جهاز = "cpu"،model = "distilbert/distilbert-base-uncased-finetuned-sst-2-english")def is_positive_dialogue_ending(file) - > bool:dialogue_ending = file.read()[-512:]return classifier(dialogue_ending)[0]["label"] == "POSITIVE"chain = ( DataChain.from_storage("gs://datachain-demo/chatbot-KiT/"، object_name = "file"، type = "text" ) الإعدادات (الموازية = 8، ذاكرة التخزين المؤقت = صحيح) .map(is_positive=is_positive_dialogue_ending) حفظ("file_response") )positive_chain = chain.filter(Column("is_positive") == True)positive_chain.export_files("./output")print(f"{positive_chain.count()} تم تصدير الملفات")
تم تصدير 13 ملفًا
$ ls الإخراج/datachain-demo/chatbot-KiT/ 15.txt 20.txt 24.txt 27.txt 28.txt 29.txt 33.txt 37.txt 38.txt 43.txt ... $ ls الإخراج/datachain-demo/chatbot-KiT/ | مرحاض -ل 13
يمكن أن تعمل LLM كمصنفات عالمية. في المثال أدناه، نستخدم واجهة برمجة تطبيقات مجانية من Mistral للحكم على مربعات حوار chatbot المتاحة للعامة. يرجى الحصول على مفتاح Mistral API مجانًا على https://console.mistral.ai
$ pip install mistralai (يتطلب الإصدار>=1.0.0) $ تصدير MISTRAL_API_KEY=_your_key_
يمكن لـ DataChain موازنة مكالمات API؛ تدعم طبقة ميسترال المجانية ما يصل إلى 4 طلبات في نفس الوقت.
from mistralai import Mistralfrom datachain import File, DataChain, ColumnPROMPT = "هل كان هذا الحوار ناجحًا؟ أجب بكلمة واحدة: نجاح أم فشل."def eval_dialogue(file: File) -> bool: client = Mistral() Response = client.chat .Complete(model="open-mixtral-8x22b", messages=[{"role": "system", "content": PROMPT}, {"role": "user"، "content": file.read()}]) result = Response.choices[0].message.content return result.lower().startswith("success")chain = ( DataChain .from_storage("gs://datachain-demo/chatbot-KiT/"، object_name = "ملف") الإعدادات (الموازية = 4، ذاكرة التخزين المؤقت = صحيح) خريطة(is_success=eval_dialogue) حفظ("ملفات_mistral") )successful_chain = chain.filter(Column("is_success") == True)successful_chain.export_files("./output_mistral")print(f"{successful_chain.count()} تم تصدير الملفات")
مع التعليمات المذكورة أعلاه، يأخذ نموذج ميسترال ملفات 31/50 في الاعتبار لإجراء الحوارات الناجحة:
$ ls Output_mistral/datachain-demo/chatbot-KiT/ 1.txt 15.txt 18.txt 2.txt 22.txt 25.txt 28.txt 33.txt 37.txt 4.txt 41.txt ... $ lsput_mistral/datachain-demo/chatbot-KiT/ | مرحاض -ل 31
قد تحتوي استجابات LLM على معلومات قيمة للتحليلات - مثل عدد الرموز المميزة المستخدمة، أو معلمات أداء النموذج.
بدلاً من استخراج هذه المعلومات من بنية بيانات استجابة ميسترال (فئة ChatCompletionResponse)، يمكن لـ DataChain إجراء تسلسل لاستجابة LLM بالكامل إلى قاعدة البيانات الداخلية:
من mistralai import Mistralfrom mistralai.models import ChatCompletionResponsefrom datachain import File, DataChain, ColumnPROMPT = "هل كان مربع الحوار هذا ناجحًا؟ أجب بكلمة واحدة: نجاح أم فشل."def eval_dialog(file: File) -> ChatCompletionResponse: client = MistralClient() إرجاع Client.chat (model = "open-mixtral-8x22b"، messages=[{"role": "النظام"، "المحتوى": PROMPT}، {"role": "user"، "content": file.read()}])chain = ( DataChain.from_storage("gs://datachain-demo/chatbot-KiT/"، object_name = "file") الإعدادات (الموازية = 4، ذاكرة التخزين المؤقت = صحيح) خريطة(الاستجابة=eval_dialog) .map(status=استجابة لامدا: Response.choices[0].message.content.lower()[:7]) .حفظ("الاستجابة") )chain.select("file.name"، "status"، "response.usage").show(5)success_rate = chain.filter(Column("status") == "success").count() / chain .count()print(f"{100*success_rate:.1f}% مربعات الحوار كانت ناجحة")
الإخراج:
استجابة استجابة حالة الملف استخدام استخدام استخدام الاسم Prompt_Tokens Total_Tokens Complete_Tokens 0 1. نجاح النص 547 548 1 1 10.فشل النص 3576 3578 2 2 11. فشل النص 626 628 2 3 12. فشل النص 1144 1182 38 4 13. نجاح النص 1100 1101 1 [محدودة بـ 5 صفوف] 64.0% من الحوارات كانت ناجحة
في الأمثلة السابقة، تم حفظ مجموعات البيانات في قاعدة البيانات المضمنة (SQLite في المجلد .datachain من دليل العمل). تم إصدار مجموعات البيانات هذه تلقائيًا، ويمكن الوصول إليها باستخدام DataChain.from_dataset("dataset_name").
فيما يلي كيفية استرداد مجموعة البيانات المحفوظة وتكرارها على الكائنات:
chain = DataChain.from_dataset("response")# التكرار واحدًا تلو الآخر: دعم سير العمل خارج الذاكرة للملف، والاستجابة في chain.limit(5).collect("file"، "response"):# تحقق من كائنات بايثون المجمعة هي مثيل (response, ChatCompletionResponse)status = Response.choices[0].message.content[:7]tokens = Response.usage.total_tokensprint(f"{file.get_uri()}: {status}، حجم الملف: {file.size}، الرموز المميزة: {tokens}")
الإخراج:
gs://datachain-demo/chatbot-KiT/1.txt: نجاح، حجم الملف: 1776، الرموز المميزة: 548 gs://datachain-demo/chatbot-KiT/10.txt: فشل، حجم الملف: 11576، الرموز المميزة: 3578 gs://datachain-demo/chatbot-KiT/11.txt: فشل، حجم الملف: 2045، الرموز المميزة: 628 gs://datachain-demo/chatbot-KiT/12.txt: فشل، حجم الملف: 3833، الرموز المميزة: 1207 gs://datachain-demo/chatbot-KiT/13.txt: نجاح، حجم الملف: 3657، الرموز المميزة: 1101
يمكن تشغيل بعض العمليات داخل قاعدة البيانات دون إلغاء التسلسل. على سبيل المثال، لنحسب التكلفة الإجمالية لاستخدام LLM APIs، بافتراض أن تكلفة استدعاء Mixtral تبلغ 2 دولار لكل مليون رمز إدخال و6 دولارات لكل مليون رمز إخراج:
السلسلة = DataChain.from_dataset("mistral_dataset")التكلفة = chain.sum("response.usage.prompt_tokens")*0.000002 + chain.sum("response.usage.completion_tokens")*0.000006print(f"أنفقت ${cost:.2f} على مكالمات {chain.count()}")
الإخراج:
أنفق 0.08 دولارًا على 50 مكالمة
يمكن تصدير نتائج السلسلة أو تمريرها مباشرة إلى أداة تحميل بيانات PyTorch. على سبيل المثال، إذا كنا مهتمين بتمرير صورة وتسمية بناءً على لاحقة اسم الملف، فإن الكود التالي سيقوم بذلك:
من torch.utils.data استيراد DataLoaderمن المحولات استيراد CLIPProcessorfrom datachain import C، DataChainprocessor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")chain = (DataChain.from_storage("gs://datachain-demo/dogs" -and-cats/"، اكتب = "صورة") .map(label=lambda name: name.split(".")[0], params=["file.name"]) .select("file", "label").to_pytorch(transform=processor.image_processor,tokenizer=processor.tokenizer, ) )المحمل = DataLoader(chain, Batch_size=1)
ابدء
الوسائط المتعددة (جرب في كولاب)
تقييمات LLM (جرب في Colab)
قراءة بيانات تعريف JSON (جرب في Colab)
المساهمات هي موضع ترحيب كبير. لمعرفة المزيد، راجع دليل المساهمين.
المستندات
قم برفع قضية إذا واجهت أي مشاكل
دردشة الخلاف
بريد إلكتروني
تغريد