chatbot - 设计一个聊天机器人来提出正确的问题以猜测一个对象
问题描述
我正在尝试设计一个聊天机器人来询问最少的问题来猜测人类用户心中的对象
假设我有一个这样的数据库
Q1 Q2 Q3 Q4 Label
1 0 0 1 Apple
0 0 0 1 Apple
0 1 1 1 Mango
其中 Q1 是“它是红色的吗”,Q2 是“它柔软吗?”,Q4 是“它是否甜美”。在真实数据库中可能有数千个可能的问题,并且可能有数千个标签。
聊天机器人会问一个问题
,用户会回答是或否。
用户通过想到苹果来开始这个游戏
聊天机器人问了第一个问题“它是红色的吗?”
人类:是
的,聊天机器人计算到目前为止的概率。苹果 60%,芒果 0%
既然苹果现在的概率最高,它会问一个有助于判断它是否真的是苹果的问题,“甜吗”?
人类:是
的聊天机器人更新概率。苹果 90%。芒果 40%
一旦概率足够高,聊天机器人就会停下来吐出它所有的概率
第一个问题:我需要得到每个标签的概率,只回答几个问题。在我问第一个问题“它是红色的”之后说。鉴于我们目前所知道的,Chatbot 需要知道每个项目的概率 60% = Prob(Apple, [1 ? ? ?])
我不太确定如何将具有未知数的特征向量输入模型并要求它进行预测
第二个问题:我想问最少的问题,所以理想情况下我想问一个真正能区分的问题。我如何确定下一个要问的问题。
似乎传统的机器学习模型不起作用。你会如何设计这样的系统?
解决方案
我找到了问题的解决方案。答案是朴素贝叶斯。数学可以在这里
找到
x 是一个特征
y 是有问题的对象
while (True):
# sort the object based on probability
# print out the objects with their probability
# top_object = object with highest probability
# Get the x such that P(x=1|top_object) is the highest, and ask "do that object have x"
# Wait for input from user
# Then for each object, update probability prob = prob * P(x=input|y)
# remove x from possible feature can ask
# if no more feature left, quit
推荐阅读
- java - 多线程执行时,Oracle 合并查询因休眠事务中的唯一约束而失败
- fortran - 如何使用 macports 安装 HDF5、openMPI .mod 文件?
- c - 缓冲区溢出不生成外壳?
- jhipster - 将 jhipster 与 ngx-admin 集成
- python-2.7 - Matplotlib 小部件:按下按钮时更改轴或图形;制作幻灯片
- postgresql - 从 Aqueduct 应用程序获取上次修改日期时间的最轻量级方法是什么?
- datetime - 为每个请求指定 TimeZone
- mysql - 数据库错误 PDOException 错误:SQLSTATE[HY000] [1045]
- android - 如何将应用程序安装到 Android 模拟器的 SD 卡而不是其内部存储器?
- javascript - 如何在Javascript上为计时器制作暂停/播放按钮?