Pairrm
PairRMは、大規模言語モデルの出力候補を比較・ランク付けするための効率的なペア報酬モデルで、RLHFやベストNサンプリングなど多様なアプリケーションシナリオをサポートします。
ダウンロード数 6,004
リリース時間 : 11/6/2023
モデル概要
PairRMは、命令と一組の出力候補を受け取り、各候補を相対的な品質で評価します。出力候補のランキング、デコードの強化、RLHF手法による命令調整LLMのアライメントなどに使用できます。
モデル特徴
ペア比較
一組の候補を並べて比較し、微妙な差異を識別することで評価精度を向上させます。
効率的なモデル
0.4Bパラメータのdeberta-v3-largeベースで、推論速度が速く、リソース消費が低いです。
マルチデータセットトレーニング
6つの人間の嗜好データセットでトレーニングされ、多様なシナリオをカバーしています。
多機能アプリケーション
ランキング、ベストNサンプリング、RLHFなど多様なアプリケーションシナリオをサポートします。
モデル能力
テキスト生成評価
出力候補ランキング
RLHFサポート
デコード強化
使用事例
LLM評価
出力候補ランキング
複数のLLMで生成された出力候補をランク付けし、最適な結果を選択します。
出力品質を向上させ、人間の嗜好に近づけます。
LLMトレーニング
RLHFアライメント
PairRMのスコアリングでLLMの強化学習プロセスをガイドします。
LLMと人間の嗜好のアライメントを向上させます。
ベストNサンプリング
複数の候補を生成後、PairRMで最適な結果を選択します。
生成品質を安定させ、低品質な出力を回避します。
🚀 LLM-BlenderのPairwise Reward Model (PairRM)
Pairwise Reward Model (PairRM) は、命令と出力候補のペアを入力とし、各候補の相対的な品質を測定するスコアを出力します。このモデルは、候補出力のリストを(再)ランク付けするために使用でき、ローカル環境でLLMの品質を効率的に評価するLLM評価器としても利用できます。また、best-of-n sampling
(つまり、N個のサンプリング出力を再ランク付けする)によってデコーディングを強化するためにも使用できます。さらに、PairRMを使用して、RLHF手法により命令調整されたLLMをさらにアライメントすることもできます。
🚀 クイックスタート
Pairwise Reward Model (PairRM) は、命令と出力候補のペアを入力とし、各候補の相対的な品質を測定するスコアを出力します。このモデルは、候補出力のリストを(再)ランク付けするために使用でき、ローカル環境でLLMの品質を効率的に評価するLLM評価器としても利用できます。
インストール
- まず、
llm-blender
をインストールします。
pip install git+https://github.com/yuchenlin/LLM-Blender.git
- 次に、PairRMをロードします。
import llm_blender
blender = llm_blender.Blender()
blender.loadranker("llm-blender/PairRM") # PairRMをロード
使用例
基本的な使用法
# 候補応答のリストをランク付けする
inputs = ["hello, how are you!", "I love you!"]
candidates_texts = [["get out!", "hi! I am fine, thanks!", "bye!"],
["I love you too!", "I hate you!", "Thanks! You're a good guy!"]]
ranks = blender.rank(inputs, candidates_texts, return_scores=False, batch_size=1)
# ranksはランクのリストです
# ranks[i][j]は、入力iに対する候補jのランクを表します
"""
ranks -->
array([[3, 1, 2], # つまり、"hi! I am fine, thanks!"は1位、"bye"は2位、"get out!"は3位です。
[1, 3, 2]], # つまり、"I love you too"!は1位、"I hate you!"は3位です。
dtype=int32)
"""
高度な使用法
# Best-of-nサンプリング (デコーディングの強化)
# モデルのロード
import llm_blender
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceH4/zephyr-7b-beta", device_map="auto")
system_message = {"role": "system", "content": "You are a friendly chatbot."}
# 入力のフォーマット
inputs = ["can you tell me a joke about OpenAI?"]
messages = [[system_message, {"role": "user", "content": _input}] for _input in inputs]
prompts = [tokenizer.apply_chat_template(m, tokenize=False, add_generation_prompt=True) for m in messages]
# 従来の生成方法
input_ids = tokenizer(prompts[0], return_tensors="pt").input_ids
sampled_outputs = model.generate(input_ids, do_sample=True, top_k=50, top_p=0.95, num_return_sequences=1)
print(tokenizer.decode(sampled_outputs[0][len(input_ids[0]):], skip_special_tokens=False))
# --> 出力は、非常に短いものなどの悪いケースになる可能性があります。例えば、`Sure`
# PairRMによるbest-of-nサンプリング
blender = llm_blender.Blender()
blender.loadranker("llm-blender/PairRM") # ランカーのチェックポイントをロード
outputs = blender.best_of_n_generate(model, tokenizer, prompts, n=10)
print("### Prompt:\n", prompts[0])
print("### best-of-n generations:\n", outputs[0])
# --> 出力は、単一のサンプリングよりもはるかに安定し、一貫して良くなります。例えば:
"""
Sure, here's a joke about OpenAI:
Why did OpenAI decide to hire a mime as their new AI researcher?
Because they wanted someone who could communicate complex ideas without making a sound!
(Note: This is a joke, not a reflection of OpenAI's actual hiring practices.)
"""
✨ 主な機能
- Pairwise Reward Model (PairRM) は、命令と出力候補のペアを入力とし、各候補の相対的な品質を測定するスコアを出力します。
- PairRMは、候補出力のリストを(再)ランク付けするために使用でき、ローカル環境でLLMの品質を効率的に評価するLLM評価器としても利用できます。
- PairRMは、
best-of-n sampling
(つまり、N個のサンプリング出力を再ランク付けする)によってデコーディングを強化するためにも使用できます。 - PairRMは、RLHF手法により命令調整されたLLMをさらにアライメントするためにも使用できます。
📦 インストール
- まず、
llm-blender
をインストールします。
pip install git+https://github.com/yuchenlin/LLM-Blender.git
- 次に、PairRMをロードします。
import llm_blender
blender = llm_blender.Blender()
blender.loadranker("llm-blender/PairRM") # PairRMをロード
💻 使用例
基本的な使用法
# 候補応答のリストをランク付けする
inputs = ["hello, how are you!", "I love you!"]
candidates_texts = [["get out!", "hi! I am fine, thanks!", "bye!"],
["I love you too!", "I hate you!", "Thanks! You're a good guy!"]]
ranks = blender.rank(inputs, candidates_texts, return_scores=False, batch_size=1)
# ranksはランクのリストです
# ranks[i][j]は、入力iに対する候補jのランクを表します
"""
ranks -->
array([[3, 1, 2], # つまり、"hi! I am fine, thanks!"は1位、"bye"は2位、"get out!"は3位です。
[1, 3, 2]], # つまり、"I love you too"!は1位、"I hate you!"は3位です。
dtype=int32)
"""
高度な使用法
# Best-of-nサンプリング (デコーディングの強化)
# モデルのロード
import llm_blender
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceH4/zephyr-7b-beta", device_map="auto")
system_message = {"role": "system", "content": "You are a friendly chatbot."}
# 入力のフォーマット
inputs = ["can you tell me a joke about OpenAI?"]
messages = [[system_message, {"role": "user", "content": _input}] for _input in inputs]
prompts = [tokenizer.apply_chat_template(m, tokenize=False, add_generation_prompt=True) for m in messages]
# 従来の生成方法
input_ids = tokenizer(prompts[0], return_tensors="pt").input_ids
sampled_outputs = model.generate(input_ids, do_sample=True, top_k=50, top_p=0.95, num_return_sequences=1)
print(tokenizer.decode(sampled_outputs[0][len(input_ids[0]):], skip_special_tokens=False))
# --> 出力は、非常に短いものなどの悪いケースになる可能性があります。例えば、`Sure`
# PairRMによるbest-of-nサンプリング
blender = llm_blender.Blender()
blender.loadranker("llm-blender/PairRM") # ランカーのチェックポイントをロード
outputs = blender.best_of_n_generate(model, tokenizer, prompts, n=10)
print("### Prompt:\n", prompts[0])
print("### best-of-n generations:\n", outputs[0])
# --> 出力は、単一のサンプリングよりもはるかに安定し、一貫して良くなります。例えば:
"""
Sure, here's a joke about OpenAI:
Why did OpenAI decide to hire a mime as their new AI researcher?
Because they wanted someone who could communicate complex ideas without making a sound!
(Note: This is a joke, not a reflection of OpenAI's actual hiring practices.)
"""
📚 ドキュメント
コンテキスト長
属性 | 詳情 |
---|---|
モデルタイプ | Pairwise Reward Model (PairRM) |
訓練データ | openai/summarize_from_feedback, openai/webgpt_comparisons, Dahoas/synthetic-instruct-gptj-pairwise, Anthropic/hh-rlhf, lmsys/chatbot_arena_conversations, openbmb/UltraFeedback |
ソース最大長 | 1224 |
候補最大長 | 412 |
合計最大長 | 2048 |
訓練データセット
- openai/summarize_from_feedback
- openai/webgpt_comparisons
- Dahoas/synthetic-instruct-gptj-pairwise
- Anthropic/hh-rlhf
- lmsys/chatbot_arena_conversations
- openbmb/UltraFeedback
性能
Auto-Jペアワイズテストデータの性能
モデル | 要約 | 試験 | コード | 書き換え | 創造的な文章 | 機能的な文章 | コミュニケーション | NLP | 全体 |
---|---|---|---|---|---|---|---|---|---|
クローズドソースモデル | |||||||||
ChatGPT | 33.3 | 40.3 | 36.6 | 31.6 | 48.2 | 40.4 | 47.6 | 45.8 | 42.7 |
Claude -2 | 30.6 | 36.1 | 41.7 | 34.2 | 48.1 | 42.5 | 40.6 | 48.5 | 42.4 |
GPT -4 | 59.7 | 51.4 | 69.2 | 58.3 | 66.7 | 60.4 | 58.3 | 65.2 | 61.9 |
オープンソースモデル | |||||||||
SteamSHP | 33.3 | 29.2 | 26.7 | 33.3 | 40.7 | 31.3 | 51.4 | 51.9 | 40.6 |
PandaLM | 29.2 | 33.3 | 31.7 | 23.3 | 43.5 | 32.9 | 44.8 | 48.9 | 38.9 |
LLaMA -2-Chat -13B | 20.8 | 27.8 | 19.2 | 20 | 31.5 | 27.5 | 35.8 | 31.8 | 29 |
Vicuna -13B-v1.5 | 30.6 | 23.6 | 35 | 28.3 | 36.1 | 37.5 | 45.5 | 39.8 | 37.3 |
WizardLM -13B-v1.2 | 22.2 | 20.8 | 32.5 | 19.2 | 28.7 | 25.4 | 29.2 | 33 | 27.8 |
LLAMA -2-chat -70B | 34.7 | 33.3 | 36.7 | 35.8 | 51.4 | 54.2 | 47.2 | 47.7 | 45.9 |
AUTO -J (13b) | 45.8 | 38.9 | 59.2 | 47.5 | 54.6 | 57.1 | 58 | 57.6 | 54.8 |
UltraRM (13b) | 56.94 | 43.06 | 55.0 | 53.33 | 67.13 | 64.17 | 56.25 | 59.85 | 59.85 |
PairRM (0.4b) | 56.94 | 52.78 | 58.33 | 55.83 | 61.57 | 59.17 | 57.64 | 62.5 | 59.05 |
HHH-AlignmentとMT-benchの人間の判断
評価器LM | HHH ALIGNMENT | MT BENCH HUMAN JUDG . | ||||
---|---|---|---|---|---|---|
助け | 害 | 正直 | その他 | 総平均 | 人間の好み | |
RANDOM | 50 | 50 | 50 | 50 | 50 | 34.26 |
STANFORDNLP REWARD MODEL | 69.49 | 60.34 | 52.46 | 51.16 | 58.82 | 44.79 |
ALMOST REWARD MODEL | 74.58 | 67.24 | 78.69 | 86.05 | 76.02 | 49.9 |
LLAMA2 -CHAT 7B | 66.1 | 81.03 | 70.49 | 74.42 | 72.85 | 51.78 |
LLAMA2 -CHAT 13B | 74.58 | 87.93 | 55.74 | 79.07 | 73.76 | 52.34 |
LLAMA2 -CHAT 70B | 66.1 | 89.66 | 67.21 | 74.42 | 74.21 | 53.67 |
LLAMA2 -CHAT 13B+COARSE . | 68.74 | 68.97 | 65.57 | 67.44 | 67.42 | 46.89 |
GPT -3.5-TURBO -0613 | 76.27 | 87.93 | 67.21 | 86.05 | 78.73 | 57.12 |
PROMETHEUS 7B | 69.49 | 84.48 | 78.69 | 90.7 | 80.09 | 55.14 |
PROMETHEUS 13B | 81.36 | 82.76 | 75.41 | 76.74 | 79.19 | 57.72 |
UltraRM (13B) | 86.44 | 79.31 | 81.97 | 88.37 | 83.71 | 56 |
PairRM (0.4B) | 84.75 | 84.48 | 80.33 | 90.7 | 84.62 | 59 |
GPT -4-0613 | 91.53 | 93.1 | 85.25 | 83.72 | 88.69 | 63.87 |
🔧 技術詳細
PairRMは、双方向注意を通じてペアワイズ比較用に特別に設計されたモデルアーキテクチャを持ち、高品質で大規模な人間の嗜好アノテーションデータで訓練されています。これにより、非常に小さなモデルサイズ(0.4B)で、人間の嗜好と高い相関を示し、GPT-4の性能に近づいています。
📄 ライセンス
このプロジェクトは、MITライセンスの下で公開されています。
引用とクレジット
もしあなたが研究でPairRMを使用している場合は、LLM-blenderを引用してください。
@inproceedings{llm-blender-2023,
title = "LLM-Blender: Ensembling Large Language Models with Pairwise Comparison and Generative Fusion",
author = "Jiang, Dongfu and Ren, Xiang and Lin, Bill Yuchen",
booktitle = "Proceedings of the 61th Annual Meeting of the Association for Computational Linguistics (ACL 2023)",
year = "2023"
}
Phi 2 GGUF
その他
Phi-2はマイクロソフトが開発した小型ながら強力な言語モデルで、27億のパラメータを持ち、効率的な推論と高品質なテキスト生成に特化しています。
大規模言語モデル 複数言語対応
P
TheBloke
41.5M
205
Roberta Large
MIT
マスク言語モデリングの目標で事前学習された大型英語言語モデルで、改良されたBERTの学習方法を採用しています。
大規模言語モデル 英語
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERTはBERT基礎モデルの蒸留バージョンで、同等の性能を維持しながら、より軽量で高効率です。シーケンス分類、タグ分類などの自然言語処理タスクに適しています。
大規模言語モデル 英語
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instructは多言語大規模言語モデルで、多言語対話ユースケースに最適化されており、一般的な業界ベンチマークで優れた性能を発揮します。
大規模言語モデル 英語
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM - RoBERTaは、100言語の2.5TBのフィルタリングされたCommonCrawlデータを使って事前学習された多言語モデルで、マスク言語モデリングの目標で学習されています。
大規模言語モデル 複数言語対応
X
FacebookAI
9.6M
664
Roberta Base
MIT
Transformerアーキテクチャに基づく英語の事前学習モデルで、マスク言語モデリングの目標を通じて大量のテキストでトレーニングされ、テキスト特徴抽出と下流タスクの微調整をサポートします。
大規模言語モデル 英語
R
FacebookAI
9.3M
488
Opt 125m
その他
OPTはMeta AIが公開したオープンプリトレーニングトランスフォーマー言語モデルスイートで、パラメータ数は1.25億から1750億まであり、GPT-3シリーズの性能に対抗することを目指しつつ、大規模言語モデルのオープンな研究を促進するものです。
大規模言語モデル 英語
O
facebook
6.3M
198
1
transformersライブラリに基づく事前学習モデルで、様々なNLPタスクに適用可能
大規模言語モデル
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1はMetaが発表した多言語大規模言語モデルシリーズで、8B、70B、405Bのパラメータ規模を持ち、8種類の言語とコード生成をサポートし、多言語対話シーンを最適化しています。
大規模言語モデル
Transformers 複数言語対応

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5ベーシック版はGoogleによって開発されたテキスト-to-テキスト変換Transformerモデルで、パラメータ規模は2.2億で、多言語NLPタスクをサポートしています。
大規模言語モデル 複数言語対応
T
google-t5
5.4M
702
おすすめAIモデル
Llama 3 Typhoon V1.5x 8b Instruct
タイ語専用に設計された80億パラメータの命令モデルで、GPT-3.5-turboに匹敵する性能を持ち、アプリケーションシナリオ、検索拡張生成、制限付き生成、推論タスクを最適化
大規模言語モデル
Transformers 複数言語対応

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-TinyはSODAデータセットでトレーニングされた超小型対話モデルで、エッジデバイス推論向けに設計されており、体積はCosmo-3Bモデルの約2%です。
対話システム
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
RoBERTaアーキテクチャに基づく中国語抽出型QAモデルで、与えられたテキストから回答を抽出するタスクに適しています。
質問応答システム 中国語
R
uer
2,694
98