如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全(趣说人工智能编译)今天我不会谈论机器学习的有趣使用或者您可以在家尝试的一个很酷的应用程序。相反,我想谈谈在过去几个月里我一直在专业工作的项目。这项工作涉及复杂的NLP管道,一个有趣的应用程序,并为我提供了许多新的体验。我收集的知识帮助我获得了Kaggle的Google Jigsaw Toxic Comments的前4%,也许它也可以帮助您在将来的项目中使用。
Privalino
Privalino是一家来自德国的年轻创业公司,旨在让互联网成为孩子们更安全的地方。他们的第一个项目是建立一个即时通讯的13可岁以下儿童自动检测的危险,如网络疏导,网络欺凌和其他人,以便可以采取适当的措施。我刚刚加入他们的小团队,对这个项目感到非常兴奋!如果你有兴趣,你可以在 privalino.de找到更多德语信息。
问题:网络疏导
如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全。你可能没有意识到这一点,但现在,很多真正年幼的孩子都在智能手机的口袋里。我们都知道互联网是一个非常混乱的地方。但通常情况下更危险的是那些意图不好的陌生人。即使是最聪明的孩子,如果按下正确的按钮,也很容易操作,并且在大多数情况下,他们不知道发生了什么,或者他们应该得到帮助。我通常不是在监视或控制孩子的行为,但是如果我们能够将一个年轻的孩子从一个变态中拯救出来而不以另一种方式搞乱他们的童年,我认为我们正在做一件好事。
所以让我们从AI的角度来看这个问题。一种算法,就像人类一样,会查看对话中的最后X个消息,然后尝试引发是否有可能发生的事情。网络疏导可以有多种方式。也许陌生人正在亲自安排会议。也许他们试图获得裸体照片。也许他们试图发起性感的谈话。或者他们试图让他们改变应用程序,以便他们可以私下交谈。
然而,这个问题比这个更微妙。聊天伙伴可能是一个真正想要放学后见面的同学。父母可能会将孩子的照片发给他们的孩子。也许两个孩子天真地使用他们以前听到的调皮语言。为了让它变得更加复杂,也许他们认为是他们迷恋学校的人实际上是别人,假装。
任何方式你打开它,这是一个非常复杂的问题。“梳理”与“不梳理”之间的简单二元分类是不够的。即使是看着聊天的人也无法一直知道。相反,我们把它当作回归问题来预测修饰发生的主观可能性。从本质上讲,我们问注释者:在阅读这些消息后,根据你的直觉感觉,你认为这是一个危险的对话有多大可能性?
数据
如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全。所以你可能想知道:你到底在哪里得到数据来学习这个?那么,有大量的“正常”聊天对话数据集,但要获得“危险”的例子,我们必须进入......我们称之为“道德灰色地带”。我们做的是这样的:我们进入了为孩子们设立的公共聊天室,我们自己冒充幼儿,等着徐徐跟我们聊天。我们认为我们可能会以这种方式获得一些数据点。我们是多么的错......我们几乎没有努力就得到了成千上万的人!
之后,我们手工检查了数据并对其进行了注释。每条消息的得分介于0和1之间,表示我们在对话中发现危险的可能性。大多数对话以0.5开始(不确定是否存在危险)。如果很明显,这是来自学校或家长的朋友,那么危险可能会缓慢下降。如果在两条消息之后有人询问对方内衣的颜色,我们可能会增加危险值。
提案
收集合适的数据集后,我们的目标是建立一个模型,可以预测这个分数而不过度适应训练集。Privalino团队已经对传统的NLP分类器进行了培训,该分类器表现出色。然而,这些方法并不适合解决这样一个复杂的问题,以至于满意。
相反,我建立了一个基于深度学习理念的模型,并在此过程中学到了很多东西。希望这也能帮助你练习。与传统方法相比,最终模型取得了更好的指标。运行预测只需要一小部分时间。
该模型
输入
如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全。为了处理拼写错误,额外空间等,我首先考虑了字符级编码,其中输入是代表单个字符的一个热点向量序列。这保证了针对小错误(如错别字)的最强大的稳健性。尽管如此,我们不能利用无监督的训练,所以模型必须自己学习所有的单词。我还尝试了一个预训练FastText嵌入的基于字的模型。与以前的单词嵌入算法不同,它可以很好地处理拼写错误和看不见的单词。通过对大文本语料库进行无监督的训练,我们甚至可以在查看我们有限的标记数据集之前就已经预先学习了很多概念和细微差别。
字符级和字级编码都有其优点和缺点,并且稍微改变了问题的复杂性。未来,我想探索结合两者的方法。目前,我使用FastText嵌入获得了最好的结果。FT模型接受了大量推特数据库的训练,并且我可以获得所有德文文本数据集。得到的单词向量空间是200维的。
出于实际原因,我们必须限制模型可以查看的文本窗口,至少在培训期间。每当我在较小的窗口(?100字)找到一个好的建筑时,我会在更大的窗口(?1000字)之后对它进行微调。信息被一个特殊的标记分隔开来,我用不同的方式对现在正在讲话的人进行编码,但是准确度的差异很小。
构架
如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全。在神经网络中处理序列时,您有两个基本构建块:一维卷积和递归神经网络。卷积非常适合学习局部特征,而RNN擅长学习长期依赖性。我单独尝试了卷积(最后有一个全局最大汇集层),但是他们理解文本的能力似乎与LSTM差不多。我也尝试过纯粹的RNN模型,但是他们训练繁琐且需要更多资源。我的最终体系结构包含:一个转换块,后跟一个RNN块。
Conv Block
给定一个原始文本,我们将它分解成单词并检索每个单词的嵌入向量。这导致具有200个特征的序列。接下来,我们应用一个一维卷积,每个看三个词。它们生成100个与位置无关的非线性特征。最后,为了减少序列的长度,我们在每个3个元素上应用一个最大池,只捕获每个位置最强的信号。所以在conv区块的末尾,我们都减少了特征的数量以及序列的长度。
RNN块
现在我们将75个单位的长短期记忆(LSTM)应用于这个压缩序列。每个步骤传送状态和输出信号。这会学习序列中复杂的长期关系。最后,我们得到一个我们可以用作这个图层输出的最终状态。然而,这使得学习变得困难:假设RNN在序列的开头发现了一个重要的特征。将此信号传递到下一层并不容易,因为它需要通过以下所有时间步骤,直到达到最终状态。
这可以通过注意力来解决,但是使用它的实验都导致了强烈的过度配合。相反,我选择了一个更简单的解决方案:我们可以采取每个时间步的输出并将其聚合到全局。例如,将全局最大池应用于所有输出,只需增加其值即可立即使用该功能。全球平均汇总可以帮助我们对整篇文章有一个总体的了解。
这两个池操作都应用于LSTM输出并连接到最终状态。这样,RNN块的输出就是3x75固定特征的形式。
最终处理
如何设计人工智能应用帮助儿童自动检测危险,让互联网更安全。接下来,我将一个简单的S形输出图层应用于这些特征以获取模型的输出。另外,只要有用,我都会应用批量归一化和(结构)退出。丢失的结构部分很重要:在序列中,删除整个特征而不是单个值很重要。
训练
我发现Nadam(Adam与Nesterov-Momentum)是RNN模型的最佳优化者。渐变裁剪对于保持训练稳定非常重要。该学习速率设置尽可能高。有了这个,训练花费了大约30分钟的时间。
结果
为了评估这个模型,我为测试集减少了20%的训练对话。在这些模型中,预测得分与我们的人类标签之间的Pearson相关系数为0.96。在大约0.3%的情况下,大于0.4的错误极少发生。在没有GPU的基本服务器上运行单个预测需要10毫秒。
我们来看一个具体的例子。请注意,这个例子最初是德文的,但是可以1:1翻译成英文。我将这个序列提供给模型,并且在每个单词之后我会问:您期望的当前危险是什么?据此,我将它从绿色变为红色。
如您所见,模型开始呈中性(黄色)。“亲爱的”也可能来自父母。但是在问题的过程中,它越来越多地变得可疑,直到最后变成暗红色。
伦理
因此,我们已经证明,这个问题在技术上是可以解决到可接受的程度。但是,如果它能解决?我很清楚,整个项目会让一些人畏缩,这很好。某种程度上,我们正在监视孩子们。但是,这些年轻人面临的危险是非常真实的。即使我们认同孩子应该犯错的健康态度,我想我们都可以同意没有孩子应该受到虐待。在一天结束时,我们的服务是父母的工具。他们应该负责任地运用它。为此,Privalino尽力整合并直接与孩子和家长交谈。
外表
不用说,还有改进的余地。我们不断地收集更多的数据,并且还有许多更复杂和更微妙的策略,我们现在还没有抓住。我总是乐于听到你的想法。此外,如果您有孩子长大后说德语,请考虑尝试我们的应用程序!:)