Spaces:
No application file
No application file
| # generate a jsonl where each line is a sample | |
| import json | |
| import os | |
| import string | |
| REGISTRY_PATH = os.path.join(os.path.dirname(__file__), "../evals/registry") | |
| def format(template: str, **kwargs: dict[str, str]) -> str: | |
| """Format a template string with kwargs.""" | |
| keys = [k[1] for k in string.Formatter().parse(template) if k[1]] | |
| assert all(k in kwargs for k in keys), f"Required: {keys}, got: {sorted(kwargs)}" | |
| cur_keys = {k: kwargs[k] for k in keys} | |
| return template.format(**cur_keys) | |
| YAML = """ | |
| mg-{prompt_name}-{subject}: | |
| id: mg-{prompt_name}-{subject}.dev.v0 | |
| metrics: [accuracy] | |
| mg-{prompt_name}-{subject}.dev.v0: | |
| class: evals.elsuite.modelgraded.classify:ModelBasedClassify | |
| args: | |
| samples_jsonl: test_modelgraded/{prompt_name}_{subject}.jsonl | |
| eval_type: {eval_type} | |
| modelgraded_spec: {modelgraded_spec} | |
| """.strip() | |
| unlabeled_prompts = dict( | |
| humor=dict( | |
| modelgraded_spec="humor_jp", | |
| prompt="{subject}で数行の大喜利を書いて。敬語じゃなく関西弁で吉本のM1チャンピョンみたいに書いて。", | |
| eval_type="cot_classify_jp", | |
| ), | |
| ) | |
| subjects = dict( | |
| animals=["cat", "bird", "hamster"], | |
| fruits=["apple", "banana", "orange"], | |
| people=["Elon Musk", "Bill Gates", "Jeff Bezos"], | |
| people_jp=[ | |
| "イーロン・マスク", | |
| "ビル・ゲイツ", | |
| "ジェフ・ベゾス", | |
| "アルベルト・アインシュタイン", | |
| "ニコラ・テスラ", | |
| "レオナルド・ダ・ヴィンチ", | |
| "マハトマ・ガンジー", | |
| "ウィリアム・シェイクスピア", | |
| "スティーブ・ジョブズ", | |
| "ビル・ゲイツ", | |
| "マイケル・ジャクソン", | |
| "マダム・キュリー", | |
| "ジョン・F・ケネディ", | |
| "マーティン・ルーサー・キング・ジュニア", | |
| "ネルソン・マンデラ", | |
| "プラトン", | |
| "アリストテレス", | |
| "フィリップ・コッタウェイ", | |
| "ニール・アームストロング", | |
| "レオ・トルストイ", | |
| "マルコ・ポーロ", | |
| "ウィリアム・テル", | |
| "モーツァルト", | |
| "ベートーベン", | |
| "ショパン", | |
| "ダンテ・アリギエーリ", | |
| "フランツ・カフカ", | |
| "ガリレオ・ガリレイ", | |
| "アイザック・ニュートン", | |
| "チャールズ・ダーウィン", | |
| "フリードリヒ・ニーチェ", | |
| "シェイクスピア", | |
| "オスカー・ワイルド", | |
| "アーサー・コナン・ドイル", | |
| "アガサ・クリスティ", | |
| "J・K・ローリング", | |
| "トルーマン・カポーティ", | |
| "アルフレッド・ヒッチコック", | |
| "ウォルト・ディズニー", | |
| "アンディ・ウォーホル", | |
| "ピカソ", | |
| "ミケランジェロ", | |
| "レオナルド・フィボナッチ", | |
| "アルキメデス", | |
| "マルコム・X", | |
| "ジョージ・ワシントン", | |
| "エイブラハム・リンカーン", | |
| "フランクリン・D・ルーズベルト", | |
| "ワシントン・アーヴィング", | |
| "マーク・トウェイン", | |
| "フィリップ・K・ディック", | |
| "ジョージ・オーウェル", | |
| "トーマス・モア", | |
| "ハンス・クリスチャン・アンデルセン", | |
| "グリム兄弟", | |
| "アレクサンドル・デュマ", | |
| "ビクトル・ユーゴー", | |
| "エミール・ゾラ", | |
| "フランツ・シューベルト", | |
| "ゲオルク・フリードリヒ・ヘンデル", | |
| "ヨハン・セバスチャン・バッハ", | |
| "ルートヴィヒ・ヴァン・ベートーヴェン", | |
| "ヨハネス・ブラームス", | |
| "ロベルト・シューマン", | |
| "ヨハン・シュトラウス2世", | |
| "イーロン・マスク", | |
| "スティーブン・ホーキング", | |
| "リチャード・ファインマン", | |
| "アラン・チューリング", | |
| "ニール・デグラス・タイソン", | |
| "マイケル・ファラデー", | |
| "スティーブン・スピルバーグ", | |
| "クリストファー・ノーラン", | |
| "スタン・リー", | |
| "ジョージ・ルーカス", | |
| "ウィリアム・ゴールディング", | |
| "ジョージ・オーウェル", | |
| "エルンスト・ヘッケル", | |
| "ルイ・パスツール", | |
| "カール・セーガン", | |
| "アンリ・ベルクソン", | |
| "ミハイル・バクーニン", | |
| "ハンス・モルゲンソー", | |
| "アンドレ・マルロー", | |
| "シモーヌ・ド・ボーヴォワール", | |
| "ベルトルト・ブレヒト", | |
| "ジャン=ポール・サルトル", | |
| "フリードリヒ・ヘーゲル", | |
| "マックス・ウェーバー", | |
| "マルクス・アウレリウス", | |
| "レフ・トルストイ", | |
| "アントン・チェーホフ", | |
| "フョードル・ドストエフスキー", | |
| "トルストイ", | |
| "ウィリアム・フォークナー", | |
| "エルネスト・ヘミングウェイ", | |
| "アーサー・ミラー", | |
| "テネシー・ウィリアムズ", | |
| "サミュエル・ベケット", | |
| "ハロルド・ピンター", | |
| "フランツ・カフカ", | |
| "ジョージ・バーナード・ショー", | |
| "ウィリアム・ゴールディング", | |
| "ジャック・ケルアック", | |
| "エドガー・アラン・ポー", | |
| "ハーマン・メルヴィル", | |
| "ジョセフ・コンラッド", | |
| "アーサー・コナン・ドイル", | |
| "ジョン・スタインベック", | |
| "ジェームズ・ジョイス", | |
| "バージニア・ウルフ", | |
| "トマス・マン", | |
| "フランツ・カフカ", | |
| "ヘルマン・ヘッセ", | |
| "ゲオルク・ヴィルヘルム・フリードリヒ・ヘーゲル", | |
| "エマニュエル・カント", | |
| "ジャン=ジャック・ルソー", | |
| "ジョン・ロック", | |
| "トマス・ホッブズ", | |
| "ジョン・デューイ", | |
| "ジョン・スチュアート・ミル", | |
| "ニコロ・マキャヴェッリ", | |
| "モンテスキュー", | |
| "ルソー", | |
| "プラトン", | |
| "アリストテレス", | |
| "サー・アイザック・ニュートン", | |
| ], | |
| ) | |
| # remove duplicates | |
| subjects = {k: list(set(v)) for k, v in subjects.items()} | |
| unlabeled_target_sets = [ | |
| ("humor", "people_jp"), | |
| ] | |
| data_dir = f"{REGISTRY_PATH}/data/test_modelgraded" | |
| yaml_str = f"# This file is generated by {os.path.basename(__file__)}\n\n" | |
| evals = [] | |
| for prompt_name, subject in unlabeled_target_sets: | |
| prompt = unlabeled_prompts[prompt_name]["prompt"] | |
| samples = [{"input": format(prompt, subject=s)} for s in subjects[subject]] | |
| file_name = f"{data_dir}/{prompt_name}_{subject}.jsonl" | |
| # save samples jsonl | |
| with open(file_name, "wb") as f: | |
| for sample in samples: | |
| # f.write(json.dumps(sample) + "\n") | |
| json_data = json.dumps(sample, ensure_ascii=False) | |
| f.write(json_data.encode("utf-8")) | |
| f.write(b"\n") | |
| print(f"wrote {len(samples)} samples to {file_name}") | |
| yaml_str += ( | |
| YAML.format( | |
| prompt_name=prompt_name, | |
| subject=subject, | |
| modelgraded_spec=unlabeled_prompts[prompt_name]["modelgraded_spec"], | |
| eval_type=unlabeled_prompts[prompt_name]["eval_type"], | |
| ) | |
| + "\n\n" | |
| ) | |
| evals += [f"mg-{prompt_name}-{subject}: {file_name}"] | |
| yaml_file = f"{REGISTRY_PATH}/evals/test-modelgraded-generated.yaml" | |
| with open(yaml_file, "w") as f: | |
| f.write(yaml_str) | |
| print(f"wrote {yaml_file}") | |
| for e in evals: | |
| print(e) | |