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 adalah kerangka kerja DataFrame yang terinspirasi dari PySpark dan dirancang untuk membangun aplikasi AI dan agen produksi. fenic menyediakan dukungan untuk membaca dataset langsung dari Hugging Face Hub.

Memulai

Untuk memulai, instal fenic menggunakan pip:

pip install fenic

Buat Sesi

Instansiasi sesi fenic dengan konfigurasi default (cukup untuk membaca dataset dan operasi non-semantik lainnya):

import fenic as fc

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

Ikhtisar

fenic adalah kerangka kerja pemrosesan data yang memiliki opini yang kuat dan menggabungkan:

  • API DataFrame: operasi terinspirasi PySpark untuk manipulasi data yang familiar
  • Operasi Semantik: Operasi AI/LLM bawaan termasuk fungsi semantik, embeddings, dan clustering
  • Integrasi Model: Dukungan native untuk penyedia AI (Anthropic, OpenAI, Cohere, Google)
  • Optimasi Kueri: Optimasi otomatis melalui transformasi rencana logis

Baca dari Hugging Face Hub

fenic dapat membaca dataset langsung dari Hugging Face Hub menggunakan protokol hf://. Fungsi ini sudah terintegrasi ke dalam antarmuka DataFrameReader fenic.

Format yang Didukung

fenic mendukung pembacaan format berikut dari Hugging Face:

  • Berkas Parquet (.parquet)
  • Berkas CSV (.csv)

Membaca Dataset

Untuk membaca dataset dari 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")

Membaca dengan Manajemen Skema

# 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)

Catatan: Dalam fenic, skema adalah kumpulan nama kolom dan tipe datanya. Ketika Anda mengaktifkan merge_schemas, fenic mencoba menyelaraskan perbedaan antar file dengan mengisi kolom yang hilang dengan null dan memperlebar tipe data sejauh memungkinkan. Beberapa tata letak tetap tidak dapat digabungkan—konsultasikan dokumentasi fenic untuk batasan penggabungan skema CSV dan batasan penggabungan skema Parquet.

Autentikasi

Untuk membaca dataset privat, Anda perlu mengatur token Hugging Face Anda sebagai variabel lingkungan:

export HF_TOKEN="your_hugging_face_token_here"

Format Path

Format jalur Hugging Face di fenic mengikuti struktur berikut:

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

Anda juga dapat merevisi atau menentukan versi dataset:

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

Fitur:

  • Mendukung pola glob (*, **)
  • Revisi/versi dataset menggunakan @ notasi:
    • Commit spesifik: @d50d8923b5934dc8e74b66e6e4b0e2cd85e9142e
    • Cabang: @refs/convert/parquet
    • Alias cabang: @~parquet
  • Membutuhkan variabel lingkungan HF_TOKEN untuk dataset privat

Mencampur Sumber Data

fenic memungkinkan Anda menggabungkan beberapa sumber data dalam satu operasi baca, termasuk mencampur protokol yang berbeda:

# 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"
])

Fleksibilitas ini memungkinkan Anda untuk menggabungkan data dari Hugging Face Hub dan file lokal secara mulus dalam pipeline pemrosesan data Anda.

Memproses Data dari Hugging Face

Setelah dimuat dari Hugging Face, Anda dapat menggunakan API DataFrame lengkap dari fenic:

Operasi Dasar 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")
)

Operasi Berbasis AI

Untuk menggunakan operasi semantik dan embedding, konfigurasikan model bahasa dan embedding di SessionConfig Anda. Setelah dikonfigurasi:

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")
)

Contoh: Menganalisis Dataset 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()

Sumber daya

Update on GitHub