
2025/12/16 23:38
Show HN: Misata – synthetic data engine using LLM and Vectorized NumPy
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
要約
Misataは、自然言語で記述された物語を手動でスキーマ設計やトレーニングデータを用意することなく、現実的かつ複数テーブルからなるデータセットへと変換します。自動で整合性制約やビジネスルールを持つリレーショナルスキーマを生成し、効率的に数百万行をストリーミングし、Groq(無料かつ高速)、OpenAI(無料層なし)、またはローカルのOllamaによるLLM駆動生成をサポートします。
クイックスタート
misata generate --story "A fitness app with 50K users" \ --use-llm --rows 50000 --output ./data
約2.34 秒で「FitnessApp」というスキーマを生成し、5テーブルと4つのリレーションシップを作成します。
Python API
gen = LLMSchemaGenerator(...) sim = DataSimulator(gen) for batch in sim.batches(rows=100000): # バッチを処理または書き込み
CLIオプション – 出力ディレクトリ、行数、再現性のあるシード、プロバイダー/モデル選択。
制約 –
Constraint は時間管理表での日次作業時間上限などのルールを強制できます。
プールとノイズの拡張 –
,TextGenerator.extend_pool
,load_pools_from_filesave_pools_to_fileadd_noise(null_rate=0.01, outlier_rate=0.02, typo_rate=0.03, duplicate_rate=0.04)
で収益の時間的漂移を適用。NoiseInjector.apply_temporal_drift()
属性カスタマイズ –
Customizer と ColumnOverride を使用して現実的な分布や条件付き値を設定します。
ベンチマーク – 10 K 行: 0.03 秒(333k 行/秒)、1 M 行: 2.6 秒(390k 行/秒)、10 M 行ストリーミング: 26 秒(約390k 行/秒)。
エンタープライズ向けオファリング – カスタムスキーマ、パイプライン統合、業界特有のデータ生成、およびチームトレーニング。お問い合わせは rasinbinabdulla@gmail.com まで。
Misata は、開発者・データサイエンティスト・企業向けに、データベースプロトタイピング、合成テストデータ作成、およびプライバシー保護を行ったデータ生成を加速します。
本文
Misata – ストーリーから合成データベースへワンコマンドで
概要
自然言語だけで実際の多テーブルデータセットを生成。スキーマ作成や学習データは不要です。
| 機能 | Faker | SDV | Misata |
|---|---|---|---|
| 自然言語入力 | ❌ | ❌ | ✅ |
| スキーマ自動生成 | ❌ | ❌ | ✅ |
| 関係整合性 | ❌ | ✅ | ✅ |
| ビジネス制約 | ❌ | ❌ | ✅ |
| 学習データ不要 | ✅ | ❌ | ✅ |
| ストリーミング(10M+ 行) | ❌ | ❌ | ✅ |
速攻開始
1. Groq (無料・高速)
export GROQ_API_KEY=your_key # 無料取得: https://console.groq.com misata generate --story "A SaaS with 50K users, subscriptions, and payments" --use-llm
2. OpenAI
export OPENAI_API_KEY=your_key misata generate --story "E-commerce with products and orders" --use-llm --provider openai
3. Ollama (ローカル・無料・プライベート)
ollama run llama3 # まず Ollama を起動 misata generate --story "Fitness app with workouts" --use-llm --provider ollama
出力例
$ misata generate --story "A fitness app with 50K users" --use-llm 🧠 Using Groq (llama-3.3-70b-versatile) for intelligent parsing... ✅ LLM schema generated successfully! 📋 Schema: FitnessApp Tables: 5 Relationships: 4 🔧 Generating 5 table(s)... ✓ exercises (10 rows) ✓ plans (5 rows) ✓ users (50,000 rows) ✓ subscriptions (45,000 rows) ✓ workouts (500,000 rows) ⏱️ Generation time: 2.34 seconds 🚀 Performance: 213 675 rows/second 💾 Data saved to: ./generated_data
Python API
from misata import DataSimulator, SchemaConfig from misata.llm_parser import LLMSchemaGenerator # ストーリーからスキーマ生成 llm = LLMSchemaGenerator(provider="groq") # または "openai", "ollama" config: SchemaConfig = llm.generate_from_story( "A mobile fitness app with 50K users, workout tracking, " "premium subscriptions, and January signup spikes" ) # データ生成 for table_name, batch in DataSimulator(config).generate_all(): print(f"Generated {len(batch)} rows for {table_name}")
CLI リファレンス
| オプション | 説明 |
|---|---|
| ルールベース生成(API キー不要) |
| スキーマとデータを LLM で生成 |
| `--provider [groq | openai |
| カスタムモデル指定(例: ) |
| 出力ディレクトリ変更 |
| デフォルト行数を上書き |
| 再現性のためシード設定 |
ビジネスルール制約
from misata import Constraint, Table timesheets = Table( name="timesheets", row_count=10_000, constraints=[ Constraint( name="max_daily_hours", type="sum_limit", group_by=["employee_id", "date"], column="hours", value=8.0, action="redistribute" ) ] )
LLM プロバイダー
| プロバイダー | 環境変数 | 無料枠 | 備考 |
|---|---|---|---|
| Groq | | ✅ 30 req/min | 最速、推奨 |
| OpenAI | | ❌ | 品質最高 |
| Ollama | None | ✅ ローカル | プライベート・インターネット不要 |
データプール拡張
from misata import TextGenerator # カスタム名を追加 TextGenerator.extend_pool("first_names", ["Arjun", "Priya", "Rahul"]) # ファイルから読み込み TextGenerator.load_pools_from_file("custom_pools.json") # 再利用のため保存 TextGenerator.save_pools_to_file("expanded_pools.json")
ML トレーニングデータ – ノイズ注入
from misata import add_noise, NoiseInjector # 簡易ノイズ注入 noisy_df = add_noise( df, null_rate=0.05, # 5% 欠損値 outlier_rate=0.02, # 2% 統計外れ値 typo_rate=0.01, # 1% テキストのタイプミス duplicate_rate=0.03, # 3% 重複行 seed=42 ) # 高度: 時系列分布ドリフト injector = NoiseInjector(seed=42) df = injector.apply_temporal_drift( df, date_column="created_at", value_column="revenue", drift_rate=0.15, # 15% 増加 drift_direction="up" )
属性カスタマイズ
from misata import Customizer, ColumnOverride import numpy as np customizer = Customizer(seed=42) # 年齢分布を実際に近い正規分布で設定 customizer.add_override( "users", ColumnOverride( name="age", generator=lambda n: np.random.normal(35, 12, n).clip(18, 80).astype(int) ) ) # 他列に基づく条件付き値 customizer.add_conditional( "orders", "shipping_cost", {"country": {"US": 5.99, "UK": 9.99, "DE": 7.99}} ) # 生成データへ適用 df = customizer.apply(df, "users")
パフォーマンスベンチマーク
| 行数 | 時間 | スピード (行/秒) |
|---|---|---|
| 10 K | 0.03s | 333 k |
| 100 K | 0.26s | 385 k |
| 1 M | 2.6s | 390 k |
| 10 M | 26s | 390 k (ストリーミング) |
今すぐ試す
ブラウザから Misata を直接利用できます。インストール不要です。
エンタープライズ & コンサルティング
- 大規模データスキーマ(10M+ 行)カスタム構築
- 既存パイプラインとの統合
- 業界特化型リアルデータ生成
- チーム向けトレーニングとオンボーディング
お問い合わせ: rasinbinabdulla@gmail.com
ライセンス
MIT License
作者
Muhammed Rasin によって構築されました。