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 là một framework DataFrame lấy cảm hứng từ PySpark, được thiết kế để xây dựng các ứng dụng AI và agentic ở quy mô production. fenic hỗ trợ đọc trực tiếp các dataset từ Hugging Face Hub.

Bắt đầu

Để bắt đầu, hãy cài đặt fenic bằng pip:

pip install fenic

Tạo một Phiên

Khởi tạo một phiên fenic với cấu hình mặc định (đủ để đọc các tập dữ liệu và các thao tác phi ngữ nghĩa khác):

import fenic as fc

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

Tổng quan

fenic là một framework xử lý dữ liệu có quan điểm rõ ràng, kết hợp:

  • API DataFrame: các thao tác lấy cảm hứng từ PySpark để thao tác dữ liệu quen thuộc
  • Thao tác ngữ nghĩa: Các thao tác AI/LLM tích hợp sẵn bao gồm các hàm ngữ nghĩa, embeddings và phân cụm
  • Tích hợp mô hình: Hỗ trợ bản địa cho các nhà cung cấp AI (Anthropic, OpenAI, Cohere, Google)
  • Tối ưu truy vấn: Tối ưu hóa tự động thông qua các phép biến đổi kế hoạch logic

Đọc từ Hugging Face Hub

fenic có thể đọc trực tiếp các bộ dữ liệu từ Hugging Face Hub bằng giao thức hf://. Tính năng này được tích hợp sẵn trong giao diện DataFrameReader của fenic.

Định dạng được hỗ trợ

fenic hỗ trợ đọc các định dạng sau từ Hugging Face:

  • Tệp Parquet (.parquet)
  • Các tệp CSV (.csv)

Đọc Datasets

Để đọc một tập dữ liệu từ 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")

Đọc với Quản lý Schema

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

Ghi chú: Trong fenic, một schema là tập hợp các tên cột và kiểu dữ liệu của chúng. Khi bạn bật merge_schemas, fenic sẽ cố gắng điều hòa các khác biệt giữa các tệp bằng cách điền giá trị null vào các cột thiếu và mở rộng kiểu dữ liệu khi có thể. Một số bố cục vẫn không thể hợp nhất—hãy tham khảo tài liệu fenic về giới hạn hợp nhất schema CSV và giới hạn hợp nhất schema Parquet.

Xác thực

Để đọc các bộ dữ liệu riêng tư, bạn cần đặt token Hugging Face của mình dưới dạng biến môi trường:

export HF_TOKEN="your_hugging_face_token_here"

Định dạng đường dẫn

Định dạng đường dẫn Hugging Face trong fenic tuân theo cấu trúc sau:

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

Bạn cũng có thể chỉ định các bản sửa đổi hoặc phiên bản của bộ dữ liệu:

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

Tính năng:

  • Hỗ trợ các mẫu glob (*, **)
  • Các bản sửa đổi/bản của Dataset sử dụng @ ký hiệu:
    • Commit cụ thể: @d50d8923b5934dc8e74b66e6e4b0e2cd85e9142e
    • Branch: @refs/convert/parquet
    • Biệt danh nhánh: @~parquet
  • Yêu cầu biến môi trường HF_TOKEN cho các bộ dữ liệu riêng tư

Trộn các nguồn dữ liệu

fenic cho phép bạn kết hợp nhiều nguồn dữ liệu trong một thao tác đọc duy nhất, bao gồm cả việc trộn lẫn các giao thức khác nhau:

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

Sự linh hoạt này cho phép bạn kết hợp liền mạch dữ liệu từ Hugging Face Hub và các tệp cục bộ trong quy trình xử lý dữ liệu của mình.

Xử lý dữ liệu từ Hugging Face

Sau khi được tải từ Hugging Face, bạn có thể sử dụng toàn bộ API DataFrame của fenic:

Các thao tác cơ bản với 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")
)

Vận hành do AI hỗ trợ

Để sử dụng các thao tác ngữ nghĩa và nhúng, hãy cấu hình các mô hình ngôn ngữ và nhúng trong SessionConfig của bạn. Sau khi cấu hình:

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

Ví dụ: Phân tích bộ dữ liệu 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()

Tài nguyên

Update on GitHub