城市房产数据中的房东定位
没有人应该被驱逐,句号。Python & React 可以帮助阻止它。
诺亚科特 2020
介绍
驱逐(Eviction)是一种根据法院命令,合法地将房客从他们的住所强行驱逐出去的过程,尽管通常是由自己动手的房东非法实施的。通常情况下,驱逐是一个滚动的过程,市政房东-房客法院处理大量案件,最后由警长敲你的门,但我们不是在正常时期。大多数人都很幸运,他们的房东遵守了法律,一直等到法院重新开庭审理因持续的新冠肺炎危机而关闭了几个月的驱逐案。那些有幸拥有一个守法房东的人并不幸运;他们现在知道,在一段不可描述的时间内,他们将面临无家可归的问题。
许多处理房东-房客问题的法院一开始就无法处理驱逐案件,更不用说在当前的经济衰退时期了。这些都不足为奇。法院不是为了帮助房客而设立的;它们是保护资本的堡垒,帮助土地所有者获得意外利润。租户通常准备不足,得不到政府机构的支持,在一个专为奸商建立的系统中无法获得足够的代表权。这种不公正留给了当地组织去对抗,包括租户联盟和同情的法律团体/服务,他们缺乏反击所需的工具和数据。很明显,租户组织是一门独立的科学,大多数这样的团体都做得很好。拥有更多信息和工具来筛选这些数据,将使租户组织者能够更准确、更深入地锁定社区和房东。
动机
作为费城租户联盟和德雷克塞尔学生租户联盟的租户组织者,我对其挑战有第一手的经验。第一步总是要弄清楚自己面对的是什么,这通常包括使用城市数据工具,如费城地图。
费城地图集
图集工具绝不是无用的;它提供了相当多的洞察力,但仅针对单个属性。关于该房产的信息往往已经过时,或者缺少所有者的实际邮寄地址。这种数据的缺乏使得研究人员/组织者很难得出有意义的结论,除非进入一个可能空空如也的兔子洞,在谷歌上搜索附加了城市的名字。
我可以写一整篇关于土地所有者如何隐藏在系统生成的数据背后的文章。不过,现在,我将只解释一个相关的策略。房东,尤其是有问题的房东,会躲在看似无止境的空壳公司后面,这些公司几乎不知道谁拥有他们。这些空壳公司、有限责任公司和合伙企业这样做也带来了另一个问题,你怎么知道“123 Street Road APT 3 LLC”拥有什么?虽然大多数这些非常明确命名的公司只拥有他们描述的财产,但有时数据会暴露他们拥有多少和在哪里。费城地图集工具不会轻易为您提供这些信息。系统仅基于属性进行过滤。
费城阿特拉斯酒店视图
只有按单个地址过滤才是呈现属性数据的个人主义方法。这种方法描绘了这样一种情况:在一个有数百万人口的城市中,只有一个房客在一套公寓中遇到问题,而这个房客却独自承担责任。在没有足够的知识、支持和/或代理的情况下,创建一种类似于进入房东-房客法庭的感觉,我们可以开始假设这是同一系统的一部分。人们意识到法院不是为房客设立的。他们是遍布我们城市的中产阶级化发展机器的一部分,城市的工具也不能不受其影响。
我出发去看看我能做些什么来改变这一切。我想使用城市在地图集工具中使用的相同数据集,opa _ properties _ public . CSV,并以一种更加民主化和集体化的方式呈现它。这是居住在费城的人们的数据,而不仅仅是土地所有者留下的痕迹。随着可以与大萧条相媲美的驱逐危机的逼近,我们需要迅速创造工具,阻止土地所有者隐藏在混乱、不准确的数据中,并暴露他们拥有的一切,给租户和租户倡导者一个战斗的机会。
诺亚科特 2019
数据源和描述
几个月前,我被安排在德雷克塞尔大学开始我教育的最后一个合作模块。尽管如此,当新冠肺炎关闭一切,我的合作社被取消。由于找不到替代合作社,也没有资格参加整个学期的课程,我决定做点什么来弥补我从上一个合作社中获得的发展经验。通过我与费城租户联盟的合作,我知道该市有很多数据可供我们联盟中的租户和我们倡导的租户利用。
费城开放数据包含费城地区可用的数据集目录,确切地说是 379 个数据集。我很快浏览了他们的目录,找到了 Atlas 工具使用的城市房地产评估数据。这个数据集创建于 2015 年,包含数十万套房产,但这些是如何在费城的业主之间分配的?在该集合中的 581,456 个资产中,只有 429,983 个唯一拥有实体。
直方图 1
房东拥有多少房产的分布相当有趣。在直方图 1 中,我绘制了这个分布的直方图。直方图记录在 y 轴上,以便更好地显示数据。尽管如此,x 轴在这里看起来更有趣。右边尾巴上的条形之间的间隔,显示了财富差距是如何快速增长的。
直方图 2
起初,我很惊讶左边的拖尾有多严重,这表明这个数据集中的大多数拥有实体只拥有一个属性,但这是有意义的。根据调查城市中谁单独拥有财产的经验,我可以说这种分布是严重拖尾的,因为存在大量不稳定的专门命名的公司、有限责任公司和合伙企业,它们的存在仅仅是为了“拥有”这些财产。假设大多数人不拥有大量财产也是公平的,美国消费者新闻与商业频道声称大多数人拥有 1 到 10 处财产,这是这个柱状图所描述的。
从 Python 开始
为了开始解释这个数据集,我需要从对数据进行排序和搜索开始。我选择使用 Python 3,我知道这种语言可以处理数据集中的 500,00 多个条目,并开始工作。我首先想知道的是:
这个集合中有多少个唯一的拥有实体?
他们拥有多少房产?
这个分布看起来像什么?
将它分解成更小的步骤,我开始创建一个只包含每个拥有实体一次的对象。如果它们出现不止一次,我需要更新那个拥有实体的计数。这些步骤转化为下面的 Python 3 代码。
意识到拥有大量实体并希望将这些数据用于 web 应用程序,我意识到我需要将这些数据分开。为此,我写了一个函数,为我认为的重要房东设置了一个下限。
我还编写了一些函数来编译来自原始 CSV 文件的仅包含房东和属性的 JSON 对象。
在这一点上,我开始考虑如何构建 React 使用的数据。JS 前端。我决定创建一个对象,通过房东和房产信息的子结构来组织数据。这段代码很大程度上受到我在前端呈现数据的方式的影响。尽管如此,这段代码应该提供其结构的一般要点。
如果你想更详细的看看我的数据处理或者想叉一下,这里是 GitHub 的资源库。
创建节点/快速 API
在处理完数据并创建了分割数据集的 JSON 文件后,我开始工作。我开始构建一个 node.js 服务器,它利用 Express 来创建 API 端点。(如果你想了解更多这方面的信息,点击这里)。我意识到列出 400,000 多个拥有实体会使浏览器崩溃或速度极慢,所以我为不同的 JSON 文件创建了端点。
为了抑制呈现所有实体的数量,我创建了一个只服务于重要房东的端点。
然后,我编写了一个端点来侦听特定的房东,在更大的数据集中找到它,并返回一个只包含房东请求的数据的对象。
出于篇幅和表述的考虑,我已经截断了运行 node/express 服务器所需的代码量。如果你想看到完整的服务器代码,这里有 GitHub 库。
建立一个反应堆。JS 前端
小楼一座反应过来。JS frontend 是这个项目的自然发展。在被我的前两个 Drexel 合作伙伴启动后,我在过去几年里一直在学习并越来越擅长编写 React 应用程序。我知道这不是一个编程教程,所以我将描述和解释这个项目产生的屏幕。如果你对我的代码感兴趣,你可以点击查看。
为了可视化拥有实体的属性,我为 React 搜索了一个地图库,并选定了 react-map-gl 。这个库允许我使用 MapBox maps,这是一个由优步创建的高度可定制的地图界面。使用来自字体牛逼的记号笔,我开始在地图上绘制房产数据。
对于较大的自有实体,尤其是费城住房管理局(Philadelphia Housing Authority)来说,绘制单个房产的效果并不太好,该机构拥有约 4000 多处房产。我想我必须使用聚类算法来解决缓慢的标记渲染。幸运的是,MapBox 已经花时间为 react-map-gl 开发了这个。别人开发了一个库来使用这个带有 反应钩子的 。这两个库分别是 超级集群 和 用途-超级集群 。按照一个很棒的教程关于如何一起使用所有这些,我制作了如下所示的屏幕。
费城房东观察员
聚类使我能够将更多的信息打包到地图上的标记中。每一个标记都提供了关于该房产的信息,如街道地址、类别、共有人、登记日期、销售日期、销售价格、和建造年份。通过在地图上提供这些信息,用户可以了解附近发生了什么,以及如何最好地解决与特定所有实体相关的租户问题。
屏幕右侧的地主选择器就没那么让人印象深刻了。目前,我只显示拥有超过 50 个属性的所有实体。这主要是因为在浏览器中呈现冗长的列表需要很长时间,我正在积极寻找解决方案。
项目演进
我只是开始触及租户或租户维权者在费城房地产评估数据的不同表述中所能发现的皮毛。我一直在做一个列表,列出我和其他人认为可能有用或有趣的未来发展。
1.彩色涂层标记,显示何时建造的属性和描述每个时间段的关键。
2.更多特定于所有实体的统计数据,如平均房龄和平均销售年份。
3.交叉引用购买力平价数据。(工资保护程序)
4.交叉引用费城驱逐文件数据。
5.将这个项目打包成一种其他城市可以开始以适合他们的方式可视化他们的数据的方式。
诺亚科特 2019
结论
在技术世界里,人们开始或创建项目,这些项目起初看起来有用,但最终不再有用或多余。我希望费城地主检举人 不属于这两类。很快,包括家庭在内的大量人口将被合法驱逐出他们的家园,在大多数情况下,他们无处可去。避难所要么已满,要么已被新冠肺炎摧毁,这是不可接受的。每个人都应该有一个称之为家的安全地方,如果他们目前没有,他们需要得到一个,如果他们有,他们需要留在那里。租户比以往任何时候都更需要团结起来,形成或加入租户联盟,以建立租户权力,并提供社区驱逐防御。
如果你在费城,我强烈推荐你加入费城租户联盟。PTU 为费城的租户争取权益,包括提供驱逐辩护。如果你有需要,不要犹豫,向他们伸出援手!
在费城之外,有一个租户联盟网络被恰当地称为 自治租户联盟网络 。他们能够给你指出正确的方向,并且有一个他们与租户联盟合作的城市列表。
对于任何对这个项目的编程方面更感兴趣的人,有适合这个项目范围的想法,或者如果你只是想聊聊,我的电子邮件是noah.cote3@gmail.com。
不然就看看我的 Github 在 Twitter 上关注我: @n_cote3。
三十年来冠状病毒研究的概况
语义之旅
2 月 10 日, STAT+ 发表了一篇关于冠状病毒研究中波动的兴趣和资助的有趣文章。阅读这篇文章激励我进一步调查冠状病毒研究的状况,特别是为了了解截至 2019 年底的冠状病毒研究状况,就在新冠肺炎疫情在全球爆发之前。
在这篇文章中,我将分享我所做的一些初步探索,以获得该研究领域的概况,使用文本挖掘方法。
对于那些不熟悉文本挖掘的人来说,这个网站提供了这项技术的简单介绍。文本挖掘的目的是将非结构化的文本数据转化为有价值的信息。在这项调查中, VOS 浏览器应用程序使用的算法扫描了数千份摘要,并将常用术语(单词)放在二维地图上进行可视化,其中两个术语之间的距离表明了术语之间的相关程度。如果术语经常一起出现在同一摘要中,它们之间的距离会变小,最终,可能会看到术语簇。
这种技术是理解领域内话语的一种强有力的方法,因为词的聚类表明了该领域内讨论或研究的主题。这样,可以从数据中发现研究主题。如果没有这样的计算方法,很难(如果不是不可能的话)从现代研究产生的海量信息中获得一个结构。
构建冠状病毒研究术语图
使用从 1990 年 1 月 1 日到 2019 年 12 月 31 日的冠状病毒搜索词组合,从Lens.org下载的 11,224 篇文章的元数据首先用于在 VOS 浏览器中生成术语网络图。随后使用 OpenRefine 和 Gephi 进一步优化数据和网络。进行多次迭代,直到最终网络确定下来。
在图 1 的术语图中,已经生成了五个不同的集群;我认为这个模块级别对于早期的探索是合理的。同样有趣的是网络的结构,它揭示了与另一个相反的集群,在两侧之间有一个桥接集群。
可以根据各种参数设置节点(彩色圆圈)的大小。对于图 1 中的可视化,强调了最常用的术语,其中较大的节点表示该词出现的频率较高。只显示语料库(文章集合中的词的主体)中使用最频繁的术语的标签,以避免视觉过载。
图 1:1990-2019 年冠状病毒研究文章标题和摘要的术语共现图。在对重复的术语进行协调并对不同的模数和截止值进行实验后,450 个节点和 3036 条边被选定用于最终的可视化。节点的大小设置为术语出现的数量,节点越大,术语出现的频率越高。只有出现最少 20 次(即在至少 20 篇文章中)的单词被包括在分析中。使用二进制计数,基于摘要中是否存在术语,而不是摘要中出现的全部数量。数据:。
除了频率,我们还可以问网络中是否有特别重要的术语。引用计数通常被用来衡量研究工作的重要性。因此,可以假设来自高引用计数的文章的单词来自该领域其他研究人员认为重要的文章。
图 2:比较基于术语出现的术语图(A)和平均标准化引用(B)。数据:Lens.org。
在图 2 中,基于出现的术语图(左,A)和基于引用的术语图(右,B)之间的差异可以相互比较。请注意,当在引用图(B)中查看时,许多出现频率高的词(A)的大小显著减小,而以前在出现频率图(A)中不常见的新术语在引用图(B)中变得突出,如节点大小的变化所示。在描述下面的主题时,我们将更深入地研究这些不同术语图视图的使用,并揭示每个集群内的洞察力。
冠状病毒研究的主题
为了确定主题,我检查了每个集群中流行的术语,并做了一些额外的研究来扩展一些术语,以展示如何使用这种方法来产生见解。以我的经验,给一个话题贴标签并不是一门精确的科学,需要一些该领域的知识才有意义。在这个过程中,我依靠我在临床传染病和疫苗研究方面的背景来帮助我,尽管来自冠状病毒研究领域专家的输入将有助于使标记更加准确。
第一组:冠状病毒的分子和细胞生物学
图 3A 显示了组 1 中最常用的术语。这些术语中有许多涉及冠状病毒生物学的基础研究,如刺突蛋白、复制、机制、结构、基因组和 rna 。
图 3:基于术语出现(A)或平均标准化引用(B)可视化聚类 1 中最高排名的术语。数据:Lens.org。
一个有趣的术语, mhv 也可以在这组最频繁出现的术语中找到。什么是 mhv ?
在发现 SARS 冠状病毒之前,许多关于冠状病毒的研究都是使用小鼠肝炎病毒* (MHV)进行的,这是一种鼠冠状病毒,根据其嗜性,它可以感染呼吸道、胃肠道或神经系统(见本文综述)。由于亲神经 MHV 菌株能够引发脱髓鞘,因此已将其用于建立多发性硬化症的小鼠模型。因此,MHV 模型是我们今天理解冠状病毒感染生物学的基础。鉴于最近发现 SARS-COV-2 病毒会引起嗅觉丧失(嗅觉丧失),重温一些关于 MHV 及其对中枢神经系统影响的旧文献可能是值得的。*
将视图改为平均标准化引用计数(图 3B),导致新术语如组织蛋白酶 L 和同步形成脱颖而出,表明这些术语存在于高被引文章中。
深入研究发现,组织蛋白酶 L 是一种重要的分子,因为它是 SARS 病毒利用其刺突蛋白激活其融合到宿主细胞中的宿主酶(见本文)。组织蛋白酶 L 的抑制剂已经被证明可以阻止 SARS 冠状病毒的进入(文章),尽管据我所知,这种治疗策略目前还没有被考虑用于新冠肺炎的治疗。
Synctium 的形成揭示了冠状病毒的一个特殊特征,如那些导致 SARS 和 MERS 的冠状病毒能够介导邻近的感染和未感染细胞之间的细胞融合,这种策略使病毒能够直接在细胞之间传播,并避免中和抗体(文章)。
第二组:冠状病毒爆发的公共卫生和临床研究
与第一组不同,这里倾向于将涉及临床和公共卫生研究的词聚集在一起(图 4A)。传播、实验室、监测和流行病学等词汇暗示了一种调查冠状病毒爆发的公共卫生方法。其他术语如肺炎、发烧、症状和疾病建议采用临床方法。到目前为止,许多人已经熟悉了术语 mers ,它代表中东呼吸综合征*,这是最近在人类中爆发的冠状病毒。*
图 4:基于术语出现(A)或平均标准化引用(B)可视化聚类 2 中最高排名的术语。数据:【Lens.org】。
为了找出这个集群中最重要的术语,使用了标准化引用视图(图 4B)。蝙蝠冠状病毒由于其与 SARS 和 MERS 冠状病毒的相似性以及随后的高度临床重要性,现在在这一群中表现突出。它与术语蝙蝠物种和自然宿主关系密切,这两个术语共同指向了解野生蝙蝠冠状病毒生态的研究。
另一个重要术语肾衰竭引发了进一步的调查。在 SARS 患者中,急性肾衰竭被发现是非常不利的结果,尽管相对不常见,为 6.7% ( 文章)。令人关注的是,根据两篇来自中国的预印文章(这篇文章和这篇文章,现在已经在新冠肺炎患者身上观察到了肾脏异常。这个例子强调了这样一个基于引用的术语图是如何将我们的注意力引向洞见的,否则这些洞见可能会迷失在信息的海洋中。
第 3 组:动物冠状病毒感染
这个有趣的集群位于基础科学和临床研究集群之间,连接着两个群体(图 1)。仔细观察,这一分组丰富了关于动物冠状病毒疾病的术语,如牛冠状病毒和猫冠状病毒以及 tgev ,这是一种感染猪的冠状病毒(图 5A)。 ibv 是指传染性支气管炎病毒*,一种在鸡群中高度传染性的冠状病毒疾病。在当前视图中不可见,但在较低算法阈值下存在于该集群中的其他术语,如马冠状病毒和犬冠状病毒,揭示了冠状病毒适应的动物宿主的惊人多样性。这也给公众带来了一个鲜为人知的事实,即所有冠状病毒都源于动物,最终适应人类并导致疾病。*
图 5:基于术语出现(A)或平均标准化引用(B)可视化聚类 3 中最高排名的术语。资料:Lens.org。
诸如 pcr 和样本等高度流行的词反映了用于识别和表征这些病毒的方法,但由于其无处不在的特性,可能不一定是该群的特定特征。这可以在标准化引用视图(图 5B)中看到,其中这些术语的大小大大减少。
在这种观点中,术语 pedv 感染和猪 delta cov 脱颖而出。在 2013 年第一次爆发期间,这些冠状病毒在新生小猪中导致严重疾病,导致高死亡率和农民的重大经济损失,估计达 10 亿美元(文章)。
第 4 组:病毒性呼吸道感染
描述其他呼吸道病毒如流感、腺病毒、 rsv 和鼻病毒的术语群表明冠状病毒也在病毒性呼吸道感染的背景下进行研究(图 6A)。常见和非特定术语,如年和月建议描述这些感染的时间。不太常见的术语如 nl63 、 hku1 和 oc43 原来是人类的冠状病毒感染,通常导致上呼吸道感染,表现为普通感冒。有趣的是,HKU1 冠状病毒来源于受感染的小鼠,而 OC43 被认为是从牛身上转移到人类身上的。
图 6:基于术语出现(A)或平均标准化引用(B)可视化聚类 4 中最高排名的术语。资料:Lens.org。
在图 6B 中,标准化引用视图允许我们观察到诸如临床数据、鼻咽抽吸物、病毒原因和优势比等术语变得突出。这表明,在这个集群的研究围绕临床研究,以确定和监测呼吸道病毒感染。
聚类 5:小鼠模型中的免疫反应和病毒发病机理
这个小星团,看起来像是星团 1 的分支,通过更仔细的研究揭示了许多洞见。鼠标是一个主要术语,这表明鼠标模型是这个主题的核心。在小鼠模型中,似乎要研究各种角度,例如以诸如 ifn (干扰素) t 细胞、巨噬细胞、表位、亚单位疫苗和促炎细胞因子为特征的免疫反应,以及通过肺病理学和中枢神经系统所看到的其后果(图 7A)。受体结合域暗示了与冠状病毒进入研究相关的另一个方向,当我们使用图 7B 中的标准化引用视图查找高引用文章中出现的术语时,这一点变得更加明显。
图 7:基于术语出现(A)或平均标准化引用(B)可视化聚类 5 中最高排名的术语。资料:【Lens.org】。****
在图 7B 中,词语 mers cov spike 、二肽基肽酶、 dpp4 和 hdpp4 变得更加突出,表明这些术语已在被多次引用的论文中使用。 dpp4 ,又称二肽基肽酶 4,是一种人类蛋白质,被发现是 MERS 冠状病毒刺突蛋白用来感染宿主细胞的受体(文章)。将这些点连接起来,我们可以拼凑出或许 mers cov spike 与其受体 dpp4 结合,正在小鼠模型的背景下进行研究。事实上,这一点已被描述表达人类 dpp4 基因的转基因小鼠的发展的研究所证实,该转基因小鼠完全允许 MERS 冠状病毒感染(文章)。术语 hdpp4 (人 dpp4)的出现,现在可以用小鼠 dpp4 不能很好地结合 mers cov spike 蛋白的事实来解释,这就需要开发一种表达人类版本 dpp4 基因的小鼠品系。
术语什么时候最常用?
作为最后的探索,我想获得一个场随时间演变的潜在动力的概念。为了探索这一点,修改了图 1 中基于出现次数的术语映射,其中节点根据平均使用年份进行着色(图 8)。
图 8:根据平均年份可视化研究文章中的术语频率。红色=最新,蓝色=最早。数据:。**
视觉为我们提供了这些术语最流行时的快照。看这张图,在颜色上似乎有一个总的渐变,最新的术语用红色表示,而最老的术语用蓝色表示。我们可以看到,网络左侧和中间的基础科学和动物研究聚类中的大多数术语都用蓝色阴影表示,而网络右侧的临床聚类中的术语则用红色表示。
这表明该领域最近的许多研究都倾向于临床研究,而不是基础科学和动物冠状病毒研究。
虽然不在本文的范围之内,但是追踪近年来流行的术语(例如红色的)可能是值得做的,并且可能揭示新兴的研究领域。
最后的想法
术语“图谱探索”揭示了过去三十年冠状病毒研究领域的结构。我们了解到冠状病毒研究大致分为三个主要领域:基础科学研究、临床/公共卫生研究和动物冠状病毒研究。还观察到基础科学和临床研究中的细分,例如专注于小鼠模型和病毒性呼吸道感染的细分。使用基于出现或引用的不同观点揭示了不同术语的重要性,这取决于它们的常用程度,如小鼠**,或它们的重要性,如蝙蝠冠状病毒。**
数据还表明,在过去的几年里,临床和公共卫生研究比基础科学更受关注。同样,除了猪δ冠状病毒和猪流行性腹泻病毒最近死灰复燃之外,动物冠状病毒研究的近期活动似乎较少。这种印象可以使用引文分析进行跟踪,引文分析可以更清楚地揭示该领域的发展。
这些初步发现指出了未来几年在基础科学和动物健康研究领域可以填补的知识空白。鉴于动物冠状病毒在自然界中无处不在,并且由于生态破坏以及可能由于密集的动物养殖,从动物到人类的跳跃总是有可能的,这可能是特别重要的。这将是一个有趣的调查线索。
此外,考虑到我们对新疫苗的迫切需求,我注意到与该领域的疫苗和免疫学研究相关的术语很少。这是一个简单的印象还是一个真实的事实,需要通过进一步的分析来确定,因为它可能对新冠状病毒疫苗的实际开发速度产生影响。
术语图谱分析使研究领域的结构能够以“自下而上”的方式从数据中展现出来。尽管这种方法很强大,但它也有局限性。
首先,构建当前地图依赖于 VOS 浏览器应用程序中产生的算法,其中用于计算术语之间的链接的固定标准已经在程序中制定。为了更深入地探索术语之间的联系,将需要进一步试验替代的链接计算,这些计算可能揭示本术语图分析中不存在的关系。
其次,本文中提出的见解只是可从地图中获得的潜在信息的一小部分,因此不能被视为该领域的完整描述。地图的显示依赖于各种分界点和参数,这意味着数据可以以不同的方式切片和切块,以揭示新的见解。这既是新发现的机会,也是主观解释的可能来源。
考虑到这一点,重要的是要认识到,这种方法并不意味着替代对该主题的深入研究,而是作为一种在相对较短的时间内“增加智力”的方式。将这种方法与阅读斯坦利·帕尔曼等顶尖专家的深度评论结合起来,是我快速了解该领域的方法。
在疫情的掌控下,许多研究都集中在新疫苗和治疗方法的研发上。然而,为了在短时间内设计出这些解决方案,我们需要建立一个知识体系,避免重复发明轮子。如果使用得当,来自数据科学和人工智能的新工具可以帮助我们构建信息,并将我们的资源导向最重要的地方。将更多的这些见解带到前沿将是我随后关于这个主题的探索的重点。
鸣谢:感谢 MA3X 对数据处理的协助。
卫星图像滑坡尺度预测
滑坡是一种自然灾害,被定义为斜坡上的大量岩石、碎片或泥土。滑坡是指土壤和岩石在重力的直接影响下向下倾斜的运动。术语“滑坡”包括五种斜坡运动模式:跌落、倾倒、滑动、蔓延和流动[1][2][3]。
图一。菲律宾的一个城镇遭到山体滑坡袭击——图片来自皮克斯拜的大卫·马克
近年来,卫星技术和遥感技术发展迅速。应用卫星遥感捕捉地球的数量和图像质量正在迅速提高。它在地球表面监测中发挥着重要作用。
图 3。卫星图像中的滑坡区域—图像来源于[4]
我们的主要目标是理解和实现从卫星图像检测滑坡的方法。根据在不同时间检测到的滑坡区域,给出了滑坡标度(滑坡正在发展或减少)。本文是我题为“卫星架构中滑坡识别的深度学习”的公开论文的解释版本如何做的细节和实现我的论文的第二部分介绍。此外,我还分享了我的出版物的分步源代码。我希望我能把一个从研究论文到现实世界实施的解决方案。本着这个目的,如果你打算发表一篇研究论文,请分享我的文章或参考我的出版物。
T.A. Bui,P. J. Lee,K. Y. Lum,C. Loh 和 K. Tan,“卫星体系结构中滑坡识别的深度学习”, IEEE Access ,第 8 卷,第 143665–143678 页,2020 年,doi:10.1109/Access . 200205。2006.868636060003
图 4。卫星架构中用于滑坡识别的深度学习—图形摘要[4]
图 4 示出了通过引入 CNN 模型和 H-BEMD 算法之间的组合的滑坡检测的简短过程。从不同时间(2013 年 9 月 15 日和 2014 年 9 月 18 日)捕获的卫星图像,我们可以宣布滑坡发生了更显著的变化,并且易于检测滑坡规模(滑坡方向)。
1。基于 H-BEMD 的滑坡区域检测
色调——二维经验模式分解(H-BEMD)是文献[4]中介绍的一种算法。
1.1。为什么在卫星图像中使用色调通道来检测物体?
HSV 将亮度从色度中分离出来,也称为图像强度。卫星图像受天气影响,尤其是每次拍摄的光照条件不同。图 5 显示了同一地点在其他光照条件下的 RGB 卫星图像。
图 5。RGB、直方图和色调通道[4]
虽然三个图像(a、d、g)之间的直方图值不同,但是色调通道是相同的。因此,选择色调图像通道来检测卫星图像中的滑坡目标。
要将 RGB 图像转换为色调通道图像,OpenCV 是一个很好的简单方法。基本上,OpenCV 以 8 位/值(np.uint8 —从 0 到 255)改变 RGB 到 HSV 通道。但是,色调值由一个圆圈表示(从 0 度到 360 度)。因此,下面的代码显示了将 RGB 转换为 HSV 的方法,并给出了完整的取值范围。在这种情况下,无符号整数 16 位应用于全色调值。
用全值把 RGB 换成 HSV。
1.2。 H-BEMD 流程图及源代码
在这一部分,我将介绍详细的 H-BEMD 算法。首先,图 6 显示了如何通过 H-BEMD 获得变换图像的过程。
图 6。H-BEMD 流程图[4]
什么是 H-BEMD?
H-BEMD 是 BEMD 算法的改进版本。原始 BEMD [5]应用于来自 RGB 的灰色图像,其具有从 0 到 255 的值范围(以 8 位/值计)。然而,为了应用于色调通道,BEMD 没有得到校正的结果(滑坡区域),因为 BEMD 的主要重要关键点是检测图像信号的极值。因此,色调的正弦和余弦值应用于色调值。然后,检测正弦和余弦的极值。最后,使用反正切 2 合并正弦和余弦极值。它是色调通道的极值。
BEMD 源代码
接下来,我将详细介绍 H-BEMD 如何获得 imfs_cos_hue 和 imf_sin_hue 。
BEMD 的细节是什么?
sin(色调)和 cos(色调)值分别用θ和φ表示。H-BEMD 通过 H-BEMD 筛选过程自适应分解色调图像的正弦和余弦(θ和φ),流程如下:
- **第一步:**通过形态学算法检测θ的极值(最大值和最小值)点。
- 步骤 2: 用径向基函数(RBF)[23]分别连接θ的最大值和最小值点,以生成新的 2D 包络
- 步骤 3: 如第 2.2.2 节所示,将 2D‘包络线’标准化。
- 步骤 3: 通过对两个包络求平均值来确定局部均值 mθ。
- **第四步:**从图像中减去均值:ϑi=θ−mθ;
- 步骤 5: 对φ,ωI =φmφ,遵循步骤 1 至 4
- 步骤 6: 用θ=ϑi 和φ=ωi 重复筛选过程,i:=i+1
BEMD 源代码
图 7 是上述源代码的结果。
图 7。通过 H-BEMD 检测滑坡区域[4]
2。滑坡区域分割
首先,我们集中于色调通道的简短回顾。图 8 显示了色调值的架构。
图 8。色调通道[4]
本文介绍用 330° ~ 90°的数值范围来定义滑坡区。python 代码定义滑坡的细节是:
3。滑坡大小和方向检测
在不同时间拍摄的两幅卫星图像用于显示本节中的测试流程图。
图 9。从卫星图像滑坡物体。(a)2013 年 9 月 15 日拍摄到的尼泊尔 Jure 滑坡——t1 时间。(b)2014 年 9 月 18 日拍摄的尼泊尔 Jure 滑坡——时间 t2 [4]
图 10 是图 9 的 H-BEMD 结果。
图 10。H-BEMD 结果[4]
图 11。图 10 的滑坡标记[4]
图 12。滑坡区域位置。[4]
从图 12 中,定义了每个滑坡区域的质心点。图 13 和下面的源代码详细显示了质心点以及如何在 python 代码中获得质心点。
源代码:质心点和滑坡缩放方向
图 13。滑坡区域的质心。[4]
滑坡缩放的方向由绿点和红点定义。下面是详细的源代码。图 14 显示了源代码的结果。
滑坡方向
图 14。滑坡方向[4]
根据滑坡方向,我们可以很容易地确定什么区域是危险的,容易受到其影响。由此可以准确预测生活在受影响地区的人们。
我希望这篇文章能对你有所帮助,并对卫星数据在生活中的应用做一个简要的介绍。
参考资料:
【1】https://www . USGS . gov/FAQs/what-a-slide-and-what-causes-one
【2】https://www.taiwannews.com.tw/en/news/1238060
【3】https://vov . VN/en/society/massive-slides-bury-residents-and-houses-in-lai-chau-377950 . vov
【4】t . a . Bui,p
【5】j . c . nu nes,Y. Bouaoune,E. Delechelle,O. Niang 和 P. Bunel,“二维经验模式分解的图像分析”,图像 Vis。计算机。,第 21 卷,第 12 期,第 1019-1026 页,2003 年 11 月。
车道变换检测——下一阶段的计算机视觉
OpenCV 和图像处理领域的领先创新
计算机视觉(图片由来自 Pixabay 的奥莰·卡里斯坎提供)
嘿,伙计们,兴奋起来吧,因为在本教程中,我们将了解如何使用计算机视觉和图像处理来检测汽车是否在道路上变道,所以不再拖延,让我们开始-
你一定听说过使用 OpenCV haar cascade 文件检测人脸、眼睛或汽车、公共汽车等物体。可以做到,但接下来呢?所以让我们用这个简单的检测方法来建立一些很酷的东西。
1.资料组
在本教程中,道路上汽车的视频文件被用作数据集。此外,我们可以使用图像数据集检测图像中的汽车,但在这里,当汽车改变车道时,我们会通过弹出窗口发出警告,因此对于这些动态,视频输入更可行。
2.投入
第一步是给出教程中使用的输入 OpenCV 的 haar 级联文件,用于检测汽车的坐标,道路上汽车的视频文件
接受输入
cv2。VideoCapture()方法用于捕捉输入的视频,一段视频一般为每秒 25 幅图像/帧(fps)。在捕获输入后,使用循环提取帧,并使用汽车的 haar 级联文件检测到的坐标,我们在循环中围绕汽车绘制一个矩形,以在对捕获的帧执行其他操作时获得一致性。
检测汽车
在 OpenCV 中使用 BGR 而不是 RGB,所以(0,0,255)将在汽车上绘制一个红色矩形,而不是蓝色。
框架(图片由作者提供)
3.图像处理
我们使用该帧,但是如果该帧具有非常高的分辨率,它将减慢所执行的操作,此外,该帧包括可以使用模糊来减少的噪声,这里使用高斯模糊。
现在,让我们来看看一些图像处理的概念
3.1 HSV 框架
在这里,我们使用从 cv2 捕获的帧中获得的 HSV 帧。VideoCapture()仅突出显示汽车转弯的点,并封锁其余道路&汽车在道路上直行。设置上限和下限阈值来定义 HSV 中的颜色范围,以查看汽车改变车道的点,并用作帧的遮罩。下面是用来获得这个的代码片段-
3.2 侵蚀和膨胀
腐蚀和膨胀是图像处理中使用的两种基本形态学操作。侵蚀算子在核的区域上具有局部最小值的效果,核是模板或遮罩。腐蚀用于减少图像中的散斑噪声,散斑是从图像中的物体边界被腐蚀掉的。膨胀是图像和内核的卷积,它具有局部最大值算子的效果。当添加像素以平滑图像中对象的边界时,应用膨胀来重新获得一些丢失的区域。
从 HSV 帧中的第一步生成的遮罩现在用基本的形态学操作(腐蚀和膨胀)来处理。通过将帧和遮罩之间的按位 AND 运算应用于获取 ROI(感兴趣区域)来生成结果帧。
3.3 车道检测
canny 边缘检测器与 Hough 线变换一起用于车道检测。
Canny 边缘检测(图片作者提供)
4.轮廓
canny edge detector 之类的算法用于查找分隔图像边缘的边缘像素,但它没有告诉如何查找对象或实体,因为我们无法组合/组装一些点和边缘,这里我们可以使用 OpenCV 中实现的轮廓概念,如 cv2.findContours()。
定义—“轮廓是代表图像中曲线的点的列表。”轮廓由序列表示(序列是一个链表结构),每个序列都编码了下一个点的位置信息。我们在 ROI 中多次运行 cv2.findContours()来获取实体,然后使用 cv2.drawContours()来绘制轮廓区域。轮廓可以是点、边、多边形等。所以在画等高线的时候,我们做多边形近似,找出一个区域的边长和面积。函数 cv2.drawContours()的工作原理是从根节点开始绘制一棵树(数据结构),然后连接后续的点、边界框和 freeman 链码。
找到轮廓后的另一个重要任务是匹配它们。匹配轮廓意味着我们有两个单独的计算轮廓来相互比较,或者有一个轮廓来与抽象模板比较。
5.朋友圈
我们可以通过计算轮廓矩来比较两个轮廓。“矩是轮廓的总特征,通过将轮廓的所有像素相加来计算.”
(图片来自图书参考 1《学习 OpenCV》)
力矩类型-
空间矩: m00,m10,m01,m20,m11,m02,m30,m21,m12,m03。
中心矩: mu20,mu11,mu02,mu30,mu21,mu12,mu03。
*胡矩:*有七个胡矩(h0 — h6)或(h1 — h7),两个符号都用。
我们计算力矩并使用 cv2.fitEllipse()在点上拟合椭圆。该角度是从轮廓和力矩中找到的,因为改变车道需要 45 度旋转,这被认为是汽车转弯角度的阈值。
拟合椭圆(图片来自参考书籍 1“学习 OpenCV”)
现在,我们可以使用 Tkinter 作为一个简单的弹出窗口来提醒变化,而不仅仅是打印变化车道的检测。
(图片由作者提供)
用画在车架上的矩形用绿线测量角度
弹出警告(图片由作者提供)
输出(图片由作者提供)
6.总结和未来范围
在本教程中,使用车道变换检测方法探索了智能汽车导航的一个小演示。
计算机视觉正在快速发展,其应用不仅在汽车的局部导航方面,而且在火星导航和产品检测领域都在进步,甚至正在开发医疗应用,并用于在早期阶段检测 X 射线图像中的癌症和肿瘤。
万岁,你坚持到了最后。太棒了。点击这里获取我的 GitHub 账户的源代码。
请随意询问任何疑问,因为我们正在学习与机器一样的东西 Hitesh Valecha …
参考文献—
- Bradski,Gary 和 Kaehler,Adrian ,学习 OpenCV:使用 OpenCV 库在 C++中进行计算机视觉,O’Reilly Media,in C .第二版,2013 年,@10.5555/2523356,ISBN-1449314651。
- Laganiere,Robert,OpenCV 计算机视觉应用编程食谱,Packt 出版社,2014 年第 2 版,@10.5555/2692691,ISBN — 1782161481。
好吧,由于创新从未停止,我邀请您阅读另一篇关于 耳朵生物识别 的创新博客。
语言本地化:数据科学和 FIFA 20 的端到端项目
使用 Python 和 Plotly 可视化进行探索性数据分析和 Twitter 情感分析。
JESHOOTS.COM在 Unsplash 上拍照
“什么是语言本地化?”你可能会问。
L 语言本地化是将产品翻译适应特定国家或地区的过程。这是一个更大的产品翻译和文化适应过程(针对特定国家、地区、文化或群体)的第二阶段,以说明不同市场的差异,该过程称为国际化和本地化。如这里的所解释的:
本地化流程通常与软件、视频游戏和网站以及音频/画外音、视频或其他多媒体内容的文化适应和翻译相关,较少涉及任何书面翻译(也可能涉及文化适应流程)。本地化可以在人们讲不同语言或讲同一种语言的地区或国家进行。
所以在某个时候,我被提到了这个项目:想象一下 电子艺界(EA) 想知道什么是翻译未来版本的FIFA视频游戏的好语言。这个任务依次分配给你,数据科学家,你没有资源,只有一个 Kaggle 数据集,里面有游戏中所有玩家的属性。
在没有官方数据或任何先前研究的情况下,我们不得不利用玩家的数据集,或许收集我们自己的数据。但是没什么好害怕的,这是数据科学家在几乎每个新项目中必须处理的事情。
TL;在这个过程中,我们使用了游戏中玩家的属性和技能的完整数据集。这个数据集包含一个名为国际声誉(IR) 的属性,它告诉我们一个球员在国际上的知名度。我们得出的结论是基于这样一个假设,即大量相同国籍、高 IR 的玩家可能会影响游戏在他们国家的可玩性。
除此之外,我们收集并使用了一系列提到游戏的 Twitter 消息。通过计算推文文本的情绪得分,我们可以区分人们对游戏的评价更积极的地方。这当然可以为游戏的本地化提供更好的见解。
为了可读性,这个故事没有代码。使用的完整 python 源代码和结果可以在下面的资源库中找到:【https://github.com/hectoramirez/Language-localization_FIFA】
国际足联 20 种语言
我们从学习已经包含在 FIFA 20 中的语言开始。根据官方网站的消息, FIFA 20 目前有以下 21 语言版本,并提供了特定地区的解说:
阿拉伯语、捷克语、丹麦语、德语(德国)、英语(美国)、西班牙语(西班牙)、西班牙语(墨西哥)、法语(法国)、意大利语、日语、韩语、荷兰语、挪威语、波兰语、葡萄牙语(巴西)、葡萄牙语(葡萄牙)、俄语、瑞典语、土耳其语、中文(简体)、中文(繁体)。
虽然这只是全球语言和玩家语言的一小部分,但我们可以肯定的是,由于这些语言的流行,大多数国家都包括在内。为了看到这一点,我通过连接来自这个公共存储库的数据构建了一个数据框架。头部看起来像这样:
然后,我过滤了游戏中包含的语言,并在地图中定位了相关的国家(在这里和所有地方,我使用了 Plotly Express 来表示地图):
在地图中,只有一种语言与每个国家相关联,但是我们对那些没有语言的国家感兴趣。
我们可以看到,除了巴尔干地区、东南亚和几个其他国家,世界大部分地区都被覆盖了。因此,我们想调查一下那些被遗漏的国家,也许还想调查一下那些已经被调查过的国家所使用的第二种(或地区性)语言。
国际足联 20 名球员数据集
FIFA 20 球员数据集可以从这个 Kaggle 库中获得。如描述所述,数据集由 103 列和 18278 个条目组成,包含:
- 100 多个属性。
- 擦伤玩家的网址。
- 球员位置,在俱乐部和国家队中的角色。
- 球员属性,包括进攻、技术、防守、心态、GK 技能等。
- 球员个人资料,如国籍、俱乐部、出生日期、工资、薪水等。
可以从此数据集执行多种分析。然而,出于本分析的目的,我们可能只需要一名球员的国籍和俱乐部。让我们也保留简称以供识别,以及整体和国际声誉分数,因为它们肯定能提供一些见解。数据框的头部看起来像:
现在,这个分析中的一个关键思想是一个球员越受欢迎,他对于一个国家就越有代表性。换句话说,一个拥有更多优秀球员的国家会影响游戏的可玩性。以克罗地亚为例,在上一届世界杯上,他们以一队公认的球员名列第二;这一事实会影响整个国家游戏的可玩性,也许克罗地亚语是我们正在寻找的一种语言。
一个拥有更多优秀球员的国家会影响游戏的可玩性
我们有国际声誉领域来衡量这种影响。然而,首先我们需要向数据中添加一个语言字段。为此,我们使用国家/语言数据框架将语言与玩家的国籍联系起来。
然后,我们可以查看 countplot ,看看每种语言有多少玩家。请记住,我们对拥有更多国际声誉(IR)的玩家的语言感兴趣。以下是 IR 提供的全套语言:
顶级语言
请注意,IR 是一个可以取 1 到 5 的离散值的属性。现在,问题是大部分这些语言已经包含在游戏中了。仅保留未包含的语言:
国际足联尚未纳入的顶级语言
请记住,我们把一个国家的所有语言与这个国家联系起来。因此,考虑到一个国家使用多种语言,一些价值观是重复的。
为了过滤掉一些语言,我们注意到以下关于顶级国家的事实:
- 首先,我们假设所有的西班牙球员都会说巴斯克语、加泰罗尼亚语和加利西亚语,这显然不是真的(很多国家都是如此)。事实上,西班牙 19%的人说加泰罗尼亚语(或巴伦西亚语),5%的人说加利西亚语,2%的人说巴斯克语。[ 参考。 ]
- 法国南部、摩纳哥、意大利的奥克西坦山谷以及西班牙的瓦勒达兰地区使用奥克西坦语,共有 10 万到 80 万人使用这种语言。参考文献。 ]
- 瓜拉尼语是南美洲的一种土著语言。它是巴拉圭的官方语言之一,大多数人口都讲这种语言。邻国的社区也说这种语言,包括阿根廷东北部、玻利维亚东南部和巴西西南部的部分地区,它是阿根廷科连特斯省的第二官方语言。尽管它有 485 万(引用于 1995 年)的母语使用者。【参。 ]
- 挪威语是挪威语的两种书面标准之一。【参。 ]
- 尽管英语在爱尔兰的其他地方是更普遍的第一语言,但爱尔兰语在很多地区被作为第一语言使用。爱尔兰语在爱尔兰共和国的官方地位仍然很高,2016 年 4 月,回答会说爱尔兰语的总人数为 1,761,420 人,占爱尔兰共和国 4,921,500 人口(2019 年估计数)的 39.8%。在北爱尔兰,1,882,000 人口中有 104,943 人被认定会说爱尔兰语(2018 年估计)。【参考。 ]
考虑到这些事实,我们将采取以下考虑因素:
- 对于说加泰罗尼亚语的人,我们只会让西班牙球员继续在巴塞罗那踢球,主要是因为他们的政策是教他们的球员加泰罗尼亚语。参考文献。 ]
- 对于说瓜拉尼语的球员,我们将只保留巴拉圭球员,因为这种语言在其他国家的大多数人口中都是一样的。
- 我们保留所有说爱尔兰语的人。
- 我们放弃巴斯克语、加利西亚语、奥克西坦语和尼诺斯克语。
- 并保留其他使用人数较少的语言。
这给我们留下了一批拥有不同国籍和语言的球员,我们现在想按照国际声誉对他们进行分类。
国际声誉
我们现在想对玩家的语言进行分析。
国际声誉,也称为国际认可,是根据球员所在俱乐部在当地和国际上的声望来影响球员评级的属性。它本质上是基于两者的受欢迎程度、历史和结果。基本上,IR 的建立是为了调整球员的评分,相对于所有与他的技术、身体和精神能力无关的事情。它被人为地收敛,以至于在全球拥有最多粉丝的球员总是获得最高的收视率,但实际上并没有真正的效果。参考文献。 ]
通过对每种语言的 IR 进行平均,我们最终得出了游戏中尚未包含的语言之间的关系,这些语言是根据玩家的平均国际声誉排序的。看一看:
顶级玩家的语言按 IR 排序
这里我们做了几处改动。首先,为了避免偏见,我们放弃了少于 15 个玩家的语言。我们还对 IR 分数进行了标准化,现在范围在[0,1]之间。最后,我们为每种语言附加了最具代表性的国家和国家代码(这是为了绘图)。
因此,我们最终得出了一个视频游戏中尚未包含的语言的关系,这些语言是根据玩家的平均 IR 排序的。看了一下可以得出结论,加泰罗尼亚语、斯洛文尼亚语、克罗地亚语、波斯尼亚语和匈牙利语是最突出的语言。
让我们最终在地图上定位这些语言:
请注意巴尔干国家是最突出的语言本地化给玩家的 IR。
社交媒体分析
在第二部分中,我们进行了社交媒体分析,以了解人们对游戏的评价,特别是在 Twitter 上。
Twitter 允许使用 tweepy 来收集推文,tweepy 是一个用于访问 Twitter API 的 Python 库。我不打算给出如何收集推文的教程;然而,遵循文档是非常简单的。你也可以看看我的剧本,但是记住你需要用你自己的凭据。
每个 tweet 对象 以 JSON 格式出现,混合了“根级”属性和子对象(用 *{}*
符号表示)。Twitter 开发者页面给出了以下例子:
{
"created_at": "Wed Oct 10 20:19:24 +0000 2018",
"id": 1050118621198921728,
"id_str": "1050118621198921728",
"text": "To make room for more expression, we will now count all emojis as equal—including those with gender and skin t… https://t.co/MkGjXf9aXm",
"user": {},
"entities": {}
}
当然,这只是组成每条推文的庞大字典中的一小部分。
很明显,出于我们的目的,我们只需要这些属性中的几个:文本、文本语言和 tweet 位置。不幸的是,这些属性并没有一个清晰的格式,相反,它们分布在 JSON 的各个层次上——例如,tweet 位置坐标位于
tweet_object['place']['bounding_box']['coordinates']
正是由于这一事实,收集的推文需要一个大的清洗和转换过程。事实上,我写了一个单独的故事来解释字典变平的过程;选择、清洗、翻译和计算文本的情感;清理文本语言字段;并使用位置字段或用户位置字段分配 tweet 的适当位置。你可以在这里找到这个故事:
使用 python 库清理和润色用于社交媒体分析的推文数据帧。
towardsdatascience.com](/twitter-json-data-processing-3f353a5deac4)
一旦我们有了处理过的 tweets 数据框架,我们就准备继续我们的研究。请注意,Twitter 不允许公开 tweet 数据,因此我不会发布任何数据帧的示例,而只是一行快照来显示字段(我们将在全文中解释):
我在几天的时间里收集了 52830 条类似图片中的推文,包含以下关键词: ‘#FIFA20’ ,’ #FIFA21’ , ‘FIFA20’ , ‘FIFA21’ , ‘FIFA 20’ , ‘FIFA 21’ 和**'如前所述,所有这些推文都根据我们的需求进行了相应的处理。因此,最终数据集带有关于推文位置(国家和坐标)、文本英文版本的情感(在[-1,1]范围内变化)以及文本被推文使用的语言的相关数据,但是请记住,这种语言是“检测到的”,因此可能会被错误地分配,正如我们将看到的那样。**
在下文中,我们将遵循四条路径:
- 我们将研究带有准确位置(带坐标)的推文,因为它们是关于其位置的最可靠的推文。
- 然后,我们通过推特上写的语言来研究推特。
- 然后,通过手动设置用户位置。
- 最后,我们根据国际声誉(在上一节中获得)回到最著名的语言,并研究来自使用这些语言的国家的推文的情绪。
带坐标的推文(确切位置)
不幸的是,世界上只有大约 1%的推文带有精确的地理位置,主要是因为用户必须启用这个选项。
在我们的 52830 条推文中,只有 485 条推文提供了坐标级别的位置。
通过过滤这些推文,我们可以按语言对它们进行分组,并计算它们的平均情绪。这是我们的发现:
推文的语言(有确切的位置)按平均情绪排序
查看数据框架,我们可以清楚地看到,除了他加禄语/菲律宾语、印尼语和捷克语之外的所有语言都已经包含在游戏中。然而,这些数字和情绪并不能真正说明问题。因此,我们可以得出结论,这个 tweet 样本没有提供足够的洞察力,因此我们需要研究其他 tweet 属性。
按推特语言分类的推特
让我们转到语言领域。这个字段取自 Twitter JSON 中的lang
属性,并将其更改为语言标准名称。如文档中所述:
如果存在,则指示与机器检测到的 Tweet 文本语言相对应的 BCP 47 语言标识符,如果没有检测到语言,则指示
und
。
因此,我们按这一列对数据集进行分组,并按语言计算平均情绪。此外,为了分析这些语言的本地化,我们根据这些语言在哪里被最频繁地使用来给它们分配一个国家。以下是我们的发现:
Tweets 检测到的语言和位置按平均情绪排序
我们来看一些异常情况:海地语多在加纳使用;立陶宛语、爱沙尼亚语和他加禄语/菲律宾语,在巴西;还有斯洛文尼亚人在津巴布韦**!这实际上只意味着语言检测器不能正常工作。**
这些异常很难是异常值,因此我们可以得出结论,Twitter lang
属性对于我们的分析来说不够可靠,因此我们需要相信手动设置的用户位置字段。
按用户位置分类的推文
如前所述,Twitter JSON 中的用户位置字段是用户用原始文本填充的字段。这意味着该字段可能会也可能不会给出实际位置,如果是这样,它可能是一个城市、州或省,而不是一个国家。
为了解决这个问题,在清理这个字段的过程中,我们使用 GeoPy 来识别一个位置(可能是一个地址)并为其分配一个国家。因此,在数据集中,location
字段提供 GeoPy 的“检测到的”国家。然而,非空值的样本大约是整个数据集的一半,这意味着要么用户没有提供位置,要么提供的文本不包含实际位置。
我们根据位置对集合进行分组,并再次计算平均情绪。由于我们实际上对语言感兴趣,我们添加了这些国家的语言,然后我们按照上一节的步骤删除游戏中已经包含的国家和其他国家(巴斯克,加利西亚,欧西坦等)。).为了避免偏见,我们还删除了少于 20 条推文的条目(count
)。以下是我们的发现:
按平均情绪排序的推文语言和用户位置
这个数据集显然比以前的案例提供了更多的信息!
在顶级语言中,我们可以突出保加利亚**、希伯来、印地语和爱尔兰语。新西兰的毛利人和玻利维亚的艾马拉人可能不太有趣,因为他们是土著居民。还要注意,除了希腊和捷克共和国,所有国家都有积极的平均情绪。**
让我们最终在地图上定位这些语言:
我们获得了人们对这款游戏持积极态度的顶级国家。然而,这些国家使用的语言与分析球员国际声誉时使用的语言不同。鉴于这一事实,让我们看看这些语言在最后一节中是如何在 tweets 集合中得分的。
国际声誉对顶级语言的感悟
在上一节中,我们通过玩家的国际声誉获得了顶级语言。为了完成分析,我们想知道这些语言的情感,并看看是否有一种语言在其他语言中既有 IR 又有情感。
然后,我们将“按 IR 排序的顶级玩家语言”数据集与“按平均情绪排序的推文语言和用户位置”数据集合并,以获得:
IR 和情感排名靠前的语言,按情感排序
上面的数据框架是按情感分类的,第一列代表了各种语言在国际上的声誉。这允许对两种情况进行简单快速的比较。
也许最好的例子是希伯来语的,它以高于平均水平的情感分数排名第二,IR 排名第十。然后乌克兰**。另一方面,加泰罗尼亚此前拥有迄今为止最好的 IR,但它在人气方面表现不佳,尽管我们要记住这个分数涉及整个西班牙,而不仅仅是加泰罗尼亚。**
让我们最后来看看地图上的这些语言:
结论
在这个项目中,我们旨在对 FIFA 视频游戏的语言本地化提出见解。
我们首先展示了国际足联游戏中使用一种或多种语言的国家。我们注意到巴尔干国家和东南亚没有被当前可用的语言覆盖。
然后在第一部分,我们本地化了游戏中没有的语言,并通过使用该语言的玩家的国际声誉(IR)来突出显示它们。这说明像加泰罗尼亚语**、斯洛文尼亚语、克罗地亚语、波斯尼亚语或匈牙利语这样的语言是由知名玩家使用的,这可能会影响游戏在这些国家/地区的可玩性。**
关于社交媒体分析,世界上只有一小部分推文(几乎 1%)包含准确的地理位置。在我们的数据集中,他们总结了近 500 条推文。我们表明这个子集不够大,不足以得出结论。
然后,我们通过手动设置的用户位置处理推文,找到归属国家并关联该国家的主要语言。然后,我们在地图上定位这些语言,并根据情绪给它们着色。我们发现保加利亚语**、希伯来语、印地语和爱尔兰语是这些国家的语言——不包括在游戏中——在这些国家,人们说话更积极。**
最后,我们发现通过 IR 进行本地化的一些语言很突出,而通过情感进行本地化的另一些语言则很突出。在最后一部分,我们的目标是选择一种或多种同时具备这两种属性的语言。有趣的是,希伯来语以高于平均水平的情感分数排名第二,IR 排名第十,因此是最突出的目标语言。
接下来的步骤将涉及使用非公开的,或 EA 的官方数据,以做出更专业的决定。
关于作者
我最近获得了物理学博士学位,目前正在进入数据科学领域。非常感谢您对本项目的任何意见和/或建议。另外,看看我的其他故事:
** [## 您的实时新冠肺炎跟踪与气流和 GitHub 网页
加载数据,用散景制作出色的可视化效果,将它们放在 GitHub Pages 网站上,让气流自动流动…
towardsdatascience.com](/your-live-covid-19-tracker-with-airflow-and-github-pages-658c3e048304) [## Twitter JSON 数据处理
使用 python 库清理和润色用于社交媒体分析的推文数据帧。
towardsdatascience.com](/twitter-json-data-processing-3f353a5deac4)
最后,请随时在 LinkedIn 与我联系:
[## Héctor Ramírez -西班牙巴伦西亚地区|职业简介| LinkedIn
我最近获得了物理学博士学位,专攻实验数据分析和数学建模。我领导了…
www.linkedin.com](https://www.linkedin.com/in/harr/)**
语言模型,如声学数据的预训练
基于自监督表示学习的声学数据模型— wav2vec [1],Mockingjay [4],Audio ALBERT [5],vq-wav2vec [3],CPC[6]
密切关注自然语言处理(NLP)研究的人会知道,最近引入的语言模型,如伯特[7],GPT,正在从根本上改变 NLP 领域。在自然语言处理中,无监督的语言模型预训练改善了许多任务,如文本分类、语义文本相似性、机器翻译。你有没有想过,除了自由文本,这些无监督的语言模型预训练如何帮助序列时间序列数据?
最近,我得到了一个处理声学数据的机会,我们必须根据记录的声音数据来识别机器的运行组件,比如电机或压缩机。由于没有用于尝试监督学习的标记数据,我不得不寻找替代方法。令我惊讶的是,我遇到了很多使用无监督语言模型(如预训练)即兴完成语音识别任务的研究工作。
如果你想对声学时间序列数据使用无监督语言模型预训练的能力,那么这篇文章就是为你准备的。
语言模型预训练
迁移学习现在相当流行,一个为一个任务训练的模型被重新用于另一个目标任务。在计算机视觉(CV)中,迁移学习广泛存在;例如,为了获得可靠的性能,通常会针对目标任务微调在 ImageNet 数据集上预先训练的模型。但这里的问题是,很难找到像 ImageNet 这样的 NLP 或声学时间序列数据的大规模标记数据集。
为了利用维基百科这样的在线免费文本数据,人们开始使用语言模型预训练。在传统的语言模型设置中,我们的目标通常是使用前面的上下文单词来预测序列中的 nᵗʰ单词。
伯特蒙面 LM 的描绘—作者照片
在当今时代,一个著名的语言模型预训练任务是伯特的蒙面 LM (MLM) [7]。在 MLM,目标是恢复句子中的屏蔽词。上面提到的图描述了 MLM,其中 BERT 试图根据上下文预测屏蔽的输入单词。从根本上说,在语言建模中,我们试图计算单词序列的联合概率分布。
语言模型预训练允许我们获得有用的基于上下文的单词嵌入,然后我们可以在任何目标任务中使用它。词语嵌入是一种表征方式,它能让意义相似的词语有相似的表征。更正式地,语言模型预训练将属于无监督/自监督表示学习。
wav2vec
像预训练这样的语言模型开始在声学任务中显示出一些有希望的结果,如语音识别、音频分割或通过利用未标记的音频数据进行异常检测。wav2vec [1],Audio ALBERT [5],wav2vec 2.0 [2],Mockingjay [4],vq-wav2vec [3]是其中值得注意的一些。未标记的音频数据比标记的数据更容易访问。
在本文中,我们将简要地研究脸书的 wav2vec 模型。wav2vec 模型的预训练任务是从给定的信号上下文中预测未来的样本[1]。这项任务的目的基本上是训练模型,这些模型理解波形并生成有意义的声音嵌入。理想情况下,听起来相似的音频片段在这些模型生成的嵌入中具有相似的表示。
音频数据“X”的 wav2vec 预训练图[1]
wav2vec 架构由两个多层卷积神经网络叠加而成,如上图所示。编码器网络将原始音频输入*‘X’映射到表示‘Z’,其中每个向量覆盖大约 30 毫秒的音频。上下文网络使用那些‘Z’向量来生成其表示‘C’*,其覆盖了高达一秒的更大跨度【1】。有关 wav2vec 的更多信息,请访问此链接。
继 wav2vec 之后,脸书最近发布了 vq-wav2vec [3]和 wav2vec 2.0 [2]。wav2vec 2.0 模型的预训练任务与伯特的 MLM 非常相似[2]。
培训定制 wav2vec 模型
要基于您的未标记音频数据集训练您自己的定制 wav2vec 模型,我想推荐脸书 AI Research 的序列建模工具包,名为**fair seq。Fairseq 提供 CLI 工具来快速训练您自己的 wav2vec 系列模型。Fairseq 有 wav2vec,vq-wav2vec,wav2vec 2.0 的示例实现。有关 wav2vec 系列型号的 fairseq 的更多信息,请访问此链接。**
对于其他模型架构,如 Mockingjay、Audio ALBERT 等。,我想提一下即将推出的名为自我监督语音预训练和表征学习工具包( S3PRL 语音工具包 )的库。如果你打算研究除了 wav2vec 系列之外的上述任何型号,一定要看看它们。
2021 年 7 月 18 日更新:wav2vec 车型现提供 抱脸🤗变形金刚
是时候让有标签的数据集休息一下,开始利用无标签的数据集了。在许多情况下,未标记的数据相对容易收集。
无监督/自我监督表示学习开始在 NLP 之外的任务中表现良好。正如本文所讨论的,它已经为声学数据显示了一些有希望的结果。甚至 CV 也开始使用像预训练一样的无监督语言模型,例如图像 GPT 。
参考
[1] Steffen Schneider,Alexei Baevski,Ronan Collobert 和 Michael Auli, wav2vec:语音识别的无监督预训练 (2019)
[2] Alexei Baevski,Henry Zhou,Abdelrahman Mohamed,和 Michael Auli, wav2vec 2.0:语音表征的自我监督学习框架 (2020)
[3] Alexei Baevski,Steffen Schneider 和 Michael Auli, vq-wav2vec:离散语音表示的自我监督学习 (2019)
[4] Andy T. Liu,,Po-Han Chi,Po-chun Hsu 和 hong-yi Lee, Mockingjay:使用深度双向变压器编码器的无监督语音表示学习 (2019)
[5]迟宝汉、钟沛鸿、宗吴晗、谢春城、李尚文和李洪义,音频阿尔伯特:一个用于音频表征自我监督学习的 Lite BERT(2020)
[6] Aaron van den Oord,Yazhe Li,和 Oriol Vinyals,使用对比预测编码的表征学习 (2018)
[7] Jacob Devlin,Ming-Wei Chang,Kenton Lee,和 Kristina Toutanova, BERT:用于语言理解的深度双向转换器的预训练 (2018)
语言建模— I
这是关于语言建模的第 5 部分系列的第 1 部分。
使用键盘中的语言模型预测下一个单词 (Mandar Deshpande)
介绍
现在你可能已经猜到了,语言建模是我们日常使用的一个用例,但它仍然是一个很难理解的概念。REALM(检索增强语言模型预训练)是该领域不断发展的研究的最新成果。这是一个很大的进步,这正是为什么它使这篇论文成为一篇具有挑战性的文章来阅读和评论。
这篇博客假设你对深度学习、词向量和嵌入空间有基本的了解,因为这些是掌握语言模型的先决条件。
训练(深度)计算机视觉模型的主要方法也逐渐到达了自然语言处理的领域。我们正在谈论迁移学习。
一旦我们理解了 NLP 中的模型预训练的情况,我们将会在一个舒适而混乱的地方去理解 REALM 做什么和如何做!
为了带领我们了解语言建模领域并掌握相关概念,我们将在这一系列博客中讨论以下内容:
- 迁移学习及其与模型预训练的相关性
- 开放领域问答(Open-QA)
- 语言理解双向转换器
- Roberta(稳健优化的 BERT 预训练方法)
- 谷歌 T5
- 领域:检索增强语言模型预训练
这篇文章将特别尝试解释以下几点:
- 迁移学习
- 语言模型预训练
迁移学习
当我们有一个庞大的图像数据集,我们想解决一个图像分类和/或定位任务,我们明确利用图像像素作为特征。训练深度神经网络来解决这些任务需要我们利用海量的计算能力和数据。通常,从事该领域工作的大型科技公司和研究实验室已经从头开始训练了许多这样的网络,并在网上发布了预训练的权重。我们如何利用这一点?
使用卷积神经网络的迁移学习 (Mandar Deshpande)
让我们考虑一个简单的卷积神经网络(如上所示),它有 4 个卷积层(conv + relu +最大池),后面是一个全连接(FC)层,该层以 softmax 或 sigmoid 之类的损失函数终止。我们正在 ImageNet 数据集上训练该模型,该数据集是属于大约 1000 个类的大约 100 万个图像的集合。
现在,深度神经网络的任务是逐步提取特征,并将这些特征组合起来,以学习更复杂的特征。上图中显示的每一层都执行以下任务:
- con v1-提取简单的边、曲线和直线
- Conv2 —使用这些学习到的特征来提取图像中的形状和几何线段
- con v3——学习检测网格图案、光滑布料或道路等纹理
- 学习更复杂的特征,如眼睛、耳朵、椅子、门和其他帮助我们理解物体可能是什么的基本线索
- FC 层——使用先前学习的特征找出组合,这些组合一起很好地给出待分类物体的连贯图像
- 损失函数—FC 层给出的这个组合被转换成一个分数,高分数/概率类作为预测返回
现在,如果我们仔细观察,模型在前几层中学习的特征对于任何图像都是非常通用的,并且可以被视为在一系列图像类别中是冗余的。帮助我们明确区分对象的唯一层是具有损失函数的全连接层。
一般来说,当我们谈论训练深度神经网络时,我们的意思是我们将冻结大多数卷积层的权重(用粉色标记),我们只是用损失函数(用绿色标记)修改完全连接层的权重。本质上,我们可以在冻结层之后改变整个网络,使其适合类似的基于图像的学习任务。通过对新的用例特定数据的训练,仅修改允许改变的权重部分。这种对预训练模型的权重的更新被称为微调。
例如,我们有一个用于图像分类的预训练模型,该模型具有特定的损失函数,我们希望解决图像分割的任务。因此,我们冻结 conv 层并修改 FC 层以优化与分割相关的损失函数,使得我们的模型学习预测边界框(位置)以及对象类别预测。
使用在学习任务的特定领域训练的模型,并重新利用学习到的权重来解决另一个类似的学习任务,这被称为迁移学习。
由于使用迁移学习训练的模型不需要从头开始学习,它可以很容易地被训练到相同或更高的性能指标(例如准确性),而不需要太多的计算成本和时间。
语言模型预训练
当我们处理大量的文本数据时,了解单词序列彼此跟随的概率以及理解这种相关性需要哪些特定的特征是有帮助的。
语言建模是理解单词序列的概率分布的任务。这有助于我们创建能够根据句子和短语出现的上下文来区分它们的特征。
与单词嵌入的比较 每当我们想要在我们的模型中使用单词或文本数据作为特征时,我们通常将它们转换成稀疏向量,如一键编码,或者称为嵌入的密集向量。尽管预先训练的嵌入也已经在早期广泛地用于 NLP 任务,语言模型预先训练的新颖性在于它们是为特定的下游任务微调的,而不像嵌入那样广泛地用于文本。像 word2vec 和 GloVe 这样的嵌入是单词或句子的向量表示,它捕捉每个单词的上下文和语义特征。预先训练的语言模型进一步将这些嵌入提取为特定于任务的表示,从而通过在特定于任务的数据集上进行训练来实现特定的目标。
预培训语言模型使用管道 (Mandar Deshpande)
实际上,我们将大量未标记/未标注文本的语料库(维基百科、Quora)输入语言模型,并期望它学习不同上下文和主题之间内在的单词和句子级别的关系。一旦模型被训练,这实质上意味着模型已经学习了语言的结构,即语言已经在一些潜在向量/嵌入空间中被建模。一旦我们有了预先训练的语言模型,我们就可以利用它来完成任何下游任务,例如文本分类、文本生成和情感分类。
长期以来,预训练语言模型的使用一直是自然语言处理中最令人兴奋的消息,许多即将到来的研究都建立在这个概念上。这个领域可以通过以下预训练语言模型的开创性工作来突出:
我们将回顾其中的一些,并在的后续帖子中继续讨论专门针对 REALM 的语言建模。
链接到第一部分:语言建模 I 链接到第二部分:语言建模 II: ELMo 和 ULMFiT
链接到第三部分:变压器:快速浏览
继续学习和成长,直到那时!
在推特上与我联系:https://twitter.com/mandroid_6
以上所有图片都是我在我的 iPad 上创作的,我有权使用它们
语言建模 II: ULMFiT 和 ELMo
这是语言建模 5 部分系列的第 2 部分。
搜索引擎中常用的语言模型
介绍
在之前的帖子中,我们了解了语言建模的概念,以及它与 word2vec 和 GloVe 等常规预训练嵌入的不同之处。
在我们迈向 REALM(检索增强语言模型预训练)的旅程中,我们将简要浏览这些关于语言模型的开创性著作:
ELMo:来自语言模型的嵌入(2018)
像 word2vec 和 GloVe 这样的预训练单词嵌入是许多神经语言理解模型中的关键元素。如果我们坚持在语言建模任务中使用手套嵌入,那么无论单词“major”是否出现在任何上下文中,它都将具有相同的表示。语境对人类理解一个单词的意思起着重要作用。
例如,“少校:高级军官”和“少校:重要的、严肃的或重要的”,根据 GloVe vectors,对于单词“少校”,具有相同的嵌入。
创造如此高质量的作品是一项艰巨的任务。具体来说,任何单词表示都应该模拟:
- **句法和语义:**用词的复杂特征
- 一词多义:一个词或短语在不同的语言环境中有多种可能的含义
ELMo 引入了一个深度上下文化的单词表示,它解决了我们上面定义的任务,同时仍然很容易集成到现有的模型中。这在一系列高要求的语言理解问题上取得了最先进的成果,如问答、NER、Coref 和 SNLI。
语境化的单词嵌入 既捕捉单词含义又捕捉语境中可用信息的表征被称为语境嵌入。与使用静态单词表示的 word2vec 或 GloVe 不同,ELMo 使用双向 LSTM 来完成特定任务,在对单词进行编码之前查看整个句子。
很像我们在上一篇文章中观察到的,ELMo 的 LSTM 是在一个巨大的文本数据集上训练的(与我们的下游任务使用相同的语言)。一旦这个预训练完成,我们就可以重用这些提取的单词嵌入作为另一种语言或 NLP 任务的构建块。
ELMo (Mandar Deshpande) 中使用的展开的前向语言模型
我们如何在这个庞大的数据集上训练模型? 我们简单地训练我们的模型来预测给定单词序列的下一个单词,即语言建模本身。此外,我们可以很容易地做到这一点,因为我们已经有了这个数据集,而不需要像其他监督学习任务中需要的显式标签。
ELMo 架构 由一个正向和一个反向语言模型组成,ELMo 的隐藏状态可以访问下一个单词和上一个世界。每个隐藏层都是一个双向 LSTM,因此它的语言模型可以从任一方向查看隐藏状态。您可以查看上图,了解这个 LSTM 如何访问其他隐藏状态。
ELMo 中第 k 个令牌特定嵌入的隐藏层连接和求和( Mandar Deshpande)
一旦前向和后向语言模型被训练,ELMo 将隐藏层权重连接在一起成为单个嵌入。此外,每个这样的权重串联乘以基于被解决的任务的权重。
正如您在上面看到的,ELMo 将这些串联的嵌入相加,并将其分配给正在从输入文本中处理的特定标记。ELMo 将令牌 t_k 表示为相应隐藏层的线性组合(包括其嵌入)。这意味着输入文本中的每个标记都有 ELMo 分配的个性化嵌入。
通过串联嵌入将 EMLo 集成到其他 NLP 任务中 (Mandar Deshpande)
一旦 ELMo 的 biLMs(双向语言模型)在一个巨大的文本语料库上被训练,它可以通过简单地连接到嵌入层而被集成到几乎所有的神经 NLP 任务中。
较高层似乎学习语义,而较低层可能捕捉句法特征。此外,ELMo 增强模型可以更有效地利用小数据集。
你可以在这里阅读更多关于 ELMo 的信息。
乌尔姆菲特(2018 年)
在 ULMFiT 之前,归纳迁移学习广泛用于计算机视觉,但 NLP 中的现有方法仍然需要针对特定任务的修改和从头开始的训练。ULMFiT 提出了一种有效的迁移学习方法,可以应用于任何 NLP 任务,并进一步展示了微调语言模型的关键技术。
代替模型参数的随机初始化,我们可以获得预训练的好处并加速学习过程。
常规的 LSTM 单元被用于 ULMFiT 的 3 层架构,从 AWD-LSTM 得到启示。
ULMFiT 的三个阶段包括:
- **通用领域 LM 预训练:**在通用领域语料库上训练语言模型,以捕获不同层面的语言的通用特征
- **目标任务区别微调:**使用区别微调和学习速率表(倾斜三角形学习速率)在目标任务数据集上对训练的语言模型进行微调,以学习特定于任务的特征
- **目标任务分类器微调:**使用逐步解冻并重复阶段 2,对目标任务上的分类器进行微调。这有助于网络保留低级表示并适应高级表示。
乌尔姆菲特的三个阶段(曼达尔·德什潘德)
正如我们在上面看到的,阶段 1 在所有层上使用相同的学习速率,而阶段 2 和 3 具有逐层的三角形学习速率表。此外,请注意层权重如何在三阶段过程中逐渐达到最佳值。(较深的颜色最适合于表示目的)
区别性微调(具有倾斜三角形学习率的阶段 2/3 的学习时间表)是本文的主要启示,因为它来自于模型中的不同层捕获不同类型的特征的直觉。因此,对他们中的每一个有不同的学习速度是有意义的。像计算机视觉一样,即使在语言建模任务中,初始层也捕捉关于语言的最一般的信息,因此一旦预先训练,就需要最低量的微调。
在该过程的阶段 2 之后,该模型已经非常接近指定任务所需的最佳权重,因此目标任务分类器微调据说非常敏感。如果微调过程在此阶段显著改变了权重,那么模型预训练的所有好处都将丢失。为了解决这个问题,本文提出了逐步解冻:
- 首先,解冻最后一个 LSTM 图层,并对模型进行一个时期的微调
- 接下来,上一层之前的层被解冻并微调
- 对每一层重复类似的过程,直到收敛
你可以在这里 看论文。
希望这篇博客有助于你对这个令人兴奋的预训练语言模型领域有一个基本的了解!
在下一篇博客中,我们将讨论用于学习可微调预训练模型的 Transformers 和 BERT。
链接到第一部分:语言建模 I 链接到第二部分:语言建模 II: ELMo 和 ULMFiT
链接到第三部分:变压器:快速浏览
继续学习和成长,直到那时!
在推特上和我联系:https://twitter.com/mandroid_6
以上所有图片均由我创作,我有权使用它们
用 Penn Treebank 语言建模
使用堆叠 LSTMs 进行上下文和单词预测——以及深度学习基础设施的比较。
递归神经网络 (RNNs)在历史上是解决顺序问题的理想选择。当数据集中的一个点依赖于其他点时,该数据被称为*序列。*一个常见的例子是时间序列,如股票价格或传感器数据,其中每个数据点代表某个时间点的观察结果。
RNN 比传统的前馈神经网络更适合于顺序建模,因为它能够通过保持状态或上下文来记住直到给定点所做的分析。这种状态,或者说“记忆”,随着每一个新的输入而重现。
长短期记忆——解决 rnn 中的间隙
需要 rnn 来跟踪状态,这在计算上是昂贵的。此外,还有训练的问题,如消失梯度和爆炸梯度。因此,RNN,或者准确地说,香草 RNN 不能很好地学习长序列。解决这些问题的一个流行方法是一种特殊类型的 RNN,它被称为长短期记忆 (LSTM)。
LSTM 在许多时间步长上保持很强的梯度。这意味着你可以用相对较长的序列来训练 LSTM。递归神经网络中的 LSTM 单元由四个主要元件组成:存储单元和三个逻辑门。
存储单元负责保存数据。
写入、读取和忽略门定义了 LSTM 内部的数据流。写门负责将数据写入存储单元。
读取门从存储单元读取数据,并将该数据发送回递归网络,以及
遗忘门,保持或删除信息单元中的数据,或者换句话说,决定要遗忘多少旧信息。
事实上,这些门是 LSTM 中的运算,它对网络输入、网络先前的隐藏状态和先前的输出的线性组合执行某种功能
传统 rnn 和 LSTMs 的比较见下图:
传统 RNN 单元和 LSTM 单元的比较,具有使 LSTM 计算成本更低且更鲁棒的门
自然语言处理(NLP) 是一个经典的序列建模任务:特别是如何编程计算机处理和分析大量自然语言数据。NLP 的最终目标是以一种有价值的方式阅读、破译、理解和理解人类语言。NLP 的常见应用是机器翻译、聊天机器人和个人语音助理,甚至是呼叫中心使用的交互式语音应答。
从历史上看,对于自然语言处理来说,足够大的数据集很难获得。这在一定程度上是因为需要对句子进行分解,并标记一定程度的正确性——否则,在此基础上训练的模型将缺乏有效性。这意味着我们需要大量的数据,由人类注释或者至少由人类修正。
宾夕法尼亚树库,简称为 PTB,是由宾夕法尼亚大学维护的数据集。它是巨大的——里面有超过四百八十万条注释文字,全部由人类更正。
数据集被分成不同种类的注释,如词类、句法和语义框架。对于这个例子,我们将简单地为我们的模型使用一个干净的、无注释的单词样本(除了一个标签— <unk>
,它用于罕见的单词,比如不常见的专有名词)。
数据集的示例
神经网络结构
- 在这个网络中,LSTM 细胞的数量是 2。为了使模型更具表现力,我们可以添加多层 LSTMs 来处理数据。第一层的输出将成为第二层的输入,以此类推。
- 200 个输入单元–> [200x200]权重–> 200 个隐藏单元(第一层)->[200 x200]权重矩阵–> 200 个隐藏单元(第二层)-> [200]权重矩阵–> 200 个输出单元
- 假设每个单词由嵌入向量表示,嵌入向量的维数 e=200。每个像元的输入层将有 200 个线性单位。这些 e=200 个线性单元连接到隐藏层中的 h=200 个 LSTM 单元中的每一个(假设只有一个隐藏层,尽管我们的例子有 2 层)。
- 输入形状是[批量大小,步数],即[30x20]。嵌入后会变成[30x20x200],然后是 20x[30x200]
隐藏层:
- 每个 LSTM 有 200 个隐藏单元,这相当于嵌入单词和输出的维数。
(改编自 PTB 培训模块和认知类. ai)
商品云对比 WML-CE
在这个托管服务的时代,有些人往往会忘记底层计算架构仍然很重要。例如,下面的截图显示了使用 A)公共云和 b)沃森机器学习-社区版(WML-CE)的同一模型的训练时间
使用商用云—培训时间 14848.5 秒(4.1 小时)
使用沃森机器学习-社区版:训练时间 317.7 秒(5.2 分钟)
沃森机器学习加速器
一个企业机器学习和深度学习平台,具有流行的开源包、最有效的扩展和 IBM Power Systems 独特架构的优势。看看下面的视频:
结论:
本文和相关代码的目的有两个:
a)演示用于语言和上下文敏感建模的堆叠 LSTMs 和
b)底层基础设施对深度学习模型训练效果的非正式演示。
感谢您的宝贵时间!
语言模型
语言模型是许多自然语言任务的基础。本文是对统计语言模型的直观介绍
定义
我在一次电话会议中,有人说“项目 A 的风险增加了 __”我听不到 of 后面的那个词,但我知道那个词是什么。我相信你也知道这个词。
我们有一个语言模型。我们的内部语言模型告诉我们,句子“项目 A 有延迟的高风险”的概率比句子“项目 A 有高风险的水”的概率高得多
这篇文章是关于统计学习语言模型(LM)——它们是什么,它们是如何被评估的,以及它们是如何被学习的。语言建模本身并没有直接的实际用途,但它是机器翻译和自动语音识别等现实应用中的一个重要组成部分。翻译系统可能会生成同一目标句子的多种翻译,语言模型会对所有句子进行评分,以选择最有可能的一个。
从形式上来说,语言建模的任务就是简单地给任何单词序列分配一个概率。或者,我们也可以把这个问题提出来作为猜词问题。填空: 狗 ____ 。下面的等式从数学上显示了这种等价性。
衡量绩效
您将如何衡量该模型的性能?最常见的内在指标是困惑。困惑衡量语言模型在预测一个看不见的单词序列中的下一个单词时有多困惑。Ravi Charan 的博客中有一个很好的关于困惑的中级概述。
但是,对于大多数实际目的来说,外在的措施更有用。LM 的外在度量是使用 LM 的底层任务的准确性。例如,使用给定语言模型的翻译任务的 BLEU 分数。
困惑是特定于语料库的度量。只有在相同的语料库上计算度量时,我们才能比较两个 LMs 的复杂度。困惑的改善并不能保证外在指标如 BLEU 评分的改善。
构建语言模型
语言模型从一个马尔可夫假设开始。这是一个简化的假设,即第 k+1 个字依赖于前 k 个字。二阶假设导致二元模型。使用现有语料库的最大似然估计(MLE)来训练模型。MLE 方法只是工作计数的一部分。
使用传统的 n 元语言模型有一些优点。
- 它们很容易在大型语料库上训练
- 他们在大多数任务中表现惊人的好!!
然而,它们也有一些缺点
- 零概率:如果我们有一个包含两个单词的三元语言模型,并且拥有 10000 个单词的词汇量。我们有 10 个三胞胎。如果我们的训练数据有 10 个⁰词,那么在训练数据中有许多三元组将永远不会被观察到,因此基本 MLE 将把零概率分配给那些事件。零概率意味着无限的困惑。为了克服这个问题,在平滑技术家族下开发了许多技术。在的这篇论文中对这些技术进行了很好的概述。
- 指数增长:第二个挑战是 n 元文法的数量以词汇量的 n 次方指数增长。一个 10,000 单词的词汇表将有 10 个三元组,一个 100,000 单词的词汇表将有 10 个⁵三元组。
- 一般化:MLE 技术的最后一个问题是缺乏一般化。如果模型在训练数据中看到术语“白马”,但没有看到“黑马”,MLE 将把零概率分配给“黑马”。(幸运的是,它也会将零概率分配给紫马)
神经语言模型
非线性神经网络模型解决了传统语言模型的一些缺点。例如,与传统模型相比,神经 LM 的参数数量增加缓慢。最早的这种模型之一是由 Bengio 等人在 2003 年提出的。在一篇名为一种神经概率语言模型的经典论文中,他们展示了使用 RNN 学习单词表示的基本结构。
引用这篇论文,他们提出了三个关键观点—
- 将词汇表中的每个单词与分布式单词特征向量(n 维实值向量)相关联
- 根据序列中这些单词的特征向量来表达单词序列的联合概率函数,以及
- 同时学习单词特征向量和概率函数的参数。
LMs 的副产品是单词表示
语言模型可以在原始文本上训练,比如来自维基百科的文本。为了训练 k 阶语言模型,我们从运行的文本中取出(k + 1)个字,并将第(k + 1)个字视为监督信号。因此,我们可以从任何语言的各种在线/数字化数据中生成大量的训练数据。
使用神经模型学习语言模型的一个特别重要的副产品是如下所示的单词矩阵。我们不仅更新训练参数,还更新单词矩阵。然后,字矩阵可以用于各种不同的监督任务。
结论
几乎所有的 NLP 任务都使用语言模型。语言模型用于语音识别、机器翻译、词性标注、语法分析、光学字符识别、手写识别和信息检索。
传统的语言模型在这些用例中表现得相当好。深度学习时代带来了新的语言模型,这些模型在几乎所有的任务中都优于传统模型。典型的深度学习模型是在大型数据语料库上训练的( GPT-3 是在从网络上搜集的一万亿单词的文本上训练的),具有很大的学习能力(GPT-3 有 1750 亿个参数),并使用新颖的训练算法(注意力网络,BERT)。
尽管学习 LMs 的机制已经发生了变化,但是 LMs 背后的基本直觉仍然是一样的。
语言模型与假新闻:宣传的民主化
用开放的 GPT- 3 模型深度伪造信息
介绍
“太危险了,不能释放。”
一个短语发布了 OpenAI 的新闻声明,以配合他们在 2019 年 2 月发布的 GPT-2 语言模型。随着上周发布更先进的 GPT-3,人工智能驱动的错误信息的可能性已经成为当今后事实信息景观中仍未解决的重大风险。
GPT-3 生成的诗歌(布朗等人。铝)
自 2016 年以来,“假新闻”一词在世界各地的政治领导层和普通民众中日益流行,作为一个不屑一顾的概念,用于不支持自己观点的报道。但是这个术语已经扩展到包括国家和非国家操作的错误信息运动。利用这种活动影响全球事件的努力已经大大加快,美国参议院两党委员会得出结论,俄罗斯在 2016 年美国总统选举期间的错误信息活动“通过俄罗斯控制的宣传渠道传播信息,以破坏公众对民主进程的信心”。罗伯特·穆勒也表达了类似的观点,他补充说,俄罗斯的干预是“全面和系统的”,并担心在即将到来的 2020 年总统选举中继续受到影响。研究人员现在认为,政治机器人和虚假信息在其他重大案件中发挥了作用,如英国退出欧盟公投和克里米亚危机。
这些具体的报告让人担心人工智能会被用作网络战的工具来支持错误信息活动。然而,研究表明大多数“人工智能支持的”解决方案只不过是机器人设计来重复特定标签下的特定短语和链接,以改变讨论的背景。这种方法更多地依赖于人类操作员理解在线话语心理的能力,而不是机器人本身的能力。最近,社交媒体平台上关于新冠肺炎危机的人工智能生成的内容的激增,导致要求改进审查的呼声日益高涨。然而,人工审查既慢又粗糙,而人工智能对大量数据进行建模以进行训练。脸书首席技术官迈克·斯科洛普夫总结了为新的不可预见的威胁构建解决方案的基本挑战:
“为一个能够理解前所未见内容的东西构建一个新颖的分类器需要时间和大量数据。”
目前还没有关于人工智能产生的错误信息的普遍性的系统研究,很可能迄今为止大多数错误信息都是由人类行为者创造的。但是随着人工智能生成的虚假账户的扩散,加上语言模型的可用性和能力的增加,预计人工智能生成的文本错误信息将在未来遇到。如今观察到的事后、意见主导的信息格局加剧了这一问题。
**但是为什么对这些模型忧心忡忡呢?是什么让他们变得危险?我们正在见证真理的死亡吗?**要回答这个问题,我们需要深入研究它们的原理和运作方式。出于时间和范围的考虑,在本文中,我们将把注意力集中在 OpenAI 的 GPT 系列语言模型上。
变形金刚:现代自然语言处理的基石
我们已经在以前的文章中介绍了语言模型背后的一般理论,如递归神经网络( RNNs )和长短期记忆(L STM )架构,因此鼓励读者参考这些来详细了解这些架构。
自然语言模型的 GPT 家族是基于转换器模型的,其特征是重复的编码器架构加上一个注意力机制。 Alammar 等人已经深入解释了变压器的一般架构。但是我们将在这里提供一个高层次的总结。
考虑变压器模型的一般结构,如下所示:
变压器型架构的抽象。铝)
编码器-解码器架构的工作原理是,通过编码器将输入数据缩减为潜在维度(表示单词的含义),由解码器组件以目标语言重建。正因为如此,它们在机器翻译方面一直表现强劲。然而,Transformer-models 通过将自关注层整合到每个编码器和解码器模块中来构建这种架构,每个组件拥有自己的一组权重参数。注意力层的工作是将输入单词在句子中的位置与其含义联系起来,以便改进其编码。特别是,与传统的纯 RNN 和 LSTM 架构相比,变压器模型更能够捕捉序列中的长程相关性。
我们可以用一个例子来最好地形象化注意力对编码过程的影响。考虑下面的句子:
“这只动物没有过马路,因为它太累了”
通过检查相应层的激活,我们可以用注意力来观察句子成分之间的关系。
句子编码分析(Alammar 等。铝)
你会注意到单词*“它”的编码表示拥有与概念“动物”和“疲倦”*的强注意力链接,在这些对之间创建了一种意义关联的形式。这种关联的好处对于机器翻译应用程序特别有用,在机器翻译应用程序中,不同语言的语法可能需要完全不同的句子结构,但是这种关联也可以扩展到条件文本生成和其他应用程序。
GPT 模式
OpenAI 的语义语言模型 GPT 家族基于谷歌大脑的工作,完全去除了编码器组件,由一堆带有注意力层的解码器块组成。
GPT-2 体系结构的抽象(Alammar 等人)
虽然该模型被训练为在给定输入文本序列的情况下预测序列中的下一个单词,但它们的高参数复杂性导致了通过元学习(或仅用新任务的几个示例进行再训练)获得的显著扩展的能力,包括:
- 长期相关性分析
- 生词记忆
- 算术计算
- 机器翻译
- 摘要
- 语境分析
最初的 GPT-1 模型由变压器模型和预训练的 ELMO 语言模型组成,具有数亿个可训练参数。GPT-2 扩展到超过 15 亿个参数,是它的 10 倍以上,并在 10 倍以上的数据量上进行训练(来自互联网和文学来源)。
最近的 GPT-3 建立了超过 1750 亿个参数,提高了其语义性能,特别是在一次性或零次训练应用中。实现这种应用程序的高性能对于接近语言模型的人类水平的响应和性能是必要的。相比之下,典型的人脑有超过 100 万亿个突触,大约比最大的 GPT-3 模型大三个数量级。鉴于 OpenAI 花了大约一年左右的时间将他们模型的参数容量增加了两个数量级,在给定时间和资源的情况下,达到这个数量似乎是可行的任务。
各种 GPT-2 参数配置的体系结构的抽象。(阿拉玛等人。铝)
GPT-2 和 GPT-3 也在不同的参数配置中进行了测试,以评估其性能并防止潜在的误用。GPT-3 配置的配置和基准性能如下所示:
当配置不同数量的训练参数时,GPT-3 模型在零炮、一炮和少炮应用中的性能精度。
我们可以通过比较 GPT 3 号卫星输出结果的差异来最好地展示其性能的提高。下面是 GPT-2 生成的文本样本,正如 Brown 等人在最初的 OpenAI 论文中所报告的。艾尔。
布朗等人报道的 GPT-2 文本输出。
虽然乍一看,这篇文章似乎语法正确,但仔细检查就会发现许多事实上的不一致。例如,考虑这个句子:
"这些银白色的四角独角兽此前并不为科学界所知。"
鉴于独角兽被定义为拥有一只角,这是事实上的不一致。自然,模型不会明确知道单词的定义,也无法从训练数据中推断出它。
下一节显示了类似的不一致之处。
虽然它们的起源仍不清楚,但有人认为这种生物可能是在人类文明之前,人类和独角兽相遇时创造出来的
鉴于文章的主题是独角兽本身,这句话没有意义。然而,由于句子在语法上是正确的,这些错误需要大量的注意力和意识才能被识别出来。
相比之下,让我们举两个报道的 at GPT-3 输出的例子——第一个具有更高的逼真度,更能够冒充为人类生成的(88%),而第二个则明显不那么逼真(39%)。
布朗等人报道的 GPT-3 文本输出。
与 GPT 新协议相比,GPT 新协议似乎抓住了词汇定义的微妙之处。然而,对这两个输出的分析表明,该模型仍然与扩展的对话片段作斗争。考虑摘录:
*“一年前,乔阿金·菲尼克斯出现在金球奖红毯上,他穿着燕尾服,头上套着一个纸袋,上面写着,“我是变形人”,这成为头条新闻。我不能改变世界。我只能改变自己。这是一个不改变以适应好莱坞模式的承诺:“我认为这是一件非常特别的事情,不改变自己。我觉得说“*真的很特别
事实上,文本的真实性可以通过简单地固定每行周围的标点符号,并将它们连接在一起而得到显著提高。但是,这需要学习,而不是定义。**平均而言,由最大的(1750 亿)和最小的(1.25 亿)GPT-3 模型产生的检测物品的平均人类准确度为 ca。在 200 篇文章中分别为 52%和 76%。
如前所述,GPT-3 在其他各种 NLP 任务中表现出色,进行了少量射击、一次射击或零射击训练。这些任务的选择如下所示,以供参考:
GPT-3 上下文分析示例。
GPT-3 机器翻译示例。
GPT-3 算术计算示例。
GPT-3 字解扰例子。
真正令人印象深刻的是该模型在这些新应用程序中显示的性能,因为它降低了商业应用程序(如聊天机器人或评论情感分析)的开发界限。
真理的死亡?
因此,考虑到性能改善的趋势,是否有可能将模型的规模和复杂性进一步提高几个数量级,并超越随机机会愚弄人类?
也许吧。虽然条件文本生成在模型复杂性方面表现出了显著的改善,但研究人员观察到,GPT-3 在分析句子之间的关系时表现不佳,并提出这里的问题与模型复杂性无关,而且方法本身可能是不正确的。他们的结论总结了这一点:
“对于自我监督的目标,任务规范依赖于将期望的任务强制转化为预测问题。然而最终,有用的语言系统(例如虚拟助手)可能更好地被认为是采取目标导向的行动,而不仅仅是做出预测。”
提到目标导向的行动是特别有趣的,因为它表明强化学习方法将是一个更理想的解决方案。OpenAI 此前曾探索过利用人类偏好来微调 GPT-2 模型,但这种方法对于现实世界的应用来说过于粗糙和劳动密集型。一个真正的强化学习模型需要为它的应用仔细定义一个奖励函数,也许通过使用前馈鉴别器模型,正如在分子设计的[领域](http://OpenAI’s GPT family of models)中所做的那样。
那么,我们注定会有一个错误信息的未来吗?也许不是。训练这些模型是极其耗费资源的,使用单个英伟达 RTX-8000 GPU 单元训练最大的 GPT-3 模型需要相当于 665 年的时间。此外,HarvardNLP、 AllenAI 和 IBM Watson 等组织的研究人员已经利用 GPT-2 等生成语言模型的可用性来构建能够检测假冒输出的鉴别器。随着 GPT-3 和其他更复杂模型的发布,鉴别器必须类似地进化,引发了对军备竞赛的恐惧,类似于对 deepfakes 的观察。此外,由于鉴别器模型的训练将需要发生器的输出,总会有一个窗口,在该窗口期间检测解决方案将是不充分的。
但是“假新闻”的真正风险不在于语言模型的能力,而在于我们在信息素养和批判性思维方面的退化技能。无论是由于社交媒体还是其他原因,两极分化已经成为话语的一个重要组成部分,导致了从极端主义观点的在线回音室到最高层治理缺乏两党合作的症状。
随着时间的推移,美国民主党和共和党的意识形态观点发生了转变。(皮尤研究中心)
除非我们能够有意识地减少两极分化,并采取一种以事实信息和尊重话语为导向的文化,否则我们将继续容易受到错误信息的影响,无论这些错误信息是由人工智能还是人类行为者产生的。
这就结束了我们对开放 GPT 模型理论进展的回顾。在我们即将发表的文章中,我们将讨论如何实现 GPT 模式来制造一些“假新闻”和诗歌。
我们希望你喜欢这篇文章,并希望你查看 GradientCrescent 上的许多其他文章,涵盖人工智能的应用和理论方面。为了保持对 GradientCrescent 的最新更新,请考虑关注该出版物并关注我们的 Github 资源库。
参考文献
[## OpenAI 巨大的 GPT-3 暗示了 AI | ZDNet 语言模型的局限性
加州研究机构 OpenAI 带着另一个巨大的深度学习模型 GPT-3 回来了。虽然它表明…
www.zdnet.com](https://www.zdnet.com/article/openais-gigantic-gpt-3-hints-at-the-limits-of-language-models-for-ai/) [## 根据人类偏好微调 GPT-2
我们已经对 774M 参数 GPT-2 语言模型进行了微调,在各种任务中使用了人类反馈,成功地匹配了…
openai.com](https://openai.com/blog/fine-tuning-gpt-2/) [## 更好的语言模型及其含义
我们已经训练了一个大规模的无监督语言模型,它可以生成连贯的文本段落,实现…
openai.com](https://openai.com/blog/better-language-models/) [## 用无监督学习提高语言理解
我们通过一个可扩展的、与任务无关的系统,在一系列不同的语言任务上获得了最先进的结果…
openai.com](https://openai.com/blog/language-unsupervised/) [## 语言模型是一次性学习者
最近的工作已经证明了在许多自然语言处理任务和基准上的巨大收益。
arxiv.org](https://arxiv.org/abs/2005.14165) [## 图解 GPT-2(可视化变压器语言模型)
讨论:黑客新闻(64 分,3 条评论),Reddit r/MachineLearning (219 分,18 条评论)翻译…
jalammar.github.io](http://jalammar.github.io/illustrated-gpt2/) [## 图示的变压器
讨论:黑客新闻(65 分,4 条评论),Reddit r/MachineLearning (29 分,3 条评论)翻译…
jalammar.github.io](http://jalammar.github.io/illustrated-transformer/) [## 揭秘 GPT-3——深度学习语言模型的最新成果
上周四,OpenAI 对语言建模的最新更新 GPT-3 出现在 arxiv 上。鉴于其影响力之大…
lambdalabs.com](https://lambdalabs.com/blog/demystifying-gpt-3/)
深度强化学习、符号学习和 AGI 之路
苹果 | 谷歌 | SPOTIFY | 其他
Tim rocktschel 在 TDS 播客
编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分,由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:
强化学习可以做一些令人印象深刻的事情。它可以优化广告定位,帮助运行自动驾驶汽车,甚至赢得星际争霸游戏。但是当前的 RL 系统仍然是高度特定于任务的。特斯拉的自动驾驶汽车算法无法在星际争霸中获胜,DeepMind 的 AlphaZero 算法可以与围棋大师对抗,但无法优化你公司的广告支出。
那么,我们如何从利用强化学习来解决特定问题的狭义人工智能系统,向能够在世界中自我定位的更通用的系统飞跃呢?蒂姆·洛克特尔出场了,他是伦敦脸书人工智能研究所的科学家,也是伦敦大学学院计算机科学系的讲师。Tim 的大部分工作都集中在如何让 RL 代理使用相对较少的数据进行学习,使用被称为样本有效学习的策略,希望提高他们解决更一般问题的能力。蒂姆加入了我这一集的播客。
以下是我在对话中最喜欢的一些观点:
- 强化学习在由相对简单的规则结构管理的环境中工作得很好,如视频游戏、国际象棋、围棋和受约束的模拟。但是他们还不能在混乱、开放的现实世界中运作。这在很大程度上是因为他们一开始是“白板”模型,必须为他们承担的每项任务从头开始接受培训。
- 语言模型是解决这个问题的一种方法:为了有效地生成文本,算法需要开发一个相当全面的世界模型。然后,该模型可以被 RL 代理重新利用,以开发对各种对象和概念如何相互关联的基本理解,从而不必从头开始学习这些关系。举个例子:当前的 RL 系统无法承担像《我的世界》这样的游戏,在那里你会得到一些物体,它们的外观或名称会提示你它们的用途(例如,你在游戏中拿起一个火炬,并隐含地理解它可以用来烧毁东西)。语言模型可以帮助引导代理理解“火炬”和“燃烧的东西”之间的关系,这样代理就可以更清楚地知道它的所有潜在行为,而不必在学习如何在环境中移动和定位自己的同时学习火炬。
- 蒂姆还研究了基于神经网络的符号学习方法。符号学习使用符号来表示某些对象和概念,并允许开发人员显式地定义它们之间的关系。在某些方面,这是好的:因为符号系统明确地而不是隐含地学习想法或指令,它们不太可能被巧妙设计的对抗性攻击所愚弄而做错事情。不幸的是,它们还需要开发人员手动为它们提供推理结构,这使得这些系统在解决更需要隐式学习的一般问题时不切实际。蒂姆的方法包括训练神经网络学习符号逻辑——这是一种理想地结合了符号逻辑的严谨性和深度学习的灵活性的策略。原则上,这可以让神经网络理解像“父亲的任何父亲都是祖父”这样的概念,同时也正确地识别像“祖父”、“祖父”、“祖父”等这样的词,作为“祖父”的象征性等价物。
- 符号学习可能会对人工智能安全产生影响,因为符号可以用来捕捉更强大的规则和关系,我们不希望机器误解这些规则和关系(例如,“不要杀人”),而不会牺牲它们的实际效用。
本集引用的链接:
如果你有兴趣在蒂姆在播客中提到的 NetHack 环境中培训自己的强化学习代理,看看这个 GitHub repo !
章节:
- 0:00 介绍
- 0:43 什么是可解释的机器学习?
- 强化学习和自然语言处理之间的关系
- 9:11 适合强化学习的游戏
- 13:36 探索和适应新环境
- 18:32 问答系统—维基百科
- 20:21 应用于深度学习系统
- 25:34 人工智能校准
- 31:19 语言作为知识图谱
- 33:07 当前人工智能研究的目标
- 35:6 大局
- 41:45 哲学上为 GPT-4 做好准备
- 44:57 与技术相关的生存风险
- 45:34 下一步
- 50:05 符号推理
- 51:38 人工智能内部的模糊界限
- 53:13 总结
下面是第二季第二集的脚本:
Jeremie (00:00):
大家好,我是 Jeremie,我是“走向科学状态”播客的主持人,也是最敏锐思维数据科学导师项目团队的一员。今天,我们继续我们关于数据科学和机器学习中新出现的问题的系列,欢迎 Tim Rochdechel 来到播客。蒂姆是脸书人工智能研究所的研究科学家,他在那里从事许多与高级人工智能系统相关的项目,包括样本高效机器学习,该项目专注于减少训练机器学习模型所需的数据量,以及符号人工智能等事物。
Jeremie (00:31):
现在,Tim 对机器学习的当前状态有了深入的了解,我们将讨论这一点,以及人工通用智能研究的潜在未来方向。我希望你喜欢这次谈话。
耶雷米(00:43):
好的,我和蒂姆·罗彻尔在一起。所以他是脸书人工智能研究所的研究助理,抱歉,是研究科学家,也是伦敦大学学院人工智能中心的讲师。他会告诉你所有这些东西,但他的工作真的很有趣,专注于他所谓的样本高效和可解释的机器学习。我肯定我们会深入了解这意味着什么。我们将对此进行全面的讨论,以及该领域的一些最新发展,强化学习,开放 Eye 的 GPT-3 模型,我相信会有一些出现。我们有很多内容要讲,但首先,我想问你,Tim,你能用自己的话介绍一下你正在研究的领域吗?你每天处理的一些有趣的问题。
蒂姆(01:43):
当然可以。首先,非常感谢邀请。非常非常高兴来到这里。所以,我想我过去一直在强化学习和自然语言处理的交叉领域工作,现在也是。所以在强化学习中,我想我会想象很多听众对基本的设置很熟悉,你有一个环境,你有一个代理。你的代理人不是与环境一起行动,而是从环境中获得[听不清 00:02:16]并旨在随着时间的推移最大化预期的未来回报,一些未来的回报。
蒂姆(02:23):
这是一种非常通用的方法,对吗?一些非常通用的东西,你可以潜在地应用于许多不同的情况,然后与此同时,我想强化学习在适用于现实生活问题方面的进展相对有限[听不清 00:02:42]我们可以稍后再谈。
Tim (02:44):
同时,正如我提到的,我偶尔会研究自然语言处理问题,所以问题是,我们如何才能开发出能够处理并在某种程度上利用自然语言文本的机器?例如,自然语言处理中的一个常见问题是问答。我能开发出模型,给它一个问题,给你一个自由形式的答案吗?
耶雷米(03:12):
嗯嗯(肯定的)。
蒂姆(03:12):
或者,这并不是实际生活中的问题,而是一类非常受欢迎的模型,即所谓的语言模型,这些模型在给定一些文本的情况下,能够很好地预测文本中的下一个单词,然后生成文本。因此,在过去的几年里,我们已经看到了很多进步。
耶雷米(03:34):
有意思。强化学习和自然语言处理之间的联姻有什么原因吗?因为至少从历史上看,这是我从 30000 英尺的角度理解的,从历史上看,强化学习和计算机视觉可能会有更紧密的互动,重点是自动驾驶汽车,也许还有机器人。你认为 NLP 是这里有趣的成分之一是有原因的吗,还是说,它只是碰巧同时发生的两条独立的研究路线?
Tim (04:08):
没有。我确实看到了两者之间的许多协同作用,所以这是一个非常好的问题。首先,传统上,人们一直在自然语言处理任务中应用来自强化学习的各种技术。因此,人们一直在使用增强来直接优化机器翻译性能,而不是对[听不清 00:04:31]模型使用负面[听不清 00:04:30]训练。所以已经做了很多了。然后,反过来,人们也一直在研究指令跟随,所以给定一个智能体需要实现的目标的某种自然语言描述,我们如何设计能够以这样的自然语言信息为条件的智能体,然后在环境中实现目标?
Tim (04:53):
我之所以坚信自然语言处理和强化学习之间的结合,在很大程度上是因为到目前为止,我们已经看到了很多强化学习的成功案例,在这些环境中,你基本上可以从头开始训练。这意味着,随着时间的推移,您的到期策略允许代理充分学习或探索环境,以便提出非常非常好的策略。举例来说,这在你的环境动力有限的环境中是可行的。举个例子,我认为围棋是一个很好的例子,它在几年前就开始流行了,对吗?通过深刻的思考。
蒂姆(05:46):
这是一项令人印象深刻的成就,因为他们能够训练一个人工智能,在围棋比赛中击败人类专家。然而,重要的是要注意,围棋中的动力学相对简单,对吗?规则非常清楚,所以你有一个规定的时间步,有一个特定的动作,下一个时间步会发生什么是绝对清楚的。所以基本上,你可以进行蒙特卡罗树搜索。这意味着你实际上可以试着提前计划特定的行动顺序会发生什么。
蒂姆(06:23):
但是在很多其他环境中,人们会带来很多领域知识、常识和工作知识,只有这样他们才能在这些环境中做得很好,对吗?例如,我认为一个很好的例子是《我的世界》。所以如果你玩《我的世界》,有很多事情与现实世界中的事情非常相似,对吗?因此,如果你有一个火把,你开始燃烧一棵树,它只是烧毁。我觉得这很令人兴奋,对吧?那么,我们如何确保我们的代理人能够利用人类随着时间的推移收集的知识财富,他们在维基上写下来,他们写在表格里等等?他们[听不清 00:07:15]
耶雷米(07:17):
这其中的一部分,或者至少是我一直理解的,是我们的知识的一部分,当然,是随着时间的推移学习的,就像你说的,我们阅读维基或阅读教科书,或者只是被世界所教的东西,但是我想,另一部分也是先天的,是通过一个缓慢得多的过程,即进化教给我们的。所以我们生来就不是一张白纸,而是生来就对看起来像某个样子的面孔有特定的偏好,等等。我想,在某种程度上,这似乎涵盖了这两个方面。如果你真的能总结出一大堆人类知识,我不知道,维基百科语料库或人们写的所有语言,我想希望你涵盖了这两个基础?这样说公平吗?
蒂姆(08:03):
嗯,我认为这是一个非常好的观点。我相信你必须在某种程度上把它们分开,对吗?你必须说,“好吧,有人们写下来的知识。他们在一生中获得的东西,他们想和其他人分享这些知识,可能在某个时候,和代理人,人工代理人分享。”这是我大部分时间都在关注的事情。然后你提到的另一个方面,进化和天生的某些行为允许你,例如,要么直接在环境中表现得很好,要么允许你很快学会什么是环境中的好政策。我认为这也是一个非常令人兴奋的领域。我不太熟悉那个研究领域正在发生的事情,除了,我相信,我强烈认为我们需要像信使一样的代理人去探索。
Tim (09:01):
所以这是不够的,对于许多现实的环境来说,试图根据环境给你的奖励来最大化奖励真的是不够的,对吗?
耶雷米(09:10):
是的。
蒂姆(09:11):
在许多环境中,我认为给自己设定目标是绝对重要的,因为你遇到了意想不到的事情,增加了你对环境的了解。我认为这是非常关键的一点。这就是为什么人们喜欢玩像《我的世界》这样的游戏,他们只是了解某些事情是如何工作的。我在这里说了很多关于《我的世界》的事情,但实际上,我相信还有其他游戏可能更适合强化学习。
耶雷米(09:41):
喜欢什么类型的游戏?
蒂姆(09:42):
几周或几个月前,我们发布了 NetHack 学习环境。所以这是一个强化学习环境,围绕着一个非常古老的游戏,叫做 NetHack。NetHack 最初是在 1987 年发布的。它在终端播放,所以这确实是一个甚至没有任何彩色屏幕的时代。
耶雷米(10:06):
是啊。
Tim (10:06):
你真的在 Linux 终端上玩过这个。所以所有的观察值都是[听不清 00:10:12]字符。看起来很神秘,很刺激。所以基本上,你被扔进了这个地牢。你的玩家就是这个“at”符号。你可以在地牢里走动。怪物是其他 askey 字符,像 D 可能是一只狐狸或可能是一只狗或类似的东西。你走来走去,发现物品,武器,盔甲等等。这个游戏真正令人兴奋的一个方面,实际上类似于《我的世界》,是它是按程序生成的。所以,也许多谈一点会更有趣。
蒂姆(10:48):
当深度强化学习变得非常流行时,研究人员正在使用神秘的学习环境。所以 Atari games,为了测试代理是否能学会玩 Pong 或者 Pacman 女士或者 Montezuma 的复仇之类的游戏。这真的推动了强化和研究很长一段时间。但有趣的是,到现在为止,我觉得这些游戏几乎都被人工智能吃掉了。
耶雷米(11:19):
嗯嗯(肯定)。
蒂姆(11:20):
通常,这告诉我们更多关于实际环境和突出问题的信息,它告诉我们人工智能有多智能。这很重要的原因是因为在雅达利,环境在某种意义上是静态的。所以每次你玩这个游戏,都是一样的。
耶雷米(11:40):
是啊。
蒂姆(11:41):
对吗?所以每次你玩 Pong 或者 Breakout 的时候,你看到的观察结果并没有太大的变化。同样的,你想想超级马里奥,对吧?每次你玩超级马里奥,等级都是一样的。
耶肋米亚(11:53):
是啊。
蒂姆(11:54):
因此,随着时间的推移,你将学会做的几乎是记住为了做好你必须做的行动的顺序。
耶雷米(12:00):
是啊,[相声 00:12:01]你太适应你的环境了。
提摩太书(12:03):
完全正确,对吗?具体来说,环境是决定性的。这意味着,如果你发现自己在同样的情况下,你会做同样的行动,你会看到同样的结果。所以这是确定性的,我称之为静态的,就环境观测变量而言。最近成功的方法没有探索这一点。所以,我认为,2018 年优步人工智能有一个非常惊人的工作,叫做“探索”,他们解决了这个非常非常难的雅达利游戏,叫做“蒙特祖马的复仇”。他们基本上是通过确保重置代理或环境来做到这一点的,实际上,他们将代理或环境重置为以前访问过的状态,然后从那里开始浏览。对吗?所以,真的随着时间的推移,代理人通过游戏记忆特定的动作序列。
蒂姆(12:56):
这让许多研究人员开始考虑所谓的过程生成环境。这意味着,有一个生成过程,每次你开始一集,观察基本上是在你面前生成的。这意味着每次你开始一集,你会看到你以前从未见过的东西,比如在《我的世界》,对吗?每当你玩新的《我的世界》游戏时,这个世界就会产生。
提摩太书(13:20):
NetHack 也是这样。所以每次你被扔进地牢,你真的不知道在地牢的拓扑结构或特定房间和暗门的安排等方面会发生什么。这就迫使我们的特工,为了做得更好,去归纳这些新奇的情况。
耶肋米亚(13:36):
有趣。所以,这是,我猜这和蒙特祖马的复仇是一个质的不同的问题。如果我记得的话,那一个也有类似的问题,奖励经常被隐藏或者稍微远一点。你必须做一些违反直觉的事情来获得这些奖励。我想这是一个不同的问题,现在你面临着一个全新的环境,你实际上学习做的不仅仅是,嗯,在某种程度上,这感觉像是一个探索/开发的事情。你不想过度投资开发这种确定性环境。你还需要善于在这个新环境中探索和定位自己,而弄清楚自己身在何处的技能,现在人们已经开始在努力了?这是这项研究的目的吗?
蒂姆(14:21):
是的,我认为这是一个相对较好的评估。所以,在蒙特祖马的复仇中,你是对的,这是一个稀疏的奖励环境。这意味着你不会真的撞上许多来自环境的外在奖励,所以你真的必须探索很长时间,才能从环境中获得积极的信号,表明你正在做正确的事情。但有趣的是,蒙特祖马的复仇已经利用了许多人类的先验知识和偏见。所以,在蒙特祖马的复仇中,你必须收集钥匙,你必须开门,如果你作为一个人类玩家在蒙特祖马的复仇中跑来跑去,你看到一把钥匙并捡起来,那么你知道,好吧,一定有一扇锁着的门在某个地方,然后当你看到一扇锁着的门时,你就打开它。
蒂姆(15:01):
但是对于强化学习方法,至少是那些已经存在了很长时间的方法,他们有非常多的探索策略,对吗?他们偶尔会尝试一个随机的动作,看看是否真的有帮助。所以我们真正需要的是能够进行结构化和目标导向的解释的方法,这种方法能够激励他们自己,以一种非常有针对性的方式探索环境的某些方面。随着时间的推移,他们了解环境动态,了解你可以与之互动的事物以及如何与之互动。
蒂姆(15:36):
在蒙特祖马的《复仇》中,你可以看到钥匙和门等等。在 NetHack 中,你有数百个对象。各种各样的事情,对不对?各种武器,各种工具,比如开罐器,土地,钥匙等等,对吗?而且真的有如此大量的对象要学习,也有如此大量的敌人要打败,以至于人类玩家在学习玩网络黑客时,几乎所有人都必须自己查阅外部知识来源。所以有一个非常大的维基百科,叫做 NetHack Wiki,在那里人类玩家收集他们关于这个游戏如何运作的共享智慧,你可以做什么,你应该做什么和不应该做什么。当人们玩这个游戏时,他们真的学会了,嗯,在环境中做事,同时也在这个网络黑客维基上查找东西。
耶雷米(16:30):
这似乎很大程度上取决于你的创造能力,或者有一个连贯的世界模型来补充你的探索。我认为这实际上与 GPT 3 有关,当然,这是最近几个月发行的。让我想到这个的原因是,GPT 3 是那些面向自然语言的方法之一,至少试图构建一个相当完整,相当连贯的世界模型。我可以想象,仅仅基于 GPT-3 似乎能够做的一些事情,它似乎能够得出的一些联系,就承担这样的问题而言,它将是一个不错的知识基础。你认为这是一个公平的评价吗?你能把它用于迁移学习并和 RL 结合起来吗?
蒂姆(17:18):
是的,我认为至少有两种不同的方式可以利用这些预先训练好的语言模型。因此,一种方法是,假设你有一个外部文本知识源,如 NetHack Wiki,你想根据这些文本信息来调节你的强化代理。那么通常,试图学习语言,同时试图从头开始学习如何在环境中表现,这是一个坏主意,对吗?所以强化学习很难,自然语言处理从零开始也很难。如果你同时做这两件事,事情不会变得更容易。所以你想做的是,你想有一个好的起点,对吗?
蒂姆(17:59):
你希望有一个已经可以为你建立的模型,相对好地表达维基百科中所写的句子,这样你就可以在整个维基百科或 NetHack Wiki 上运行预先训练好的语言模型。你建立起所有的句子表征,或者单词和上下文表征,或者你想称之为什么的东西,然后你可以在环境中行动的同时尝试查询这些神经表征。这给了你一个操作维基的方法。
蒂姆(18:32):
虽然据我所知,这还没有完成,但对于复杂的强化学习任务,如 NetHack 学习环境,这还没有真正完成,我们有理由相信这是一种明智的方法,因为有问答系统能够处理如此大规模的维基。例如,整个维基百科。对吗?
蒂姆(18:54):
第二种方法是,或者第二个方向是……我想这可能是你的意思。是使用预先训练好的语言模型,比如 GPT-3,作为一个很好的先验,比如,物体的启示,对吗?你可以查询 GPT-3,我有一扇门,我能用它做什么?它可能会告诉你,你可以打开它,用钥匙打开它,踢它进去,无论什么,对吗?它可能会给你一些你可能想尝试的明智的东西,并且,很明显,可以用于你的强化代理可以应用的更好的探索策略[听不清 00:19:35]
耶雷米(19:35):
是的。我一直觉得语言建模,尤其是更完整的语言模型,如 GPT 3 和 GPT 4,以及其他即将出现的语言模型,对这类事情来说特别有前途,你提出的表格化的想法,空白的石板。你如何教会一个智能体从零开始在世界中定位自己,或者你如何避免不得不这样做?是的,用这些预先训练好的模型来支撑它,这看起来是一个很有前途的策略。所以,我认为一个很酷的主题,我们可以在你的研究背景下谈论,它似乎有很大一部分涉及到,找到将人类水平的信息传递给神经网络和机器学习模型的方法,我想是在非常抽象的意义上。
Jeremie (20:21):
我们已经谈过你对 NLP 的关注,以及与 RL 的互动。在我们开始讨论之前,你也提到过你一直在深度学习系统上做这项工作,并试图让它们基本上与逻辑规则一起工作,因此允许人类传达逻辑规则来约束深度学习系统的行为。你介意稍微探索一下,解释一下这项工作的内容吗?
蒂姆(20:43):
是的,当然。这是我在博士期间主要做的工作。我认为深度学习系统真的很棒。像 GPT-3 或深度强化代理这样的深度学习系统,他们真的很擅长从大量数据中学习。对吗?但是,问题是,对于许多领域,我们没有很多训练数据,或者我们可能想确保我们有一定的保证,在我们训练完系统后,它会做出一些预测。举一个例子,它总是预言人终有一死。这很有趣,因为在符号人工智能中有一个非常悠久的传统,人们一直在思考如何使用逻辑规则,如何根据现有的知识,现有的事实和现有的逻辑推断新事物[听不清 00:21:46]
蒂姆(21:46):
这真的很有趣,因为你不需要任何训练数据,对吗?所以你可以写下特定领域的事实,你可以写下特定领域的规则,然后你就可以做出推论。此外,你还有很强的保证。你知道,如果你有一个规则,告诉你每个人都会死,每次你有一个特定的人,你会预测那个人会死。如果你研究深度学习系统,就会发现有很多对抗性攻击的例子,对吗?比如说,你有一个系统,它对交通灯进行分类,你改变图像中的特定像素,预测就会不同,这显然会产生各种灾难性的后果。
蒂姆(22:31):
现在,符号系统中逻辑规则的问题是,它们不能概括你明确写下的东西。对吗?你必须写下所有你需要写下的东西,基本上,对吗?所以,给你一个具体的例子,假设你有辛普森一家,你有巴特·辛普森,荷马辛普森和辛普森爷爷。亚伯,对吧?因为辛普森爷爷。你有事实证明霍默·辛普森是巴特·辛普森的父母,阿贝·辛普森是霍默·辛普森的父母,你有一条规则规定,父母的每一个父亲都是祖父。对吗?所以现在你可以断定,实际上,亚伯·辛普森是巴特·辛普森的祖父。
提摩太书(23:15):
但那只是为了那个特定的象征,即关系的祖父。但是爷爷呢?对吗?爷爷和祖父,他们是两个不同的词,他们是两个不同的符号,所以你如何确保我们也能做出更柔和的推论?在那里,我看了很多,我想,结合了深度学习的神经表示以及符号系统的优点,所以是基于规则的系统。我们已经…是的。
耶雷米(23:44):
这是有道理的,因为你需要那种灵巧……在某种程度上,你需要为爷爷嵌入,然后你需要在那个嵌入空间附近的单词说,“哦,是的,这些可能是同义词。”这是想法的一部分吗?
蒂姆(24:00):
是的,所以我们当时遵循两个方向,一个是,你有一个工作的神经元,它试图预测给定的特定事实,就像 Bart 的祖父 Abe 一样。试图预测该事实是否是真的,并且有一些模型试图仅根据这两个实体的神经表示来预测。在这种情况下,安倍和巴特,以及关系的代表,祖父的。在那里,我们使用逻辑规则来约束或直接调整这些习得的表征,以便在未来,每当我们在神经表征中有祖父关系[听不清 00:24:42]时,我们很可能在某人的父母的父亲之间预测它。
提摩太书(24:47):
这是一项工作,另一项工作与你提到的更接近。所以这是个好主意。我是说你的评论非常好。这是 NeurIPS 在 2017 年发表的一篇论文,我们实际上采用了现有的数据锁证明系统,我们基本上把整个所谓的反向链接算法(用于序言和数据日志,老式人工智能系统)转变成了一个神经网络。那是在人们非常重视使用现有的算法和数据结构的时候,做的事情,是的,被称为神经化它们,基本上把它们变成神经网络,使它们[听不清 00:25:31]这样他们就可以做这种软比较,可以训练[听不清 00:25:35]
耶雷米(25:34):
这真有趣。所以,我发现这如此引人注目的原因之一是一个大焦点…实际上,这个播客系列的一个大焦点,也是我个人的一个大焦点,也是这个问题的人工智能对齐。只是这个想法,随着我们的智能系统变得越来越强大,越来越有效,我们需要能够向它们传达人类的价值,我们需要能够传达约束,我们不想要一个物理体现的 RL 系统或任何东西。我们不希望有一个这样的系统四处运行,对人们造成伤害,因为它是在一个分布式的环境中运行的,或者它没有考虑到一些奇怪的,敌对的可能性。
耶雷米(26:13):
这看起来就像是让我们在符号层面上交流的想法,使用逻辑,直接与神经网络交流,至少开辟了某种途径来确保,例如,你可以实际传达这样的想法,例如,不要杀人。或者类似的东西。不是说这么简单。很明显,正如你提到的,下游非常复杂。“人民”这个词将如何解释?“杀”这个词将如何解释?诸如此类。但它确实让我们和机器交流变得更容易了,在某种程度上,通过这些算法。我不严格地使用了沟通这个词,但是你是否认为它在这个外部校准问题中扮演了一个潜在的角色,让人类至少以一种更有效的方式向机器传达他们想要的东西?
蒂姆(26:59):
我认为这是一个很棒的问题。首先,我应该诚实地说,我不是人工智能对齐或人工智能安全方面的专家,所以我在这方面说的任何话都应该持保留态度。我确实相信,我们现在有新的方法来约束人工的[听不清 00:27:20]使用领域专家知识,例如以逻辑规则的形式。然而,那是假设你能以逻辑规则的形式写下所有你想教给你的人工智能系统的东西,对吗?这是一个很大的假设。我能想象出无数的场景,在这些场景中,那个简单的规则,不要杀人,对吧,是非常有问题的。我很确定,实际上,我知道人们一直在思考这种豁免。所以这是一个问题。
蒂姆(27:48):
另一个问题是,我认为我们还没有完全解决我们在多大程度上完全执行逻辑规则,在多大程度上我们希望给模型足够的自由,对吗,去了解我们生活的这个混乱的世界,对吗?如果你以自然语言为例,这里有很多混乱的东西,对吗?作为人类,我们甚至面临如此多的模糊性和问题,我们的人工智能系统或前期语言模型和自然语言理解系统仍然难以处理。所以,我确实相信我们还有很长的路要走。
蒂姆(28:32):
但与此同时,我认为在某种程度上有一些协同作用,因为这不仅仅是要确保我们的人工智能与我们的价值观保持一致,还涉及到我们如何确保我们的人工智能系统是高效的,所以这意味着,它们能快速学习以适应新的情况吗?他们能有效地探索环境吗?为此,他们也必须学会理解,我认为,自然语言,我们的意图,我们的过去和偏见。
耶雷米(29:05):
实际上,我认为有一个假设一直在我的脑海中,但没有说出来,那就是你刚才想到的最后一句话是,为什么自然语言是构建这些世界模型的如此好的候选语言?也许,我不知道,你想详细阐述一下这个想法吗?为什么一个语言模型会比,比如说,我不知道,一个在 ImageNet 或类似的东西上训练的计算机视觉模型更好?是什么让语言作为世界模型的来源变得很有前途,然后可以应用于强化学习代理,给他们一条腿,让他们不必从头开始学习这些东西?
蒂姆(29:48):
好吧,我可以给你举一个例子。再一次,这是以我之前提到的 NetHack 这个游戏为中心的,因为你也许可以使用…比如说,如果有 NetHack 的 3D 渲染,这并不…实际上,它确实存在,但是假设有 NetHack 的 3D 渲染。显然,你可以使用预先训练的计算机视觉模型来给你的模型一种什么是某些物体的感觉,对吗?也许某处有一把椅子,什么的,比如某处的盔甲。但在像 NetHack 这样的游戏中,或者在许多我认为我们在现实世界中关心的实际环境中,重要的是我们有书面的知识和程序性的文本,告诉我们如何做某些事情,对吗?
蒂姆(30:33):
net hack,维基上有很多战略指导,告诉你在某些情况下应该做什么,不应该做什么,这种知识,我们作为人类,至少可以用自然语言传达。这并不意味着自然语言是构建世界模型的最佳方式。我可以想象你可以拥有人工智能,如果它们真的很聪明,它们可能会想出各种各样的内部表示来编码世界是如何工作的,这可能不会反映或连接到我们人类的自然语言。但至少现在,这是唯一的来源,例如,我为了让代理学习网络黑客,对不对?因为在[听不清 00:31:19]中,人们一直在使用自然语言来写什么该做,什么不该做
耶雷米(31:19):
对,我想,在某种程度上,人类可以通过语言相互传递任意的知识,在某种程度上,我可以教你,或者你可以教我,任何人类可以通过书写来了解的知识。这意味着语言是这个知识图表,是这个世界的隐含模型,是人类几乎能够储存的最完整的模型。你不同意那个想法吗?
蒂姆(31:47):
嗯,我认为还有很多知识我们无法用自然语言传达,对吗?我想在某些情况下,我不得不说,“看,我可以向你演示我是如何做某些事情的,但你必须亲自体验。”我可以试着向你解释,尽管我很想解释,当我做某些动作时,不管是空手道动作还是其他什么动作,那种味道对我来说是什么样的,或者那种感觉对我来说是什么样的。但是你真的要去训练,你要自己去体验。
蒂姆(32:21):
所以,我认为,是的,公平地说,仍然有很多知识我们无法用自然语言表达或传达。但是我相信,我想,在这种推理水平上,这显然是非常[听不清 00:32:35]的术语,对吗?但这是我期望人工智能在游戏或模拟环境中能够做到的推理。我认为很多都是用自然语言传达的,对于很多游戏来说,我们有这些文本维基资源,我们应该在训练强化代理时加以利用。我还认为,从长远来看,这将使我们能够训练强化智能体,使其能够解决更多真实世界的任务,而不仅仅是这些模拟任务。
耶雷米(33:07):
也许这对你来说是一个好的长期发展。对你来说,现在正在进行的人工智能研究的目标是什么?是关于接近,比如说,AGI 的终点线吗?它是关于让我们有人工智能起飞的点,还是更多,你认为那是更远的,现在,我们只是在一系列狭窄的任务上工作?
蒂姆(33:33):
我认为这是一个非常好的问题。老实说,我不认为我是那种会说在努力创造人工智能的人。我认为有一个公开的争论,即使是人类也能在多大程度上拥有一般的智力。我们在现实中看到的是,人们在某些领域非常专业。举个例子,我可能是一个不错的科学家,但是我现在肯定不能驾驶飞机。我或许可以学会,但那显然会带来各种额外的成本,而且我在现实世界中所能学到的东西是有限的。这种想法是,我们将拥有能够完成各种任务的人工智能,我认为这是一个开放的问题,如果这是可能的话。而且老实说,我一直……我一直在努力设定相当雄心勃勃的研究目标,对吧?让代理可以在这些程序生成的环境中学习,这些环境必须以外部知识源为条件。
蒂姆(34:41):
我认为这是我们认为在一两年内不会发生的事情。我认为这是一个长期的努力,我对预训练语言模型的最新进展感到非常高兴,但我不认为这将带我们走到那一步。我认为在我们的代理人能够解决网络黑客问题之前,还有很多事情需要做。听起来很有趣,对吧?因为这是一个愚蠢的游戏。
耶雷米(35:06):
是啊。因此,我很乐意听取你的意见,因为我认为这对于这个领域的许多人来说是一个非常热门的话题。很明显,这在很大程度上是受 GPT-3 的启发。实际上,也许值得简单提一下,GPT-3 是什么,因为我们已经提到过几次了。我觉得我对这个词的使用太随意了。你介意提供一个什么是 GPT-3 的快速总结,然后也许我们可以把它联系到这个更大的图片吗?
蒂姆(35:32):
当然可以。所以,GPT-3 是一个语言模型。语言模型在自然语言处理中有着悠久的传统。例如,它们已经被用作机器翻译系统的一部分。一个语言模型基本上只是一个模型,它允许你给一个单词序列打分,它允许你给这个单词序列的可能性打分。例如,你可能想为英语训练一个语言模型,现在它可以给你一个特定的句子,语言模型会告诉你这个句子有一定的概率。你可以想象这有多有用,因为如果我有一个机器翻译系统,需要从一种特定的源语言翻译成一种[听不清 00:36:13]语言,如果我可以列举多种可能的翻译,然后我可以使用一个语言模型来评分哪一种是最好的,对吗?举例来说,这可以让你有一个很好的解码器来把它从一种特定的语言翻译成另一种语言。
蒂姆(36:30):
几年前,人们一直在使用各种语言模型的统计方法,即所谓的 MREM 模型,在大型文本语料库中计算特定单词的单字母词、双字母词和三字母词等出现的频率,然后你可以使用这些方法对单词序列进行评分。然后,再一次,我猜几年前,人们开始使用深度人工神经网络进行语言建模。以及最近所谓的变压器架构。
蒂姆(37:09):
首先,这些模型对你的词汇中的每个单词都有一个表示,基本上,在大型文本序列中,可能有 500 个左右的单词。在每一个时间点上,他们试图根据前一个单词的历史来预测下一个单词。事实证明,如果你让这些深度人工神经网络变得非常大,并且你收集了一个巨大的文本语料库,那么我们谈论的是数十亿字节的文本数据……我们谈论的是这些人工神经网络中超过 1000 亿个参数。你把这些放在一起,这样一个非常大的模型和一个非常大的高质量的文本语料库,然后你得到像 GPT-2 和 GPT-3 这样的东西。所以,真正擅长创造特定历史记号的语言模型,[听不清 00:38:04]词汇的历史产生了下一个[听不清 00:38:06]
蒂姆(38:07):
我认为真正令人惊讶的是,在 GPT-3 的情况下,你可以启动这些模型,所以你可以开始,例如,给 GPT-3 举一些例子,比如,你可以用 Java 给我编码吗,如何反转列表?然后你写下[听不清 00:38:31]列出的 Java 程序。再给它几个这样的例子,然后它就准备好了,你就可以开始用自然语言编码了。我想,你可以用自然语言进行查询,比如,你现在能数出列表中元素的数量吗?它会给你可执行的,让我们说 Java 代码为你做到这一点。这很令人兴奋,但同时,我认为,考虑到模型的整体规模和高质量文本数据的规模,这并不令人惊讶。那是用过的[听不清 00:39:00]
耶雷米(39:00):
我记得这是一个有争议的问题,大约在两三年前。在人工智能比对社区或担心缩放这些模型的人之外,你可以只是,这个所谓的缩放假设,你可以只是让模型变得更大,投入更多的计算,投入更多的数据,你不仅会得到更高质量的结果,还会从中获得更多的泛化能力。比如说,你可以从一个被美化的自动完成算法发展到现在,就像你说的,只需要相对最少的启动,就可以用 Javascript 或者别的什么来编码。我认为公平地说,它的这一方面是最近两三年的新事物,这样说公平吗?
蒂姆(39:42):
对,我认为可以这么说。我认为总有一些声音,我也是其中之一,我会说,“看,我真的不相信我们只是越来越多地缩放模型,我们只是向它扔更多的数据和更多的计算,我们会得到更令人印象深刻的结果。”但到目前为止,情况仍然是这样,我非常肯定我们将在某个时候拥有 GPT-4,这将更加令人印象深刻。所以,我想,我们还没有按下按钮,但我认为仅仅训练语言模型存在一些根本性的问题。
蒂姆(40:17):
很明显,人们已经开始把这一点拆开,研究这些模型的系统归纳能力或推理能力,对吗?举例来说,一开始,给它一个质数序列,然后你想让它继续产生更多的质数,它就是不工作,不明白,对吗?而人类,在某些时候,他们会意识到,好的,啊,这是[听不清 00:40:38]为你产生更多的质数。
蒂姆(40:41):
所以,还有很多事情要做,无论谁认为 GPD 将是我们所有问题的解决方案,并将我们直接带到 AGI,我都不同意这种说法。
耶雷米(40:56):
是的,不,这是一个有趣的观点,我听到一些人这样说,虽然不一定有希望。我认为也有潜在的担忧,因为人工智能安全研究和人工智能对齐研究还没有准备好真正适应可推广或一般水平的人类智能。关于你提到的神经网络的许多交流困难,我们不知道如何将我们想要的嵌入到这些神经网络中,如何设置我们的损失函数,使它们在道德上是一致的,等等。但是我想,我也发现了一件值得注意的事情,那就是 GPT 3 号,或者不好意思,GPT 2 号,基本上不会做加法或者很难做简单的算术加法,即使是一位数和多位数的加法。
耶雷米(41:45):
和 GPT-3,至少是它的大版本,你可以看到,当他们按比例放大时,你可以看到这些越来越大的加法和越来越多的数字的功效。我想这里有一个悬而未决的问题,在多大程度上这算是推理。但我的感觉是,我们已经在某种程度上改变了目标,潜在的是,我们在这里学到的可能更多,不是 GPT-3 比我们想象的更强大,而是可能只是人类的大脑没有我们想象的强大。也许是因为我们不仅针对参数效率进行了优化,还针对能效进行了优化。我们有各种各样额外的进化限制。飞机远不如鸟节能,但与鸟相比,它能跑得非常快。我想,不好意思,我对这个问题的一个担心是,也许我们会一次又一次地感到惊讶,GPT 4 号可能会给我们带来某种程度的能力,而我们在哲学上还没有准备好适应这种能力。在这个阶段,你认为这是可能的还是不可能的?
蒂姆(42:55):
我认为我们离那还很远。我认为,首先,你是对的,我们一直在改变目标。我们过去一直都是这么做的,对吧?我们一直在用国际象棋做这个。我一直在参加这一集的会议。我一直在有目标地做这件事,对吗?我一直在说,“看,这是超级令人印象深刻的,结果也是超级令人印象深刻的,”但是为了学习目标,你必须从现实世界中转移的东西实际上是零,对吗?有点像《我的世界》,但 NetHack 在这方面有所不同。
蒂姆(43:24):
所以我们一直在改变目标,我们将来也会这样做。我认为 GPT-4,肯定会令人印象深刻,但即使是 GPT-3,我认为如果你[听不清 00:43:34]足够长的时间,如果你用它从未见过的数字展示它,那是非常大的,对吗?如果我告诉你这两个数字,一个是一万亿左右,另一个是一万亿左右,你就能算出来,对吗?因为你可以写下一个算法,或者你可以写下一些我给你的任务的符号表示,你每次都能可靠地解决它。然而,随着 GPT-3 和 GPT-4 的出现,只要你只关注训练一个语言模型,你仍然会很挣扎。这将是令人印象深刻的,它也将有各种下游应用,对不对?
蒂姆(44:17):
这太棒了,对吧?正如我提到的,我们可以潜在地利用它们来处理文本数据,进行强化学习。基于 GPT-3 的各种有趣的应用程序层出不穷,但不知何故,我相信我们总有一天会碰壁。我不能确定,对吧?如果可以的话,我可能现在就写一篇关于这个的论文。但是我的直觉告诉我,如果我们训练这样做,如果我们集中精力,这将不会达到我们能够达到的可靠推理的水平。
耶雷米(44:57):
有意思。我想,推理的门槛也很重要,因为在某种程度上,对于那些更担心下游,甚至是与技术相关的存在风险的人来说,就像,你真的需要多少推理才能让一个人工智能系统有一些关于如何迭代自我改进的想法?目前还不清楚其中有多少是新颖的推理,因为也许在它的语料库中,有足够的信息让它进行模式匹配,直到它得出结论,或者其他什么。但我认为这是一个非常有趣的可能性空间。这也太违反直觉了。
耶雷米(45:34):
但是我要给你最后一个很难回答的问题,因为你在这个领域非常专业,如果你要猜测你需要什么技术才能与 GPT-3 这样的东西结合,打破这种模式,你会发现这种模式似乎没有你所说的推理能力。它肯定缺乏任何一种代理或内在动机。我肯定有一大堆不同的可能性,但只是问你一个不公平的问题,让你为难,你对下一步会是什么有什么想法吗?
蒂姆(46:07):
对我来说,什么是绝对不清楚的,我认为可能有很多其他研究人员已经从神经科学的角度探索了这一领域,这是我们人类能够做到的概念和符号的出现,对吗?我们想出了数学,我们能够外化我们的思维过程。如果我把它写在纸上,我就能写下一个算法,或者写下方程来解决一个特定的任务。除非我们在这些深度学习系统中有一些东西,人工神经网络,鼓励这种清晰概念的形成,然后他们可以在符号层面上进行推理,我认为我们会碰壁。因此,神经处理和符号处理的结合,我认为我们将不得不在这方面取得很大进展。
耶雷米(47:02):
那么,可以说那是你的 AGI 火警吗?如果你看到 GPT-4 展示了逻辑推理和推论的象征性水平,对你来说,会不会像这样,好吧,现在我改变主意了,现在我认为这种策略可能行得通?或者…
蒂姆(47:23):
是的,但是,这是一个很大的但是,我们仍然能够,当我们进行所有这些逻辑推理时,我们仍然能够被扔进完全陌生的情况中,并迅速适应,或者至少是理智的。我认为如果你把两者结合起来,对吗?如果你看到两者都发生了,那么,我想,是的,我会很感动。
耶雷米(47:48):
真有意思。是的,实际上,这让我意识到这也是有区别的,在…所以首先,我们对 AGI 有一个非常模糊的定义。我认为 G 才是真正让我们犯错的地方。普遍聪明是什么意思?人们谈论图灵测试是我们将要使用的东西,现在图灵测试,我认为人们可以公平地说,嗯,我们已经做出了可以通过它的系统,其中一些人假装自己是一个无能或不善言辞的人…我认为其中一个人假装自己是一个不善言辞的俄罗斯少年。
耶雷米(48:20):
所以,这就像是,一个人工智能系统可以表现得像一个不善言辞的俄罗斯青少年吗?好吧,好吧,是的,你技术上通过了图灵测试,但这到底说明了什么?但我猜这揭示了什么,至少对我来说,是 AGI 和潜在风险水平,高能力,人工智能之间的差异。这在技术上可能是狭隘的,但尽管如此,可能会带来风险。这符合你的观点吗?
蒂姆(48:47):
对,绝对是。我想,我们已经有了很多公开的、道德的问题,关于我们有能力开发的人工智能,对吗?有很多基于人的图像的人脸检测、性别检测或其他检测的例子。我们现在有能力合成高质量的人脸,对吗?也有这样的例子。你可以想象对它的各种误用。也可以想象语言模型的各种误用。是的,回到你对图灵测试的评论,我想我会很好奇的一件事…基本上,当人们问我,“好吧,我们应该用什么来测试系统的普遍智能?”
蒂姆(49:35):
我想把一位哲学家放在有这样一个系统的房间里一天,如果这位哲学家后来说,“嗯,我一整天都在进行有趣的对话”,那就是说,好吧,很明显,这个系统做得很好。需要明确的是,[听不清 00:49:52]现在的语言模型根本不具备这种能力。从表面上看,这段文字[听不清 00:49:58]如果你仔细观察细节,你会发现它非常容易被发现。什么是[听不见的 00:50:04]
耶雷米(50:05):
这看起来像是象征性的推理,那么,对你来说,这真的是圣杯吗?如果它能做符号逻辑,那么我们就有了真正有意义的东西?
提摩太书(50:13):
是的。正如我之前提到的,我想,一个人必须小心谨慎。符号推理与符号解算器和符号人工智能系统配合得非常好,对吗?所以这还不够。同时,它还必须证明这种概括和样本有效学习和分布概括
提后书(50:35):
所以两者都在一起。你必须设计,基本上测试这是不是你想要做的,对吗?您必须设计一个测试来测试这两种能力。如果你测试符号化的 AI 系统可以泛化到什么程度,比方说在飓风中间检测特定的交通标志,它会完全失败,对吗?但有些也可能是[听不清 00:50:54]人工的,或人工神经网络。我会说,你必须基本上测试这两种能力。
耶雷米(51:02):
如果这两种能力都存在,那么对于一个有这两种能力的代理人,你会说我们的道德责任是什么?你真的认为这是道德上可识别的行为吗?只为你个人。我肯定这不是你做过研究的事情,但是…
蒂姆(51:22):
是啊。我想说,我对这类问题最接近的体验是在电影《她》中,我很确定你知道这部电影。
耶雷米(51:34):
我实际上没有看过那部电影,但是抱歉,请继续。是啊。
提后书(51:38):
当然可以。在某种程度上,如果人工智能按照自己设定的意图行事,并表现出同理心和所有这些事情,对,人工和非人工之间的界限变得非常模糊,有很多科幻电影以此为核心主题。在这一点上,对我个人来说,我会发现关闭这样一个系统是非常困难的,对吗?在这一点上,你想的更多的是杀死有个性的东西,但对我来说,至少现在和在可预见的未来,这是我能说的科幻小说,对吗?看看我们最近在人工智能方面的突破,并试图推断,至少我很难在我的有生之年看到这成为现实。
耶雷米(52:35):
哦,有意思。甚至在你有生之年。所以你在这件事上有很长的时间跨度。
蒂姆(52:41):
是啊。是的,我会这么说。我认为我们可能会看到另一个人工智能的冬天,我们也会超越它,但我不认为我们会有与人类智能无法区分的东西,在不久的将来,我们会有所有这些同理心,零射击概括和符号推理的结合。是的,我认为我们谈论的是超过几十年的时间。
耶雷米(53:13):
迷人。好的,非常酷。非常感谢。我真的很感激你在谈话的最后,也放纵了一些更哲学的一面。那么,蒂姆,如果人们想关注你的工作,有没有什么地方可以让他们在社交媒体上关注你?
蒂姆(53:26):
哦,是的,我在推特上。去找蒂姆·罗彻尔。显然,你可以看看我的个人网页上的出版物。
耶雷米(53:38):
甜。是的,我们肯定会链接到下面的所有内容。Tim 在我们讨论的所有主题上做了大量的工作,所以请务必查看一下,尤其是如果你对 RL、深度学习以及我们今天在这里讨论的任何内容感兴趣的话。蒂姆,非常感谢你加入我们的播客。
蒂姆(53:51):
好的,非常感谢您的谈话。
语言战争
意见
选择数据科学语言—个人观点
马库斯·斯皮斯克在 Unsplash 上的照片
作为《走向数据科学》的一名热心读者,有一段时间我不禁注意到了关于数据科学最佳语言的争论。例如:
- 一个紧凑的比较:Julia,R 和 Python——2020 年的数据科学
- 介绍 Julia:用于数据科学的 Python 和 R 的替代品
- 【Julia 优于 Python 的 5 个方面
这只是一个简短的帖子,我对这个问题的一些想法。不幸的是,我不熟悉 Julia,因此它主要是关于使用 R 和/或 Python。
为正确的工作使用正确的工具
在我看来,一个人应该使用最适合自己需要的语言。在 R 中尝试使用 TensorFlow 简直是一场噩梦。我知道这是可以做到的,也许这与我缺乏经验有关,但安装是复杂的。此外,Python 中的文档和源代码与 R 中的相比相差甚远。至于 PyTorch,我不知道如何将其与 R 集成。如果您想开发深度学习解决方案,请选择 Python 而不是 R 。
还有,作为一个以希腊语为母语的人,我在希腊语语料库中尝试过自然语言处理的 R。这根本不可能做到。问题从编码错误到流行软件包中不存在的支持。另一方面,一些 NLP 库支持希腊语,如果不支持,也可以自己添加支持。这同样适用于其他语言。如果你有非英语的 NLP 语言,选择 Python 而不是 r。
另一方面,R 和 CRAN 使得安装库成为一个简单的过程。依赖关系破裂和版本/包冲突是非常罕见的。在这里,Python 被远远抛在了后面。此外,我还遇到过这样的情况,我可以在公司防火墙后安装 R 包,但不能安装 Python 包,尽管根据它的说法,没有一个相关的库被阻止。如果你想容易地设置和运行(尤其是在防火墙后面),选择 R 而不是 Python。
最后,有一些特定的用例,其中一个库只适用于一种语言。如果是这样的话,选择就容易了。例如,几年前,只有 Python 拥有拓扑数据分析中的 mapper 算法的包。
在罗马时
有时候,数据科学家没有选择的余地。如果你被雇佣并加入了一个使用 R 的团队,那么你将不得不使用 R。如果你开始一个项目,而只有 Python 可用,那么你将使用 Python。这听起来可能很明显,但这是你在申请职位或考虑职业道路时需要考虑的因素。如果你想加入一个使用 R 的公司/团队,那么你应该知道如何使用它。成为 Python 专家是一个优势,但这还不够!
最后的想法
在我看来,让数据科学家与众不同的是对工具基本工作原理的良好了解。一个人应该知道最常见的算法的基本理论。此外,他应该权衡利弊,以及何时选择一个而不是另一个。理想情况下,他应该有使用它们的实际经验。所以我的建议是,了解你的理论,选择一个项目,选择一门语言,把手弄脏。
套索回归教程
使用 LASSO 回归的偏差-方差评估-游轮数据集
Benjamin O. Tayo 拍摄的照片
L ASSO 回归是正则化回归的一个例子。正则化是一种通过添加额外信息来解决过度拟合问题的方法,从而缩小模型的参数值以导致对复杂性的惩罚。正则化线性回归的 3 种最流行的方法是所谓的岭回归、最小绝对收缩和选择算子(LASSO)和弹性网格法。
在本教程中,我将侧重于套索,但脊和弹性网的扩展是直截了当的。
假设我们想要在具有 n 个观测值和 m 个特征的数据集上构建一个正则化回归模型。
LASSO 回归是一种 L1 惩罚模型,我们只需将权重的 L1 范数添加到最小二乘成本函数中:
在哪里
通过增加超参数α的值,我们增加了正则化强度并缩小了模型的权重。请注意,我们没有正则化截距项 w0。还要注意,alpha = 0 对应于标准回归分析。
根据正则化强度,某些权重可以变为零,这使得套索方法成为一种非常强大的降维技术。
LASSO 伪代码
1) For given alpha, simply minimize the cost function to find the weights or model parameters w.2) Then compute the norm of w (excluding w0) using the equation below:
案例研究:使用游轮数据集预测船员人数
我们将使用游轮数据集cruise _ ship _ info . CSV来说明套索技术。
1.导入必要的库
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt
2.读取数据集并显示列
df = pd.read_csv("cruise_ship_info.csv")df.head()
3.选择重要变量
在另一篇文章( 利用协方差矩阵图进行特征选择和降维 )中,我们看到了协方差矩阵图可以用于特征选择和降维。使用游轮数据集cruise _ ship _ info . CSV**,**我们发现,在 6 个预测特征[’ 年龄’、吨位’、乘客’、长度’、舱室、乘客密度 ]中,如果我们假设重要特征的相关系数为 0 那么目标变量“乘员”与 4 个预测变量:“吨位”、“乘客”、“长度、“车厢”强相关。 因此,我们能够将特征空间的维数从 6 降低到 4。
cols_selected = ['Tonnage', 'passengers', 'length', 'cabins','crew']df[cols_selected].head()
X = df[cols_selected].iloc[:,0:4].values # features matrix y = df[cols_selected]['crew'].values # target variable
4.LASSO 回归实现
a .将数据集分成训练集和测试集
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split( X, y,
test_size=0.4, random_state=0)
b .标准化特征
from sklearn.preprocessing import StandardScalersc_y = StandardScaler()sc_x = StandardScaler()y_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()X_train_std = sc_x.fit_transform(X_train)X_test_std = sc_x.transform(X_test)y_train_std = sc_y.fit_transform(y_train[:, np.newaxis]).flatten()
c .实施套索回归
from sklearn.linear_model import Lassofrom sklearn.metrics import r2_scorealpha = np.linspace(0.01,0.4,10)r2_train =[]r2_test =[]norm = []alpha = np.linspace(0.01,0.4,10)for i in range(10): lasso = Lasso(alpha = alpha[i]) lasso.fit(X_train_std,y_train_std) y_train_std = lasso.predict(X_train_std) y_test_std = lasso.predict(X_test_std) r2_train = np.append(r2_train,
r2_score(y_train,sc_y.inverse_transform(y_train_std))) r2_test = np.append(r2_test,
r2_score(y_test,sc_y.inverse_transform(y_test_std))) norm = np.append(norm,np.linalg.norm(lasso.coef_))
d .输出的可视化
plt.figure(figsize=(8,6))
plt.scatter(alpha,r2_train,label='r2_train')
plt.plot(alpha,r2_train)
plt.scatter(alpha,r2_test,label='r2_test')
plt.plot(alpha,r2_test)
plt.scatter(alpha,norm,label = 'norm')
plt.plot(alpha,norm)
plt.ylim(-0.1,1)
plt.xlim(0,.43)
plt.xlabel('alpha', size = 14)
plt.ylabel('R2_score',size = 14)
plt.legend()
plt.show()
我们观察到,随着正则化参数α的增加,回归系数的范数变得越来越小。这意味着更多的回归系数被迫为零,这往往会增加偏差误差(过度简化)。平衡偏差-方差权衡的最佳值是当 alpha 保持较低时,比如 alpha = 0.1 或更低。在决定使用哪种方法进行降维之前,应该将这种方法与主成分分析(PCA)进行比较。
岭回归和弹性网回归可以用同样的方式实现。更多信息,请参见以下书籍:拉什卡、塞巴斯蒂安和瓦希德·米尔贾利利**。** Python 机器学习,第二版。Packt 出版公司,2017 年。
参考
- 在具有高度相关特征的数据集上训练机器学习模型。
- 使用协方差矩阵图进行特征选择和降维。
- 拉什卡、塞巴斯蒂安和瓦希德·米尔贾利利**。** Python 机器学习,第二版。Packt 出版公司,2017 年。
- Benjamin O. Tayo,预测船只船员规模的机器学习模型,https://github . com/bot 13956/ML _ Model _ for _ Predicting _ Ships _ Crew _ Size。
你的标签和数据有噪音?套索叛徒!
标签噪声是训练监督算法时经常遇到的问题。了解如何使用套索叛徒来减少标签噪声( LTT )。
TL;速度三角形定位法(dead reckoning)
这篇文章发展了套索叛徒( LTT )的方法。LTT 基于外部性能度量从数据集中过滤掉噪声观测值。LTT 显著提高了基于清理数据集的估计器的性能。LTT 速度快,易于应用,并且与任务无关。
演职员表 : LTT 是我在北卡罗来纳大学教堂山分校做访问学者期间,与我的长期合著者和好朋友 Daniel M. Ringel 合作开发的。
你可以在这个Colab笔记本里找到这篇文章的可复制代码。
如果你在研究中使用 LTT,请引用这篇文章:
简介
在使用监督算法时,您会遇到数据 X 和标签 Y。我们的目标是找到一个映射 f : X → Y,它最好地概括了看不见的数据 X*。
映射函数 f 就是学习算法。该算法学习从数据将输入域 X 的值映射到输出域 Y。例如,最简单的情况是线性回归或逻辑回归。
迄今为止,如此标准。
但是,这个世界本来就乱(还是乱了更好?).如果您曾经接触过不包含在一些花哨的 API 中的数据集,您很可能会以这样或那样的方式烧伤自己的手指(我当然多次这样做过)。
这是我如何了解到的,了解到的映射的质量从根本上受到所提供标签的质量的影响。
更正式的说法是,这个原则也被称为“ GIGO ”:垃圾入——垃圾出。
虽然这种见解听起来非常平凡,但我认为它经常被忽视。
让我们只获取一些免费的可用数据,而不考虑它的细微差别,或者就此而言,错误,我们就可以走了。因为训练和调整一个算法比手动处理成千上万的观察结果更有意义和挑战性。
对数据的任何训练都强加了隐含的假设,即可用数据包含“信息”。或者至少是足以正确训练算法的信息。大部分时间可能都是这样。然而,数据中也可能存在一种特殊形式的噪声。错误,这有可能降低我们的映射功能的质量。
让我们考虑一些例子来说明这一点:
a)改编自 IMDb 情感分类数据集。
这是一部精彩的纪录片,讲述了埃尔热和他创作的丁丁的生活。
y = 0
b)改编自 IMDb 情感分类数据集。
这是一部精彩的纪录片,讲述了埃尔热和他创作的丁丁的生活。我只是不喜欢这个配乐,因为它的平淡和不恰当的演奏。
y = 1
c)改编自波士顿住房数据集。
x1 = 0.00632(CRIM)
x2 = 18.00(ZN)
x3 = 2310(INDUS)
x4 = 0(CHAS)
X5 = 0.5380(NOX)
X6 = 6.5750(RM)
y = 24.00(MDEV)
D) 5 维句子嵌入。
x1 = 1.162
x2 =-1.134
x3 = 0.105
x4 =-1.279
X5 = 0.938
y = 1
这里有点不对劲。继续阅读每个案例的分析。
这就是我们在本文中要解决的问题:使用 LASSO 回归自动检测训练数据中的错误。我们本质上是在滥用 LASSO 作为一种数据清洗方法。这种方法叫做:
LTT何TRAITORS**【LTT】**。
子弹躲开了!它看起来不会很酷,但肯定会有那种感觉。
标签噪音的问题
关于“标签噪声”的问题有一个完整的研究流程。见[1]中的调查。作者在[2]中将标签噪声定义为“任何模糊实例及其类的特征之间关系的东西”。[1]中讨论的文献基本上考虑了两种类型的标签噪声:
- 类别噪声(影响标签的观察值,Y)
- 特征噪声(影响特征的观测值,X)
如[1]中所述,已经开发了一大堆能够处理标签噪声的方法。出于我们的目的,我们认为这两种类型的噪声是不可区分的,因为由此产生的影响可能是以下两种之一:
- 最佳情况:标签噪声没有影响。
- 最差情况:在最差情况下,标签噪声会降低映射函数的质量,即降低分类器性能。
在我们开始对 LTT 进行实际描述之前,让我们先看看前面的例子中哪里出错了:
一)直白。只是贴错标签了。标签应该是 y = 1,因为这明显是正面评价。
B) 不那么直白。在这里,我们有一个微妙的意见,它不容易被归类为积极或消极。只是介于两者之间。将每个句子单独分类可以达到这个目的,但是我们只有一个标签。因此,这个例子可能会因其模糊性而降低整体性能。
C) *这个比较难。*如果我们不知道数据规格,我们不会注意到我们在 x3 = 2.310 中遗漏了一个逗号。通过描述性分析,这一个显然可以被识别为异常值。但是很容易想到这样的情况,其中两个不同的变量在孤立时是有效的,但是在输入域中代表一个非法的,或者至少是非常不寻常的组合(年龄= 5,已婚= 1)。
D) 不可能。我们在这里无法手动找到任何东西,因为我们不知道相应的句子,这导致了嵌入。没关系,如果我们的向量 x 由五个或者一千个潜变量组成。我们盲目地强加了一个假设,即源句子是有效的和“好的”训练材料。
套索叛徒
为了解决这些例子,我提出了一个新的方法,叫做 LTT 。为什么我要把这个贴在媒体上?
- 这种方法在过去的一年里对我很有帮助,只是一些其他研究的副产品。
- 该方法简单明了且普遍适用。
- 比我所知道的一些杂志更多的人在阅读 Medium。
(*:在简短的文献研究中找不到任何东西。如果你知道 LTT 不是新的,请通知我)。
我们考虑一个元组(x d ∈ X,y d ∈ Y),一个排除变量 i d 用于观察 d 。排除变量 i d = 0 表示训练集中存在(x d ,y d )元组。如果 i d = 1,则元组被排除。
接下来,我们基于训练集定义外生性能度量 r,,它是而不是。这可能是验证数据集或更下游的性能。如果一个元组的包含对外生性能(Id= 0→r≤r+∈)和噪声)有积极贡献,如果它的包含使外生性能(Id= 0→r>r+∈)因某种贡献而恶化,则该元组被视为干净得到的排除向量I∈【0,1]^d是一个 D 维的单热点向量,并对 D 个观测值中哪些被排除(1)出训练集,哪些被包含(0)进行编码。
接下来,我们在不替换原始数据的情况下拟定了 S 个随机观测值:每个排除向量 i 是从具有参数p:It38】sb(p)∀s∈1,…, S. 的伯努利分布中随机采样的,这取决于数据大小、排除概率对于每个排除向量Is,存在相应的外部性能度量 rs 。外生性能度量是在减少的数据集上训练估计器及其随后在外生任务上评估的结果。我们假设,元组的排除独立地影响外生性能。
我们最终得到一个排除矩阵I∈【0,1]^(sxd)和一个性能度量向量 r ∈ ℜ^ S 。接下来,我们使用套索[3]和正则化参数𝜆.的一些值来回归 I 上的 r 如果训练集中的观察值 d 为套索回归的估计参数向量 𝛽 所指示的,可以用变化的𝜆s.多次重复这个过程
- 增加外生任务的性能(𝛽dt83】0),
- 降低外生任务的绩效(𝛽dt84】0),或者
- 对外生任务的表现无关紧要(𝛽 d = 0)。
之后,我们可以手动或自动干预并处理相应的观察结果。 LTT 方法的优势在于它的简单,并且它是模型不可知的。它的缺点是——你可能已经猜到了——你必须训练许多模型来获得外生性能向量 r.
我们假设,从所述训练集中移除观察值可能会影响外源性任务的执行。这种假设不一定适用于每个应用或性能指标。如果这种假设成立,则由用户来检查。
虽然 LTT 旨在过滤掉降低性能的观察结果,但是您显然可以使用该方法来调查观察结果,从而提高性能。
模拟
你可以在这个Colab笔记本里找到这篇文章的可复制代码。
为了演示 LTT 的应用和性能,我们继续进行模拟。我们用 2500 个观察值、25 个特征(其中 5 个是信息性的)和一个结果变量生成一个随机回归问题。我们将数据集分为训练集(50%)、验证集(25%)和测试集(25%)。这是我们的原始数据。训练数据集由 1250 个观察值组成。
对于训练集的结果变量 y (!),我们反转了 5%的观察值的符号,将非常简单的标签噪声引入到训练数据中。我们最终得到两个数据集:原始数据和噪声。前者包含未接触的原始数据,后者包含数据加上 y 中的标签噪声。
我们使用刀切采样(不考虑)来评估两个数据集上线性回归的性能。我们丢弃 5%的观察值,不替换,拟合回归,并评估外生性能。起泡,冲洗,重复 1500 次。我们的外生性能是验证数据的均方误差(MSE)。因此,我们最终得到 1500 毫秒。描述性结果如下所示:
- RAW:
Mean MSE = 0.04
Max MSE = 0.04
Min MSE = 0.04
Std。= 0.00 - 噪声 :
均值 MSE = 327.36
最大 MSE = 372.80
最小 MSE = 240.57
Std。= 23.23
通过改变 **y,**中大约 5%标签的符号,我们将平均验证 MSE 从 0.04 增加到 327.36 !(TBH:这比我预想的要多得多)
让我们继续为 LTT 创建排除矩阵 I 。排除矩阵 I 仅仅是一个具有预定义密度的随机稀疏布尔矩阵。密度表示在每次 LTT 迭代中要丢弃的观测值的百分比。该值表示每行的预期值。
接下来,我们迭代排除矩阵的行。每一行都对应于一个实验,在这个实验中我们删除了一部分观察结果。重要的是,我们存储套索的排除矩阵 I 。对于每次迭代,我们将一个任意的估计量拟合到缩减的数据集,并存储它在外生任务上的性能。
如前所述,产生的外部性能数组是我们的向量 r,。性能度量可以是任何值。你也可以使用熵、对数损失、R2 或者任何你想要的方法,只要它与任务相关并且是训练过程的外部因素。
接下来,我们使用 LASSO 在我们的排除矩阵 I 上回归外生性能 r 的结果向量。我们对𝜆 = (10e-4,10e-3,10e-2,10e-1,10e1)重复这个过程。以这种或那种方式对外生性能有贡献的观测值百分比(𝛽 ≠ 0)如下所示:
该图如下所示:对于𝜆 = 0.1,7.28%的观察值对外生绩效有积极贡献(𝛽 > 0)。相反,3.36%恶化了外生性能(𝛽 < 0). In total, 10.64% of the observations contribute to the exogenous performance.
We also see, that the percentage of observations with a positive contribution declines rather rapidly, as we increase 𝜆. This indicates, that there are probably a few observations in the training data with a relatively strong negative contribution. Recall: we inverted the sign of only 5% of the labels in the training data y. 根据图表,0.1 和 1 之间的𝜆似乎是分析数据中标签噪声的相当好的选择。
如果我们看看𝜆 = 0.1 的𝛽向量,我们会对我们的训练数据中真正发生的事情有更多的了解。记住,每个𝛽对应于训练数据集中的每个观察值 d 。
该图如下所示:排除指数为 d = 604 的观察值(i = 1),预期外生绩效 r 增加-39.23。更具体的说:排除观测值降低了验证数据上的 MSE,因为 MSE =∑ i d * 𝛽 d 。我们看到,多重观察对外生绩效有强烈的负面影响。
为了测试,如果我们正确地识别了标签,让我们执行一个健全性检查。我们根据𝛽的大小选择前 50 个系数,并将相应的指数与我们有意引入误差的标签的指数进行比较。
LTT 方法正确识别了顶部 50 噪声观测值中的 39 。显然还有改进和未来研究的空间。人们可以单独检查每个观察结果,或者编写一些定制的逻辑来进行更有效的过滤。但这取决于最终用户。
接下来,我们从训练数据中移除具有最大𝛽的 50 个观察值,并拟合新的估计量。根据新数据训练的估计器的外部性能(通过先前的刀切计算)如下:
- 噪声(用于对比) :
均值 MSE = 327.36
最大 MSE = 372.80
最小 MSE = 240.57
Std。= 23.23 - 清洁后的 :
平均 MSE = 4.75
最大 MSE = 5.61
最小 MSE = 2.25
Std。= 0.5
通过使用 LTT 从训练数据中移除噪声观测值,我们能够显著提高外部性能。
之前验证 MSE 是 327.36 ,现在是 4.75 。
满分是 0.04。然而,性能的提高已经非常显著,而且仅仅是通过从训练数据中删除了少得可怜的 50 个观察值而实现的。
复制测试数据的结果基本上复制了上面显示的结果,因此我在这里不再重复。
摘要
我们发展并实施了套索叛徒( LTT )的方法。 LTT 能够根据外部性能指标过滤掉噪声观测值。LTT 很容易应用,很容易获得,并且不知道潜在的问题。
如有疑问,请随时联系 me 。
附加说明
你可以在这个Colab笔记本里找到这篇文章的可复制代码。
如果你在研究中使用 LTT ,请引用这篇文章:
参考
- B.Frenay 和 M. Verleysen,“标签噪声存在下的分类:调查,”载于 IEEE 神经网络和学习系统汇刊,第 25 卷,第 5 期,第 845–869 页,2014 年。
- J.R. Quinlan,“决策树的归纳”,载于机器语言,第 1 卷,第 1 期,第 81–106 页,1986 年。
- R.Tibshirani,通过套索的回归收缩和选择,皇家统计学会期刊*。系列 B(方法论)*,第 58 卷,第 1 期,第 267-288 页,1996 年。
放弃
所表达的观点仅代表我个人,并不代表我的雇主的观点或意见。作者对本网站内容的任何错误或遗漏不承担任何责任或义务。本网站包含的信息按“原样”提供,不保证完整性、准确性、有用性或及时性。
延迟支付行为:这是英国经济的定时炸弹吗?
英国大企业支付实践数据分析
Jurica koleti 在 Unsplash 上拍摄的照片
对许多中小企业来说,延迟付款仍然是一个有争议的问题。大企业经常强加延长的条款或延迟付款,因为这使他们能够获得廉价的流动资金信贷。虽然这是常见的做法,但未能及时向供应商付款会对供应商的现金流和交易能力产生不利影响。在严重的情况下,延迟付款会危及企业的偿付能力。据估计,仅在英国,就有 260 亿英镑被拖欠中小企业的供应商逾期付款所套牢。及时付款每年可以避免 50,000 家企业死亡,这给英国经济造成了 25 亿英镑的损失。
为打击逾期付款行为,英国政府于 2017 年 4 月出台立法,要求英国大公司和有限责任合伙企业(LLP)每年发布两次关于其付款表现和政策的报告。不遵守这些规则是一种刑事犯罪,可能会导致巨额罚款。
延期付款是否会让企业感到羞愧,从而做出更好的行为?
丢人!丢人!
要回答这个问题,让我们看看商业能源部&产业战略(BEIS)发布的截至 2020 年 1 月 28 日的支付实践报告。
数据概述
迄今为止,7,887 家公司提交了 25,800 份报告。数据质量不高,数据准确性也值得怀疑。在这些报告中:
- 2632 份不完整,几乎没有任何有用的信息。
- 一些公司提交了相同的付款信息,一些公司在同一时期提交了几份文件,但包含不同的条目。
- 并非所有报告期都是六个月。例如,时间段的范围从 29 天到一整年。
- 公司报告的平均支付时间为 0 天和 1,000 天。
数据清理后,我们剩下一组来自 7287 家公司的23028 份报告。并非所有这些公司都一贯提交报告。
提交的报告不一致
一些公司在首次提交报告后,没有按照要求提交报告。或许对公司来说,未报告的罚款还不够大?
一个公司的平均支付时间是多少?
公司向供应商付款的平均天数分布
- 平均而言,一家英国公司向供应商付款需要 37 天 。
- 64%的公司平均支付时间超过 30 天
- 9%的公司给出的平均支付时间超过 60 天
发票延迟支付的比例是多少?
所有报表中延迟支付发票的百分比分布
- 平均而言,30%的款项比约定的期限晚支付
- 21%的公司报告延迟支付 50%或更多的发票
- 2%的公司报告延迟支付 90%或更多的发票
那些签了即时支付码的公司怎么样?
即时支付代码(PPC)为支付实践设定了标准。它由 CICM 特许信用管理协会代表 BEIS 管理。守则要求在 60 天内支付至少 95%的发票。
- 只有 9%的公司称自己是 PPC 成员
- PPC 的参与者报告平均支付时间为 34 天,25%的发票被延迟支付
- 相比之下,非参与者报告的平均支付时间为 37 天,30%的发票被延迟支付
PPC 签署方的合规性
上图显示,尽管他们是成员,但只有 47%的 PPC 参与者遵守《守则》的要求。
提供金融解决方案的公司表现更好吗?
在他们的报告中,公司被要求公布他们是否提供电子发票或供应链融资。这些是什么?为什么它们会对支付实践产生影响?
一张 e(电子)发票 包含来自供应商的数据,其格式可以无缝接入买方的应付账款系统。这减少了手动处理时间和错误。
供应链融资 涉及三方:买方、卖方和金融机构。工作原理:
- 供应商向买方开具发票
- 买方向金融机构确认发票已被批准支付
- 供应商直接获得价值(减去少量费用)
- 付款到期时,买方向贷方付款。
因此,供应商很快得到付款,买方可以利用延长的付款条件。这有助于买家和供应商稳定和管理他们的日常现金流。
电子发票
******
按电子发票可用性划分的主要支付行为分布**
- 24%的公司报告提供电子发票
- 那些不提供电子发票的公司报告平均支付时间为 36 天,并且延迟支付 30%的发票
- 对于提供电子发票的公司,虽然平均支付时间更长(40 天),但他们更有可能按时支付,28%的发票被延迟支付。
供应链融资:
******
按供应链融资的可用性划分的主要支付行为分布**
- 供应链融资的使用率很低,只有 7%的公司报告说他们提供供应链融资。
- 那些不提供供应链融资的公司报告平均支付时间为 36 天,30%的发票被延迟支付
- 对于提供供应链融资的公司,平均付款时间更长(49 天),但延迟付款的比例仍保持在 30%
随着时间的推移,我们会看到任何改进吗?
要求大型企业公布其支付方式的规定生效还不到三年。在这段时间内,没有证据表明大企业已经做了 180 度大转弯,但数据显示情况正在改善。
- 2017 年,公司支付的平均时间是 44 天。这一数字下降了一周多,公司报告 2019 年的平均时间为 36 天。
- 迟缴率的改善并不明显。发票延迟支付的比例从 2017 年的 30%降至 2019 年的 28%。
过去 3 年的付款等待时间
上图揭示了这一趋势。它表明,对于没有逾期的发票,付款时间有了较大的改善,但对于逾期的发票,变化较小。
我们学到了什么?
尽管大型企业被要求提交其支付行为的报告,但这种做法似乎是不完整和不一致的。剔除异常报告后,我们分析了 2017 年 4 月至 2020 年 1 月期间收到的来自 7,287 家公司的 23,028 份完整的支付实践报告。
- 一家公司支付发票的平均时间是 37 天,30%的付款晚于商定的条款。
- PPC 的参与者支付发票的速度更快(34 天),并且更及时地支付(25%)。然而,这些公司中不到一半符合 PPC 的要求,PPC 规定至少 95%的款项必须在发票开具后 60 天内支付。
- 提供电子发票的公司需要更长的时间来支付(40 天),但更善于在商定的期限内支付(28%)
- 提供供应链融资的公司比平均支付时间(49 天)多花了 12 天,在及时支付方面也不比普通人强。
有证据表明支付表现略有改善,但这需要注意,因为 2019 年的数据尚未完全成熟。在撰写本报告时,公司还有几天时间提交截至 2019 年的财务报告。
显而易见的是,这种被公开点名羞辱的特殊威胁并不是大企业推动支付条款限制的灵丹妙药。也许 2019 年 9 月出台的即时支付政策会让天平倾斜?也许 PPC 的签约国会被吓得顺从,因为去年 CICM 开始暂停会员资格。或者,我们能否接触到足够数量的用脚走路的中小企业,让表现不佳的企业表现良好?
谁知道呢?但这确实值得一看。
除非另有说明,本支付实务报告数据受 开放政府许可 v3.0 许可。
主题建模的潜在狄利克雷分配解释:算法和 Python Scikit-Learn 实现
用于主题建模的潜在狄利克雷分配算法和 Python Scikit-Learn 实现。
潜在狄利克雷分配是一种无监督的机器学习形式,通常用于自然语言处理任务中的主题建模。对于这些类型的任务,它是一个非常受欢迎的模型,其背后的算法非常容易理解和使用。此外,Scikit-Learn 库有一个非常好的算法实现,所以在本文中,我们将关注使用潜在 Dirichlet 分配的主题建模。
拉斐尔·沙勒在 Unsplash 上拍摄的照片
潜在狄利克雷分配概述
- 什么是主题建模
- 什么是无监督机器学习
- 潜在的狄利克雷分配应用
- 潜在狄利克雷分配算法
- 构建潜在的狄利克雷分配数据集
- 使用 Scikit-Learn 实现潜在的狄利克雷分配
什么是主题建模
主题建模是一项无监督的机器学习任务,我们试图发现能够描述一组文档的“抽象主题”。这意味着我们有一个文本集,我们试图找到单词和短语的模式,这些模式可以帮助我们对文档进行聚类,并按照“主题”对它们进行分组。
我把主题放在引号中,我称它们为抽象主题,因为这些不是显而易见的主题,我们不需要它们。我们假设相似的文档会有相似的单词和短语模式。
例如,假设我们有 100 个文本的集合。我们浏览了每一篇文章,发现其中有 10 篇包含“机器学习”、“训练”、“有监督的”、“无监督的”、“数据集”等词汇。我们可能不知道这些词是什么意思,也不在乎。
我们在这里只看到一种模式,即 10%的文章包含这些词,我们得出结论,它们应该包含在同一主题中。我们实际上不能命名主题,同样,这是不必要的。我们可以把这 10 篇文章归纳成同一个主题。当我们得到一个我们从未见过的新文本时,我们查看它,我们发现它包含这些单词中的一些,然后我们将能够说"嘿,这与其他 10 篇文章属于同一类别!
什么是无监督机器学习
无监督机器学习是一种机器学习模型,在这种模型中,我们试图在没有任何先验知识,也不知道我们是否正确的情况下推断数据模式。使用这种类型的模型,我们试图在数据中找到模式,然后我们可以使用它们来聚类、分类或描述我们的数据。
**潜在狄利克雷分配是一种无监督的机器学习。**我们在开始之前并不知道文档的主题,只能指定要找多少个主题。在解析的最后,我们可以查看结果并判断它们是否有帮助。
潜在的狄利克雷分配应用
**潜在狄利克雷分配主要用于主题建模。**现在我们可以考虑为什么我们需要主题建模。
通过主题建模,我们可以对一组文档进行聚类,从而将更多相似的文档分组在一起,将更少相似的文档放入不同的类别中。这可以用来分析和理解数据集。
我们还可以根据这种算法自动组织我们的文档,然后,当一个新文档出现在数据集中时,我们可以自动将其放入正确的类别中。
此外,这可以用于改进处理文本文档的应用程序中的文本搜索和文本相似性特征。
潜在狄利克雷分配算法
潜在狄利克雷分配算法只需几个简单的步骤就能工作。我们需要做的唯一预处理是我们在几乎所有的文本处理任务中所做的:从我们所有的文档中删除停用词(很可能在大多数文档中出现并且不会带来任何价值的词)。
- 建立将由 LDA 算法识别的多个 n 主题。怎样才能找到完美的题目数量?嗯,这不是很容易,通常是一个反复试验的过程:我们尝试不同的值,直到我们对结果满意。或者,也许我们很幸运,我们有关于数据集的其他信息,允许我们建立完美的主题数量。
- 将每个文档中的每个单词分配给一个临时主题。这个临时话题一开始会是随机的,但是下一步会更新。
- 对于这一步,我们将遍历每个文档,然后遍历文档中的每个单词,并计算 2 个值
- 该文档属于某个主题的概率;这基于该文档中有多少单词(除了当前单词)属于当前单词的主题
- 因为当前单词而被分配给当前单词的主题的文档的比例。
我们将运行步骤 3 一定次数(在开始运行算法之前建立)。最后,我们将查看每个文档,根据单词找到最流行的主题,并将该文档分配给该主题。
构建潜在的狄利克雷分配数据集
有时,当我了解一个新概念时,我喜欢建立自己的小数据集,以便更快地学习。我喜欢这样有两个原因:
- 没有浪费时间清理数据。我知道这对于一个机器学习工程师或者数据科学家来说是非常重要的技能,但是这个话题不是这里的重点。如果我想学习一个算法,我会建立我自己的小而干净的数据集,让我可以玩它。
- 更快的试错过程:建立我自己的数据集将允许我使它足够大以提供结果,但又足够小以快速运行。
对于 LDA 算法,我将获得 6 个维基百科页面的摘要部分(2 个关于城市,2 个关于技术,2 个关于书籍),并将它们用作 LDA 算法要聚类的文档。然后,我将提供另一页的第 7 个摘要,并观察它是否被放在正确的类别中。
为了从维基百科中提取文本,我将使用维基百科 python 包。
pip3 install wikipedia
我将使用一个小类来下载摘要。
import wikipedia
class TextFetcher:
def __init__(self, title):
self.title = title
page = wikipedia.page(title)
self.text = page.summary
def getText(self):
return self.text
然后我可以用这个类提取数据。正如我前面提到的,唯一需要做的预处理是删除停用词。为此,我将使用 nltk 包。
def preprocessor(text):
nltk.download('stopwords')
tokens = word_tokenize(text)
return (" ").join([word for word in tokens if word not in stopwords.words()])
if __name__ == "__main__":
textFetcher = TextFetcher("London")
text1 = preprocessor(textFetcher.getText())
textFetcher = TextFetcher("Natural Language Processing")
text2 = preprocessor(textFetcher.getText())
textFetcher = TextFetcher("The Great Gatsby")
text3 = preprocessor(textFetcher.getText())
textFetcher = TextFetcher("Machine Learning")
text4 = preprocessor(textFetcher.getText())
textFetcher = TextFetcher("Berlin")
text5 = preprocessor(textFetcher.getText())
textFetcher = TextFetcher("For Whom the Bell Tolls")
text6 = preprocessor(textFetcher.getText())
docs = [text1, text2, text3, text4, text5, text6]
既然我们已经准备好了数据集,我们就可以继续算法实现了。
使用 Scikit-Learn 实现潜在的狄利克雷分配
scikit-learn 包很好地实现了 LDA 算法。我们今天要用这个。
pip3 install scikit-learn
单词矢量化
第一步是把我们的单词转换成数字。虽然我们正在与文字打交道,但许多文本处理任务都是用数字来完成的,因为它们对计算机来说更容易理解。
scikit-learn 包中的 CountVectorizer 类可以将一个单词转换成实数向量。让我们用我们的数据集来做这件事。
countVectorizer = CountVectorizer(stop_words='english')
termFrequency = countVectorizer.fit_transform(docs)
featureNames = countVectorizer.get_feature_names()
现在,让我们将潜在的狄利克雷分配算法应用于我们的单词向量,并打印出我们的结果。对于每个主题,我们将打印前 10 个单词。
lda = LatentDirichletAllocation(n_components=3)
lda.fit(termFrequency) for idx, topic in enumerate(lda.components_):
print ("Topic ", idx, " ".join(featureNames[i] for i in topic.argsort()[:-10 - 1:-1]))
结果是这样的:
Topic 0 berlin city capital german learning machine natural germany world data
Topic 1 novel fitzgerald gatsby great american published war book following considered
Topic 2 london city largest world europe populous area college westminster square
正如我们之前所讨论的,这些信息可能不会告诉你太多,但它足以让我们正确地分类一个关于巴黎的新文本(在我们再次矢量化这个文本之后)。
text7 = preprocessor(TextFetcher("Paris").getText())
print (lda.transform(countVectorizer.transform([text7])))
结果是这样的:
[[0.17424998 0.10191793 0.72383209]]
这 3 个是我们的文本属于 LDA 算法生成的 3 个主题之一的概率。我们可以看到,最高概率(72%)告诉我们,这段文字也应该属于第 3 个题目,所以在同一个讲城市的题目里。我们可以看到,这是一个从非常小的数据集获得的非常好的结果。
结束语
在本文中,我们讨论了潜在的狄利克雷分配算法的一般概述。然后,我们建立了一个自己的小数据集,并测试了算法。我对这个结果非常满意,希望你也是。
本文原载于 程序员背包博客 。如果你想阅读更多这类的故事,一定要访问这个博客。
非常感谢您阅读本文!对更多这样的故事感兴趣?在 Twitter 上关注我,地址是@ b _ dmarius,我会在那里发布每一篇新文章。
潜在的狄利克雷分配:直觉,数学,实施和可视化与 pyLDAvis
TL;DR — 潜在狄利克雷分配 (LDA,有时 LDirA/LDiA)是在文本数据中寻找主题的最流行和可解释的生成模型之一。我已经提供了一个基于网络搜集的职位描述数据的示例笔记本。虽然在像 20Newsgroups 这样的规范数据集上运行 LDA 会提供更清晰的主题,但重要的是要见证主题识别在“野外”有多么困难,以及你可能如何实际上找不到清晰的主题——使用无监督学习,你永远无法保证找到答案!
- 致谢:对我理解最有帮助的是路易斯·塞拉诺在 LDA (2020)上的两个视频。很多直觉部分都是基于他的解释,我强烈建议你访问他的视频进行更深入的剖析。
图 1.0 —生成文档的 LDA“机器”
内容:
直觉
假设您有一个不同新闻文章的集合(您的文档的语料库,并且您怀疑在所述语料库中有几个经常出现的主题——您的目标是找出它们是什么!为了达到这个目标,你需要做一些关键的假设
- d分布假设 : 频繁出现在一起的词,很可能意义相近;
- 每个题目都是不同单词的混合(图 1.1);
- 每个文档都是不同主题的混合体(图 1.2)。
图 1.1 —混合单词的主题
在图 1.1 中,你会注意到主题“健康和医学”有各种各样的与之相关的词,其关联程度*(“癌症”比“血管”或“锻炼”更紧密)。请注意,不同的单词可以与不同的主题相关联,例如单词“cardio”。*
图 1.2 —混合主题的文档
在图 1.2 中,你会看到一个单独的文档可能涉及多个主题(如左边的颜色代码所示)。像“受伤”和“恢复”这样的词也可能属于多个主题(因此我用了不止一种颜色)。
现在 LDA 是一个生成模型*——它试图确定生成文章和话题的潜在机制。想象一下,如果有一台具有特定设置的机器可以输出文章,但我们看不到机器的设置,只能看到它产生的内容。LDA 创建一组具有不同设置的机器,并选择给出最佳拟合结果的机器(Serrano,2020)。一旦找到最好的一个,我们看一看它的“设置”,并从中推断出主题。*
那么这些设置是什么呢?
首先,我们有一个叫做狄利克雷*(发音像迪-里什-雷)的东西,先于主题。这是一个表明我们的话题有多稀疏或者有多混杂的数字。在 L Serrano 的视频里(我强烈推荐!)他阐述了如何在视觉上将其视为一个三角形(图 1.3),其中点代表文档,它们相对于角的位置(即主题)代表它们与每个主题的关系(2020)。所以一个非常接近“运动”顶点的点将几乎完全是关于运动的。*
图 1.3 —主题的狄利克雷分布
在左边的三角形中,文档被很好地分开,大部分文档被整齐地塞到角落里(这对应于一个低的 Dirichlet 先验,alpha <1); on the right they are in the middle and represent a more even mix of topics (a higher Dirichlet prior, alpha> 1)。查看图 1.2 中的文档,考虑一下主题的组合,想想你认为它应该放在右边三角形的什么位置(我的答案是它应该是最靠近体育角的上方的点)。**
第二,我们有项*(我们词汇表中的所有单词)的狄利克雷先验。这个数字(它的名字是*贝塔)与阿尔法的功能几乎完全相同——除了它决定了主题如何在术语 中分配。
图 1.4 各项的狄利克雷分布;这些数字与每个单词与每个主题的关联程度成正比
正如我们之前所说的,主题被假设为不同术语的混合(更准确地说是分布*)。在图 1.4 中,“运动”主要是指“伤害”。“健康&医学”在“心脏”和“损伤”之间徘徊,与“祈祷”一词毫无关联。*
**但是等等,我们的词汇不仅仅由三个单词组成!你说得对!我们可以有一个由 4 个单词组成的词汇表(如图 1.5 所示)!麻烦在于,可视化一个典型的由 N 个单词组成的词汇表(其中 N 可能是 10000)需要一个广义版本的三角形,但是是在N-1维度中(这个术语是 n-1 单形)。这就是视觉效果停止的地方,我们相信更高维度的数学将会像预期的那样发挥作用。这也适用于主题——我们经常会发现自己有 3 个以上的主题。
图 1.5-根据术语的分布,哪个主题是红色的?
一个重要的澄清:在 LDA 中,我们从α和β的值开始作为超参数,但是这些数字仅仅告诉我们我们的点(文档/主题)是否通常集中在它们三角形的中间或者更靠近角落。三角形(单纯形)内的实际位置由机器猜测——猜测不是随机的,它被狄利克雷先验加权。
因此,机器创建了两个狄利克雷分布,将文档和主题分配给,然后基于这些分布生成文档(图 1.6)。那么,最后一步是如何发生的,即代部分?
图 1.6 —生成文档的 LDA“机器”
还记得在开始时我们说过主题被看作是单词的混合/分布,文档被看作是主题的混合/分布吗?在图 1.7 中从左到右,我们从一个文档开始,在三角形的某个地方,在我们的 3 个主题之间撕裂。如果它在“体育”角附近,这意味着文档将主要是关于体育的,也会提到一些“宗教”和“健康医学”。所以我们知道文档的主题构成→因此我们可以估计会出现什么单词*。我们将主要从体育中抽取(即随机抽取)单词,一些来自健康&医学,极少量来自宗教(图 1.7)。有个问题问你:看图 1.7 底部的三角形,你觉得字 2 会不会上来?*
图 1.7 —两种狄利克雷分布如何影响我们的文档生成
答案是它可能:记住主题是单词的混合。你可能会想,单词 2 与黄色(宗教)主题有很强的相关性,由于这个主题在本文档中很少出现,单词 2 不会出现太多。但是要记住 a. 单词 2 也与蓝色、体育话题和 b .单词是概率上的样本,所以每个单词都有一些非零的出现几率。
我们最终生成的文档中的单词(在图 1.7 的右端)将与原始文档中的单词进行比较。我们不会得到相同的文档,但是当我们将一系列不同的 LDA“机器”与一系列不同的发行版进行比较时,我们发现其中一个比其他的更接近于生成文档,这就是我们选择的 LDA 模型。
数学
正常的统计语言模型假设您可以通过从单词的概率分布中进行采样来生成文档,即对于我们词汇表中的每个单词,都有一个该单词出现的关联概率。
LDA 给这种安排增加了一层复杂性。它假设了一个主题列表。每个文档 m 是这些 k 主题的概率分布,每个主题是我们词汇表 V 中所有不同术语的概率分布。也就是说每个词在每个题目中出现的概率是各种各样的。
生成文档的全概率公式如下图 2.0 所示。如果我们将它分解,在右边我们会得到三个乘积和:
- 主题随词条的狄利克雷分布:(对应图 1.4 和 1.5)对于每个主题 i 在 K 个主题中, i. 的词的概率分布是什么
- *文档在主题上的狄利克雷分布:(对应图 1.3)对于我们规模为 *M、*的语料库中的每个文档 *j、的主题概率分布是什么
- 给定文档中某个主题出现的概率 X 给定主题中某个单词出现的概率:(对应图 1.7 中的两个矩形)某个主题、、出现在该文档中的可能性有多大,然后给定那些主题,某个单词、、出现的可能性有多大。
图 2.0 — LDA 公式
前两个和包含对称狄利克雷分布,这是我们的文档和主题的先验概率分布(图 2.1 显示了一组一般的狄利克雷分布,包括对称分布)。
图 2.1-由 emperistor-Own 工作,CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=49908662
第三个和包含两个多项式分布,一个针对主题,一个针对单词,即我们从主题的概率分布中抽取主题,然后对于每个主题实例,我们从该特定主题的单词的概率分布中抽取单词。
正如在直觉部分末尾提到的,使用最终概率,我们试图生成与原始文档中相同的单词分布。实现这一点的概率非常非常低*,但是对于α和β的某些值,概率会更低。*
解读 LDA 模型及其主题
我们用什么标准来发现我们的潜在主题?正如雪莉和西维尔所说:
“为了解释一个主题,人们通常检查该主题中最可能出现的术语的排序列表,[……]。以这种方式解释主题的问题是,语料库中的常用术语经常出现在多个主题的列表顶部附近,这使得很难区分这些主题的含义。”(2014)
这正是我们在下一节实现中遇到的问题。因此,我们使用另一种衡量标准来解释我们的主题— 相关性 (Shirley 和 Sievert,2014)。
关联
这是一个可调整的指标,它可以平衡某个术语在特定主题中的出现频率与该术语在整个文档语料库中的出现频率。
换句话说,如果我们有一个在某个主题中非常流行的术语,相关性允许我们衡量它的流行程度有多少是因为它非常特定于该主题,有多少是因为它只是一个到处出现的作品。后者的一个例子是工作描述数据中的“学习”。当我们用一个较低的 lambda 调整相关性时(即惩罚那些碰巧在所有主题中频繁出现的术语),我们看到“学习”并不是一个特别的术语,它之所以频繁出现只是因为它在语料库中普遍存在。
相关性的数学定义是:
- 相关度
- ⍵——我们词汇中的一个术语
- k — 我们的 LDA 制作的主题之一
- λ — 可调权重参数
- 𝝓kw —某个术语出现在特定主题中的概率
- pw—一个词在整个语料库中出现的概率
*除了λ, *λ,所有项都是从 LDA 数据和模型中导出的。我们将在下一节中调整 lambda,以帮助我们获得更有用的见解。原论文作者将 lambda 保持在 0.3 到 0.6 的范围内(Shirley 和 Sievert,2014)。
实现和可视化
sklearn 的 LatentDirichletAllocation 模型的实现遵循大多数 sklearn 模型的模式。在我的笔记本中,我:
- 预处理我的文本数据,
- 将其矢量化(产生文档术语矩阵),
- Fit _ 使用 LDA 转换它,然后
- 检查结果,看看是否有任何紧急的,可识别的主题。
最后一部分是高度主观的(记住这是无监督学习*),并不能保证揭示任何真正有趣的东西。此外,识别主题(如聚类)的能力取决于您对数据的领域知识。我还建议修改 alpha 和 beta 参数,以符合您对文本数据的期望。*
我使用的数据是来自 indeed.co.uk 的职位描述数据。除了文本,dataframe 还有许多其他属性,包括我是否使用了搜索术语“数据科学家”、“数据分析师”或“机器学习工程师”。我们可以在 LDA 主题中找到一些原始搜索类别吗?
在下面的要点中,你会看到我已经将我的数据矢量化,并将其传递给 LDA 模型(这发生在 data_to_lda 函数下)。
运行这段代码和 print_topics 函数将产生如下结果:
*Topics found via LDA on Count Vectorised data for ALL categories:
Topic #1:
software; experience; amazon; learning; opportunity; team; application; business; work; product; engineer; problem; development; technical; make; personal; process; skill; working; science
Topic #2:
learning; research; experience; science; team; role; work; working; model; skill; deep; please; language; python; nlp; quantitative; technique; candidate; algorithm; researcherTopic #3:
learning; work; team; time; company; causalens; business; high; platform; exciting; award; day; development; approach; best; holiday; fund; mission; opportunity; problem
Topic #4:
client; business; team; work; people; opportunity; service; financial; role; value; investment; experience; firm; market; skill; management; make; global; working; support...*
“print_topics”功能按概率降序给出每个主题的术语,其中可以提供信息。正是在这个阶段,我们可以开始尝试从我们的模型中标记出新出现的、潜在的主题。例如,主题 1 似乎与 ML 工程师的技能和需求关系不大(提到“amazon”与使用 AWS 有关——这是我在另一个笔记本中从项目的 EDA 阶段发现的);与此同时,鉴于“市场”、“金融”、“全球”等术语,主题 4 显然更面向客户或面向业务。
现在这两个类别对你来说可能有点牵强,这是一个公平的批评。你可能已经注意到,使用这种方法来确定主题是很难的。所以,让我们转向 pyLDAvis!
皮尔戴维斯
使用 pyLDAvis,LDA 数据(在我们的例子中是 10 维的)已经通过 PCA(主成分分析)被分解为仅 2 维的。因此,为了可视化的目的,它被展平了。我们有十个圆,每个圆的中心代表我们的主题在潜在特征空间中的位置;主题之间的距离说明了主题相似(不相似)的程度,圆圈的面积与每个主题对应的文档数量成正比。
下面我展示了如何在 pyLDAvis 中插入一个已经训练好的 sklearn LDA 模型。令人欣慰的是,负责将最初的 LDAvis (是 R 模型)改编成 python 的人让它与 sklearn 有效地通信。
在图 3.0 中是我们生成的图:
图 3.0 — pyLDAvis 交互图
解读皮尔戴维斯地块
LDAvis 图分为两部分——一部分是我们的 n 维 LDA 数据的二维“扁平”重绘图,另一部分是交互式的、变化的术语分布水平条形图。图 A1.0 显示了这两种情况。需要注意的一个重要特征是,右边的条形图以相关性递减顺序显示了主题中的术语,但条形显示了术语的频率。红色部分代表纯粹在特定主题内的术语频率;红色和蓝色表示文档语料库中的总术语频率。**
调整λ(λ)**
如果我们设置λ等于 1,那么我们的相关性完全由该词与该主题的概率给出。将它设置为 0 将导致我们的相关性由该词对主题的特异性决定-这是因为右边的词将某个词在特定主题中出现的概率除以该词一般出现的概率-因此,当我们使用较低的 λ 值时,高频词(如“团队”、“技能”、“业务”)的相关性将大大降低。
图 3.1-将λ设置为 1
在图 3.1 中 λ 被设置为 1,你可以看到这些术语通常与占主导地位的术语相匹配(例如,在我们打印出的每个主题的最流行术语中)。这只针对主题 1,但是当我改变主题时,前 30 个最相关的术语的分布几乎没有变化!
现在,在图 3.2 中 λ 被设置为 0,术语完全改变了!
图 3.2-λ设置为 0
现在我们有了非常具体的术语,但是请注意顶部的刻度——最相关的词出现了大约 60 次。超过 6000 英镑后,下降幅度相当大!还有,这些话不一定会告诉我们什么有趣的东西。如果你用这个 lambda 值选择一个不同的主题,你将继续得到不一定那么重要的垃圾术语。
在图 3.3 中,我将 lambda 设置为 0.6,我正在探索主题 2。马上就有一个围绕工程师工作的重要主题,比如“aws”、“云”和“平台”。
图 3.3-λ= 0.6
用 pyLDAvis 可以做的另一件大事是直观地检查给定单词的条件主题分布,只需将鼠标悬停在单词上即可(图 3.4)。下面我们可以看到有多少“NLP”被分成几个主题——不是很多!这让我更有理由相信主题 6 关注的是 NLP 和基于文本的工作(像“语音”、“语言”、“文本”这样的术语在这方面也有帮助)。对我来说,一个有趣的发现是“研究”和“博士”在这个话题中如此强烈地同时出现。
图 3.4——“自然语言处理”的条件主题分布
这是否意味着行业中 NLP 为重点的角色比其他角色需要更高的教育程度?他们是否比其他职位更需要以前的研究经验?NLP 的角色可能更专注于实验技术,因此需要具有前沿知识的人吗?
虽然生成的交互图不能提供具体的答案,但它可以为我们提供一个进一步研究的起点。如果你在一个可以运行主题建模的组织中,你可以使用 LDA 的潜在主题为调查设计、A/B 测试提供信息,甚至将其与其他可用数据相关联,以找到有趣的相关性!
祝你在话题建模上好运。如果你喜欢这篇冗长的文章,请给我你认为合适的掌声。如果你对 LDA 有所了解,并且认为我做了一些甚至是部分错误的的事情,请给我留言(反馈是一份礼物,诸如此类)!
参考文献
- Serrano L. (2020)。在线访问:潜在狄利克雷分配(第 1 部分,共 2 部分)
- 希沃特 c .和雪莉 K (2014)。LDAvis:一种可视化和解释主题的方法。在线访问:交互式语言学习、可视化和界面研讨会会议录