查看: 114|回复: 0

[教程] 手机诊疗机器人Therapist Bot

[复制链接]
一个傻傻的人机对话app

教程地址:https://appinventor.mit.edu/explore/resources/ai/therapist-bot

手机诊疗 机 器 人

手机上的app会是你的下一个治疗师吗?

有时我们仅仅需要说说自己的感受。(去医院)治疗有帮助,但不是所有人都能得到或负担得起。手机上的app可以做到诊疗吗? YR Media的朋友在他们的新闻报道中报道了使用人工智能为治疗机器人赋能的应用,你的下一个治疗师会是你的手机吗? 使用本指南制作自己的诊疗机器人。

手机诊疗机器人(难度:中级)

1. 项目介绍

该项目是著名程序ELIZA的简化版本,ELIZA程序由麻省理工学院的Joseph Weizenbaum教授于1960年代初期在麻省理工学院开发。这个机器人程序与用户进行“对话”,机器人模仿心理治疗的非定向风格。在最初由美国咨询心理学家卡尔·罗杰斯(Carl Rogers)于1940年代开发的非定向心理治疗中,治疗师并不参与为患者提供专家意见,也不提供对话指导,而是通过积极倾听和提问,使患者能够了解自身的困境并找到他们自己的康复方法。

2. 项目介绍:聊天示例

下面是诊疗机器人BOT与用户进行交流的可能顺序:

USER: my father hates me

BOT: Why do you say that your father hates you

USER: he always favors my brother

BOT: You seem to think that he always favors your brother

USER: my mother and I are very close

BOT: Can you explain why your mother and you are very close

USER: she helps me with my school work

BOT: Please tell me more

USER: bye

BOT: Be well. Have a nice day!

BOT:你好! 我希望你今天一切都好。 我能为你做什么?

患者:我爸爸讨厌我

BOT:为什么你说你爸爸讨厌你

患者:他总是喜欢我的兄弟

BOT:你似乎认为他总是喜欢你的兄弟

患者:我和妈妈关系非常好

BOT:你能解释一下为什么你和母亲非常亲密吗?

患者:她帮助我完成学校作业

BOT:请告诉我更多

患者:再见

BOT:好的。 祝你今天愉快!

3. 项目介绍:应答语言结构

当用户输入一条语句时,BOT会以以下两种方式之一进行应答:

使用随机选择的措辞,如“Please tell me more”; 或通过更改用户陈述中的某些关键字(如“我”和“我的”变成“你”和“你的”)并将其附加到随机选择的限定词上。 例如“I always loved my sister.”。 当有资格预审的人改变后变成“Can you explain why you always loved your sister?”


(着色是为了强调)

4. 用户界面(1)

现在开始构建用户界面(UI)。 这是最终界面的外观。

要将屏幕1中的所有内容水平居中,请将其AlignHorizontal属性更改为“居中”。

将ScreenOrientation属性更改为“ Portrait”,然后单击以检查Scrollable属性。

5. 用户界面(2)

首先添加BOT的图片。

拖放一个Image组件(用户界面面板),将组件重命名为“ TherapistBOTImage”,并将其图片属性设置为"therapistBOT.png"。你可能需要将图像组件的“高度”和“宽度”限制为较小的值,例如“75像素”,以确保图像适合。 你也可以选择为BOT上传自己的图像。

6. 用户界面(3)

接下来创建“治疗日志”记录用户评论和BOT反应。

拖放一个TextBox组件(用户界面面板),将组件重命名为"TherapistLogTextBox"。

如下所示更改TextBox 组件的属性,请特别注意红色框中指示的属性。

7. 用户界面(4)

接下来拖放一个HorizontalArrangement组件(布局调色板),在其中放置用户响应文本框和提交按钮。

设置该组件的属性,如下所示

8. 用户界面(5)

最后将TextBox组件(用户界面面板)和按钮组件(用户界面面板)拖放到HorizontalArrangement组件中。

将组件分别重命名为“UserTextBox”和“ SubmitButton”。

如下所示更改TextBox组件的属性。

Button组件的文本属性更改为“Submit”。 根据需要调整其Width,BackgroundColor和Shape属性。

9. 逻辑设计

现在切换到逻辑设计为用户界面(UI)提供功能,赋予BOT一些智能。

10. 初始化

创建一个名为hedges的变量,这个变量是一个包含三个可能语句的列表:

  • "Please tell me more."
  • "Many of my patients tell me the same thing."
  • "Please continue."

你可以在列表中添加更多语句。 这也是后面“扩展应用”选项卡中的建议之一。

11. 初始化

创建一个名为qualifiers的变量,它包含了三个可能的问句列表,这些问句位于用户输入句子的用户更改版本之前:

  • "Why do you say that  "
  • "You seem to think that  "
  • "Can you explain why  "

由于问句会在程序生成的答复之前,所以要在问句列表中每个问句末尾添加空格。

你可以在列表中添加更多问句。 实际上,这是下面“扩展你的应用”选项卡中的建议之一。

  • 解决方案

12. 字典数据结构

计算机科学中的字典是一种数据结构,用于存储键值对,就像存储单词及单词的定义的真实字典一样。 与现实世界中的字典不同,计算机科学中使用的字典数据结构可以保存与任意值关联的任意键。 这些键和值几乎可以是任何东西:字母、单词、多单词字符串、数字以及所有这些的混合组合。

13. 替换字典

创建一个名为replacements的变量作为键值对的字典,指示在BOT响应用户的回答时应如何进行人员替换。

注意,这些替换将第一人称更改为第二人称,反之亦然。 你也可以将这些第二人称替代词添加到第一人称替代词中。实际上,这是下面“扩展你的应用”标签中的建议之一。

  • 解决方案

