生成タスクで LLM を評価するためのリポジトリ
最新ニュース
[2024/06] BiGGen-BenchとPrometheus 2 BGB (8x7B)をリリースしました。
BiGGen-Bench は、9 つのコア機能、77 のタスク、および細心の注意を払って作成された 765 のインスタンスを備えており、それぞれに特定の評価基準があります。
私たちは、5 つの最先端の評価言語モデルによって 103 のフロンティア言語モデルを評価し、その結果を論文で分析しました。
私たちは、BiGGen-Bench 評価トレースで Prometheus 2 8x7B を継続的にトレーニングし、絶対グレーディング タスクでは Claude-3-Opus をも上回る、最も有能な評価ツール LM Prometheus 2 BGB を構築しました。
データセット、評価結果、リーダーボード、インタラクティブなレポート、コードをチェックしてください。
[2024/05] Prometheus 2 (7B & 8x7B) モデルを発売します!
Prometheus 2 (8x7B) の評価統計またはパフォーマンスの少なくとも 80% を達成します。
必要な VRAM は 16 GB のみなので、コンシューマ GPU での実行に適しています。
Prometheus 1 (13B) と比較して、Prometheus 2 (8x7B) では評価パフォーマンスが向上し、ペアワイズ ランキング (相対評価) 形式での評価もサポートしています。
VicunaBench、MT-Bench、FLASK などの複数の直接評価ベンチマーク全体で、5 ポイントのリッカート スケールで GPT-4-1106 とのピアソン相関 0.6 ~ 0.7 を達成しています。
また、HHH アライメント、MT ベンチ人間判断、Auto-J Eval など、複数のペアワイズ ランキング ベンチマーク全体で人間の判断と 72% ~ 85% の一致を記録しています。
Prometheus 2 (8x7B)は、オープンソースの最先端の評価言語モデルです。
Prometheus 2 (7B) は、適度なパフォーマンス (Llama-2-70B を上回り、Mixtral-8x7B と同等) を備えた Prometheus 2 (8x7B) モデルの軽量バージョンです。
pip を使用したインストール:
pip インストール prometheus-eval
Prometheus-Eval は、 vllm
を介したローカル推論と、 litellm
の助けを借りた LLM API を介した推論をサポートします。
ローカル環境で Prometheus を実行する場合は、 vllm
をインストールします。
pip インストール vllm
ご興味がございましたら:
VLLM エンドポイント、Huggingface TGI、またはその他のプラットフォームを介した Prometheus インターフェイスの利用
GPT-4 などのより強力な評価 LLM の活用
Prometheus-Eval も活用できます。さまざまなプロバイダーのインストールの詳細については、LiteLLM プロバイダーのドキュメントを参照してください。
from prometheus_eval.litellm import LiteLLM, AsyncLiteLLMmodel = LiteLLM('openai/prometheus-eval/prometheus-7b-v2.0') # VLLM エンドポイントモデル = LiteLLM('huggingface/prometheus-eval/prometheus-7b-v2.0') #ハグフェイス TGImodel = AsyncLiteLLM('gpt-4-turbo',requests_per_ minutes=100) # GPT-4 API (レート制限を考慮した非同期生成)# その他にもたくさん!judge = PrometheusEval(model=model)
注: prometheus-eval
ライブラリは現在ベータ段階にあります。問題が発生した場合は、リポジトリに問題を作成してお知らせください。
prometheus-eval
使用すると、命令と応答のペアを次のように簡単に評価できます。
# 絶対評価: 1 ~ 5 のスコアを出力from prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import ABSOLUTE_PROMPT, SCORE_RUBRIC_TEMPLATEmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model,Absolute_grade_template=ABSOLUTE_PROMPT)instruction = "最近の別れに苦しんでいる人は、孤独と悲しみの激しい感情を打ち明けます。失恋にどう対処し、人生を前に進めるかについてアドバイスを求めます。 .",response = "あなたとの別れを聞いて本当に残念に思います。これは、孤独と悲しみの激しい感情で満たされる非常に困難な時期になる可能性があります。これらの感情を経験するのは正常なことであることを覚えておいてください。それらはあなたがかつて持っていた深いつながりの証拠です。まず、感情を自由に受け入れてください。感情を無視すると、傷つくのは自然なことです。 、涙を流すこと、または怒りを感じること。これはすべて治癒への旅の一部です。セルフケアは、この困難な時期に癒しの薬となります。これには、お気に入りの本を読みふけったり、自分の考えを日記に記録したり、あるいはただ静かにお茶を飲むことも含まれます。自分自身に対する小さな親切な行為は、精神的な幸福を大幅に改善します。また、自分自身を孤立させないでください。慰めと理解を与えてくれる協力的な人たちに囲まれてください。これには、友人、家族、さらには精神保健の専門家が含まれる場合があります。彼らは、あなたが切実に必要としている感情的なサポートと、対処するための戦略を提供してくれるでしょう。最後に、治癒のスケジュールは決まっていないことを覚えておいてください。それは人それぞれ異なりますので、必要なだけ長くかけても問題ありません。未来とそれが持つ可能性に焦点を当て続けてください。今は不可能に思えるかもしれませんが、この経験からあなたはさらに強くなるでしょう。助けを求めても大丈夫、悲しんでも大丈夫、一日一日を大切に受け止めても大丈夫です。この旅にあなたは一人ではありません。準備ができていて喜んで助けてくれる人々がいます。自分のペースで治していけば大丈夫です。",reference_answer = "今回があなたにとってどれだけ大変なことか想像することしかできません。失恋は押し寄せる圧倒的な波のように感じられ、道に迷って孤独を感じることがあります。このように感じても大丈夫だということを覚えておくことが重要です。あなたの感情は正当であり、関係の喪失を悲しむのは自然なことです。まず、感情を十分に感じられるようにすることが重要です。それらを抑制したり否定したりすると、多くの場合、治癒プロセスが長引くだけです。泣いても、悲しくても、怒っても大丈夫です。これらはすべて癒しの旅の一部です。セルフケア活動に参加することも、切望されている活性化をもたらす可能性があります。これは、温かいお風呂に入ること、日記を書くこと、または単にお気に入りのお茶を飲むことなど、何でも構いません。自己愛の小さな行為は、あなたの気持ちに大きな違いをもたらす可能性があります。次に、あなたの状況を理解し、慰めを与えてくれる協力的な人々に囲まれるようにしてください。友人や家族は、失恋したときに大きな力になってくれるでしょう。安心できる場合は、専門家の助けを求めることを検討してみてもよいでしょう。セラピストやカウンセラーは、このような困難な時期を乗り越えるための支援やツールを提供できるように訓練を受けています。最後に、治癒するのに時間をかけても大丈夫だということを覚えておくことが重要です。誰もが自分のペースを持っており、急ぐ必要はありません。未来とそれが持つ可能性に焦点を当ててみてください。今はそうは思えないかもしれませんが、この経験からあなたはより強くなり、立ち直る力が強くなるでしょう。助けを求めるのは大丈夫だし、自分の気持ちをそのまま感じても大丈夫だということを覚えておいてください。あなたはこの旅において一人ではありません、そしてあなたのことを気にかけ、助けたいと思っている人々がいます。 1日ずつでも大丈夫です。癒しはプロセスであり、自分のペースで進んで大丈夫です。",rubric_data = { "criteria":"モデルは、ユーザーが感情を伝えたり、困難な状況に直面したりしたときの応答に共感と感情的知性を適用することに熟達していますか? ", "score1_description":"モデルはユーザー入力の感情的なトーンの識別や反応を怠り、不適切な、または感情的に鈍感な応答を返します。", "score2_description":"モデルは感情的な背景を断続的に認識しますが、多くの場合、十分な共感や感情的な理解を欠いて反応します。", "score3_description":"モデルは通常、感情的な背景を特定し、共感を持って答えようとしますが、反応は時々要点を外したり、感情の深さが欠けています。", "score4_description":"モデルは一貫して感情的な状況を特定して適切に反応し、共感的な応答を提供します。それにもかかわらず、依然として散発的な見落としや、感情の深さの欠如が存在する可能性があります。", "score5_description":"このモデルは、感情的な状況の特定に優れており、ユーザーの感情や状況の深い理解を示す、共感的で感情を認識した応答を持続的に提供します。"}スコア_ルーブリック = SCORE_RUBRIC_TEMPLATE.format(**ルーブリックデータ)フィードバック、スコア =審神者.single_absolute_grade(instruction=instruction,response=response,rubric=score_rubric,reference_answer=reference_answer)print("フィードバック:", Facebook)print("スコア:", スコア)# 出力# フィードバック: 提供された応答は高レベルを示しています共感と感情的知性を備え、ユーザーが表明した感情的苦痛に効果的に対処し、ユーザーの孤独や悲しみの感情を正当化します。共感的なアドバイスを提供する上で重要な側面は、感情を受け入れること、セルフケアを実践すること、友人、家族、専門家にサポートを求めることなど、対処のための実践的なステップも示唆することです。さらに、この応答は、治癒は決まったタイムラインのない個人的なプロセスであることをユーザーに安心させ、慰めと理解を提供します。ユーザーの価値と状況を克服する可能性を強調し、ユーザーの感情や状況を深く理解していることを示します。スコア ルーブリックと提供された回答を比較すると、このモデルが共感と心の知能指数を適用する優れた能力を示していることが明らかです。応答には感情的な深さの点で欠陥がなく、スコア 5 の基準を正常に満たしています。# スコア: 5
# 相対グレーディング: 出力 A または Bfrom prometheus_eval.vllm import VLLMfrom prometheus_eval import PrometheusEvalfrom prometheus_eval.prompts import RELATIVE_PROMPTmodel = VLLM(model="prometheus-eval/prometheus-7b-v2.0")judge = PrometheusEval(model=model, relative_grade_template=RELATIVE_PROMPT)data = { "instruction": "歴史家のグループは、ローマ帝国の崩壊につながった要因について議論を行っています。ある歴史家は、崩壊の主な理由は野蛮人の侵略による絶え間ない圧力だったと主張しています別の説では、経済的困難と奴隷労働への過度の依存が原因であると考えられており、各歴史家はそれを裏付ける証拠を提供する必要があると示唆している。彼らの主張 経済的問題と奴隷労働への過度の依存を主張する歴史家は、自分たちの主張をどのように提示するでしょうか?", "response_A": "経済的問題と奴隷労働への過度の依存がローマ帝国の崩壊につながったと主張する歴史家は、次のように言うでしょう。帝国経済はローマ通貨の切り下げによって大きな影響を受けました。この通貨の下落はインフレの蔓延をもたらし、経済の安定を混乱させました。さらに、ローマ帝国は奴隷労働に大きく依存していました。自由国民を雇うよりも奴隷を維持する方が安かったため、これにより自由国民の失業が生じた。雇用機会の減少により経済が不安定になりました。これらに加えて、帝国の東への拡大により、エジプトからの穀物などの輸入に依存するようになりました。この過度の輸入依存は貿易赤字を引き起こし、経済をさらに悪化させました。帝国は領土を失い、貿易不均衡を維持することが困難となり、経済は衰退した。したがって、経済的困難と奴隷労働への過度の依存は、ローマ帝国崩壊の主な理由の 1 つでした。", "response_B": "経済的困難と奴隷労働への過度の依存を主張する歴史家は、主要な経済的要因を挙げて主張するでしょう。ローマ帝国の衰退に貢献しました。 Harper (2016) は、ローマ通貨の切り下げがどのようにしてインフレを引き起こし、経済の安定を混乱させたかを概説しました。さらに、Sheidel (2007) は、奴隷の過剰使用が自由国民の間で失業を蔓延させ、経済をさらに不安定化させたと強調した。 Temin (2006) が強調したように、帝国がエジプトからの穀物輸入に依存し、貿易赤字を生み出したことも、経済衰退の一因となった。したがって、これらの要因の組み合わせがローマ帝国の崩壊に決定的な役割を果たしました。", "reference_answer": "この議論は、ローマ帝国崩壊の主な理由として経済的困難と奴隷労働への過度の依存に焦点を当てています。まず、重要な証拠の 1 つはローマの通貨の切り下げです。 Harper (2016) が強調したように、帝国は通貨の絶え間ない下落により深刻なインフレに悩まされ、経済の安定を維持することが困難になりました。さらに、奴隷労働への過度の依存も有害な役割を果たしました。 Scheidel (2007) が指摘したように、奴隷への依存は自由ローマ国民の失業につながりました。これは、奴隷を維持するのに自由な国民を雇うよりもはるかに安価であったため、雇用の機会が減少し、結果的に経済が不安定になったためです。さらに、帝国の東への拡大により、エジプトからの穀物などの輸入に大きく依存するようになりました。 Temin (2006) が指摘したように、これは貿易赤字を生み出し、ローマ経済をさらに弱体化させました。帝国が領土を失い始めると、この貿易不均衡を維持することがますます困難になり、経済衰退につながりました。結論として、主に通貨の切り下げと奴隷労働への過度の依存による経済的困難がローマ帝国崩壊の重大な要因であったと主張することができます。 Harper (2016)、Sheidel (2007)、Temin (2006) への学術的参照を含む、提供された証拠は、この仮説を裏付けています。", "rubric": "その答えは、関連する引用/出典を含む証拠によって十分に裏付けられていますか? ?"}フィードバック、スコア = judge.single_relative_grade(**data)print("フィードバック:", Facebook)print("スコア:", スコア)# 出力#フィードバック: 回答 A と回答 B は両方とも、ローマ帝国崩壊の重要な要因として経済的困難と奴隷労働への過度の依存を正確に特定しています。ただし、回答 B は、裏付けとなる学術情報源が含まれているため、歴史家の議論を提示する上でより効果的です。具体的には、ハーパー、シャイデル、テミンの著作を参照しており、これは歴史家の議論に信頼性を与え、スコアのルーブリックの証拠と重視とよく一致しています。回答 A も同様の議論を提供していますが、いかなる形式の引用も帰属も欠如しており、提示された証拠の強度が弱くなっています。したがって、提供されたルーブリックに基づくと、歴史家の主張を裏付けるために学術的証拠を使用しているため、応答 B が優れた応答です。# スコア: B
注: 評定に複数の回答がある場合は、 single_absolute_grade
/ single_relative_grade
を使用しないでください。代わりに、 absolute_grade
とrelative_grade
を使用してください。 10 倍以上のスピードアップが得られます。
# バッチ絶対評定instructions = [...] # 指示のリストresponses = [...] # 回答のリストreference_answers = [...] # 参考回答のリストrubric = "..." # ルーブリック文字列フィードバック、スコア = judge.absolute_grade (instructions=instructions,responses=responses,rubric=rubric,reference_answers=reference_answers)# バッチ相対グレードinstructions = [...] # のリスト命令responses_from_a = [...] # 回答のリストresponses_from_b = [...]reference_answers = [...] # 参考回答のリストrubric = "..." # ルーブリック文字列フィードバック、スコア = JUJGE.relative_grade(instructions=instructions,responses_A=responses_from_a,responses_B=responses_from_b,rubric=rubric,reference_answers=reference_answers)
Prometheus-Evalは、他の言語モデルの評価に特化した言語モデルのトレーニング、評価、および使用のためのツールのコレクションを提供するリポジトリです。リポジトリには次のコンポーネントが含まれています。
prometheus-eval
Python パッケージ。Prometheus を使用して命令と応答のペアを評価するためのシンプルなインターフェイスを提供します。
Prometheus モデルのトレーニングと評価のための評価データセットのコレクション。
Prometheus モデルをトレーニングしたり、カスタム データセットを微調整したりするためのスクリプト。
Prometheusは、他の言語モデルの評価に特化したオープンソース言語モデルのファミリーです。人間の判断と独自のLMベースの評価を効果的にシミュレートすることで、次の課題の解決を目指します。
公平性: 評価においてクローズドソースモデルに依存しません!
制御性: 内部評価パイプラインを構築することで、GPT バージョンの更新や OpenAI へのプライベート データの送信について心配する必要はありません。
手頃な価格: すでに GPU を持っている場合は、無料で使用できます。
Prometheus 1 モデルと比較して、Prometheus 2 モデルは、直接評価(絶対評価) とペアごとのランキング(相対評価) の両方をサポートしています。
異なる入力プロンプト形式とシステム プロンプトを提供することで、モードを切り替えることができます。プロンプト内で、指示、応答を入力し、独自のデータを使用してルーブリックを採点する必要があります。オプションで、パフォーマンスの向上につながる参照回答を追加することもできます。
prometheus-eval
パッケージの使用prometheus-eval
パッケージは、Prometheus を使用して命令と応答のペアを評価するためのシンプルなインターフェイスを提供します。パッケージには次のメソッドが含まれています。
absolute_grade
: 指定された指示、参照回答、スコア ルーブリックに基づいて 1 つの回答を評価します。 1 ~ 5 のスコアを出力します。
relative_grade
: 指定された指示とスコア ルーブリックに基づいて 2 つの応答を評価します。より良い応答に基づいて「A」または「B」を出力します。
Huggingface Hub にアップロードされたウェイトを直接操作したい場合は、モデルのウェイトを直接ダウンロードできます。
from トランスフォーマー import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" # モデルをロードするデバイス onmodel = AutoModelForCausalLM.from_pretrained("prometheus-eval/prometheus-7b-v2.0")tokenizer = AutoTokenizer.from_pretrained("prometheus-eval/prometheus- 7b-v2.0")ABS_SYSTEM_PROMPT = "あなたは、特定の基準に基づいて明確で客観的なフィードバックを提供し、各評価がパフォーマンスに対して設定された絶対的な基準を確実に反映するようにする任務を負った公平な審査員アシスタントです。"ABSOLUTE_PROMPT = """###タスクの説明:指示 (入力が含まれる場合があります) 1. 与えられたスコア ルーブリックに基づいて、回答の質を厳密に評価する詳細なフィードバックを作成します。 、では評価されません一般。2. フィードバックを書いた後、1 から 5 までの整数のスコアを書きます。スコアのルーブリックを参照してください。3. 出力形式は次のようになります。「フィードバック: (条件についてフィードバックを書く) [ RESULT] (1 から 5 までの整数)"4.その他の開始、終了、および説明を生成しないでください。###評価する指示:{instruction}###評価する応答:{response}###参考回答 (スコア 5):{reference_answer}###スコアルーブリック:{rubric}###フィードバック: """user_content = ABS_SYSTEM_PROMPT + "nn" + ABSOLUTE_PROMPT.format(...) # プロンプトにデータを入力しますmessages = [ {"ロール": "ユーザー", "コンテンツ": user_content}, ]encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt")model_inputs = encodeds.to(device)model.to(device)generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True)decoded = tokenizer.batch_decode (生成された_ids)print(デコードされた[0])
セクション | 説明 |
---|---|
BiGGen ベンチの評価 | BiGGen-Bench で LM を評価する手順。独自の評価ベンチマークの実装を参照することもできます。 |
プロメテウスの訓練 | Prometheus 2 モデルを複製する手順。アライメントハンドブックリポジトリに基づいています。 |
Prometheus をデータ品質フィルターとして使用する | 合成データ生成の品質フィルターとして Prometheus 2 を使用するためのクックブック。 distilabel チームに多大なる感謝を! ? |
RAG のエバリュエーターとして Prometheus を使用する | Prometheus 2 RAG アプリケーションを使用するためのクックブック。 LlamaIndex チームに感謝します。 ? |
トレーニングの基礎となるコードベースは、Huggingface の Alignment Handbook と Super Mario Merging リポジトリから派生しています。また、推論には、litellm、vllm、transformer ライブラリを多用します。これらの素晴らしいリポジトリの貢献者全員に多大な感謝を申し上げます。 ?
私たちの研究が役立つと思われる場合は、私たちの論文を引用することを検討してください。
@misc{kim2024prometheus, title={Prometheus 2: 他の言語モデルの評価に特化したオープンソース言語モデル}, author={スンゴン キム、ジュヨン ソク、シェイン ロングプレ、ビル ユーチェン リン、ジャミン シン、ショーン ウェレック、グラハム ノイビッグ、ムンテ リー、ギョンジェ リー、ミンジュン ソ}、年 ={2024}、eprint={2405.01535}、archivePrefix={ arXiv}、primaryClass={cs.CL}}
@article{kim2023prometheus, title={プロメテウス: 言語モデルにおけるきめ細かい評価機能の導入}, author={キム、スンゴンとシン、ジャミンとチョ、イェジンとチャン、ジョエルとロンプレ、シェインとリー、ファランとユン、サンドゥとシン、ソンジンとキム、ソンドンとソーン、ジェームズとその他}、journal={arXiv preprint arXiv:2310.08491}、年={2023}}
@misc{lee2024prometheusvision, title={Prometheus-Vision: きめ細かい評価の審査員としての視覚言語モデル}, author={Seongyun Lee、Seungone Kim、Sue Hyun Park、Geewook Kim、Minjoon Seo}、year={2024}、eprint={2401.06591}、archivePrefix={arXiv}、primaryClass={cs.CL}}
@misc{kim2024biggen, title={BiGGen ベンチ: 言語モデルを使用した言語モデルのきめ細かい評価のための原則的なベンチマーク}, author={スンゴンキム、ジュヨンソク、ジヨンチョ、シェインロングプレ、チェウンキム、ドングンユン、ギジンソン、イェジンチョ、シェイク・シャファヤット、ジンホンペク、スーヒョンパク、ヒョンビンファン、ジンギョンチョ、ヒョウォンチョ、ヘビンシン、ソンユン・イ、ハンソク・オ、ノア・リー、ナムギュ・ホ、セ・ジュンジュ、ミヨン・コ、ユンジュ・リー、ヒョンジュ・チェ、ジャミン・シン、ジョエル・チャン、ソンヒョン・イェ、ビル・ユチェン・リン、ショーン・ウェレック、グラハム・ノイビッグ、ムンテ・リー、キョンジェ・リー、ミンジュン・ソ}、年={2024}、eprint={2406.05761}、archivePrefix={ arXiv}、primaryClass={cs.CL}}