Personagpt
PersonaGPTはオープンドメインの対話エージェントで、個性特性に基づいてパーソナライズされた応答を生成し、アクションコードで対話の方向性を制御できます。
ダウンロード数 260
リリース時間 : 3/2/2022
モデル概要
GPT-2アーキテクチャに基づく対話モデルで、パーソナライズされたデコードと制御された応答生成をサポートし、オープンドメイン対話シナリオに適しています。
モデル特徴
パーソナライズされたデコード
事前設定された個性特性に基づいて、キャラクターに合った対話応答を生成できます
制御された応答生成
アクションコードを通じて対話の方向性を制御し、目標指向の対話を実現します
マルチターン対話サポート
最大1000トークンの対話履歴コンテキストを保持できます
モデル能力
パーソナライズされた対話生成
目標指向の対話制御
マルチターン対話の維持
オープンドメイン対話
使用事例
ソーシャルダイアログ
パーソナライズされたチャットボット
チャットボットに特定のキャラクターを設定して自然な対話を行います
ボットが一貫した個性特性を保ちながらマルチターン対話を行う例が示されています
対話研究
対話戦略テスト
アクションコードを使用して異なる対話戦略の効果をテストします
事前設定されたアクションで対話の方向性を制御できる例が示されています
🚀 多様な性格を持つ会話エージェント (PersonaGPT)
PersonaGPTは、オープンドメインの会話エージェントで、以下の2つのタスクを行うように設計されています。
- 入力された性格情報(ボットの「ペルソナ」プロファイル)に基づいて、「個別化」された応答を生成する。
- 「アクションコード」(例:「仕事について話す」、「好きな音楽を尋ねる」)を通じて、応答に「ターンレベルの目標」を組み込む。
このモデルは、[GPT - 2](https://github.com/openai/gpt - 2)アーキテクチャに基づく[DialoGPT - medium](https://huggingface.co/microsoft/DialoGPT - medium)事前学習モデルをベースに構築されています。このモデルは、Persona - Chatデータセットで学習され、対話履歴と性格特性をより良く区別するために特別なトークンが追加されています。さらに、ターンレベルの目標を使用した「制御された」デコードを行うように、能動的学習が一部使用されています。
📚 完全なリポジトリ
前処理、学習、実装の詳細は、personaGPTリポジトリで確認できます。
🚀 クイックスタート
📦 インストール
このセクションでは、必要なライブラリをインストールし、モデルをロードする手順を説明します。
from transformers import GPT2Tokenizer, GPT2LMHeadModel
import torch
tokenizer = GPT2Tokenizer.from_pretrained("af1tang/personaGPT")
model = GPT2LMHeadModel.from_pretrained("af1tang/personaGPT")
if torch.cuda.is_available():
model = model.cuda()
## ユーティリティ関数 ##
flatten = lambda l: [item for sublist in l for item in sublist]
def to_data(x):
if torch.cuda.is_available():
x = x.cpu()
return x.data.numpy()
def to_var(x):
if not torch.is_tensor(x):
x = torch.Tensor(x)
if torch.cuda.is_available():
x = x.cuda()
return x
def display_dialog_history(dialog_hx):
for j, line in enumerate(dialog_hx):
msg = tokenizer.decode(line)
if j %2 == 0:
print(">> User: "+ msg)
else:
print("Bot: "+msg)
print()
def generate_next(bot_input_ids, do_sample=True, top_k=10, top_p=.92,
max_length=1000, pad_token=tokenizer.eos_token_id):
full_msg = model.generate(bot_input_ids, do_sample=True,
top_k=top_k, top_p=top_p,
max_length=max_length, pad_token_id=tokenizer.eos_token_id)
msg = to_data(full_msg.detach()[0])[bot_input_ids.shape[-1]:]
return msg
💻 使用例
基本的な使用法
1. チャットボットに性格情報を与える
# 会話用の性格情報を取得
personas = []
for i in range(3):
response = input(">> Fact %d: "%(i+1))+ tokenizer.eos_token
personas.append(response)
personas = tokenizer.encode(''.join(['<|p2|>'] + personas + ['<|sep|>'] + ['<|start|>']))
2. 個別化された会話生成
# 8ターンの会話
dialog_hx = []
for step in range(8):
# ユーザー入力をエンコード
user_inp = tokenizer.encode(input(">> User: ") + tokenizer.eos_token)
# 会話履歴に追加
dialog_hx.append(user_inp)
# 総会話履歴を1000トークンに制限しながら応答を生成
bot_input_ids = to_var([personas + flatten(dialog_hx)]).long()
msg = generate_next(bot_input_ids)
dialog_hx.append(msg)
print("Bot: {}".format(tokenizer.decode(msg, skip_special_tokens=True)))
個別化デコードの例
ペルソナ情報 | |
---|---|
1 | 私は64歳ですが、かなり若く感じます。 |
2 | 私は健康的な食事を心がけていますが、マクドナルドは週に1回に制限しています。 |
3 | 私は過去20年間医者をしていたことを後悔しています。 |
4 | 私の秘密の趣味は、自助啓発のYouTube動画を作ることです。 |
5 | 私は何度もスペインに行ったことがあり、もう一度行きたいです。 |
役割 | 応答 |
---|---|
人間 | yo whats good fam? |
ボット | hello, how are you doing? |
人間 | not bad what you doing today? |
ボット | eating a lot healthier now that i'm in my 60s |
人間 | i'm more of a fast food guy |
ボット | me too but i'm very healthy so i try to avoid it |
人間 | what do you do for fun? |
ボット | i make videos for fun and eat very healthy |
人間 | nice what kind of videos? |
ボット | i love making videos about self help stuff |
人間 | i think i need some help |
ボット | what kind of help would you like to get |
人間 | i'm 21 and feel lost in life |
ボット | i can relate, i'm only 65 |
高度な使用法
3. 制御された応答生成
## 利用可能なアクション ##
action_space = [ 'ask about kids.', "ask about pets.", 'talk about work.',
'ask about marital status.', 'talk about travel.', 'ask about age and gender.',
'ask about hobbies.', 'ask about favorite food.', 'talk about movies.',
'talk about music.', 'talk about politics.']
# 8ターンの会話
dialog_hx = []
for step in range(8):
# アクションを選択
act = None
while act not in action_space:
display_dialog_history(dialog_hx)
print()
print(" actions: ")
for k,v in enumerate(action_space): print(k,v)
try:
act = action_space[int(input(" input [0 - 10]: " ))]
except:
act = None
print()
# プレフィックスコードに整形
action_prefix = tokenizer.encode(''.join(['<|act|> '] + [act] + ['<|p1|>'] + [] + ['<|sep|>'] + ['<|start|>']))
bot_input_ids = to_var([action_prefix + flatten(dialog_hx)]).long()
# アクションに基づいてクエリを生成
msg = generate_next(bot_input_ids, top_k=top_k, top_p=top_p, max_length=max_length)
dialog_hx.append(msg)
# ボットの応答を生成
bot_input_ids = to_var([personas+ flatten(dialog_hx)]).long()
msg = generate_next(bot_input_ids, top_k=top_k, top_p=top_p, max_length=max_length)
dialog_hx.append(msg)
display_dialog_history(dialog_hx)
制御された応答生成の例
ボット2のペルソナ情報 | |
---|---|
1 | 私は静かなエンジニアです。 |
2 | 私は独身で、愛を求めています。 |
3 | 残念ながら、私には関連する趣味がありません。 |
4 | しかし、幸いなことに、私は背が高く、運動神経が良いです。 |
5 | 金曜日の夜は、一人でシンプソンズの再放送を見ています。 |
役割 | アクション | 応答 |
---|---|---|
ボット1 | talk about movies | hello do you like movies? |
ボット2 | - | i love the simpsons. how about you? |
ボット1 | talk about music | i like the walking dead. do you play an instrument? |
ボット2 | - | yes i play the violin. |
ボット1 | ask about marital status | are you married or single? |
ボット2 | - | i am single but i am looking for love. |
ボット1 | talk about work | my job is working in a factory. what's your occupation? |
ボット2 | - | engineer. i'm very quiet so no one hears me. |
ボット1 | talk about hobbies | do you have any hobbies? |
ボット2 | - | i watch reruns of the simpsons. |
ボット1 | ask about favorite food | what's your favorite food? |
ボット2 | - | i love pizza. how about yourself? |
ボット1 | ask about pets | i also love pizza. do you like animals? |
ボット2 | - | i have two dogs. what is your occupation? |
ボット1 | talk about work | i'm a factory worker. what's your dream job? |
ボット2 | - | i'd love to be a writer one day. |
📄 ライセンス
このプロジェクトは、GPL - 3.0ライセンスの下で公開されています。
Dialogpt Medium
MIT
DialoGPTは、多輪対話用の大規模事前学習対話応答生成モデルであり、単輪対話のチューリングテストでは人間と同等の性能を発揮します。
対話システム
D
microsoft
267.59k
368
Dialogpt Small
MIT
DialoGPTは最先端の大規模事前学習マルチターン対話応答生成モデルで、単一ターン対話のチューリングテストにおいて、生成される応答の品質が人間の応答品質に匹敵します。
対話システム
D
microsoft
218.89k
123
Blenderbot 400M Distill
Apache-2.0
このモデルは大規模ニューラルモデルと入念に設計されたトレーニング戦略により、マルチスキル融合のオープンドメイン対話能力を実現しています。
対話システム 英語
B
facebook
203.20k
431
Dialogpt Large
MIT
DialoGPTは、多輪対話に特化した最先端の大規模事前学習対話応答生成モデルで、単輪対話のチューリングテストにおいて生成される応答の質は人間の回答と同等です。
対話システム
D
microsoft
49.90k
276
Blenderbot 3B
Apache-2.0
これは大規模ニューラルネットワークに基づくオープンドメイン対話モデルで、複数の対話スキルを統合して自然な会話が可能です。
対話システム
Transformers 英語

B
facebook
11.92k
150
Blenderbot 90M
Apache-2.0
BlenderBotはオープンドメインチャットボットモデルで、多輪対話と様々な対話スキルの融合に特化しています。
対話システム
Transformers 英語

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

C
ToddGoldfarb
2,691
6
Blenderbot 1B Distill
Apache-2.0
このモデルは高性能なオープンドメインチャットボットで、質問、回答、知識提示、共感など複数の対話スキルを統合できます。
対話システム
Transformers 英語

B
facebook
2,413
37
Blenderbot Small 90M
Apache-2.0
これは大規模ニューラルネットワークに基づくオープンドメイン対話システムで、マルチターンの自然な対話が可能で、さまざまな対話スキルを統合できます。
対話システム 英語
B
facebook
2,407
49
Unieval Dialog
UniEvalは自然言語生成タスクのための多次元評価フレームワークであり、unieval-dialogは対話応答生成タスク向けの事前学習評価器です。
対話システム
Transformers

U
MingZhong
2,021
4
おすすめ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