2022-09-26
本ページは現在推敲中です
名付けボット(1)のページでは「名付け」を4つの要素に分け、そのうち1-3について検討しました。残る4としては次のような例が考えられます。
会話例1
user: 私のことはあられって呼んでください
bot: あられさんですね!
会話例2
user: genさんのことは隊長って呼ぼう!
bot: 了解です!
会話例3
bot: 私のことはシズと呼んでください!
user: シズさんだね
会話例4
bot: userさんのこと、ひろくんって呼んでいいですか?
user: いいよ!
会話例5
bot: akira2234さんのことはあきらさんって呼んでます
user: いつのまに
これらを整理すると、提案者には bot か user かの二通りがあり、付与する名前は{BOT_NAME}、user、第三者の三通りがありうるため、全部で組み合わせは6通りです。
{BOT_NAME}を付与 | userの名前を付与 | 第三者の名前を付与 | |
---|---|---|---|
userが提案 | namer | 会話例1 | 会話例2 |
botが提案 | 会話例3 | 会話例4 | 会話例5 |
userが提案者で{BOT_NAME}を付与するケースは前のページで取り上げました。 会話例1-2はuserの発言が起点となるので状態機械の設計は難しくありませんが、第三者まで含まれるとユーザごとに一意のidを付与しそれぞれの名前を管理する仕掛けが必要になります。 更に会話例3-5ではbotにとって「これまでの会話履歴から適切なニックネームを生成する」という課題です。 これはデータが多ければ機械学習的になんとかなるような気もしますが、ニックネーム生成をするのに膨大な計算資源を使ってしまいます。 そして生成したニックネームをユーザが気に入るかどうかに至ってはほとんど予測困難でしょう。 また人間が誰かにニックネームを付ける場面は、なにかの印象的な出来事によってニックネームを思いついたり、一定の仲間意識を感じた時などが挙げられると思います。 しかし、本当のところはそんな理屈は後付で、前触れなくニックネームをつけたいと思うのではないでしょうか。 これは「チャットボットの自発的行動」という極めて奥深いテーマの入口です。
「名付け」というトピックの中でそれを論じるのは荷が勝ちすぎますので、今回は返報性の原理に従ってユーザが{BOT_NAME}を与えたことのお返しとしてユーザのニックネームをチャットボットが尋ねる会話例1に絞って状態機械を考えます。
userによるuser自身のニックネームの提示には次のような例が考えられます。 会話例6は前ページで扱った「ユーザによるチャットボットの名付け」からチャットボットが逆にユーザのニックネームを尋ねる派生型です。 会話例7はそれまでの文脈と無関係にユーザがユーザのニックネームを伝えてきた、という場面です。 どちらも本体部分の会話の流れは naming と同じで良さそうですが、記憶する変数が異なるのでチャットボットに名前を与える部分をB〇〇、ユーザの名前を覚える部分をU〇〇と呼んで区別します。
会話例6
bot: userさん、今日は楽しかったです!
user: ねえ、しずって呼んでいい? (B_naming)
bot: 私にニックネームを付けてくれるんですか?いいですよ!しずですね!
user: ありがとう!(B_confirm)
bot: userさんのことをなんて呼んだらいいですか?
user: じゃあ、しまりすって呼んで?(U_naming)
bot: しまりすさんですね!
user: そうそう。(U_confirm)
会話例7
user: 私のことはヨーコって呼んで。(U_naming)
bot: はい。
これらをまとめるとFig. 1のようになります。
main部の見た目が前ページのFig. 2と少し変わっていますが、ロジック的には単にuser_namerを二箇所に付け足しただけです。 ここで、user_namerの先頭はU_namingで、例えば「じゃあ、しまりすって呼んで?」のようにユーザが名前を提示することから始まります。 一方で会話例6の「bot: userさんのことをなんて呼んだらいいですか?」という行はチャットボットがユーザにニックネームを尋ねるもので、user_nameと元のbot_nameのどちらにも含まれていません。 そこで、Fig.3 のB_confirmやB_breakの返答候補の中にuser_namerにうまくつなげるような返答を仕込みます。