Hub documentation

fenic

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

fenic

fenic هو إطار عمل لبيانات الإطارات (DataFrame) مستوحى من PySpark، مصمم لبناء تطبيقات الذكاء الاصطناعي والتطبيقات الوكيلية (agentic) في بيئة الإنتاج. يوفر fenic دعمًا لقراءة مجموعات البيانات مباشرةً من Hugging Face Hub.

البدء

للبداية، ثبّت fenic باستخدام pip:

pip install fenic

إنشاء جلسة

أنشئ جلسة fenic باستخدام الإعدادات الافتراضية (وهي كافية لقراءة مجموعات البيانات والعمليات غير الدلالية الأخرى):

import fenic as fc

session = fc.Session.get_or_create(fc.SessionConfig())

نظرة عامة

fenic هو إطار عمل لمعالجة البيانات ذو آراء محددة يجمع بين:

  • واجهة برمجة تطبيقات DataFrame: عمليات مستوحاة من PySpark للتعامل مع البيانات بشكل مألوف
  • العمليات الدلالية: عمليات مدمجة للذكاء الاصطناعي ونماذج اللغة الكبيرة، وتشمل الدوال الدلالية والتضمينات والتجميع
  • تكامل النموذج: دعم أصلي لمزودي الذكاء الاصطناعي (Anthropic، OpenAI، Cohere، Google)
  • تحسين الاستعلامات: تحسين تلقائي من خلال تحويلات الخطة المنطقية

القراءة من Hugging Face Hub

يمكن لـ fenic قراءة مجموعات البيانات مباشرةً من Hugging Face Hub باستخدام بروتوكول hf://. هذه الميزة مدمجة في واجهة DataFrameReader الخاصة بـ fenic.

الصيغ المدعومة

يدعم fenic قراءة الصيغ التالية من Hugging Face:

  • ملفات Parquet (.parquet)
  • ملفات CSV (.csv)

قراءة مجموعات البيانات

للقراءة من مجموعة بيانات من Hugging Face Hub:

import fenic as fc

session = fc.Session.get_or_create(fc.SessionConfig())

# Read a CSV file from a public dataset
df = session.read.csv("hf://datasets/datasets-examples/doc-formats-csv-1/data.csv")

# Read Parquet files using glob patterns
df = session.read.parquet("hf://datasets/cais/mmlu/astronomy/*.parquet")

# Read from a specific dataset revision
df = session.read.parquet("hf://datasets/datasets-examples/doc-formats-csv-1@~parquet/**/*.parquet")

القراءة مع إدارة المخطط

# Read multiple CSV files with schema merging
df = session.read.csv("hf://datasets/username/dataset_name/*.csv", merge_schemas=True)

# Read multiple Parquet files with schema merging
df = session.read.parquet("hf://datasets/username/dataset_name/*.parquet", merge_schemas=True)

ملاحظة: في fenic، المخطط هو مجموعة أسماء الأعمدة وأنواع بياناتها. عند تفعيل merge_schemas، يحاول fenic التوفيق بين الفروقات عبر الملفات من خلال ملء الأعمدة الناقصة بقيم null وتوسيع الأنواع حيثما أمكن ذلك. لا تزال بعض الترتيبات غير قابلة للدمج — راجع وثائق fenic حول قيود دمج مخططات CSV و قيود دمج مخططات Parquet.

المصادقة

للقراءة من مجموعات البيانات الخاصة، يجب عليك ضبط رمز Hugging Face الخاص بك كمتغير بيئة:

export HF_TOKEN="your_hugging_face_token_here"

صيغة المسار

يتبع مسار Hugging Face في fenic البنية التالية:

hf://{repo_type}/{repo_id}/{path_to_file}

يمكنك أيضًا تحديد مراجع أو إصدارات مجموعة البيانات:

hf://{repo_type}/{repo_id}@{revision}/{path_to_file}