14. Screen1初始化

Screen1初始化时显示一条欢迎消息在治疗日志上,例如“Hello there. I hope you are well today. What can I do for you?” 。

先编写代码。 如果陷入困境并想要一些提示,可以参看下面的提示。

  • 提示

15. "替换所有"代码块(1)

在这个项目中,要完成的最关键的任务之一是正确转换用户的语句,将第一人称代词替换为第二人称代词等。这个任务很庞大,但是我们有一个replace all替换所有代码块。

这个功能强大的文本块需要替换字典的映射输入和一个句子作为文本输入(例如,用户键入的文本)。 还需要选择一个优先顺序:默认的最长字符串优先顺序或字典顺序。

16. "替换所有"代码块(2)

要了解每个顺序首选项的效果,请检查以下情况。 在第一种情况下,首选顺序是字典顺序。

在下面的句子中:

"you knew it yourself"

单词"yourself"中包含字符串"you"。

因为"you"在字典中首先出现,并用"I"代替,所以“yourself”变为“Irself” ,因此产生的句子毫无意义:

"I knew it Irself"。

(颜色用于强调)

17. 替换所有代码块(2)

但是如果选择最长的字符串排序第一,则较长的字符串"yourself"会首先被替换为"myself" ,然后将较短的字符串"you"替换为"I",从而对"you knew it yourself"进行"I knew it myself"这样有意义地替换。

(颜色用于强调)

因此更好的做法是使用字符串的长度来排序。这会让上下文更有意义。 首先在句子中查找字典中最长的键,如果找到则将其替换,然后找到第二个最长的键将其替换,依此类推。

在上下文中使用字典顺序你有什么好的想法?

18. reply Procedure应答程序

定义一个名为reply的过程,有一个输入作为参数,返回一个句子:

  • With a 1 in 4 probability 四分之一的概率

    • return a random item from the list hedges 从措辞列表中返回随机项目
  • Else 否则

    • return a random item from the list qualifiers appended with a person changed modification of the input sentence (Hint: the replace all block) 从列表限定词中返回一个随机项,该限定词后附加了对输入句子进行人为更改的修改(提示:"替换所有"代码块)

编写程序。如果陷入困境以下是提示。

对于有返回值的过程,选择右边的代码块:

要在过程中添加一个输入参数,请使用设置齿轮:

你可能还会发现带返回值的if then else很有用,返回值与常规的if then else代码块相似,但允许根据满足的条件返回不同的值。

  • 解决方案

19. Submit Button提交按钮

当用户按下“Submit”按钮时:

  • 首先将用户的注释(以"YOU: "开头)添加到现有日志中,然后通过程序对这些注释的答复(以"BOT: "开头)来刷新“诊疗日志”。 可以使用"\n"(反斜杠和字母n)在语句之间进行换行。

  • 清除UserTextBox

编写程序。如果陷入困境以下是提示。

可以通过设置齿轮添加更多的套接字到连接块:

  • 解决方案

20. 测试App

祝贺你,你已经创建了第一个会聊天的人工智能自主机器人。

注意:在测试期间,你可能会意识到机器人可以使用很多改进。下面“扩展你的app”提供一些启发。

进一步的探索

  • 创建一个按钮以删除聊天记录。

  • 除了将回应写在聊天日志中外,还可以让Therapist BOT将回应说出来。确保移动设备具有此功能。(提示:TextToSpeech组件)

  • 添加一个语音按钮,允许用户与Therapist BOT对话,而不仅仅是键盘输入。确保移动设备具有此功能。 (提示:SpeechRecognizer组件)

  • 在会话开始时,让Therapist BOT进行免责声明,以便用户知道它不是经过认证的医疗保健专业人员。

  • 通过使用诸如“再见”之类的关键字来让用户能够终止治疗过程,在终止应用程序之前让BOT对用户做出诸如“保持健康。祝你有美好的一天!”的回复。

  • 添加更多的措辞和限定词,调整其被选择的概率。向替换字典添​​加更多选择,例如配对"I am" : "you are"。

  • 处理诸如用户说"you are a bad therapist"“你是个糟糕的治疗师”之类的情况(第二人称到第一人称代词的变化)和其他尚未涵盖的情况,包括大写,例如"You yourself told me that"。在各种对话中测试Therapist BOT,以确保它能够正确地改变其回应。

  • 你可能已经注意到替换字典中的某些单词可能包含在其他单词中,并且可能被不恰当的替换。例如,单词“I”包含在单词"Incomplete”中,当字典中用"I”替换"you”时,会得到毫无意义的"youncomplete”。我们可以通过在替换字典中的字符串上添加空格来避免某些情况,例如将"键:值"对"I ":"you "每个单词的末尾都有空格),以便处理" I"仅当用作单个单词而不是作为其他单词一部分的字母时。

  • 当用户说"I am sad" 或 "My father passed away last year"时,让治疗机器人给出一些移情回应。

  • 如果对话太灰暗(使用了一些关键的标志词,如“沮丧”等),让治疗机器人向用户提供一些心理健康帮助信息及参考热线电话等。

  • 让治疗机器人能够保存对话,并让它引用对话中讨论的较早主题,例如"Earlier you mentioned that..."“你以前提到的...”。

  • 当使用已创建的Therapist BOT进行工作时,你可能会发感到沮丧,并对BOT的模棱两可的性质产生一些负面感觉。  "Uncanny Valley"是来自日本机器人专家Masahiro Mori术语,它描述了人们对类人机器人的负面反应。试着对这个非常有趣的主题进行一些研究。

你有什么更好的创意...

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail