理论上是否存在可以将 NLP 算法发送到无限循环或破坏聊天机器人的语言输入?

人工智能 聊天机器人 编程语言 计算语言学
2021-10-22 05:56:16

今天,一名网络安全和信息保障项目的学生向我提出了一个有趣的问题,该问题与在 snapchat 上被聊天机器人发送垃圾邮件有关。他尝试了许多常规方法来阻止它们,但他仍然不知所措:

  • 从理论上讲,是否有代码行可能会中断处理,例如命令或句法符号?

我的感觉是否定的——功能将被分割,这样语言数据就不会执行。但谁知道呢。

  1. 很多程序员都很草率。
  2. 我有朋友在视频游戏 QA 生产控制器输入,程序员声称这是不可能的 - 直到演示。
  • 从理论上讲,是否有可能在Voight-Kampff 测试思想实验的意义上“破坏”聊天机器人?

当然,这是通过最著名的 AI 电影之一《银翼杀手》(BladeRunner)普及的,该电影改编自最著名的书籍之一 ElectricSheep,并且最近通过 WestWorld 进行了扩展。在这些情况下,这是一项旨在将自动机送入循环或错误的心理测试。

我在这里的问题与那些流行的媒体处理中的“心理学”无关,而是与语言学有关:

  • 理论上是否存在可以将 NLP 算法发送到无限循环或产生停止计算的错误的语言输入?

我的猜测是不,一路走来,但仍然是一个可能值得问的问题。

2个回答

虽然 NLP 算法当然有可能最终陷入无限循环,但聊天机器人通常不会受此影响。

你学习的第一年的一个陷阱是语法的构建。如果你对一个句子进行自上而下的分析,下面的语法规则会将它送入一个无限循环:

NP -> NP 的 NP | 确定 N | ñ

这允许将名词短语扩展为“名词短语名词短语”;解析器接下来尝试扩展非终结符号“NP”,该符号很容易扩展为在开头具有相同符号的规则。

然而,现代聊天机器人不倾向于使用解析器,因为它们的输入通常没有足够好的格式来允许应用语法。他们要么使用模式匹配(Eliza 风格),要么使用机器学习,这两种方法都不会受到这个问题的影响。

商业聊天机器人通常会使用各种垃圾输入进行测试,以确保它们不会崩溃或崩溃(在我之前的工作中,我设计了五年的聊天机器人)。

我能想到的一种可能性是,如果预处理步骤编码不当,使用例如非 ASCII 字符或极长的无意义词等可能会导致问题(例如缓冲区溢出),但现代编程语言使得实际操作变得越来越困难以这种方式破坏任何东西。正如您所说的那样,您会将输入与可执行代码分开,因此不会发生Bobby Tables问题。

这完全取决于您的架构。

聊天机器人是由什么组成的?

当前大多数商业 AI 聊天机器人都有这样的架构:

 ┌────┐┌─────────┐┌────────┐┌─────────┐┌────────┐┌───┐
 │User││Messenger││Back-end││NLP (NLC)││Database││API│
 └─┬──┘└────┬────┘└───┬────┘└────┬────┘└───┬────┘└─┬─┘
   │        │         │          │         │       │  
   │Message │         │          │         │       │  
   │───────>│         │          │         │       │  
   │        │         │          │         │       │  
   │        │ Message │          │         │       │  
   │        │────────>│          │         │       │  
   │        │         │          │         │       │  
   │        │         │ Message  │         │       │  
   │        │         │─────────>│         │       │  
   │        │         │          │         │       │  
   │        │         │  Intent  │         │       │  
   │        │         │<─────────│         │       │  
   │        │         │          │         │       │  
   │        │         │       Intent       │       │  
   │        │         │───────────────────>│       │  
   │        │         │          │         │       │  
   │        │         │       Answer       │       │  
   │        │         │<───────────────────│       │  
   │        │         │          │         │       │  
   │        │         │          │ Call    │       │  
   │        │         │───────────────────────────>│  
   │        │         │          │         │       │  
   │        │         │          Response  │       │  
   │        │         │<───────────────────────────│  
   │        │         │          │         │       │  
   │        │ Answer  │          │         │       │  
   │        │<────────│          │         │       │  
   │        │         │          │         │       │  
   │ Answer │         │          │         │       │  
   │<───────│         │          │         │       │  
 ┌─┴──┐┌────┴────┐┌───┴────┐┌────┴────┐┌───┴────┐┌─┴─┐
 │User││Messenger││Back-end││NLP (NLC)││Database││API│
 └────┘└─────────┘└────────┘└─────────┘└────────┘└───┘

所以问题是:这里的脆弱点是什么?

  1. Messenger:理论上,Messenger 应该只转发消息,但前端通常存在一些安全漏洞,比如破解某些特殊字符
  2. 后端:如果消息未经过验证/清理,则可能存在一些 SQL 注入漏洞。
  3. 聊天机器人背后的大多数 AI 是 NLC(自然语言分类器)、NER(命名实体识别)和其他特定 API(如天气预报)。我看不出机器学习模型是如何被直接攻击的。
  4. 但是,如果聊天机器人直接接受(或使用 NER 提取)用户输入,它可以用于将攻击扩展到数据库或 API 中(例如:“ ” - 受此xkcd 漫画My name is Robert'); DROP TABLE students;--的启发)。
    • NER 提取 name=" Robert'); DROP TABLE students;--"
    • Is 用作数据库的查询参数Check if name exist in Database
    • 数据库信任您的后端。
    • 后端使用注入的代码攻击数据库。

悖论循环

另一种(更哲学的)错误人工智能的方法是试图引起一个悖论循环,这在这个链接上得到了很好的解释