contents
  • チャットボットを作る

    • 関連研究のレビュー

    • 人工知能技術

      • テキスト検索(1)

      • テキスト検索(2) - 形態素解析

      • テキスト検索(3) - TFIDF

      • 自動テキスト生成

        • マルコフ連鎖による文生成

    • ケーススタディ

      • 傾聴ボット(1)

      • 傾聴ボット(2)

      • 傾聴ボット(3)

      • 名付けボット(1)

      • 名付けボット(2)

      • 占いボット

      • 夢語りボット

      • 物語ボット

名付けボット(2)

名付けボット(2)

2022-09-26

Shinichi Kato
加藤真一 Ph. D.
チャットボット研究者

本ページは現在推敲中です

名付けボット(1)のページでは「名付け」を4つの要素に分け、そのうち1-3について検討しました。
  1. 会話の中でのユーザによるチャットボットの名付け手続き
  2. 名前の取得と永続的記憶および再利用
  3. 不在時に呼びかけられたら現れる
  4. その他の名付けの手続き

残る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による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のようになります。

Fig. 3. 相互名付けのある状態機械

main部の見た目が前ページのFig. 2と少し変わっていますが、ロジック的には単にuser_namerを二箇所に付け足しただけです。 ここで、user_namerの先頭はU_namingで、例えば「じゃあ、しまりすって呼んで?」のようにユーザが名前を提示することから始まります。 一方で会話例6の「bot: userさんのことをなんて呼んだらいいですか?」という行はチャットボットがユーザにニックネームを尋ねるもので、user_nameと元のbot_nameのどちらにも含まれていません。 そこで、Fig.3 のB_confirmやB_breakの返答候補の中にuser_namerにうまくつなげるような返答を仕込みます。

Copyright(c) 1999-2022, 人工無脳は考える