الميزات:

  • يدعم أنماط glob (*، **)
  • مراجعات/إصدارات مجموعات البيانات باستخدام @ صيغة:
    • التزام محدد: @d50d8923b5934dc8e74b66e6e4b0e2cd85e9142e
    • الفرع: @refs/convert/parquet
    • اسم مستعار للفرع: @~parquet
  • يتطلب متغير البيئة HF_TOKEN للمجموعات الخاصة

مزج مصادر البيانات

يتيح لك fenic دمج مصادر بيانات متعددة في عملية قراءة واحدة، بما في ذلك خلط بروتوكولات مختلفة:

# Mix HF and local files in one read call
df = session.read.parquet([
    "hf://datasets/cais/mmlu/astronomy/*.parquet",
    "file:///local/data/*.parquet",
    "./relative/path/data.parquet"
])

تتيح لك هذه المرونة دمج البيانات من Hugging Face Hub والملفات المحلية بسلاسة في خط معالجة البيانات الخاص بك.

معالجة البيانات من Hugging Face

بمجرد تحميلها من Hugging Face، يمكنك استخدام واجهة برمجة تطبيقات DataFrame الكاملة الخاصة بـ fenic:

عمليات DataFrame الأساسية

import fenic as fc

session = fc.Session.get_or_create(fc.SessionConfig())

# Load IMDB dataset from Hugging Face
df = session.read.parquet("hf://datasets/imdb/plain_text/train-*.parquet")

# Filter and select
positive_reviews = df.filter(fc.col("label") == 1).select("text", "label")

# Group by and aggregate
label_counts = df.group_by("label").agg(
    fc.count("*").alias("count")
)

عمليات مدعومة بالذكاء الاصطناعي

للاستخدام العمليات الدلالية والتضمينية، قم بإعداد نماذج اللغة والتضمين في SessionConfig. بمجرد الإعداد:

import fenic as fc

# Requires OPENAI_API_KEY to be set for language and embedding calls
session = fc.Session.get_or_create(
    fc.SessionConfig(
        semantic=fc.SemanticConfig(
            language_models={
                "gpt-4o-mini": fc.OpenAILanguageModel(
                    model_name="gpt-4o-mini",
                    rpm=60,
                    tpm=60000,
                )
            },
            embedding_models={
                "text-embedding-3-small": fc.OpenAIEmbeddingModel(
                    model_name="text-embedding-3-small",
                    rpm=60,
                    tpm=60000,
                )
            },
        )
    )
)

# Load a text dataset from Hugging Face
df = session.read.parquet("hf://datasets/imdb/plain_text/train-00000-of-00001.parquet")

# Add embeddings to text columns
df_with_embeddings = df.select(
    "*",
    fc.semantic.embed(fc.col("text")).alias("embedding")
)

# Apply semantic functions for sentiment analysis
df_analyzed = df_with_embeddings.select(
    "*",
    fc.semantic.analyze_sentiment(
        fc.col("text"),
        model_alias="gpt-4o-mini",  # Optional: specify model
    ).alias("sentiment")
)

مثال: تحليل مجموعة بيانات MMLU

import fenic as fc

# Requires OPENAI_API_KEY to be set for semantic calls
session = fc.Session.get_or_create(
    fc.SessionConfig(
        semantic=fc.SemanticConfig(
            language_models={
                "gpt-4o-mini": fc.OpenAILanguageModel(
                    model_name="gpt-4o-mini",
                    rpm=60,
                    tpm=60000,
                )
            },
        )
    )
)

# Load MMLU astronomy subset from Hugging Face
df = session.read.parquet("hf://datasets/cais/mmlu/astronomy/*.parquet")

# Process the data
processed_df = (df
    # Filter for specific criteria
    .filter(fc.col("subject") == "astronomy")
    # Select relevant columns
    .select("question", "choices", "answer")
    # Add difficulty analysis using semantic.map
    .select(
        "*",
        fc.semantic.map(
            "Rate the difficulty of this question from 1-5: {{question}}",
            question=fc.col("question"),
            model_alias="gpt-4o-mini"  # Optional: specify model
        ).alias("difficulty")
    )
)

# Show results
processed_df.show()

الموارد

Update on GitHub