TowardsDataScience 博客中文翻译 2016~2018(二百一十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

NHL 分析:投篮,篮板和微弱信号

原文:https://towardsdatascience.com/nhl-analytics-shots-rebounds-and-weak-signals-c293ba8c635f?source=collection_archive---------15-----------------------

浅析射门及其对曲棍球比赛获胜的影响

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

任何职业运动都是百分比练习。职业选手在这项运动中是所有人中排名前 99.99%的人。这一事实扭曲了我们对优秀和不优秀玩家的看法,也扭曲了我们对游戏中微小但重要的部分的影响的估计。NHL 也不例外——事实上,NHL 的明显随机性(与 NFL 和 NBA 相比,最好的球队赢得最少的比赛)可能会使它最终变得更加重要。一个小小的优势可能会导致赢得比赛的系统性增加,并大幅增加将奖杯带回家的可能性。在我们的分析中,我们将致力于发现和揭露这些小想法,并揭示一些潜在的游戏破坏者。

注意——下面的交互式图表在小型移动设备上效果不佳。如果你想探索它们,最好在台式机或平板电脑上观看。

首先是篮板。

守门员训练多年来学习如何防止他们,整个球队专注于创造他们。看到一个从球门区弹起的击球落在队友等待的球棍上,通常会导致进球。我们想知道这有多重要?不仅知道篮板球是如何发生的,而且知道在哪里、什么时候以及为什么会发生,可能会让我们增加获得篮板球的机会——从而带来更多的进球和更多的胜利。

什么是反弹?

在我们理解为什么篮板是至关重要的之前,我们需要准确理解什么是篮板。理解这一点需要大量的数据;幸运的是,NHL 主持并发布了绝大多数游戏中的统计数据。剧本被精确地记录下来,这使我们能够挖掘和提取一些有趣的花絮。在这一块,我们看到了超过 7000 场比赛和超过 400,000 个镜头。

因为我们不能仅仅说哪些投篮被认为是篮板(这在原始数据中没有分类),我们可以通过以下方式寻找统计分类:

  1. 查看所有镜头之间的时间,以及;
  2. 寻找标准评分率与提高的评分率之间的显著偏差

假设是,如果篮板确实带来更好的得分机会,我们会看到一个更好的得分率。下面是一张图表,显示了得分率与两次投篮之间的时间的关系。

显然,对于任何小于三秒的时间,得分率都有显著的增加(在两秒时达到峰值)。如果投篮和反弹之间的持续时间是两秒,那么得分的可能性几乎是四倍!另一个不足为奇的发现是——与所有其他投篮相比,篮板导致的投篮次数和进球次数大幅增加。

因为我们可以有把握地说,在第一次投篮之后有三秒钟的时间,得分的概率会急剧增加,所以我们可以有把握地把这个范围内的所有投篮都归类为“篮板”这对这件作品的其余部分非常重要。

1–2–3

为什么两秒后的篮板比一秒后的篮板好?为什么 2 秒后的篮板比 5 秒后的篮板重要得多?

  • 如果下一次射门发生在三秒钟之内,守门员没有足够的时间复位,他就不在位置上了。
  • 不到一秒的投篮很可能是一个接一个的快速投篮(想想试图把冰球塞进去)。更有可能的是球员没有抢到干净的篮板。一秒钟内拍摄的照片比两秒钟内拍摄的照片多得多,这一事实进一步证明了这一点。
  • 两秒钟的镜头往往是最佳拍摄点。在两秒钟时,守门员没有足够的时间复位,而球员有时间射门。2 秒出手次数的大幅下降也强化了这一点(把这当成篮板球的圣杯吧)。

现在我们知道了反弹是什么,我们可以看看它们有多重要。

Roughly 5% of shots that constitute rebounds lead to over 15% of the goals scored.

虽然抢篮板的投篮只占所有投篮的 5%,但他们占所有进球的 15%以上。在下图中,我们可以看到这些镜头在热图上的位置。

大多数镜头来自意料之外的地方。如果我们换个角度来看这个问题——从一个特定的位置投篮可能会导致篮板,我们会发现一些更分散的东西。你离禁区越近,投篮就越有可能导致反弹,但是投篮导致反弹的概率并不像实际投篮那样偏斜。

这指向了一个假设,即投篮地点和他们导致反弹的可能性(即得分机会)之间的关系没有一些人想象的那么强。也许球队应该更少地关注正确的投篮,而更多地关注更多的投篮?

好镜头 vs 更多镜头

从我们目前所看到的来看,假设一支把更多投篮机会转化为篮板的球队更有可能赢得比赛是有道理的。我们还注意到,在非常接近夜晚的时候拍摄的镜头非常集中,尽管这些镜头很难获得。也许球队应该更关注投篮而不是正确的投篮?

从分析的数据来看,更高的篮板球率实际上并不意味着更高的胜率。事实上,较高的反弹率与较低的胜场数相关联!

我们还发现,更高的篮板率与投篮次数更少有很大关系,而且投篮次数越多,胜率越高。

有必要在上下文中思考上述结果。所有的图表都有很大的差异,但是一些数据点有明显的趋势。我们可以看数据的另一种方式是看游戏水平而不是季节水平。有趣的是,我们发现了相反的效果。当我们一场一场地看时,我们看到投篮次数少的球队往往赢得更多的比赛(以微弱优势)。也许一场比赛中篮板率较低的球队得分更高?

要知道每队场均篮板数只有 3.9 个。在大多数情况下,篮板最多的球队只多一个篮板。

这是违反直觉的——以至于我花了很多时间梳理代码寻找错误。一个合理的解释可能是,在一个赛季中,一支投篮次数很少、篮板率很低的球队确实太努力寻找正确的投篮。相反,一个有很多投篮机会的团队会投更多的球(导致更好的结果)。也许游戏与游戏之间的数据差异太大(在我之前已经有很多人做过类似的分析)以至于它们毫无意义?

如果你还是不相信我?这是获胜队和失败队的击球对比图。完全是噪音。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

指出这一点的一个具体例子是 2017-2018 赛季的卡罗莱纳飓风。他们场均投篮次数第四高,场均投篮次数最少,但是他们没有进入季后赛。

接下来的步骤

我的分析得出的一个主要结论是,曲棍球是一项非常复杂的运动。很难指出个别的统计数字并作出明确的陈述。可以肯定的是,我不是第一个登陆这里的人。

然而,我们确实在更长时期的统计数据中发现了有意义的关系(尽管是微弱的关系)。可能的情况是,虽然单个游戏的统计数据非常嘈杂(或者,事实上,几乎是随机的),但我们可以在季度或月度水平上找到更好的关系。

本系列的下一篇文章将关注团队,以更好地理解投篮、篮板、团队行为和胜利之间的关系。

附言:

  1. 接下来,我将对大部分分析进行基于代码的演练。有兴趣就跟着我吧!
  2. 我正在为这种类型的分析建立一个高级分析应用程序,我正在寻找一个软件/数据工程师来帮忙。框架是 Python 使用 Dash/Plotly。有兴趣的话 Ping 我@ jessemoore07@gmail.com。

演职员表:

这里的原始数据集—https://www.kaggle.com/martinellis/nhl-game-data

绘制冰场的起点—https://modern data . plot . ly/NHL-shots-analysis-using-plot ly-shapes/

NHS 实验室需要数据科学

原文:https://towardsdatascience.com/nhs-laboratories-need-data-science-c93f7983302c?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Ousa Chea on Unsplash

当你感觉不舒服,你去看你的家庭医生,或者当你感觉非常不舒服,你发现自己躺在医院的病床上,你可能会发现临床工作人员收集你的体液,并把它们送到一些神秘的地方进行分析。大批技术人员、科学家和临床工作人员占据了样本的目的地。利用新老技术,生物医学科学家(像我一样)开始生成反映取样时你的状况的数据。我的背景是传染病诊断学,所以我的任务是培养和研究占据你样本的致病(“有害”)细菌。首要目标是确定感染的原因,并告知临床医生哪些抗生素能有效杀死“细菌”。

我和许多其他人一样,认为在这个过程中产生的数据量是天文数字,但目前还没有得到充分重视。该数据的主要用途是为临床医生生成报告,以建议疾病的诊断和治疗。除此之外,这些数据并没有被大量使用,而是闲置在庞大的数据库中。英国公共卫生部做了大量工作来提供人口健康的概况,但仍有大量数据没有超出其主要目的。我认为这是由于一线缺乏数据科学专业知识。

我们在谈论多少数据?

皇家病理学家学会很好地总结了 NHS 病理服务的重要性:

  • 英格兰有 105 家医院提供病理服务
  • 每年处理超过 10 亿次测试,总计花费 22 亿美元
  • 英国最大的病理学服务机构 Barts NHS Trust 每年进行 2600 万次检测

为了说明仅在医学微生物学领域就产生了多少数据,让我们考虑一个实验室和一种样本类型。牛津大学医院微生物实验室每年处理超过 60 万份独特的样本。被称为血液培养的样本将占据这 600k 样本中的一小部分。

血液样本被放入血液培养瓶中(见下文),然后在专门的机器上培养,以寻找细菌生长的迹象。当在瓶中检测到生长时,将其取出并进一步分析(将血液涂在各种生长培养基上用于鉴定和抗生素敏感性测试)。血液培养的目的是检测血液感染(菌血症),这是一种严重的疾病,表明细菌已经渗入循环系统,可能导致严重的后果,如心内膜炎或败血症。幸运的生物医学科学家预计每天会有 4 到 5 个阳性血液培养,但实际上更有可能是每天 10 到 20 个阳性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

By Strolch1983 — Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=792954

对于单一阳性血培养,将收集/生成以下数据:

  • 与患者相关的人口统计信息(年龄、性别、位置等)
  • 描述患者状况的临床细节
  • 唯一标识符,将该样本数据与在该患者身上收集的所有其他样本相关联
  • 孵化数据;显示细菌指标随时间变化的时间序列数据
  • 细菌在各种生长介质上生长的图像(仅在采用自动读数技术的实验室中,如 Kiestra/Copan WASP,这种技术越来越受欢迎)
  • MALDI-TOF 质谱产生的光谱数据;用于细菌鉴定
  • 细菌分离物的生化特征(15+化学相互作用);用于初始细菌鉴定或在 MALDI-TOF 不可用/不可靠时广泛使用
  • 细菌基因组数据;偶尔需要对细菌分离株进行基因分型(通常是为了控制感染),但预计细菌分离株的基因分型分析将成为规范
  • 抗菌药物敏感性数据;这是与细菌分离物对过多抗生素的敏感性相关的数据

因此,像血液培养这样的样本可能会产生数十甚至数百个数据点,并生成不同格式的数据(图像、光谱、分类和数字)。现在,请记住,这种类型的分析已经进行了几十年,并且在过去的 15 年中(至少)这些数据一直以数字形式存储。毫无疑问,NHS 实验室产生了难以想象的大量数据。

数据科学能为 NHS 实验室做什么?

任何 NHS 实验室的主要关注点是提供一个成本有效但准确的测试结果,可以就病人的情况向临床医生提出建议。然而,围绕这一主要目标有一系列活动,每一项活动对其执行都至关重要。为了运行一个现代化的实验室,必须考虑 IT 基础设施、自动化分析平台、质量控制措施、库存控制和消耗品的使用,以及员工的管理和培训。数据科学的技术不仅可以应用于主要目标,而且还可以帮助承担保持船只漂浮的任务。

提高质量和收回控制权

实验室要想通过 UKAS 检测,就必须证明用于生成测试结果的技术和自动化平台是经过验证的,并以符合 ISO 标准的方式进行控制。随着工作量的增加和测试复杂性的增加,在人员短缺和预算削减的背景下,达到这些标准从未像今天这样困难。值得称赞的是,英国国家医疗服务体系的病理学服务仍然能够提供高质量的服务。

在分析测试质量或验证新程序时,需要依赖小样本和经典的统计推断,因为无法获得进行多变量数学建模所需的专业知识和工具。在某些情况下,趋势分析是由质量保证软件自动进行的,但更多情况下,这只是查看变化,并在值超过阈值时通知科学家。可用于质量指标预测建模的大型数据集很少使用。

在这一领域有一些令人兴奋的进展,有文献描述了使用统计指导协议和机器学习来检测分析前错误。让生物医学科学家非常沮丧的是,在样本到达实验室之前,分析中的错误往往是不可避免的。在同一份杂志中,你可以找到通过使用人工神经网络实现测试验证自动化的例子,在不影响患者安全的情况下显著减少了工作量。

最重要的是,通过利用本地数据、拥有技术能力更强的员工(具备编程和构建小型定制解决方案的知识)以及获得实验室性能的“鸟瞰图”,可以更容易地识别和解决瓶颈和低效问题。

机器人会阅读!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Rock’n Roll Monkey on Unsplash

差不多了。近年来,自然语言处理(NLP)取得了很大进展,特别是随着深度学习和递归神经网络的发展。从提高识别术后并发症的灵敏度,到利用电子病历的表现型分类算法,NLP 在整个医学界都显示出了前景。

NLP 在实验室里会有很大的好处。许多样本处理和加工依赖于临床工作人员提供的书面描述。对这一数据的解释仍然依赖于生物医学家,因为有很多 c 丢失电话。

如果 NLP 可以在样本进入实验室之前用于评估样本的安全性,或者在报告发送给临床医生之前用于评估报告的质量,会怎么样?工作人员不可能手工完成的任务,但可以由带老花镜的机器人自动完成。

实验室结果+机器学习=未来!

机器学习可以帮助实现提供病理学服务的根本目标——预测是什么导致了患者的疾病!

无论是将细胞类型分类为癌性或非癌性,使用多维数据将患者状态的生化描述归因于已知疾病,还是预测一种分离的病原体是否会对选择的药物敏感,机器学习都是这项工作的理想工具。

研究界和私营企业已经显示出一些希望:

数据科学如何与当前实践融合?

正如你所看到的,有大量的例子表明数据科学和机器学习的预测能力可以用来改革 NHS 的病理学服务。认为私营企业将在这项事业中发挥关键作用似乎是完全合理的,但我想提出的论点是,NHS 实验室应该专注于发展自己的数据科学团队。

就目前的情况来看,“数据科学家”的角色在 NHS 实验室中并不存在。事实上,很难找到专门的 it 人员,更不用说分析师/数据科学专家了。NHS 实验室的职业结构非常僵化。对我来说,这似乎很可笑;这是一个产生大量有价值数据的服务,但是手头没有从这个资源中获利的技能。NHS 迫切希望通过提高效率来节省开支,利用其数据可能有助于实现这一目标。

世界正在改变,我们正在进入应用机器学习和自动化的复兴。随着分子技术的发展和自动化程度的提高,对生物医学科学家手动分析临床标本的需求将会下降。生物医学科学家转移到更具分析性的角色似乎是很自然的,他们操纵实验室中产生的数据并为研究做出贡献。

然而,对生物医学科学家的培训几乎没有跟上。对使用 whatuni.com 的英国大学的快速回顾(按就业率排名)显示,在提供生物医学学士学位的 9 所顶级大学中,只有 2 所提供基本统计分析以外的培训,即 R/Python 编程和高级生物信息学技术。在这两所大学里,培训都是最后一年选修课的一部分。

令人沮丧的是,这些 NHS 实验室被聪明而热情的科学家占据,在正确的指导下,他们可以采用所需的技术来利用手头的数据资源。大多数生物医学科学家在晋升到高级职位之前都会攻读硕士学位,但是很少考虑数据科学硕士学位。我认为,就目前学习数据科学和编程的情况来看,硕士学位可能并不是启动这一进程的必要条件。有了 DataCamp、DataQuest 和 Udacity 等平台,生物医学科学家可以按照自己的节奏学习,只需要时间和互联网接入。

一旦掌握了这些技能,就可以开始在当地应用,帮助提高服务质量和效率。我也看到了增加病理学实验室参与当前研究的机会。生物医学科学家比任何人都更了解 NHS 实验室生成的数据,并且将是准备大型病理学数据集进行研究的数据争论的完美匹配。尽管这些年来数据访问有所改善,随着标准化实践和基础设施的改善(例如 SNOMED、HL7、NLMC 和 NHS number ),局部细微差别几乎是不可避免的,尤其是在对历史数据进行回顾性分析时。

因此,展望未来,我认为我们现在需要的是专注于建立一种鼓励我们的生物医学科学家参与数据科学的文化。在 NHS 实验室内设立分析职位需要支持和更大的灵活性,并有可能利用在线数据科学培训服务和远程学习。但最重要的是,我们需要积极主动的管理,专注于发展我们所处的范式转变所需的基础设施和法律框架。从长远来看,机器学习在病理学中的应用可能需要专门的数据工程师和大型数据仓库项目,但一个具有成本效益的起点将是准备好我们现有的员工;他们已经具备了理解我们想要利用的数据所必需的特定领域的知识。

至于我在这里所讨论的法律和伦理上的分歧,我故意把它遗漏了。我想在另一篇文章中解决这个问题。政府中的许多人已经将 NHS 数据视为‘金矿’,但是随着剑桥分析公司(Cambridge Analytica)和像乳房筛查丑闻这样的灾难仍然记忆犹新,我们必须尽我们所能确保患者的安全和隐私是绝对的优先事项。

ML 街上的噩梦:人工智能在放射学中的黑暗潜力

原文:https://towardsdatascience.com/nightmare-on-ml-street-the-dark-potential-of-ai-in-radiology-71074e70da91?source=collection_archive---------0-----------------------

如果放射学人工智能被用来对付我们,而不是帮助我们,会怎么样?

我们都听说过摇滚明星企业家和天才学者之间的重大哲学争论和辩论——但我们有没有停下来想想放射学人工智能革命将如何在我们自己的地盘上展开?

今年在 RSNA,我向所有与之交谈的人提出了同样的问题:如果放射学人工智能落入坏人之手会怎样?从人群用脚投票挤满每一场关于人工智能的讲座的方式来看,放射科医生肯定似乎非常清楚这个行业即将发生的地震式转变——但我想知道是否有人在考虑潜在的副作用,即将这样一项颠覆性技术投入临床领域的意外后果?

虽然我对算法增强在放射实践中的前景和潜力感到非常兴奋,但我也对更多恶意方利用它获取掠夺性经济利益感到有点紧张。这就是我所说的“曼梯·里街的噩梦”场景…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

幸运的是,这个广告是假的(我伪造的),但我想以绝对清晰的方式描绘可能会发生的法医噩梦。

让我们先假设几件事:

  1. 放射学人工智能算法达到了被临床验证为超人的程度。我认为这几乎是确定的,只要给足够的时间。我们还没到那一步——毕竟,还没有一个随机对照试验或 III 期研究证明这一点——但这些都将到来。大量早期证据表明,如果在足够高质量的标注数据上进行训练,算法在寻找特定事物方面确实比放射科医生更准确。
  2. 医疗过失诉讼允许对病历进行回顾性分析,包括影像学研究。这就是目前的情况,也是“没有胜利,就没有费用”的律师事务所的谋生之道,他们掠夺那些感到他们的治疗没有达到他们期望的不满的病人。在法庭上,这些公司只需排除合理怀疑,证明一名医生根据他们的执业守则玩忽职守和表现不佳。这是通过简单地引入一个专家证人来确认一个错误。在放射科,这是非常容易的,因为放射科医生,远远超过任何其他专业,拍下他们的错误。
  3. 放射学报告是一份书面的、数字签名的和可追溯的文档,它将放射科医师与他们的意见绑定在一起。一旦写好(除非进行了修改并传达了变化),该报告就成为患者护理记录中不可改变的一部分,并成为整个诊断过程的一部分。如果最终诊断是错误的,甚至完全被忽略,那么就有图片和书面证据来证明发生了医疗错误。

31%的美国放射学家在其职业生涯中经历过医疗事故索赔,其中“漏诊”是最常见的。乳腺癌高居榜首,紧随其后的是漏诊骨折和肺癌。甚至最近出现了诉讼增加的趋势,部分原因是工作量的不可阻挡的增长和对效率的推动,以及医疗保健提供商的整合,最终导致质量明显下降。

然而,为了开始一个医疗事故案件,病人必须找到律师事务所,并要求提供医疗记录作为证据。实质上,是否启动法律程序是患者的自由裁量权。

这就是我开始关注放射学人工智能的地方。想象一下,一家律师事务所开始以今天事故追逐者的方式直接向消费者做广告。毕竟,病人被允许要求一份他们的成像和报告的副本,并且可以自由地与他们选择的人分享。如果一家律师事务所能够说服用户交出他们的护理记录和图像,以获得使用人工智能的“免费”检查服务,我们可能会开始看到越来越多的回溯性临床错误被发现。

让我们举个例子:

史密斯先生在网上看到一个不赢不付费服务的广告,以检查他的扫描报告是否正确。他从医疗服务提供商那里下载了他的医疗记录,包括胸部 CT,并上传到律师事务所的服务器上。几秒钟后,算法在 T10/11 发现一个 5 毫米的肺结节和轻度变性,这两个发现都没有包括在原始报告中。该网站建议咨询律师,然后律师建议他们起诉医疗事故。史密斯先生说,想起来了,他的背部有些疼痛,现在他担心自己得了肺癌。他做了一次重复的 CT 扫描,结节现在是 8 毫米。诉讼进入审判阶段,最初的报告放射科医生被叫来,一名专家证人同意该算法,是的,显然有一个肺结节和一些脊柱退化。法官敲了敲他的锤子,结果,几百万美元被支付了。

到目前为止,没有什么特别的问题。一个遗漏的发现被证实了,诉讼成功了。与今天的情况相比,这里唯一的不同是涉及到了一个算法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(希望没有人错过这个诊断…)

这才是真正可怕的地方…

如果有足够多的患者经历这一过程,这家掠夺性的律师事务所可能会对医疗保健提供商提起集体诉讼。这是一个全新层次的法律程序。理论上,集体诉讼允许起诉方要求获得全部病历,甚至可能与他们所代表的病人无关。这可以以病人安全的名义进行,声称整个放射科都不适合执业,因此在那里接受治疗的每个人都有知情权。

法官可以裁定允许对医院的整个扫描回溯性分析——一次分析数十万张图像。放射学人工智能算法可以在几个小时内轻松处理这些数据,并有可能发现数百万未报告的肺结节。支付的法律后果和规模是惊天动地的,是职业生涯的终结和职业生涯的毁灭。

我真诚地希望我们永远不要陷入这种境地。

有些人会说这是绝对不允许的。使用以前没有的新工具进行回顾性检查是不公平和不道德的——我同意这一点。然而,我担心的是恶意的第三方使用放射学人工智能只是为了找到错误和失误,然后使用人类专家证人来确认它们。以这种方式,在法庭上,这是人对人,就像今天进行的医疗事故诉讼一样。唯一不同的是,人工智能被用来以前所未有的规模揭露这些案件。

我所强调的完全是理论上的,尽管并非完全不可能。人工智能有可能极大地改善放射工作流程并增加放射学家。如果在正确的环境下用在正确的人手里,它将彻底改变这个领域。然而,如果它落入坏人之手,被用来对付我们,我们将面临一个真正可怕的未来,这只会损害我们的职业和我们照顾病人的能力。

现在有趣的伦理问题是——作为放射科医生,我们是想保护自己免受追溯算法的交叉检查,还是有义务给我们的病人提供尽可能最好的护理,即使这意味着找到我们以前所有的错误?

无论你的观点如何,看看放射学人工智能的前景如何发展将会很有趣。我希望这场噩梦不会把我们从实现我们既定目标的梦想中唤醒!

如果你和我一样对放射学人工智能的未来感到兴奋,并想讨论这些想法,请保持联系。我在推特@drhughharvey

如果你喜欢这篇文章,点击推荐并分享它会很有帮助。

关于作者:

哈维博士是一名委员会认证的放射科医生和临床学者,在英国国民医疗服务体系和欧洲领先的癌症研究机构 ICR 接受过培训,在那里他两次获得年度科学作家奖。他曾在 Babylon Health 工作,领导监管事务团队,在人工智能支持的分诊服务中获得了世界第一的 CE 标记,现在是顾问放射科医生,皇家放射学家学会信息学委员会成员,以及人工智能初创公司的顾问,包括 Kheiron Medical。

算法决策的九个机会和风险

原文:https://towardsdatascience.com/nine-opportunities-and-risks-of-algorithmic-decision-making-77d1e712af65?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.规范性原则

机会 : 在设计 ADM 流程时,必须在使用该流程之前做出规范性决策(例如关于公平标准)。这提供了一个从一开始就彻底公开讨论道德问题并记录决定的机会。

风险*😗ADM 流程可以包含隐藏的规范性决策。如果只有在设计阶段完成后才有可能进行讨论,那么任何规范性原则都更有可能被认为是不可更改的

2.数据

机遇 : 软件可以分析比人类多得多的数据,从而更快、更准确、更便宜地识别模式和回答某些问题…

风险 : 用于 ADM 流程的数据可能包含看似被流程本身具体化的失真。如果相关性背后的因果关系没有得到证实,那么无意的、系统的歧视就很有可能成为这一过程中被接受的一部分。

3.应用的一致性

机会 : 基于算法的预测将预先确定的决策逻辑应用于每个个案。与人类决策者相比,软件没有好坏之分,并且在某些情况下不会任意使用新的、有时不合适的标准。

风险 : 在例外情况下,通常不可能对未预料到的相关事件进行评估并做出相应反应。ADM 系统总是利用任何不正确的训练数据和错误的决策逻辑。

4.可量测性

机会 : 软件可以应用于一个潜在的比人类决策者所能响应的大很多倍的应用领域,因为系统中使用的决策逻辑可以以非常低的成本应用于几乎无限数量的情况。

5.可验证性

机会 : 数据驱动和数字系统可以以一种清晰易懂的方式构建,允许对它们进行解释和独立验证,并提供取证数据分析的可能性。

风险 : 由于流程设计和运营应用,对决策的独立评估和解释往往只在有限的程度上是可能的、可理解的或制度化的。

6.适应性

机会 : ADM 流程可以通过使用新的培训数据或自学系统来适应新的条件

风险 : 各个方向的适应性的对称性取决于过程是如何设计的。片面的适应也是可能的。

7.效率

机会 : 让机器评估大量数据通常比让人类分析师评估相同数量的数据更便宜。

风险 : E 通过 ADM 流程获得的效率收益可能会掩盖可用资源的绝对水平过低或不足的事实。

8.个性化

例如,在互联网出现之前,许多研究助理和图书馆员需要提供来自单个搜索引擎查询的信息的广度和深度。

风险 : 当 ADM 流程成为用于大众市场的主要工具时,只有少数特权阶层有机会接受人类决策者的评估,这在预选候选人或授予信用分数的非标准情况下可能是有利的。

9.人类对基于机器的决策的感知

机会 : ADM 流程在做统计预测时可以非常一致。在某些情况下,这种预测比人类专家做出的预测更可靠。这意味着软件可以作为一种辅助工具,为更重要的活动腾出时间。

风险 : 人们可以将软件生成的预测视为比其他信息更可靠、更客观、更有意义。在某些情况下,这可能会阻止人们质疑建议和预测,或者导致他们仅以推荐的方式对其做出反应。

本文摘自 Konrad Lischka 和 Anita Klingel 撰写的工作文件“”Wenn Maschinen Menschen bewerten—international e falbeispiele für Prozesse algorithm ischer Entscheidungsfindung”,由贝塔斯曼基金会以 CC BY-SA 3.0 DE 出版。

本出版物记录了我们对该主题调查的初步结果。我们将其作为 工作文件 发布,以一种其他人可以借鉴的方式为这个快速发展的领域做出贡献。

[ NIPS 2011 /吴恩达 Tensorflow 中带交互代码的稀疏滤波一瞥

原文:https://towardsdatascience.com/nips-2011-andrew-ng-first-glance-of-sparse-filtering-in-tensorflow-with-interactive-code-659c4e84658e?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GIF from this website

【Neil Bruce 博士,( Google scholar Page )我的导师推荐我阅读这篇论文,我真的很想获得对稀疏滤波更实际的理解。(所以才发这个帖子。)

在这篇文章中,我将首先看到不同降维技术的效果,包括…

1。 主成分分析 2。 独立成分分析。 3。 线性判别分析 4。t-分布随机邻居嵌入。 5。 因素分析 6。 稀疏过滤

请注意这篇帖子是为了我对稀疏滤波的理解。

降维

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image from this website

在继续之前,我想简单回顾一下降维的效果。但是请注意,这些算法背后的数学不在本文讨论范围之内,但是如果有人感兴趣,我会在下面链接一些好的资源。

Video from StatQuest with Josh Starmer

Video from StatQuest with Josh Starmer

Video from StatQuest with Josh Starmer

如果你想知道 LDA 和 PCA 的区别,请点击这里点击这里

示例:清晰分离的数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简单地说,我们有上面的数据点,不同的颜色代表不同的类别,每个数据点有 3 个轴(X,Y,Z)。现在让我们先来看看每个分解算法是如何分解这些数据的。(作为开始,我们将只把维数减少 1 倍。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Different decomposition algorithm to reduce the dimension to 2

他们都做得很好,将相同的类聚集在一起,现在让我们看看何时将维度减少到 1。(删除二维)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样,当原始数据彼此明显分离时,我们可以看到大多数算法在降低维度方面做得很好,同时对每个类进行聚类。(虽然这里那里有一些离群值。)

示例:没有清晰分离的数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在为了让事情变得更难,让我们来看一个没有从每个类中明确分离的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从表面上看,大多数算法只是移除了 Z(深度)轴,最后让我们来看看将维度减少到 1 的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从一瞥中,我们可以注意到一个模式,当与紫色点相比时,黄色点更倾向于聚集(t-SNE 或 LDA 不是这种情况)。然而,我们得到的是一个非常有趣的结果。

特征分布的理想性质

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在继续之前,我想介绍一下特征分布的一些期望的性质。(我个人认为这个话题很重要)

每个示例的稀疏特征(总体稀疏) →矩阵中的每个元素(或每个示例)应该仅由少数(非零)特征来表示。

跨示例的稀疏特征(生命周期稀疏) →每个特征应该允许我们区分不同的示例。(换句话说,特征应该足够有效,让我们能够区分不同的例子。)

活动分布均匀(高度分散) →对于每个示例,活动特征的数量应与其他示例相似。

稀疏滤波

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蓝线 →稀疏滤波算法

稀疏过滤的主要思想非常简单,通过无监督的方式学习数据的新特征(更紧凑的表示)。我们实现这一点的方法是简单地对矩阵的所有例子取 L2 范数并执行归一化。然后我们再次规范化这些例子,但是这次是每个例子。最后,我们通过 L1 罚函数最小化特征的总和。关于这个方法为什么有效的更多理论理由请点击这里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上所述,对于这个实验,我们也将遵循论文的原始作者所做的,将软绝对函数作为我们的激活函数。对于 Numpy 实现,我们将使用有限内存 BFGS 优化算法,对于 tensorflow,我们将使用 Adam 优化器。

结果:稀疏滤波(Numpy)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上/右下 →清除分色数据 2D // 1D
左下/右下 →不清除分色数据 2D // 1D

subramgo 中取代码,我们可以观察稀疏滤波是如何降维的。总的来说,它在聚类相似的类方面做得很好,但是,对于具有明显分离的数据的 1D 归约,我们可以观察到它不能清楚地将每个类聚类到不同的 x 轴点。

结果:稀疏滤波(张量流)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上/右下 →清除分色数据 2D // 1D
左下/右下 →不清除分色数据 2D//1D

既然我喜欢 tensorflow,我就直接复制了 Numpy 实现的代码。然而,与 Numpy 实现的一个区别是,我们将使用 Adam Optimizer。(而不是有限内存 BFGS )。).

令人惊讶的是,(我个人认为),它比 Numpy 版本做得更好。特别是当我们看一下清晰分离数据的 1D 缩减时。此外,对于没有明确分离的数据,我们可以观察到大多数绿色圆圈聚集在一起,而其他紫色和黄色圆圈更加分散。

互动码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!同样为了透明,我在 github 上上传了所有的训练日志。

要访问 PCA、LDA、ICA 等的代码… 请点击此处。
访问 Numpy 的代码稀疏点击这里训练日志点击这里。
访问 tensorflow 稀疏代码点击此处, 训练日志点击此处。

最后的话

我为这篇文章缺乏结构而道歉。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的推特上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。

参考

  1. Ngiam,j .、Chen,z .、Bhaskar,s .、Koh,p .、和 Ng,A. (2011 年)。稀疏过滤。Papers.nips.cc 于 2018 年 6 月 12 日检索,来自https://papers.nips.cc/paper/4334-sparse-filtering
  2. , (2018).[在线]可在:https://www.linkedin.com/in/neil-bruce-19292417/【2018 年 6 月 12 日访问】。
  3. [在线]可在:https://scholar.google.com/citations?user=Gnezf-4AAAAJ&HL = en【2018 年 6 月 12 日访问】。
  4. 控制图形美学-seaborn 0 . 8 . 1 文档。(2018).Seaborn.pydata.org。检索于 2018 年 6 月 12 日,来自 https://seaborn.pydata.org/tutorial/aesthetics.html
  5. 分区,L. (2018)。LDA 作为划分之前或之后的维度缩减。交叉验证。检索于 2018 年 6 月 12 日,来自https://stats . stack exchange . com/questions/305691/LDA-as-the-dimension-reduction-before-or-after-partitioning
  6. sk learn . decomposition . PCA—sci kit—学习 0.19.1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . decomposition . PCA . html
  7. sk learn . decomposition . fa stica—sci kit—学习 0.19.1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . decomposition . fa stica . html
  8. Python?,H. (2018)。如何用 Python 制作 3D 散点图?。堆栈溢出。检索于 2018 年 6 月 12 日,来自https://stack overflow . com/questions/1985856/how-to-make-a-3d-scatter-plot-in-python
  9. k 均值聚类和低秩近似的降维。(2018).Bigdata.csail.mit.edu。检索于 2018 年 6 月 12 日,来自http://bigdata.csail.mit.edu/node/277
  10. sklearn.discriminant _ analysis。线性判别分析-sci kit-学习 0.19.1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . discriminant _ analysis。lineardiscriminantanalysis . html # sk learn . discriminant _ analysis。linear discriminant analysis . fit _ transform
  11. sk learn . manifold . tsne—sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . manifold . tsne . html
  12. sk learn . decomposition . factor analysis-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . decomposition . factor analysis . html # examples-using-sk learn-decomposition-factor analysis
  13. StatQuest:主成分分析(PCA)解释清楚(2015)。(2018).YouTube。检索于 2018 年 6 月 12 日,来自 https://www.youtube.com/watch?v=_UVHneBUBW0
  14. StatQuest: t-SNE,解释清楚。(2018).YouTube。检索于 2018 年 6 月 12 日,来自https://www.youtube.com/watch?v=NEaUSP4YerM
  15. StatQuest:线性判别分析(LDA)解释清楚…(2018).YouTube。检索于 2018 年 6 月 12 日,发自https://www.youtube.com/watch?v=azXCzI57Yfc&LC = z 221 ubiy 3 qzoizzubacd p 431 wog 0 fwhls 5 iiwovere 5 w 03 c 010 c
  16. sk learn . datasets . make _ classification-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。检索于 2018 年 6 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . datasets . make _ classification . html
  17. 尺寸,S. (2018)。sk learn LDA-分析不会生成 2 维。堆栈溢出。检索于 2018 年 6 月 12 日,来自https://stack overflow . com/questions/49955592/sk learn-LDA-analysis-wont-generate-2-dimensions
  18. 主成分分析与独立成分分析继续-佐治亚理工学院-机器学习。(2018).YouTube。检索于 2018 年 6 月 12 日,来自https://www.youtube.com/watch?v=e4woe8GRjEI
  19. 你的参考书目:Anon,(2018)。[在线]可从以下网址获取:https://www . quora . com/What-is-the-difference-than-the-LDA-and-PCA-for-dimension-reduction【2018 年 6 月 12 日获取】。
  20. subramgo/SparseFiltering。(2018).GitHub。检索于 2018 年 6 月 13 日,来自 https://github.com/subramgo/SparseFiltering
  21. 过滤,U. (2014)。无监督特征学习-稀疏过滤。Vaillab.blogspot.com。检索于 2018 年 6 月 13 日,来自http://vail lab . blogspot . com/2014/08/unsupervised-feature-learning-sparse . html
  22. Metzen,J. (2018 年)。基于稀疏滤波的无监督特征学习。Jmetzen.github.io .检索于 2018 年 6 月 13 日,来自http://jmetzen.github.io/2014-09-14/sparse_filtering.html
  23. 资料 D. (2018)。禁用 Tensorflow 调试信息。堆栈溢出。检索于 2018 年 6 月 13 日,来自https://stack overflow . com/questions/35911252/disable-tensor flow-debugging-information
  24. tensorflow?,W. (2018)。tensorflow 中 numpy.newaxis 的替代品是什么?。堆栈溢出。检索于 2018 年 6 月 13 日,来自https://stack overflow . com/questions/42344090/what-the-alternative-of-numpy-newaxis-in-tensor flow
  25. 类,P. (2018)。Python 调用类中的函数。堆栈溢出。检索于 2018 年 6 月 13 日,来自https://stack overflow . com/questions/5615648/python-call-function-within-class
  26. (TensorFlow)?,D. (2018)。GradientDescentOptimizer 和 AdamOptimizer (TensorFlow)的区别?。交叉验证。检索于 2018 年 6 月 13 日,来自https://stats . stack exchange . com/questions/184448/difference-between-gradientdescentoptimizer-and-adamoptimizer-tensor flow
  27. 导入多个张量流模型(图表)Breta Hajek。(2017).布雷塔·哈杰克。检索于 2018 年 6 月 13 日,来自https://bretahajek . com/2017/04/importing-multiple-tensor flow-models-graphs/
  28. TensorFlow,W. (2018)。在 TensorFlow 中使用多个图形。堆栈溢出。检索于 2018 年 6 月 13 日,来自https://stack overflow . com/questions/35955144/working-with-multiple-graphs-in-tensor flow
  29. TensorFlow,W. (2018)。在 TensorFlow 中使用多个图形。堆栈溢出。检索于 2018 年 6 月 13 日,来自https://stack overflow . com/questions/35955144/working-with-multiple-graphs-in-tensor flow
  30. 有限记忆 BFGS。(2018).En.wikipedia.org。检索于 2018 年 6 月 13 日,来自https://en.wikipedia.org/wiki/Limited-memory_BFGS
  31. 正规化:简单的定义,L1 和 L2 处罚。(2016).统计学如何?检索于 2018 年 6 月 13 日,来自http://www.statisticshowto.com/regularization/
  32. L -Norm —来自 Wolfram MathWorld。(2018).Mathworld.wolfram.com。检索于 2018 年 6 月 13 日,来自http://mathworld.wolfram.com/L2-Norm.html
  33. Zennaro,f .,& Chen,K. (2016)。理解稀疏滤波:理论观点。Arxiv.org。检索于 2018 年 6 月 13 日,来自https://arxiv.org/abs/1603.08831

[NIPS 2017/Google] -在众目睽睽之下隐藏图像:具有交互代码的深度隐写术[带 TF 的手动背道具]

原文:https://towardsdatascience.com/nips-2017-google-hiding-images-in-plain-sight-deep-steganography-with-interactive-code-e5efecae11ed?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gif from here

所以几周前,我在 NIPS 2017 出版网站上发现了 Shumeet Baluja (谷歌研究员)的这篇论文“ 在众目睽睽之下隐藏图像:深度隐写术 ”。

和往常一样,让我们比较一下扩张反向传播与自动微分相比表现如何。

论文结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框→ 载体图像隐藏我们的秘密消息 蓝框→ 我们要隐藏的秘密消息 绿框→ 载体图像隐藏秘密消息后 紫框→ 从绿框图像中重构秘密图像

整个想法非常简单,我们将有一个载体图像,我们将在该图像中隐藏一些秘密信息(这是另一个图像),稍后再揭开它。现在让我们来看看这个模型的网络架构。

网络架构(高/低级别)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →准备图像的神经网络(Prep Network)
黄框 →隐藏的神经网络(Hiding Network)
绿框 →揭示的神经网络(Reveal Network)

主要有三个网络,一个是准备图像、隐藏图像和揭示秘密图像。现在让我们来看看较低层次的实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红线 →网络架构描述

这篇文章的一个奇怪之处是,它没有详细描述网络体系结构。我甚至无法找到网络有什么样的激活功能。

所以在我的能力范围内,我相信每个网络有 5 层,每层有 50 个频道。准备网络的核大小为 3,隐藏网络的核大小为 4,最终显示网络的核大小为 5。同样,我将只使用 ReLU()激活函数,这个决定是通过实验性的试验做出的。

成本函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,令人欣慰的是,这篇论文确实描述了网络使用哪种成本函数以及它使用哪种优化器。我们将使用亚当和 L2 损失函数,平方差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上是完整的误差函数,我们将载体图像和秘密图像之间的平方差。对于 scecrte 镜像误差函数,我们将在平方差前面有一个β项(我们将它设为 1,因此可以忽略它),它决定了我们必须将多少误差输入反向传播。但是,还有一点需要注意的是这个模型的梯度流。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →从载体图像应用梯度流

如上所述,秘密图像的错误率一直向后传播,然而对于载体图像错误率,它仅应用于隐藏网络和准备网络。

网络架构(OOP 形式)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →准备网络及其前馈操作
黄框 →隐藏网络及其前馈操作
绿框 →显示网络及其前馈操作

如上所述,网络本身并不难实现。因为它由 5 个卷积运算组成,且具有相同数量特征映射。这很容易。

实验设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上所述,我们将使用来自李辉蔡剑飞的公开可用数据作为语义图像分割的基准。此外,由于硬件限制,我们将所有的图像调整为 80 * 80 像素的图像。在上面的数据集中,有 100 幅彩色图像,我们打算用 50 幅作为秘密消息图像,剩下的 50 幅作为封面图像。

结果(自动微分)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上图 →原秘密图
右上图 →原封面图
左下图 →准备图
下中间图 →秘密+封面图
右下图 →透露图

如上所述,该网络做得非常好,不仅隐藏了封面图像中的秘密图像,还揭示了它们。然而,在有些情况下,网络未能做到这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上图 →原秘密图
右上图 →原封面图
左下图 →准备图
下中间图 →秘密+封面图
右下图 →揭露图

如上所述,当图像包含各种不同的颜色时,显示的图像非常失真。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →网络如何走向终结的汇编
右图 →网络如何随着时间的推移而走向终结的汇编

以上是网络在最后一个时期以及随着时间的推移如何工作的汇编,随着训练的继续(通过增加时期可以看到),我们可以看到网络在隐藏图像方面做得更好。

结果(扩张反向传播)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上图 →原秘密图
右上图 →原封面图
左下图 →准备图
下中间图 →秘密+封面图
右下图 →透露图

随着足够的时代扩大反向传播做了很好的隐藏图像。然而,类似于自动区分,也存在网络不能很好地运行的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左上图 →原秘密图
右上图 →原封面图
左下图 →预备图
下中间图 →秘密+封面图
右下图 →已曝光图

以上是网络性能不佳时的完全相同的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左 GIF →汇编网络如何在它的最后时代
右 GIF →汇编网络如何随着时间的推移

以上是网络在最后一个时期以及随着时间的推移如何工作的汇编,随着训练的继续(通过增加时期可以看到),我们可以看到网络在隐藏图像方面做得更好。

交互代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于谷歌实验室,你需要一个谷歌帐户来查看代码,你也不能在谷歌实验室运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

请点击进入扩张反向传播代码。
请点击进入自动微分模型代码

如果您希望在本地设备上运行代码,请从这个链接下载数据集,并相应地更改 data_location(如下所示)变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

透明度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了让这个实验更加透明,我把训练时产生的所有输出都上传到了我的 Gihub。恳求 se 点击这里查看日志。请点击此处查看手动反向传播日志。

最后的话

实际上,我在医学图像领域有一个非常有趣的用例,即将实现!

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。如果你感兴趣的话,我还做了解耦神经网络的比较。

参考

  1. 导数双曲函数。(2018).Math2.org。检索于 2018 年 3 月 7 日,来自http://math2.org/math/derivatives/more/hyperbolics.htm
  2. tf.concat | TensorFlow。(2018).张量流。检索于 2018 年 3 月 7 日,来自https://www.tensorflow.org/api_docs/python/tf/concat
  3. Tensorflow,a. (2018)。张量流中的加性高斯噪声。Stackoverflow.com。检索于 2018 年 3 月 7 日,来自https://stack overflow . com/questions/41174769/additive-Gaussian-noise-in-tensor flow
  4. 正态分布。(2018).Mathsisfun.com。检索于 2018 年 3 月 7 日,来自https://www . mathsisfun . com/data/standard-normal-distribution . html
  5. [2]2018.【在线】。可用:https://www . quora . com/How-can-l-visualize-cifar-10-data-RGB-using-python-matplotlib。【访问时间:2018 年 3 月 7 日】。
  6. 标准化数据/标准化。(2015).统计学如何?检索于 2018 年 3 月 8 日,来自 http://www.statisticshowto.com/normalized/
  7. s . balu ja(2017 年)。隐藏图像:深度隐写术。在神经信息处理系统的进展(第 2066–2076 页)。
  8. 惠,L. (2018)。语义图像分割的基准。NTU . edu . SG . 2018 年 4 月 4 日检索,来自http://www . NTU . edu . SG/home/asjfcai/Benchmark _ Website/Benchmark _ index . html
  9. 超越 Tensorflow 的默认自动微分优化器,具有交互式代码[手动…(2018).走向数据科学。检索于 2018 年 4 月 4 日,来自https://towards data science . com/outpering-tensor flows-default-auto-difference-optimizer-with-interactive-code-manual-e587 a82d 340 e
  10. Python 中的 DICOM:用 PyDICOM 和 VTK 将医学图像数据导入 NumPy。(2014).PyScience。2018 年 4 月 4 日检索,来自https://pyscience . WordPress . com/2014/09/08/DICOM-in-python-importing-medical-image-data-into-numpy-with-pydicom-and-VTK/
  11. 用不同的名称保存用 wget 下载的文件。(2018).电动工具箱。检索于 2018 年 4 月 4 日,来自https://www . electric toolbox . com/wget-save-different-filename/

NIPS 2017 研讨会和讲习班:可解释和贝叶斯机器学习

原文:https://towardsdatascience.com/nips-2017-symposium-and-workshop-interpretable-and-bayesian-machine-learning-fca56edfebe4?source=collection_archive---------6-----------------------

我的第一次 NIPS 出席和总结

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上周,我参加了在加州长滩举行的 NIPS(神经信息处理系统)2017 会议。这是我第一次参加 NIPS。

什么是 NIPS?

NIPS 是世界上最大的机器学习(ML) /人工智能(AI)会议之一。NIPS 会议由三个项目组成:指导、主要活动(包括研讨会)和研讨会。今年,约有 8000 人出席,比去年增加了约 30%,显示出对机器学习的兴趣越来越大。

我只参加了研讨会和专题讨论会,但是根据它们的内容,我可以看到每个研讨会都是一个专门的专题,一整天都致力于一个单一的主题。每个研讨会由 5-6 个讲座和海报会议组成。大多数工作坊最后还会有小组讨论。我参加了关于贝叶斯 ML 的研讨会和关于可解释 ML 的座谈会。

赞助商

在谈论大会演讲之前,我首先想让你看看赞助商名单,因为它可以显示当前机器学习在行业中的格局。仅举几个赞助商的例子,微软、IBM Research、奥迪、英特尔 Nervana 是钻石赞助商(8 万美元赞助),其次是白金赞助商(4 万美元),如苹果、优步、脸书、谷歌、百度、阿里巴巴、亚马逊、DeepMind 等。综合列表见此处

主题

研讨会原定了两天。每个研讨会都是全天的,包括来自学术界和工业界的演讲以及海报展示。今年,大约有 50 个讲习班。这些主题涵盖了学科和技术/方法方面的广泛材料。

就学科而言,有专门针对学术领域的研讨会,

  • 生物
  • 神经系统科学
  • 医学
  • 自然科学

IT 相关行业,

  • 机器人学
  • 网络安全
  • 系统
  • 超级计算
  • 物联网设备
  • 软件开发
  • 运输

以及更多与人类相关的领域

  • 卫生保健
  • AI 透明度/公平性
  • 发展中国家的 ML 应用
  • 创意和设计。

ML 技术方面的主题也变化很大;

  • 深度学习(通用)
  • 深度强化学习
  • 贝叶斯深度学习
  • 元学习
  • 半监督学习
  • 建议
  • 因果推理
  • 自然语言处理
  • 音频信号处理
  • 时间序列
  • 可量测性
  • 可视化和交流

研讨会:可解释机器学习

我在研讨会前一天到达,参加了关于可解释 ML 的研讨会。

可解释的 ML 不仅有利于帮助用户理解 ML 模型的结果,而且有利于使人工智能安全可靠。然而,可解释的 ML 是具有挑战性的。总的来说,演讲者同意很难定义术语“可解释性”,因为它是一个以人为中心的术语,依赖于用户的类型,这甚至可能涉及用户体验方面。另外,当前的可解释 ML 方法也有局限性。目前,大致有两种方式来构建可解释的 ML 算法:1)使用简单(例如,线性)算法,或者 2)使用局部描述黑盒模型的“模仿”算法(例如,LIME)。两者都有缺点;如果数据具有复杂的分布,简单的算法很可能具有较低的精度,并且模拟算法很容易失败。无论如何,这一部分的讨论试图解决当前 ML 景观中的问题,并检验可解释 ML 的不同元素。

为了在图像分类/识别任务中使用可解释性 ML,奇莉·瓦格斯塔夫(JPL)展示了如何通过使用 DEMUD 来可视化深度神经网络中的可解释性和学习过程,DEMUD 学习连续信息之间的残差(差异)。Kilian Q. Weinberger (Cornell)提出了对现代神经网络的担忧,这些网络具有很差的校准置信度(即过度自信,这在自动驾驶汽车和自动医疗诊断等实际应用中可能是一个问题。

Jenn Wortman Vaughan(微软)建议可解释性应该跨学科理解,应该考虑人类;根据用户的不同,可解释性可能有不同的含义。沃恩使用亚马逊机械土耳其人进行了一项有趣的实验,在那里她测试了人类受试者对简单模型的理解是否优于更复杂的模型(例如,黑盒、更多功能)。受试者能够更好地遵循更简单的模型,尽管他们对两个模型的信心水平相似(与人们对黑盒模型的信任度低于简单模型的普遍看法相反)。这是一项初步的工作,但它简单而新颖,因为这项研究试图真正包括人类,并测量他们对 ML 模型的反应及其预测。

还进行了小组讨论,发言者回答了一系列问题。首先,他们承认定义“可解释性”是困难的。他们同意贝叶斯方法可以通过提供一些因素和预测不确定性之间关系的信息来帮助黑盒模型。他们还证实,金融和医药等高风险行业领域更抵制黑箱模型,更喜欢可解释性。也有一些对“模仿模型”的批评,因为他们没有提供一个基本的解释,而是更多的事后解释。为了比较可解释模型的不同方法,研究人员同意需要进行涉及人类的实验。总的来说,他们一致认为,要在这个问题上取得突破,首先应该进行系统的人体实验,并更好地定义可解释性。

车间

今年大约有 50 场研讨会,有很多有趣的话题。很难选择参加哪一个,但我决定参加贝叶斯机器学习。我做出这个决定背后的动机是 1)我在博士期间学习了贝叶斯推理,我对这个主题略有熟悉,2)我一直对深度学习持怀疑态度,深度学习的贝叶斯治疗听起来像是对当前深度学习炒作的一种补救措施,3)贝叶斯机器学习是机器学习中的一个新兴主题。尽管两个研讨会都侧重于技术细节(如同大多数贝叶斯推理材料),但我还是想总结几个要点。

第一天:近似贝叶斯推理的进展

尽管在深度学习方面取得了显著的进步,但这些深度神经网络缺乏解决其预测中的不确定性的能力,并且没有利用概率论。因此,最近研究人员一直在尝试融合贝叶斯方法和深度学习。贝叶斯推理的主要挑战是在计算后验概率时近似难以处理的边际概率分布。有两种方法可以解决这个问题;一种是设计一个易于估计的概率分布,该概率分布接近真实分布并试图减小这两个分布之间的距离,另一种是使用抽样方法(蒙特卡罗模拟)建立后验概率。第一种方法通常被称为变分推理(VI)。大概,第二种方法中最流行的方法就是马尔可夫链蒙特卡罗(MCMC)。尽管每种方法都有自己的优点和缺点,但大多数人对 VI 比对抽样方法更感兴趣,主要是因为 VI 更快,更具确定性。

在近似贝叶斯推理研讨会上提出了许多新颖的方法。Josip Djolonga(苏黎世联邦理工学院)提出了一种近似方法,这种方法利用了欺骗双样本统计测试的想法。“如果我们能骗过统计测试,学习到的分布应该是真实数据的一个很好的模型。”李英珍提出了直接估计得分函数而不是近似优化目标的思想,用于基于梯度的优化,可以缓解广义敌对网络(GAN)的缺陷,如过拟合和低估损失函数。Kira Kempinska(伦敦大学学院)给出了另一个辉煌,他引入了对抗序列蒙特卡罗方法,将近似问题公式化为两人游戏,类似于 GAN。

来自工业界的受邀演讲也很有趣。来自网飞的 Dawen Liang 展示了我们如何使用变分自动编码器(VAE)来构建推荐系统,特别是因为该问题更多地是一个小数据问题,并且用户-项目交互矩阵仅在它是正的情况下才被观察到(即,在负和无之间没有区别)。来自亚马逊的 Andreas Damianou 介绍了深度高斯过程,其中的动机是,(再次)利用当前深度学习方法中通过更好地逼近难以处理的分布而包含的推理(即,模型应该根据它们对预测的确定程度以不同的方式表现)。

第二天:贝叶斯深度学习

从主题上看,这次研讨会与第一次非常相似。然而,在这里,演讲者通过关注概率规划和贝叶斯神经网络(不仅仅是近似方法)展示了一个略大的画面。

会议以 Dustin Tran(哥伦比亚大学/谷歌)的演讲开始,他是概率编程库的首席开发人员 Edward 。他的演讲是关于概率编程的库和概述。Edward 通过支持有向图形模型来支持贝叶斯推理。它是基于 TensorFlow 构建的,尽管我没有使用过 Edward,但根据演示文稿中的代码截图,它的语法似乎与我以前使用过的 pymc3 非常相似;你定义你的变量的图形结构,它们是随机的还是确定的,这些变量应该有什么分布,等等。它支持变分推理和蒙特卡罗方法。达斯汀预测,即使概率编程可能有很高的认知负担,但由于分布式、编译和加速系统,它将变得更容易使用,这允许在多台机器上进行概率编程。

本次会议的特别演讲人是 Max Welling(阿姆斯特丹大学/高通),他发表了大量关于贝叶斯机器学习的研究,并因其关于变分自动编码器的论文而闻名。他对 Bayesain 深度学习进行了概述。首先,他通过重申贝叶斯方法的好处开始了他的讲话:1)我们可以用一个原则来正则化模型,但不会浪费数据(不需要交叉验证),2)我们可以测量不确定性,3)贝叶斯方法可以用于严格的模型选择。然后他提出了一个开放式的问题;做决策时,我们应该如何处理量化的不确定性?对我来说,测量不确定性和量化不确定性的实际应用可能是两回事。在演讲的最后,他提到贝叶斯深度学习有三条主线;1)深度高斯过程,2)信息瓶颈,以及 3)贝叶斯丢失。关于最后一个,他提到事实证明快速退出法是实际上不是贝叶斯方法,研究人员正在研究全贝叶斯方法。

Gintare Karolina Dziugaite(剑桥大学/矢量研究所)做了一个有趣的技术演讲,她和 Daniel M. Roy(多伦多大学/矢量研究所)设计了一种改进的随机梯度下降(SGD)方法,即“熵-SGD ”,以缓解 SGD 的过拟合问题。这个问题已经由 Koh 和梁提出,他们的论文被选为今年国际机器学习大会的最佳论文。在 Koh 和 Liang 的论文中,证明了具有 SGD 的深度神经网络可以学习训练数据中完全随机化的标签。

个人想法

尽管我只参加了整个会议的一半,但我可以说,我在 NIPS 的机器学习领域经历了两个看似非常不同的领域。关于可解释 ML 的研讨会更多的是关于实际应用和它对人们的影响。研讨会集中讨论了在现代神经网络中注入贝叶斯思想的技术。尽管这些从表面上看起来很不一样,但我实际上认为这两者之间有共同点:研究人员最终希望通过从模型(不确定性)中提取更多信息来建立一个“更智能”的机器,它可以对人类更加负责和透明。

原载于 2017 年 12 月 16 日hongsupshin.com

【NIPS 2017/Part 1】带交互代码的 OCR 选通递归卷积 NN【带 TF 的手动回推】

原文:https://towardsdatascience.com/nips-2017-tensorflow-gated-recurrent-convolution-neural-network-for-ocr-part-1-with-47bb2a8a7ab3?source=collection_archive---------7-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gif from here

所以这是实现 Ggated 递归卷积神经网络的第一部分。我将逐一介绍,所以今天让我们实现一个简单的递归卷积神经网络作为热身,并在 MNIST 数据集上执行分类。

最后,像往常一样,让我们比较手动扩张反向传播与自动微分相比的表现。

网络架构(数学方程式形式)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Screen Shot from Paper

因此,从上面我们可以看到,递归卷积神经网络与递归神经网络完全相同,但具有卷积运算而不是矩阵乘法。

网络架构/前馈操作(图形形式)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left — Front View, Right — Side View

绿框 →递归卷积神经网络(RCNN)部分提取特征
红色箭头→RCNN 的输入序列
黄色箭头→RCNN 的输出序列
橙色矩形 →连接 RCNN 的特征空间(4 个时间戳)

蓝色矩形 →全连接网络第一层
粉色矩形 →全连接网络第二层
黑色矩形 →全连接网络第三/最后一层
黄色矩形 →全连接网络软最大层

所以我们的网络由两个不同的网络组成,第一部分是递归卷积神经网络来提取特征,第二部分是全连接神经网络来执行分类。

输入数据/噪声生成(4 个时间戳)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left — Original, Middle — Gaussian, Right — Poisson

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Left — Gamma , Right — Uniform

因此,对于递归卷积神经网络的 4 个输入图像,我们将向原始图像添加噪声,我们将向原始图像添加的噪声类型是高斯噪声泊松噪声伽马噪声均匀噪声。上面的图像显示了添加噪声后的结果。下面是几个例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试案例/指示颜色

**Case 0: Standard Manual Back Propagation with ADAM
Case 1: Auto Back Propagation with ADAM
Case 2: Dilated Back Propagation with ADAM Sparse Connection
Case 3: Dilated Back Propagation with ADAM Sparse Connection 2
Case 4: Dilated Back Propagation with ADAM Dense Connection 1
Case 5: Dilated Back Propagation with ADAM Dense Connection 2
Case 6: Dilated Back Propagation with ADAM Dense Connection 3**

如上所述,我们总共要比较七个案例。下面显示了每种情况下的每种颜色。

**Case 0: Red
Case 1: Green
Case 2: Blue
Case 3: Cyan
Case 4: Magenta
Case 5: Yellow
Case 6: Black**

训练结果(本地结果)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →训练图像上的时间成本
右图 →训练图像上的时间精度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →测试图像随时间变化的成本
右图 →测试图像随时间变化的精度
(请注意,我在着色上犯了一个错误,案例 1 和案例 2 交换了颜色)

非常有趣的是,观察到稀疏连接的扩张反向传播表现不佳,而密集连接的扩张反向传播表现不佳。

透明度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了增加这个实验的透明度,我上传了在我的笔记本电脑上运行这个程序时我的命令提示符的所有输出。

训练结果(试验 2)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →训练图像上的时间成本
右图 →训练图像上的时间精度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →测试图像随时间变化的成本
右图 →测试图像随时间变化的精度
(请注意,我在着色上犯了一个错误,案例 1 和案例 2 的颜色发生了变化)

我们可以观察到,即使在第二次试验中,我们也能超越自动微分。为了增加这个实验的透明度,我上传了在我的笔记本电脑上运行这个程序时我的命令提示符的所有输出。

互动代码(Google Colab / Replt.it /微软 Azure)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问 Google Colab 上的代码,请点击这里
要访问 Repl 上的代码,请点击此处
要访问 Microsoft Azure 笔记本上的代码,请单击此处。

最后的话

在下一部分,我们将涵盖门控递归卷积神经网络。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站

与此同时,请在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。如果你感兴趣,我也在这里做了解耦神经网络的比较。

参考

  1. 适合 ML 初学者的 MNIST。(2018).张量流。检索于 2018 年 3 月 15 日,来自https://www . tensor flow . org/versions/r 1.1/get _ started/mnist/初学者
  2. 适合 ML 初学者的 MNIST。(2018).张量流。检索于 2018 年 3 月 15 日,来自https://www . tensor flow . org/versions/r 1.1/get _ started/mnist/初学者
  3. 王军,胡小玲(2017)。用于光学字符识别的门控递归卷积神经网络。在神经信息处理系统的进展(第 334-343 页)。
  4. 导数表。(2018).Math.com。检索于 2018 年 3 月 15 日,来自http://www.math.com/tables/derivatives/tableof.htm
  5. tf.atan | TensorFlow。(2018).张量流。检索于 2018 年 3 月 15 日,来自https://www.tensorflow.org/api_docs/python/tf/atan
  6. Tensorflow,a. (2018)。张量流中的加性高斯噪声。Stackoverflow.com。检索于 2018 年 3 月 16 日,来自https://stack overflow . com/questions/41174769/additive-Gaussian-noise-in-tensor flow
  7. tf.reshape | TensorFlow。(2018).张量流。检索于 2018 年 3 月 16 日,来自 https://www.tensorflow.org/api_docs/python/tf/reshape
  8. “Tf。Random_Gamma | Tensorflow”。2018.张量流。2018 年 3 月 16 日访问。https://www.tensorflow.org/api_docs/python/tf/random_gamma
  9. tf.stack?,W. (2018)。为什么我会使用 tf.concat 而不是 tf.stack?。Stackoverflow.com。检索于 2018 年 3 月 16 日,来自https://stack overflow . com/questions/41534593/why-would-I-ever-use-TF-concat-instead-of-TF-stack
  10. “梯度下降优化算法概述”。2016.塞巴斯蒂安·鲁德。2018 年 3 月 16 日访问。http://ruder.io/optimizing-gradient-descent/
  11. “Tf。nn . conv 2d _ back prop _ Input | tensor flow "。2018.张量流。2018 年 3 月 16 日访问。https://www . tensor flow . org/API _ docs/python/TF/nn/conv2d _ back prop _ input
  12. “Tf。Reset_Default_Graph |张量流"。2018.张量流。2018 年 3 月 17 日访问。https://www . tensor flow . org/API _ docs/python/TF/reset _ default _ graph
  13. “指定颜色— Matplotlib 2.0.2 文档”。2018.Matplotlib.Org。2018 年 3 月 17 日访问。https://matplotlib.org/users/colors.html
  14. 高斯噪声。(2018).En.wikipedia.org。检索于 2018 年 3 月 17 日,来自https://en.wikipedia.org/wiki/Gaussian_noise
  15. 泊松分布。(2018).En.wikipedia.org。检索于 2018 年 3 月 17 日,来自https://en.wikipedia.org/wiki/Poisson_distribution
  16. 伽玛分布。(2018).En.wikipedia.org。检索于 2018 年 3 月 17 日,来自 https://en.wikipedia.org/wiki/Gamma_distribution
  17. 均匀分布(连续)。(2018).En.wikipedia.org。检索于 2018 年 3 月 17 日,来自https://en . Wikipedia . org/wiki/Uniform _ distribution _(continuous)
  18. JaeDukSeo/Only_Numpy_Basic。(2018).GitHub。检索于 2018 年 3 月 17 日,来自https://github . com/JaeDukSeo/Only _ Numpy _ Basic/blob/master/4 _ recurrent _ CNN/local cmd _ results . txt

【NIPS2018/ Google /论文摘要】一个神经元有多重要?

原文:https://towardsdatascience.com/nips2018-google-paper-summary-how-important-is-a-neuron-3de4b085eb03?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gif from this website

我们如何衡量网络内部隐藏单元的重要性?测量网络内部活动的最常用方法是测量每个神经元的激活值。这是衡量重要性的最佳方法吗?本文介绍并研究了电导的概念。

请注意,这个帖子是给未来的自己看的,用来回顾和复习资料,不用再读一遍整篇论文。

摘要

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这一节中,作者介绍了术语电导,以扩展归因的概念,理解隐藏单元的重要性。电导可以理解为隐藏层内部的属性流。我对电导的简单理解是“隐藏单元如何处理来自先前输入的输入数据,从而得到最终预测”。

背景和动机

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者决定写这个主题有几个背景/原因

  1. 大多数论文通过测量隐藏单元的激活值或梯度来评估隐藏单元的重要性。(而且这种方法有一些不良后果,将在后面讨论。)
  2. 测量隐藏单元的重要性的另一种方法是基于优化的方法。也就是说,手动将输入图像调整到网络中,以优化神经元的激活。然而,这些方法不能识别隐藏单元的重要性,也不能保证所有适当的隐藏单元都被这种方法研究。
  3. 衡量重要性的第三种方法是首先识别隐藏单元中的功能,并重建一个更简单的网络。然而,这种方法不能保证新模型中隐藏单元的影响与原始模型完全相同。
  4. 最后,最后一种方法是将人类定义的概念作为输入,并识别哪些隐藏的神经元对这些特征做出响应。这种方法的主要问题是网络具有与人类固有不同的表现形式。并且可能无法识别某些预测的所有重要概念。

与上述所有方法相比,作者决定看看网络自身的抽象(过滤器)。因此,对人类来说,这种解释可能不太直观,但整个预测过程都得到了解释。

我们(作者)的贡献

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者的所有贡献可以用一个词“电导”来表达。这实际上是基于另一个叫做积分梯度的想法。综合梯度是对一系列精心选择的输入变量的梯度求和的过程。非正式地,电导可以定义为积分梯度的流动,电导背后的关键思想是通过链规则分解积分梯度的计算。

作者研究了两种不同网络的电导。一个是著名的基于 mageNet 数据的 inception 网络架构。另一个是来自尹金一个卷积神经网络用于句子分类。(今天我只看盗梦空间网络。)

电导

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这一节中,作者介绍了电导的正式数学概念。在继续之前,作者定义了基本输入和输入的概念。

“假设 x 是手边的输入,x `是基线输入。对于图像网络,基线可以是黑色图像,而对于文本模型,基线可以是零嵌入向量”

如果我们考虑一条从 x '到 x 的直线路径(我将此理解为一种变换),并计算沿着该路径的所有点的梯度,则可以通过对所有梯度求和来获得积分梯度。积分梯度的形式如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →输入 x 的积分(第 I 个维度)

既然我们已经看到了积分梯度的定义,现在让我们看看电导是如何数学定义的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →对隐藏神经元 y 和链式法则的积分
蓝框 →对隐藏单元内所有维度的积分求和

如上所述,我们可以清楚地看到两个方程的相似之处。两者之间的主要区别是,我们对变量进行积分。(同样,我们可以将此视为通过链式法则分解积分梯度的过程。)

电导的评估

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里,作者将电导与机器学习(ML)社区中广泛使用的其他三种不同方法进行了比较。第一种方法已经是非常众所周知的方法,当测量一个隐藏单元有多重要时,第二种方法是当我们另外乘以梯度时。而最后一种方法是从本文介绍的深度卷积网络的影响导向解释。

神经网络的电导/饱和/极性/灵敏度特性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这一节中,作者讨论了电导的一些基本性质。

  1. 完整性 →任何单一隐藏层的电导加起来就是预测之间的差异
  2. 逐层守恒原理 →网络的输出活动通过 DNN 的各层完全重新分配到输入变量上,即正负证据都不会丢失
  3. 线性 →数学关系或函数的属性,这意味着它可以用直线来表示
  4. 不敏感 →如果改变一个隐藏单元的值不改变网络的预测,它的电导为零。如果改变输入不改变隐藏单元的值,则隐藏单元的电导为零。

接下来作者讨论了电导如何克服神经元饱和的问题。基本上,类似于内部影响,电导法取 0 和 1 之间的积分,克服了这个问题。(我不是 100%确定这种方法如何克服饱和神经元的问题,我将阅读论文“深度网络的公理化归属”并回来讨论此事。)最后,作者描述了其他方法所具有的不良特性。

激活方法 →有影响的属性与输出符号不一致。例如,ReLU()激活函数只能具有正值,但是 ReLU 节点可以根据上游权重对输出产生积极或消极的影响。

梯度激活 →具有超调特性,其中具有零影响的神经元可以被分配高重要性分数。*

内部影响 →具有与输出符号不一致的影响属性。

将电导应用于对象识别模型/消融研究

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在本节中,作者使用电导来识别初始网络隐藏层中有影响的过滤器。如上所述,作者发现在执行分类任务时,一些过滤器被一个或多个图像共享。(左边是检测眩光的滤镜,右边是检测红色的滤镜。)

接下来,作者们进行了消融(删除)研究,他们想看看为了让模型改变它的预测,需要丢弃(删除)多少这些重要的过滤器。他们发现,网络平均去除 3.7 次就足以改变它对一幅图像的预测。与内部影响相比,电导给出了较小的数字,这意味着电导能够有效地识别最重要的过滤器。

最后,请注意还有最后一节(将电导应用于情感模型)以及作者做的一个额外实验*(特征选择研究)**。然而,我的笔记本电脑快没电了,所以我现在不做总结。*

遗言

我发现这张纸上展示的材料非常坚硬。但是一个惊人的事实让我吃惊,我记得我做了另一篇论文的论文摘要,叫做“对基于反向传播的可视化的复杂行为的理论解释”。我记得那篇论文的主旨是,如果我们想了解网络内部发生了什么,我们需要按照事物(梯度或显著图)的本来面目来看待它,而不是试图修改它,让人类看起来更愉快。这篇论文似乎也有类似的论点。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。

参考

  1. Dhamdhere,m . Sundararajan 和 q . Yan(2018 年)。一个神经元有多重要?。Arxiv.org。检索于 2018 年 6 月 3 日,来自https://arxiv.org/abs/1805.12233
  2. ImageNet。(2018).Image-net.org。检索于 2018 年 6 月 3 日,来自 http://www.image-net.org/
  3. (2018).Aclweb.org。检索于 2018 年 6 月 3 日,来自 http://www.aclweb.org/anthology/D14-1181
  4. :Anon,(2018)。[在线]可在:https://www.linkedin.com/in/yoonrkim/[2018 年 6 月 3 日访问]。
  5. 为基于反向传播的复杂行为提供了理论解释。(2018).走向数据科学。检索于 2018 年 6 月 3 日,来自https://towards data science . com/paper-summary-a-theoretical-explain-behaviors-of-back-propagation-based-220083 D7 dddd
  6. 雷诺,k .,李,l .,森,s .,,M. (2018)。深层卷积网络的影响导向解释。Arxiv.org。检索于 2018 年 6 月 3 日,来自https://arxiv.org/abs/1802.03788
  7. 线性。(2018).En.wikipedia.org。检索于 2018 年 6 月 3 日,来自https://en.wikipedia.org/wiki/Linearity
  8. Sundararajan,m .,Taly,a .,和 Yan,Q. (2017 年)。深度网络的公理化属性。Arxiv.org。检索于 2018 年 6 月 3 日,来自https://arxiv.org/abs/1703.01365

有趣的 NLG—自动标题生成器

原文:https://towardsdatascience.com/nlg-for-fun-automated-headlines-generator-6d0459f9588f?source=collection_archive---------4-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image Courtesy: https://pixabay.com/en/texture-handwriting-s%C3%BCtterlin-1362879/

自然语言生成是我们这个时代要探索的一个非常重要的领域。它形成了机器人如何交流的基础——不像文人如何写书,而是像我们如何交谈。在这个内核中,我将向您展示一个非常简单但功能强大的 Python 模块,它用几行代码就完成了类似的工作。

模块:马克维奇

我们这里用的 Py 模块是[markovify](https://github.com/jsvine/markovify)

马科维奇的描述:

Markovify 是一个简单的,可扩展的马尔可夫链生成器。目前,它的主要用途是建立大型文本语料库的马尔可夫模型,并从中生成随机句子。但是,理论上,它可以用于其他应用。

关于数据集:

这包括 ABC 网站在给定时间范围内发布的全部文章。每天 200 篇文章的量和对国际新闻的良好关注,我们可以相当肯定地说,每一个重大事件都在这里被捕获。这个数据集可以从 Kaggle 数据集下载。

关于马尔可夫链的小知识

马尔可夫链以安德烈·马尔可夫命名,是从一种“状态”(一种情况或一组值)跳到另一种状态的数学系统。例如,如果你为一个婴儿的行为建立一个马尔可夫链模型,你可以包括“玩”、“吃”、“睡觉”和“哭”作为状态,这些状态和其他行为一起可以形成一个“状态空间”:一个所有可能状态的列表。此外,在状态空间的顶部,马尔可夫链告诉你从一个状态跳跃或“过渡”到任何其他状态的可能性——例如,当前正在玩耍的婴儿在接下来的五分钟内睡着而没有先哭的可能性。

在 Victor Powell 的互动文章中阅读更多关于马尔可夫链如何工作的信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加载所需的包

import pandas as pd *# data processing, CSV file I/O (e.g. pd.read_csv)*
import markovify *#Markov Chain Generator*
*# Any results you write to the current directory are saved as output.*

读取输入文本文件

inp = pd.read_csv('../input/abcnews-date-text.csv')inp.head(3)publish_date headline_text
020030219 aba decides against community broadcasting lic…
120030219 act fire witnesses must be aware of defamation
220030219a g calls for infrastructure protection summit

用马尔可夫链建立文本模型

text_model = markovify.NewlineText(inp.headline_text, state_size = 2)

是时候享受自动生成的标题了

*# Print five randomly-generated sentences*
for i **in** range(5):
    print(text_model.make_sentence())iron magnate poised to storm cleanup
meet the png government defends stockdale appointment
the twitter exec charged with animal cruelty trial
pm denies role in pregnancy
shoalhaven business boosts hunter

现在,这段文字可以成为 Twitter 机器人、Slack 机器人甚至是恶搞博客的输入。这才是重点。

参考资料:

  1. Github 回购
  2. Kaggle 内核
  3. 马尔可夫链直观解释
  4. 输入数据集

NLP —构建问题回答模型

原文:https://towardsdatascience.com/nlp-building-a-question-answering-model-ed0529a68c54?source=collection_archive---------0-----------------------

用数据做酷事!

我最近在斯坦福大学通过深度学习(CS224N)完成了一门关于 NLP 的课程,我很喜欢这种体验。学到了一大堆新东西。在我的最后一个项目中,我设计了一个基于斯坦福问答数据集(SQuAD) 的问答模型。在这篇博客中,我想介绍问答模型的主要组成部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以在我的 Github repo 上找到完整的代码。

我最近还为这个模型添加了一个网络演示,你可以放入任何段落并提出相关问题。查看链接

小队数据集

SStanfordQuestionAnsweringDataset(SQuAD)是一个新的阅读理解数据集,由一组维基百科文章上的众包工作者提出的问题组成,其中每个问题的答案都是相应阅读文章的一段文字,或 span 。SQuAD 拥有 500+篇文章上的 100,000+问答对,比以前的阅读理解数据集大得多。

在 SQuAD 数据集上有了快速的进步,一些最新的模型在回答问题的任务中达到了人类水平的准确性!

上下文、问题和答案的示例

背景——阿波罗计划从 1961 年运行到 1972 年,并得到了从 1962 年到 1966 年与它同时运行的双人双子座计划的支持。双子座任务开发了一些太空旅行技术,这些技术对于阿波罗任务的成功是必要的。阿波罗使用土星家族火箭作为发射工具。阿波罗/土星飞行器也被用于阿波罗应用计划,该计划包括天空实验室,这是一个在 1973-74 年支持三次载人任务的空间站,以及阿波罗-联盟测试项目,这是 1975 年与苏联的联合地球轨道任务。

问:在 1973-1974 年间,哪个空间站支持了三次载人任务?

答案——天空实验室

小队的主要特征:

I)它是一个封闭的数据集,意味着问题的答案总是上下文的一部分,也是上下文的连续跨度

ii)因此找到答案的问题可以简化为找到对应于答案的上下文的开始索引和结束索引

iii) 75%的答案长度小于等于 4 个单词

机器理解模型—关键部件

i)嵌入层

模型的训练数据集由上下文和相应的问题组成。这两者都可以被分解成单独的单词,然后使用像手套向量这样的预训练向量将这些单词转换成单词嵌入。要了解更多关于单词嵌入的知识,请查看我的文章。单词嵌入在捕捉单词周围的上下文方面比对每个单词使用一个热点向量要好得多。对于这个问题,我使用了 100 维手套词嵌入,并且在训练过程中没有调整它们,因为我们没有足够的数据。

ii)编码器层

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RNN Encoder

我们在模型中添加的下一层是基于 RNN 的编码器层。我们希望上下文中的每个单词都知道它前面和后面的单词。双向的 GRU/LSTM 可以帮助做到这一点。RNN 的输出是向前和向后方向的一系列隐藏向量,我们将它们连接起来。类似地,我们可以使用相同的 RNN 编码器来创建问题隐藏向量。

iii)关注层

到目前为止,我们有一个上下文的隐藏向量和一个问题的隐藏向量。要找到答案,我们需要将二者放在一起看。这就是注意力的来源。它是问题回答系统中的关键部分,因为它帮助我们决定,给定问题,我应该“注意”上下文中的哪些单词。让我们从最简单的注意力模型开始:

点产品注意事项

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Basic Attention Visualisation from CS224N

点积注意力将是,对于每个上下文向量 c i,我们乘以每个问题向量 q j 以获得向量 e i(上图中的注意力分数)。然后我们对 e i 取一个 softmax,得到α i(上图注意力分布)。Softmax 保证所有 e i 之和为 1。最后我们计算 a i,作为注意力分布α i 和相应问题向量(上图中注意力输出)的乘积。点积注意力也在下面的等式中描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上述注意已经在 Github 代码中实现为基线注意。

更复杂的注意——BiDAF 注意

你可以用上面描述的基本注意力层运行小队模型,但是性能不会很好。更复杂的注意力导致更好的表现。

让我们描述一下 BiDAF 论文中的关注点。主要思想是注意力应该双向流动——从上下文到问题,从问题到上下文。

我们首先计算相似性矩阵 S ∈ R N×M,它包含每对(ci,qj)上下文和问题隐藏状态的相似性得分 Sij。sij = wT sim[ci;QJ;ci♀QJ]∈R 这里,ci♀QJ 是元素式乘积,wsim ∈ R 6h 是权重向量。在下面的等式中描述:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们执行上下文到问题(C2Q)注意。(这个和上面说的点积注意差不多)。我们取 S 的行方式 softmax 来获得注意力分布α i,我们用它来取问题隐藏状态 q j 的加权和,产生 C2Q 注意力输出αI

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们执行问题到上下文(Q2C)注意。对于每个上下文位置 i ∈ {1,.。。,N},我们取相似性矩阵的对应行的最大值,m i = max j Sij ∈ R。然后,我们取结果向量 m ∈ R N 上的 softmax 这给出了上下文位置上的注意力分布β ∈ R N。然后我们用β取上下文隐藏状态 c i 的加权和——这就是 Q2C 注意力输出 c 素数。参见下面的等式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,对于每个上下文位置 c i,我们组合来自 C2Q 注意力和 Q2C 注意力的输出,如下式所述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您觉得这一部分令人困惑,不要担心。注意力是一个复杂的话题。尝试用一杯茶阅读 BiDAF 文件:)

iv)输出层

快到了。模型的最后一层是 softmax 输出层,帮助我们决定答案范围的开始和结束索引。我们组合上下文隐藏状态和来自前一层的注意力向量来创建混合的重复。这些混合的重复成为全连接层的输入,该全连接层使用 softmax 来创建具有开始索引概率的 p_start 向量和具有结束索引概率的 p_end 向量。因为我们知道大多数答案的开始和结束索引最多相差 15 个单词,所以我们可以寻找使 p_start*p_end 最大化的开始和结束索引。

我们的损失函数是起点和终点的交叉熵损失之和。并且使用 Adam 优化器将其最小化。

我构建的最终模型比上面描述的要复杂一点,在测试集上 F1 得分为 75。还不错!

后续步骤

关于未来探索的几个额外想法:

  • 我一直在用一个基于 CNN 的编码器来代替 RNN 编码器,因为 CNN 比 RNNs 快得多,并且更容易在 GPU 上并行化
  • 其他注意机制,如在论文中描述的动态共同注意

给我一个❤️,如果你喜欢这个职位:)希望你拉代码,并尝试自己。

其他著述:【http://deeplearninganalytics.org/blog】T4

PS:我有自己的深度学习咨询公司,喜欢研究有趣的问题。我已经帮助几家初创公司部署了基于人工智能的创新解决方案。请到 http://deeplearninganalytics.org/来看看我们吧。

如果你有一个我们可以合作的项目,请通过我的网站或 priya.toronto3@gmail.com 联系我

参考文献:

NLP 引擎(第 2 部分)->自然语言处理的最佳文本处理工具或库

原文:https://towardsdatascience.com/nlp-engine-part-2-best-text-processing-tools-or-libraries-for-natural-language-processing-c7fd80f456e3?source=collection_archive---------14-----------------------

NLP 库—何时、何地使用它们。NLTK,TextBlob,Spacy,CoreNLP,Genism,Polyglot。

构建 NLP 引擎时出现的一个主要问题是**“我应该使用哪个库来进行文本处理?”既然市场上有很多,还有“NLP 库的用途是什么?”**这两个问题将在这里解决,并帮助您在自己从头构建 NLP 引擎的道路上迈出正确的一步。

这篇文章是正在进行的系列文章的一部分:第一部分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“使用 NLP 库的需求是什么?”

自然语言处理(NLP)今天变得非常流行。NLP 是 人工智能 的一个领域,旨在理解和提取文本中的重要信息,并基于文本数据进一步训练。主要任务包括文本分析情感分析、机器翻译* 等。*

这些库帮助我们从文本中提取含义,其中包括广泛的任务,如文档分类、主题建模、词性(POS)标注和情感分析等。

“我应该使用哪个库进行文本处理?”

这里是六个最流行的 NLP 库的列表,它们在任何地方都被使用,但没有特定的顺序。这取决于你选择哪一个适合于你正在尝试执行的任务。

如果这五个都掌握了,那么你就没有必要去寻找其他的 NLP 库了。即使你掌握了其中的一个,也很容易在它们之间切换来学习和使用其他库。

  1. ***NLTK(自然语言工具包)😗最古老的 之一,多用于 研究教育目的
  2. TextBlob: 构建于 NLTK 之上,最适合 初学者 。这是一个用户友好和直观的 NLTK 界面。它用于快速原型制作。
  3. Spacy: 行业标准 目前最好的。
  4. CoreNLP(斯坦福 CoreNLP): 由斯坦福集团构建和维护的生产就绪解决方案,但它是用 java 构建的。
  5. Genism: 它是用于主题和向量空间建模、文档相似性的包。
  6. 多语种:通常用于涉及某个语言空间不支持的项目。

这些库并不是唯一的库,但是你可以说它们是*“NLP 的骨干”*掌握这些库可以让你做任何简单或高级的自然语言处理。

现在最好的是*“Spacy”我不能推荐它给 NLP。如果你想让它成为生产就绪和工业标准**请使用 Spacy,NLTK 仅用于学术目的。*

NLTK(自然语言工具包)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source

NLTK 是最古老的 NLP 之一。如果你是一个初学者,必须学习自然语言处理领域的基础知识,那么自然语言处理是适合你的。你可以为你应该完成的适当的任务建立适当的模型。

“一旦掌握了 NLTK,它将成为文本分析研究人员的游乐场”。NLTK 有超过 50 个语料库和词典,9 个词干分析器和几十种算法可供选择。基本上是为了一个学术研究者。

文本斑点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source

TextBlob 是 NLTK 的一个接口,它将文本处理变成了一个 简单且相当愉快的过程 ,因为它有 丰富的功能平滑的学习曲线 由于有详细且易懂的文档。因为它允许简单地添加各种组件,如情感分析器和其他方便的工具。用于*【快速成型】**。*

空间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source

Spacy是用 Python & Cython 写的。SpaCy 不能像 NLTK 那样为任何任务提供超过 50 种不同的解决方案。“ Spacy 只为任务提供一个且是最好的一个解决方案,从而免去了自己选择最优路线的问题 ”,确保建立的模型精益、中庸、高效。此外,该工具的功能已经很强大,并且会定期添加新功能。

科伦普(斯坦福科伦普)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source

CoreNLP 由一套生产就绪的自然分析工具组成。是用 Java 写的,不是 Python。虽然有社区做的 Python 包装器。它可靠健壮,比 NLTK 快(但是 spacy 快得多),并且还支持多种语言。许多组织将 CoreNLP 用于生产实现。

CoreNLP 为 NLP 任务提供了一个很好的基础设施。然而,客户机-服务器体系结构引入了一些开销,这对于较小的项目或在原型开发期间可能是不利的

Genism

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是针对主题和向量空间建模、文档相似性的包。“Gensim 并不适合所有类型的任务或挑战,但它能做什么,就做什么”。在主题建模和文档相似性比较领域,高度专业化的 Gensim 库是无可匹敌的。所以 Genism 不是一个通用的 NLP,但是它的使用取决于手边的任务。**

多语种

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

source

略显冷门的图书馆。它提供了广泛的分析和令人印象深刻的语言覆盖面。多亏了 NumPy,它的运行速度也非常快。使用 polyglot 类似于 spaCy——非常简单,对于涉及 spaCy 不支持的语言的项目来说,这将是一个极好的选择。该库之所以与众不同,还因为它通过管道机制请求在命令行中使用专用命令。绝对值得一试****

结论:

NLTK 更多的是学术性。你可以用它来尝试不同的方法和算法,组合它们等等。相反,Spacy 为每个问题提供了一个现成的解决方案。 你不用去想哪种方法更好:Spacy 的作者们已经搞定这个 。还有, Spacy 非常快(比 NLTK 快好几倍)。一个缺点是 Spacy 支持的语言数量有限。然而,支持的语言数量一直在增加。因此,我们认为 Spacy 在大多数情况下是最佳选择,但是如果您想尝试一些特殊的东西,可以使用 NLTK****

在这里,你可能不理解标记化、主题建模、意图等的含义,我将在下一篇 NLP 引擎文章(第 3 部分)中介绍。

学分:

  1. https://www . kdnugges . com/2018/07/comparison-top-6-python-NLP-libraries . html
  2. https://elitedatascience.com/python-nlp-libraries
  3. https://sunscrapers . com/blog/6-best-python-natural-language-processing-NLP-libraries/

请务必关注我的 LinkedInTwitter*insta gram获取更多更新。如果你喜欢这篇文章,请鼓掌并分享它。*****

在这里加入我们的 WhatsApp 社区。

NLP —从文本中提取位置

原文:https://towardsdatascience.com/nlp-extracting-location-from-text-aa99c55e77d5?source=collection_archive---------0-----------------------

我目前正在做一个 NLP 任务,需要从文本中提取位置。例如,“我住在纽约”,那么必须从文本中提取“纽约”。有几个像 nltk 或 T2 这样的图书馆可以做这种工作。

NLTK 和 StanfordNER 是如何从文本中识别位置的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pipeline for named entity recognition in nltk

ne_chunk 函数将标记分为不同的实体,如“人”、“组织”、“位置”等。ne_chunk 使用基于分类器的方法,并且已经在词性标记数据上进行了训练。分类器试图理解句子中各种词类和实体之间的关系。

挑战

因为 NLTK 和 StandfordNER 依靠词性标注来识别位置;不以大写字母开头的位置名称无法识别。

例如,“我住在班加罗尔”,单词“班加罗尔”将被两个库识别为一个位置。相反,“我住在班加罗尔”,单词“班加罗尔”不会被他们中的任何一个识别为地点。这是因为“bangalore”在词类标记上有一个“NNP”标记,表示专有名词,而“Bangalore”只被标记为表示名词的“NN”。

我的数据集基本上是从电子邮件中提取的,有许多这样的句子,其中地点名称不是以大写字母开头。因此,如果不以大写字母开头,就无法提取位置。

其他几个模糊之处

  1. Devi Circle 是一个美丽的地方–“Devi”被识别为一个人,而 Devi Circle 是 Bangalore 的一个地方。
  2. Martahalli 是一个美丽的地方-“Martahalli”是一个人,而 Marta halli 是班加罗尔的一个地方。
  3. 我的学校在 Martahalli 警察局附近- 有趣的是**‘Marta halli’被正确归类为位置。**
  4. 我想从 Koramangala 到 Madivala- 只有“Koramangala”被识别为一个位置,而 koramangala 和 Madivala 都是班加罗尔的位置。

上述歧义清楚地表明,命名实体识别器(ne_chunk)被训练成仅理解词性标注,以理解一个标记是否是实体。

结论

许多 NLP 技术需要从文本中提取实体,如人名、位置、组织名称或日期。不幸的是,没有简单的方法来实现这一点。

我请求读者提出他们心目中有助于完成这项任务的任何方法。

NLP:使用 LDA 在几分钟内从数据集中提取主要主题

原文:https://towardsdatascience.com/nlp-extracting-the-main-topics-from-your-dataset-using-lda-in-minutes-21486f5aa925?source=collection_archive---------1-----------------------

用数据做很酷的事情!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Power of NLP

我最近开始学习用于主题建模的潜在狄利克雷分配(LDA ),惊讶于它的强大和快速运行。主题建模是使用无监督学习来提取文档集合中出现的主要主题(表示为一组单词)的任务。

我在 20 个新闻组数据集上测试了该算法,该数据集包含来自新闻报道的许多部分的数千篇新闻文章。在这个数据集中,我提前知道了主要的新闻主题,并且可以验证 LDA 是否正确地识别了它们。

代码运行起来非常简单快速。可以在 Github 上找到。我鼓励你拉一下试试。

关于 LDA

LDA 用于将文档中的文本分类到特定主题。它建立了每个文档的主题模型和每个主题的单词模型,建模为 Dirichlet 分布。

  • 每个文档被建模为主题的多项式分布,并且每个主题被建模为单词的多项式分布。
  • LDA 假设我们输入的每一个文本块都包含有某种关联的单词。因此,选择正确的数据是至关重要的。
  • 它还假设文档是由多个主题混合而成的。然后,这些主题根据它们的概率分布生成单词。

要了解更多关于 LDA 的信息,请点击这个链接

使用的数据集

我用的数据集是 20Newsgroup 数据集。它可以在 sklearn 数据集下获得,并且可以作为

from sklearn.datasets import fetch_20newsgroups
newsgroups_train = fetch_20newsgroups(subset=’train’, shuffle = True)
newsgroups_test = fetch_20newsgroups(subset=’test’, shuffle = True)

这个数据集已经将新闻分组为关键主题。你可以熬过来

print(list(newsgroups_train.target_names))

数据集中有 20 个目标——‘alt .无神论’,
‘comp . graphics’,
‘comp . OS . ms-windows . misc’,
‘comp . sys . IBM . PC . hardware’,
‘comp . sys . MAC . hardware’,
‘comp . windows . x’,
‘misc . for sale’,
‘rec . autos’,
‘rec . motors’,
‘rec .’

从视觉上看,我们可以说这个数据集有几个广泛的主题,如:

  • 科学
  • 政治
  • 运动
  • 宗教
  • 技术等

使用 Python 中的 LDA 提取主题

  1. 预处理原始文本

这包括以下内容:

  • 分词:将文本拆分成句子,句子拆分成单词。将单词小写,去掉标点符号。
  • 少于 3 个字符的单词将被删除。
  • 所有的停用词都被删除。
  • 单词被词汇化——第三人称的单词被改为第一人称,过去时态和将来时态的动词被改为现在时态。
  • 单词被词干化——单词被还原成它们的词根形式。

我们使用 NLTK 和 gensim 库来执行预处理

def lemmatize_stemming(text):
    return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos='v'))# Tokenize and lemmatize
def preprocess(text):
    result=[]
    for token in gensim.utils.simple_preprocess(text) :
        if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3:
            result.append(lemmatize_stemming(token))

    return result

生成的文本如下所示:

Original document: 
['This', 'disk', 'has', 'failed', 'many', 'times.', 'I', 'would', 'like', 'to', 'get', 'it', 'replaced.']

Tokenized and lemmatized document: 
['disk', 'fail', 'time', 'like', 'replac']

2。将文本转换成单词包

在主题建模之前,我们将标记化和词条化的文本转换为一个单词包,你可以把它想象成一个字典,其中的关键字是单词,值是单词在整个语料库中出现的次数。

dictionary = gensim.corpora.Dictionary(processed_docs)

我们可以进一步筛选出现次数很少或出现频率很高的单词。

现在,对于每个预处理过的文档,我们使用刚刚创建的 dictionary 对象将文档转换成单词包。也就是说,我们为每个文档创建一个字典,报告有多少单词以及这些单词出现了多少次。

bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]

结果看起来像:

Word 453 ("exampl") appears 1 time.
Word 476 ("jew") appears 1 time.
Word 480 ("lead") appears 1 time.
Word 482 ("littl") appears 3 time.
Word 520 ("wors") appears 2 time.
Word 721 ("keith") appears 3 time.
Word 732 ("punish") appears 1 time.
Word 803 ("california") appears 1 time.
Word 859 ("institut") appears 1 time.

3。运行 LDA

这实际上很简单,因为我们可以使用 gensim LDA 模型。我们需要指定数据集中有多少主题。假设我们从 8 个独特的主题开始。通过次数是对文档进行培训的次数。

lda_model =  gensim.models.LdaMulticore(bow_corpus, 
                                   num_topics = 8, 
                                   id2word = dictionary,                                    
                                   passes = 10,
                                   workers = 2)

结果并解释它们

就是这样!模型已经建立。现在让我们来解读它,看看结果是否有意义。

该模型的输出是 8 个主题,每个主题由一系列单词分类。LDA 模型不会给这些词起一个主题名,而是由我们人类来解释它们。请参见下面的模型输出示例,以及“我”如何为这些单词分配潜在主题。

Topic 1: Possibly Graphics Cards
Words: "drive" , "sale" , "driver" , *"wire" , "card" , "graphic" , "price" , "appl" ,"softwar", "monitor"Topic 2: Possibly Space
Words: "space","nasa" , "drive" , "scsi" , "orbit" , "launch" ,"data" ,"control" , "earth" ,"moon"Topic 3: Possibly Sports
Words: "game" , "team" , "play" , "player" , "hockey" , season" , "pitt" , "score" , "leagu" , "pittsburgh"Topic 4: Possibly Politics
Words: "armenian" , "public" , "govern" , "turkish", "columbia" , "nation", "presid" , "turk" , "american", "group"Topic 5: Possibly Gun Violence
Words: "kill" , "bike", "live" , "leav" , "weapon" , "happen" , *"gun", "crime" , "car" , "hand"

查看 github 代码来查看所有主题,并使用模型来增加或减少主题的数量。

观察:

  • 该模型在提取数据集中的独特主题方面做得非常好,我们可以在已知目标名称的情况下确认这些主题
  • 模型运行非常快。我可以在几分钟内从数据集中提取主题
  • 它假设数据集中有不同的主题。因此,如果数据集是一堆随机的推文,那么模型结果可能就不可解释了。

未来的改进

我对这个关于 Guided LDA 的帖子很感兴趣,很想尝试一下。

我有自己的深度学习咨询公司,喜欢研究有趣的问题。我已经帮助许多初创公司部署了基于人工智能的创新解决方案。请到 http://deeplearninganalytics.org/来看看我们吧。

你也可以在 https://medium.com/@priya.dwivedi 的看到我的其他作品

如果你有一个我们可以合作的项目,请通过我的网站或 info@deeplearninganalytics.org 联系我

参考文献

  • 非常感谢 Udacity,特别是他们的 NLP 纳米学位让学习变得有趣!
  • LDA 上的纸

面向 LGBTQIA+社区的 NLP:自然语言处理入门第 1 部分

原文:https://towardsdatascience.com/nlp-for-the-lgbtqia-community-a-primer-on-natural-language-processing-part-1-7f0ffd1bb54d?source=collection_archive---------0-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

What do we want? Trans rights! When do we want them? NOW!

跨性别群体的担忧

我将坦率地直接切入正题:当涉及到每天在世界上导航时,跨性别群体面临着不可逾越的挑战。2016 年有 27 名变性妇女被谋杀,2017 年有 9 名变性妇女被谋杀(这个数字大概会)。这些妇女大多是有色人种。

国家跨性别平等中心在最近的一份报告中显示了非常明显的统计数据。27%的变性人。 27% 的跨性别者报告生活贫困(年收入 2 万美元)。 14% 报告失业(是总人口的两倍),绝大多数人报告存在某种职业歧视(无论是被拒绝升职还是因跨性别被解雇)。

在我们的刑事司法系统中,变性人面临着严重的歧视。 22% 曾报告被警察骚扰。 16% 曾被监禁的受访者报告过监狱看守的严重性骚扰。我们甚至没有多少变性人仅仅因为表达他们的身份而被监禁的数字。

跨性别群体在健康和获得健康方面存在巨大差异。 41% 的跨性别者报告曾试图自杀, 19% 报告曾被医务人员拒绝提供医疗帮助, 28% 报告因受到歧视威胁而推迟护理。

我为什么关心这些问题?我是一名变性女性,一直在思考我们当前社会对我生计的攻击。但此外,我很荣幸拥有高等学位和专业技能。我有责任将这些技能运用到工作中。

获取跨社区相关数据。

我在以前的一篇文章中提到过,很难找到与同性恋问题相关的数据,至少那些公开的数据是如此。这需要一些创新思维。Reddit 实际上是一个数据宝库,尽管人们可能不会这么想。我们通常认为 Reddit 是猫图片和愚蠢迷因的来源。在我发现自己身份的旅程中,我在 reddit 上找到了我经常使用的支持论坛。这些论坛提供了一个独特的数据集,以更好地了解变性人的关注。

我一直在使用自然语言处理方法挖掘这些数据,并决定一石二鸟也是值得的:1)通过自然语言处理和机器学习提供对围绕跨性别群体的关注的见解,2)做一个关于自然语言处理基础的教程。

什么是自然语言处理(NLP)?

根据 Algorithmia 的说法,NLP 是“计算机以一种聪明而有用的方式来分析、理解人类语言并从中获取意义的一种方式。”我用一个很傻的句子,取自 sub-Reddit/r/startled cats作为例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“Can I haz bag?” I needed to offset the gloomy trans stats with sillier cats.

I do yoga with cats. Cats are magnetically drawn to a human engaged in awkward positions. The will place themselves where they can be most inconvenient.

我们如何用一种有意义的方式将这些词量化?我们甚至不要正确理解这句话的意思。首先,我们需要对文本进行标记。这意味着将文本拆分成如下内容:

['I', 'do', 'yoga', 'with', 'cats']

也许我们需要确定这个句子的语法。

[(‘I’, ‘PRP’), (‘do’, ‘VBP’), (‘yoga’, ‘RB’), (‘with’, ‘IN’), (‘cats’, ‘NNS’)

其中 PRP 是人称代词,VBP 是现在时动词,rb 是副词,IN 是介词,NNS 是复数名词。当您读入更多的文本数据时,它会变得更加复杂。

假设您想用这些单词标记进行某种文本分类。如何把文字当做特征?withdo这两个词有关联吗?在我们的例子中,我们如何对待单词catcats?我们是把它们当成一个词,两个词,还是要看上下文?

让我们思考一下单词的意思。计算机如何从下面的句子中提取意思:

I went by the river bank yesterday.

I went and robbed a bank yesterday.

我们如何着手确定单词 token bank的含义?

我希望这能让你更好地理解我们在日常生活中经常看到的自然语言处理的应用。语言很复杂!我们甚至还没有触及亚马逊 Alexa 和谷歌 Home 等产品中的信号处理。

NLP 管道,一目了然。

我在 Insight 中学到了相当多的 NLP,我只想说:与典型的数据挖掘相比,挖掘文本数据并不是一个真正透明的过程。典型的数据集,即使是杂乱的,也会通过 SQL 数据库来到你面前。csv 文件,JSON 格式的数据等。许多文本数据不支持。那么,我们如何对文本数据进行分析呢?(顺便说一下,我使用的当前数据集存储在 SQLite 数据库中)。

首先,您需要适当的库。我使用 Python 包nltk ( 自然语言工具包)作为我的面包和黄油,但是像spaCy (www.spacy.io)这样的新包可以做很多和nltk一样的事情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The most basic NLP pipeline.

管道通常遵循上述格式。首先从数据源读入数据。然后标记并删除停用词。标记化将句子'I do yoga with cats'放入一个数组['I', 'do', 'yoga' ,'with', 'cats'].

“停用词”是低信息词,对你正在分析的文本没有什么帮助。nltk有一个常用停用词库,但我通常也会定义自己的停用词集。删除停用词时,您的文本可能如下所示:``[‘I’, ‘yoga’ ,‘cats’]`。删除停用词的方法没有对错之分,这取决于您正在处理的文本数据。

现在我们对文本进行“词干化”或“词汇化”。单词可以有许多屈折变化。我们举个例子startle。可以有startled或者startling。为了便于分析,您可能只想将令牌简化为startl。词条简化包括将一个单词简化成它的常见形式,即词条。例如,标记gogoinggonewent具有相同的基础形式go

从那里,我们以某种方式对文本进行矢量化(我将在接下来的另一篇博客文章中介绍)。这只是意味着每个令牌都以某种方式用数字表示。它们可以被表示为原始频率。存在更复杂的矢量化,可以表示与主题相关的单词或者它们如何与其他单词相关联(例如,潜在语义分析、Word2Vec 单词嵌入模型)。

将这些方法应用于来自 Reddit 的转基因数据

好了,现在是我想吃的肉。我将分享一些代码片段,但我的大部分代码你可以在相关的 github repo 中看到。

为了这个分析,我从 reddit /r/asktransgender 子网站上收集了大约 2 万条评论。具体来说,我利用谷歌的云平台(谷歌大查询)来检索评论。谷歌有大量的当前和以前年份的 reddit 评论语料库(文本数据集合),这是一个不太难获取 reddit 数据的来源。

我所有的 Reddit 数据都存储在 SQLite 数据库中(顺便说一句,这个数据库比我以前的 Postgres 数据库更容易建立。下次再发)。最初,我查询了数据,并将其读入熊猫数据框。文本数据可能不可靠,你将不得不不断地从 UTF-8 文本格式中解码和重新编码它们。

以下代码采用一个数据帧。在您指定的列标题中,它会将文本转换为字符串格式,将所有文本设置为小写,并最终解码文本。

def decode(column_title):
    dataframe = self.dataframe
    dataframe[column_title] = dataframe[column_title].astype(str)
    dataframe[column_title] = dataframe[column_title].str.lower()
    dataframe[column_title] =   dataframe[column_title].str.decode('UTF-8', errors='strict')
    return dataframe

在接下来的代码片段中,我定义了要删除的停用词。有一个预建的字典,但是我也添加了一些随机的 ASCII 字符来删除。您也可以使用正则表达式来删除这些符号。

def defineStopwords(words = None):
    stop_words = stopwords.words('english')
    etc_stop = ['.', ',', '?', '!', '\'',  ':', '\"', '{', '}', ';', '%', '[',  ']', '(', ')', '-', '\'s', '\'ve', '...', '\'ll', '`', '``', '"n\'t"', '"\'m"', "''", '--', '&']
   if words is not None: 
       stop_words = stop_words + etc_stop + words

       else:
           stop_words = stop_words + etc_stop

   return stop_words

这个片段中有很多内容,但它本质上实现了我的 NLP 管道。我做一些重新编码和解码,标记我的语料库中的每个文档(在nltk中使用RegexTokenizer,并使用列表理解i for i in temp if i not in stopwords删除停用词。然后我让记号符号化。该函数返回单个标记以及二元模型的大列表。

二元模型是词对而不是单个记号。有时我们对二元模型感兴趣,因为它们添加了更多关于常见共现词的信息(例如,panic attack)。

我们将这些记号和二元模型添加到空列表中。现在我们准备做一些基本的可视化!

def wordTokens(df_column, words = None, encode = True):

    df = self.dataframe
    df = self.decode(df_column)
    corpus = df[df_column].tolist() singletons = []
    bigrams = []

    stopwords = self.defineStopwords()

    for post in corpus:
       temp = post.lower()
       if encode == True:
           temp = post.encode('ascii', 'ignore').decode('ascii')
       else:
           continue

       print temp
       temp = temp.encode('utf-8').translate(None, string.punctuation)
       tokenizer = RegexpTokenizer(r'\w+')
       temp = tokenizer.tokenize(temp)
       stopped_tokens = [i for i in temp if not i in stopwords]
       lemmatized_tokens = [nltk.WordNetLemmatizer().lemmatize(i) for i in stopped_tokens]
       bigram = nltk.bigrams(lemmatized_tokens)
       bigram = list(bigram)
       singletons.append(lemmatized_tokens)
       bigrams.append(bigram)

       print '\n Successfully cleaned and tokenized abstracts.'

    return singletons, bigrams

我的/r/ask 跨性别语料库的频率计数

作为一名数据科学家,您应该做的第一件事是进行一些探索性分析。在自然语言处理中,你可以先看一下词频,以便更好地了解你正在看的东西。这就是我对单个单词和二元模型所做的。

token_corpus = []
for doc in tokens:
    for token in doc:
        token_corpus.append(token)

单个令牌和二元模型被组织成嵌入到一个更大列表中的列表。我想得到一个单个记号列表,所以我简单地遍历我的原始语料库并创建一个新的。

fdist = nltk.FreqDist(token_corpus)
words = []
freq = []
for word, frequency in fdist.most_common(100):
    words.append(word)
    freq.append(frequency)

我调用nltk.FreqDist来生成我的频率分布。从那里,我使用我的fdist对象(这是一个字典),并创建两个单词和频率列表。最后,我使用这些列表来可视化我在seaborn的频率分布。

下图显示了前 75 个单个令牌和二元模型。

个人代币

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二元模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我想指出,二元模型的频率产生了一些有趣的见解。在我们的文本中,我们看到了一些性别身份的不确定性,这并不奇怪(至少对我来说,作为一个跨性别的同性恋者),因为/r/asktransgender 是一个支持社区。人们经常提到“性别认同”和“性别焦虑”。我们还观察到诸如“开始 hrt”的标记。HRT 代表“激素替代疗法”。在我们的社区,获取荷尔蒙是一件大事,有很多人问这个问题也不足为奇(至少对我来说)。我们也看到像“我很担心”这样的标记,这可能表明个人对过渡有某种焦虑。

词对搭配

搭配是相互之间有很强关联的词对,我们可以用统计学来确定某个词对是否有超出随机几率的显著的相互关联。例如,在我们的语料库中gender identitygender dysphoria是可以相互关联的。

简而言之,我们可以使用逐点互信息统计来计算重要的搭配。这方面的方程式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 PMI 等于给定 word-x 的 word-y 的概率的对数除以 word-y 的概率,nltk具有搭配功能,从我们的语料库中导出 PMI 得分。也有其他方法可以实现这一点(例如,卡方检验、学生 t 检验和对数似然比检验)。

bigram_measures = BigramAssocMeasures()
finder = BigramCollocationFinder.from_words(token_corpus)
finder.apply_freq_filter(20)
finder.nbest(bigram_measures.pmi, 15)

上面的代码获取一个语料库,应用一个频率过滤器(只查找出现 20 次以上的搭配),并找到 15 个最佳搭配。这些搭配列举如下:

('roller', 'coaster'),
 ('vice', 'versa'),
 ('san', 'francisco'),
 ('bart', 'van'),
 ('howard', 'brown'),
 ('penile', 'inversion'),
 ('caitlyn', 'jenner'),
 ('rib', 'cage'),
 ('north', 'carolina'),
 ('cyproterone', 'acetate'),
 ('adam', 'apple'),
 ('van', 'de'),
 ('brow', 'ridge'),
 ('coping', u'mechanism'),
 ('planned', 'parenthood')

所以我们看到一些有趣的事情。还是那句话,很多医学上的东西。阴茎倒置是性别确认手术中使用的一种技术。霍华德·布朗是芝加哥的一家 LGBTQ 诊所。醋酸环丙孕酮是一种用于阻断睾酮的药物。我们也看到渗透社会意识的事情,比如凯特琳·詹娜和北卡罗来纳(由于歧视性的 HB2 法案)。还列出了人们可能希望生活的地方(旧金山),以及其他可以获得激素替代疗法的地方(计划生育)。

我还使用对数似然比测试探索了搭配。简而言之,对数似然比检验是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对数似然比测试以下内容。假设 1 (H1):单词 1 的出现独立于单词 2 的先前出现。假设命题 2 (H2):单词 2 的出现依赖于单词 1 之前的出现。因此,对数等于 H1 和 H2 的可能性。对数似然检验给了我们一些更合理的搭配。

 ('feel', 'like'),
 ('dont', 'know'),
 ('dont', 'want'),
 ('anyone', 'else'),
 ('year', 'old'),
 ('im', 'sure'),
 ('even', 'though'),
 ('month', 'ago'),
 ('gender', 'identity'),
 ('year', 'ago'),
 ('trans', 'woman'),
 ('high', 'school'),
 ('facial', 'hair'),
 ('trans', 'people'),
 ('informed', 'consent')

我们看到有一些非常常见的搭配(例如,“感觉像”、“不知道”)。有些搭配为质疑性别认同的个人提供了一个共同关注的视角。像“其他任何人”这样的搭配表示一种陈述,如“其他任何人经历过……”,或者“知情同意”表示一个问题,如“其他任何人知道 x 区有一家知情同意诊所可以获取激素吗?”

简单的文本语料库分析产生的线索可以帮助我们理解跨性别群体的密切关注。

结论和后续步骤

这些仅仅是分析这个数据集的初步步骤,但是到目前为止我们看到了一些有趣的数据模式。当挖掘这个数据集时,我一直在问自己的问题围绕着最常见的话题是什么,以及我们如何从关联的单词中推导出单词的含义,以深入数据?我们能否在文档分类框架中使用这些文本数据来预测精神痛苦或医疗需求?第 2 部分将涵盖其中的一些主题,敬请关注!

米歇尔是波士顿的 LGBTQ 活动家和数据科学家。你可以在 LinkedIn 或者她的 个人网站 上找到更多关于她的信息。

法律文档主题建模和摘要的自然语言处理。

原文:https://towardsdatascience.com/nlp-for-topic-modeling-summarization-of-legal-documents-8c89393b1534?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你有没有想过律师是如何有效地处理一系列法庭陈述的?他们如何绕开法律文件的总体背景,以便在最终不得不着手处理之前弄清楚需要注意什么。看起来很容易,除非你有一个 3000 页的文档,里面有突出的细节。这就是这个项目背后的动机,从法律文档的 pdf 中自动建模主题并总结关键上下文。

该项目旨在从双方签订的一份长达 5 页的商标和域名协议中自动建立话题模型,以提取对双方有利或不利的话题上下文。这种方法包括:从文档的 pdf 副本中提取文本,清理提取的文本,从文档中建模主题,并显示可视摘要。注意,这里采用的方法可以扩展到几乎所有保存为 pdf 格式的文档。

从 PDF 文档中提取文本

双方之间的法律协议以 pdf 文档的形式提供。首先使用下面显示的函数从 pdf 文档中提取文本。该函数使用 python 库 pdf-miner *从 pdf 文档中提取除图像之外的所有字符(尽管我可以修改以适应这一点)。*该函数只接受主目录中 pdf 文档的名称,从中提取所有字符,并将提取的文本作为字符串的 python 列表输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing the function that extracts texts from a pdf document

清理提取文本

从 pdf 文档中提取的文本包含需要删除的无用字符。这些字符降低了我们的模型的有效性,因为它们提供了不必要的计数比。下面的函数使用了一系列的 正则表达式 搜索和替换函数以及一个列表理解来用空格替换这些字符。以下函数用于此过程,显示的结果文档仅包含字母数字字符。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing code which replaces document coding with blank space

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing code which replaces non-alpha characters with blank space

主题建模

T 使用 scikit-learn 模块 计数矢量器 进行最小参数调整,将干净文档表示为 DocumentTermMatrix。这是因为建模要求将字符串表示为整数。CountVectorizer 显示删除停用字词后,某个字词在列表中出现的次数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing how the CountVectorizer is fitted on the document with stop-words

文档术语矩阵被格式化为 pandas 数据框架,以便浏览数据集,如下所示。该数据框显示了文档中每个术语的单词出现次数。在没有格式化为数据帧的情况下,文档术语矩阵作为稀疏矩阵存在,并且应该使用 todense()toarray()将其转换为密集矩阵。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing a cross-section of the output from the CountVectorizer

该文档术语矩阵被用作由 潜在狄利克雷分配 算法用于主题建模的输入数据。现在这个 LDA 算法有几个不同的实现,但是对于这个项目,我将使用scikit-learn实现。另一个非常著名的 LDA 实现是 Radim Rehurek 的 gensim 。这适合于由计数矢量器输出的文档术语矩阵。该算法适合于隔离五个不同的主题上下文,如下面的代码所示。这个值肯定可以根据您想要从建模中获得的粒度级别进行更改。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing how the LDA model was fitted on the DocumentTermMatrix with 5 topics

下面的代码使用 mglearn 库来显示每个特定主题模型中的前 10 个单词。人们可以很容易地从每个主题所呈现的单词中总结出结论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing the 5 topics from LDA and the most common words in each topic

从以上结果来看,显然主题 2 与商标所有权协议条款和条件有很大关系。话题 1 谈论涉及签名和一些义务的当事人之间的协议。ECLIPSE 一词似乎在所有五个主题中都很普遍,这表明了它在整个文档中的相关性。

这一结果与文件*(商标和域名协议)非常一致。***

为了更细致地观察每个主题,我们提取每个主题模型的句子进行简要总结。下面的代码从主题 1 和主题 4 中提取了前 4 个句子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing sentences within Topic model 1 and 4

Topic-1 中的句子讨论了根据纽约市的法律将商标转让给 eclipse 的问题。

此外,题目 4 中的句子清楚地表明了域名和商标协议的生效日期。

结果可视化

T 何pyl Davis库用于可视化主题模型。请注意主题 1 和主题 4 之间的关系有多密切,主题 2、主题 3 和主题 5 之间的距离有多远。这些主题(2、3 和 5)捕获了法律文档中相对不同的主题,并且是那些应该更仔细观察的主题,因为它们在组合时会提供文档的更宽视图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing how distinct each modelled topic is from one another

从下图可以看出,话题 5 指的是双方之间的协议、义务和签名,而话题 3 谈论的是域名、头衔和商标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing the words which are most frequent in Topic-3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure showing the words which are most frequent in Topic-3

还为整个法律文档生成了一个 wordcloud ,以记录文档中最常出现的术语,如下图所示。这通常与主题建模的结果一致,因为像商标、协议、域名、eclipse 等这样的词被视为重复出现,因此更加醒目。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A wordcloud showing the most occurrent words/phrases in the legal document

结论

B y 将通过潜在狄利克雷分配模型获得的主题 2、3 和 5 与为法律文件生成的词云相结合,我们可以有把握地推断出该文件是双方之间对商标域名转让的简单法律约束。

这个项目遵循一个简单的方法来从 pdf 文档中提取文本,这个项目可以修改以从图像文件中提取文本。jpeg。png),从而可以在文档快照上进行主题建模和摘要。该项目显示了机器学习如何应用于法律部门,通常用于提供主题的文档摘要。

这个项目的一个更实际的应用是在小说、教科书等的章节上进行文本摘要,它已经被证明是非常有效的。

用于此分析的代码(IPython 笔记本)的链接可以在我的 github 页面上找到:https://github . com/chibueze 07/Machine-Learning-In-Law/tree/master

NLP |序列到序列网络|第 1 部分|处理文本数据

原文:https://towardsdatascience.com/nlp-sequence-to-sequence-networks-part-1-processing-text-data-d141a5643b72?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过理解 NLP,你可以获得许多好处,你可以制作自己的模型来回答问题并在聊天机器人中使用它,或者你可以制作一个翻译器来将文本从你的语言翻译成英语或相反的语言,或者你可以制作一个文本摘要器。

在这个教程系列中,我们将学习如何制作一个 seq2seq 网络,并训练它将英语文本翻译成法语,或者您可以在另一个 seq2seq 用途中使用它。

在本系列的这一部分中,我们将学习如何处理文本数据以将其提供给 seq2seq 网络。

我们将学习两种处理文本的方法

  • 字符级处理
  • 单词级处理(使用嵌入)

我用了一个英语→法语句子的数据集,你可以从这里得到我用的数据集。

对于其他语言,您可以使用[this链接获得数据集

第一:字符级处理

概述:

我在下面的图片中解释了文本处理的步骤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,代表这个词的球:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

,来代表句子 hello world!:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我希望您对处理文本数据的步骤有了一些直觉。

现在我们将使用 python 进行一些编码:

首先,让我们导入 numpy:

import numpy as np

然后,加载文本文件:

之后,拆分样本并获取必要的字典:

制作所需的字典,将字符转换为整数,反之亦然:

计算最长样本的长度和一些其他变量:

输出:

Number of E Samples  	: 160872
Number of D Samples 	: 160872
Number of D Chars  	: 115
Number of E Chars 	: 92
The Longest D Sample has 351 Chars
The Longest E Sample has 286 Chars

E →输入文本(稍后编码)
D →输出文本(稍后解码)

接下来,我们将通过字母
ex 对样本进行热编码:

hi—>[[0,0,0,…,1,0,0,0],[0,0,0,…,0,1,0,0]]
其中我们将每个样本表示为一个包含(n)行和(j)列的零数组
n =最长样本中的字符数
j =字典中的字符数

我们将制作三组数据:
1-编码器输入样本(英语句子)
2-解码器输入样本(法语句子)
3-目标(法语句子)

目标将是与解码器输入相同的数据,但它将领先一个字符
例如:
解码器输入= ‘\tHow are yo’
目标= ‘你好吗’

[Output]:
Shape of encoder_input_data : (160872, 286, 92) 
Shape of decoder_input_data : (160872, 351, 115) 
Shape of target_data        : (160872, 351, 115)

现在,seq2seq 模型可以使用这些数据了。

ٍSecond:单词级处理(使用嵌入):

概述:

在这种方法中,我们执行与第一种方法相同的步骤,但是这里不是制作字符字典,而是制作我们想要处理的文本中使用的单词的字典,或者有时我们使用文本语言中最常见的 10,000 个单词。

为了便于理解我们将要做的事情,我们将:

  1. 将文本转换为小写
  2. 清除数字和标点符号中的数据。
  3. 将“SOS”和“EOS”附加到目标数据:

SOS →感知开始

EOS →感觉结束

4.制作字典将单词转换成索引数字。

5.使用嵌入层将每个单词转换为固定长度的向量。

单词嵌入提供了单词及其相关含义的密集表示。

了解更多关于单词嵌入的信息:[ 1 ,[ 2 ,[ 3 ,[ 4 ]

6.现在,seq2seq 网络可以使用这些数据了。

加载文本数据:

数据清理:

样品处理:

使用单词嵌入:

我将展示我使用嵌入层的那一行,整个网络将在本系列教程的下一部分解释。

num_words : is the number of words in the dictionary we used to convert words to numbers
vec_len : The length of the vector that will represent the words

接下来是什么:

在下一部分[ part 2 ]我们将制作模型并训练它,然后用它将英文文本翻译成法文。

参考资料:

这个系列的所有参考资料将在最后一部分的结尾。

可以在 Twitter 上关注我@ ModMaamari

NLP |序列到序列网络:

1- NLP |序列到序列网络|第 1 部分|处理文本数据

2- NLP |序列到序列网络|第 2 部分|Seq2seq 模型(编码器解码器模型)

您可能还喜欢:

NLP |序列到序列网络|第 2 部分|Seq2seq 模型(编码器/解码器模型)

原文:https://towardsdatascience.com/nlp-sequence-to-sequence-networks-part-2-seq2seq-model-encoderdecoder-model-6c22e29fd7e1?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在[NLP | Sequence to Sequence Networks | Part 1 | Processing text data中,我们学习了如何处理文本数据,在这一部分中,我们将创建一个模型,该模型将获取我们处理的数据,并使用它来训练将英语句子翻译成法语。

我们将使用一种称为(seq2seq)或(Encoder Decoder)的架构,它适用于输入序列(在我们的例子中是英语句子)的长度与输出数据(在我们的例子中是法语句子)的长度不同的情况

什么是编码器解码器架构?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Encoder Decoder Architecture

编码器解码器架构由两个主要部分组成:

  1. 编码器:

编码器简单地获取输入数据,并对其进行训练,然后将其循环层的最后状态作为初始状态传递给解码器部分的第一循环层。

Encoder input : English sentencesEncoder initial state : It depends on the initializer we use

2。解码器:

解码器获取编码器最后一个递归层的最后一个状态,并将其用作其第一个递归层的初始状态,解码器的输入是我们想要得到的序列(在我们的例子中是法语句子)。

Decoder input : French sentencesDecoder initial state : The last state of encoder’s last recurrent layer

其他一些解释编码器解码器的图片:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Simple Representation

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Generative Model Chatbots

了解有关编码器/解码器架构的更多信息[0]、1234

构建模型:

首先,导入所需的依赖项:

构建编码器:

The Encoder

我们使用( Keras Functional API )来构建这样复杂的模型,如果你想了解更多关于 Keras Functional API 的知识:[ 1 ,[ 2 ]

编码器由以下部分组成:

  1. 输入层:获取英语句子并将其传递给嵌入层。
  2. 嵌入层:获取英语句子并将每个单词转换成固定大小的向量
  3. 第一个 LSTM 层:每一个时间步,它采用一个代表一个单词的向量,并将其输出传递给下一层,我们使用 CuDNNLSTM 层而不是 LSTM,因为它快得多。
  4. 第二 LSTM 层:它与前一层做同样的事情,但不是传递其输出,而是将其状态传递给解码器的第一 LSTM 层。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构建解码器:

**解码器由:**组成

  1. 输入层:获取法语句子并将其传递给嵌入层。
  2. 嵌入层:获取法语句子,并将每个单词转换为固定大小的向量
  3. 第一个 LSTM 层:每一个时间步,它都采用一个表示单词的向量,并将其输出传递给下一层,但在解码器中,我们将这一层的状态初始化为解码器中最后一个 LSTM 层的最后一个状态。
  4. 第二 LSTM 层:处理前一层的输出,并将其输出传递给密集层。
  5. 密集层(输出层) :获取前一层的输出,并输出一个表示目标法语单词的 hot vector

注:

我们必须知道,我们不能在一个时间步长内将每一个英语句子转换成法语,我们要在多个时间步长内完成,这些时间步长等于最长的英语句子的字数。

因此,如果最长的英语句子有 10 个单词,我们必须采取 10 个时间步骤来获得它的法语翻译。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我使用前面的模块简化了编码器和解码器模型,实际上,我们有许多时间步长,而不是简化表示中的一个,最终输出不是我们可以直接阅读的句子,实际情况是,每个时间步长我们都会获得一个代表目标单词的热点向量。

将编码器和解码器整合到一个模型中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Model Summary

训练模型:

我只使用了 9000 个样本,因为我没有足够的内存来使用整个数据集,正因为如此,结果不够好。

我们使用的优化器是 rmsprop **,**它用在有循环层的模型中。

这个优化器通常是递归神经网络的好选择。

我们使用categorial _ cross entropy作为损失函数,因为我们将每个单词视为一个类别(我们的输出是一个代表单词的热点向量)

回想一下:

  • 我们必须知道什么是编码器解码器模型。
  • 如何创建编码器
  • 如何使用嵌入层
  • 如何制作解码器
  • 我们了解编码器解码器模型是如何工作的
  • 我们训练了这个模型

接下来是什么:

在本系列的下一部分,我们将使用训练好的模型将英语句子翻译成法语。

NLP |序列到序列网络:

1- NLP |序列到序列网络|第 1 部分|处理文本数据

2- NLP |序列到序列网络|第 2 部分|Seq2seq 模型(编码器解码器模型)

参考资料:

这个系列的所有参考资料将在最后一部分的结尾。

你可以在推特上关注我 @ModMaamari

您可能还喜欢:

NLP 文本相似性,它是如何工作的,以及它背后的数学原理

原文:https://towardsdatascience.com/nlp-text-similarity-how-it-works-and-the-math-behind-it-a0fb90a05095?source=collection_archive---------9-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看看这几对句子,你觉得这几对中哪一对有相似的句子?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可能对前两个很有信心,但对后两个就没那么有信心了。实际上,你是对的,因为前两对句子谈论的是同一件事(独立地),所以非常相似。然而,最后两对中的句子谈论非常不同的事情,因此不会被视为相似的句子。

令人惊讶的是,NLP 模型正好相反。根据文本相似度在自然语言处理中的工作方式,最后两对句子非常相似,但不是前两对!😮

在你开始判断 NLP 的能力之前,让我们看看它是如何工作的,以及它背后的数学原理。所以,我们来看看机器是怎么看这些句子的!

第一句:“全球变暖来了”

句子 2: “海洋温度正在上升”

为了使这两个句子相似,即使从机器的角度来看,你也需要探索一个全新的语义分析维度,根据这个维度,这两个句子非常相似。点击此处并键入这两个句子。

现在,回到我们的 NLP 模型,是我们破解它的时候了!

**第一步:**从两个句子中选出唯一的单词,等于 7。

独特词汇: 全球,变暖,是,这里,海洋,温度,上升

第二步:统计每个句子中独特单词的出现次数

分析句子 1

global, 1
warming, 1
is, 1
here, 1
ocean, 0
temperature, 0
rising, 0

分析第二句

global, 0
warming, 0
is, 1
here, 0
ocean, 1
temperature, 1
rising, 1

简单的部分已经结束了,在我们继续之前,你必须知道 NLP 的文本相似度是在余弦相似度的基础上工作的。余弦相似度基本上就是两个向量之间的角度的余弦。所以,我们想把句子转换成两个向量,我们已经完成了!

句子 1 的向量: [ 1,1,1,1,0,0,0 ]

句子 2 的向量: [ 0,0,1,0,1,1,1]

让我们把向量形象化。

请注意,在我们的例子中,我们有一个 7D 矢量,因为不可能可视化一个 7D 矢量,我将向您展示两个 3D 矢量并解释其工作原理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,这里我们有两个 3D 向量**【1,1,1】【0,0,1】**。你可以把这些向量想象成总共有 3 个独特单词的两个句子。这里, [ 1,1,1 ] 将意味着所有 3 个唯一单词在第一句中出现一次,而 [ 0,0,1 ] 将意味着只有第三个唯一单词在第二句中出现一次。

我们只对这两个向量之间的角度感兴趣。两条线越近,角度就越小,因此相似性增加。因此,如果任何两个句子完全相似,你将在 **3D 空间中只看到一条线,**因为两条线会相互重叠。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Vectors getting closer, similarity increases as both sentences now have 2 words in common

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A perfect match of 2 sentences!

我希望你能理解我们在这里想要达到的目标或者 NLP 想要做的事情。所以,让我们回到我们的原始向量,然后计算两者之间的余弦角。我们的载体:

句子 1 的向量:【1,1,1,1,0,0,0】

句子 2 的向量: [ 0,0,1,0,1,1,1]

测量两个矢量之间的角度

这不是火箭科学,你需要知道的只是这个公式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在分子中,我们有矢量的点积,在分母中,我们有两个矢量长度的乘积。

  1. 让我们为我们的例子找出点积:
    公式->(u1 * v1)+(U2** v2)+……+*(un** VN)*那就->(1 * 0)+(1 * 0)+(1 * 1)+(1 * 0)+(1 * 0)+(1 * 0)+(1 * 0)= 1
  2. 求两个向量的长度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,现在我们要计算:1 / 4 等于 0.25

总之,根据 NLP 文本相似度,两个句子“全球变暖在这里”和“海洋温度正在上升”只有 25% 相似,这与语义分析显示的完全相反。

现在,让我们快速对另外一对句子执行相同的步骤:

句子 1: “这个地方很棒”

句子 2: “这是个好消息”

独特词汇: 这,是,伟大,地方,新闻

句子 1 的向量:【1,1,1,1,0】

句子 2 的向量:【1,1,1,0,1】

将这些向量放入余弦公式,您会得到值 **0.75,**表示相似度 75%

请注意,值越大,角度越小,句子越相似。

所以,下次当你想到在你的项目中使用 NLP 文本相似度时,你就会知道它的真正目的以及它与语义分析的不同之处。

干杯!

NLP vs NLU vs NLG(知道你要达到的目标)NLP 引擎(第一部分)

原文:https://towardsdatascience.com/nlp-vs-nlu-vs-nlg-know-what-you-are-trying-to-achieve-nlp-engine-part-1-1487a2c8b696?source=collection_archive---------4-----------------------

区别自然语言处理,NLU,NLG 和可能的事情可以实现时,实现聊天机器人的自然语言处理引擎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个快速发展的机器学习和人工智能领域,混淆特定术语是非常常见的。以上同样是三个词互换为高兴的情况。

现在让我们用三个词来概括:

  1. NLP —自然语言处理
  2. NLU —自然语言理解
  3. NLG —自然语言生成

如果我需要用数学的方式来说,可以说 NLU 和 NLG 的结合将产生一个有效的 NLP 引擎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NLP = NLU + NLG

NLU 是对用户或输入的含义的理解。那只不过是对所给文本的理解,并把它归类为适当的意图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NLP = NLU + NLG(source)

让我们举个例子:“我今天可以打板球吗

你的 NLP 引擎应该怎么做??

这里,用户意图是 板球,但是,有许多可能性应该被考虑。其中一个依赖项是“查看外的天气”。

如果外面正在下雨,因为板球是一项户外运动,我们不建议玩,对吗???如您所见,我们需要将它转换成结构化数据,那么我们该怎么做呢?我们利用了意图和实体。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NLP NLU NLG(source)

意图:

意图只不过是动词(用户需要做的活动)。如果我们想要捕获一个请求,或者执行一个动作,使用一个**意图。**在这个例子中,玩耍就是意图。

实体:

实体是需要执行的动作的名词或内容。在这里,cricket 是一个名词。

一个实体玩游戏可能有多个意图(比如检查天气、检查场地是否可用、检查朋友是否有空),也可能有多个实体的意图和多个实体的多个意图。

此外,意图和实体的变化基于以前的聊天检查如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一步:“实体”——“板球”和“意图”——“游戏”

第二步:“实体”——“足球”和“意图”——“玩”

Step3: 【实体】—“足球”“意图”—“观看”

根据之前的聊天,查看实体和意图如何变化。

他们三人如何携手合作:

  1. NLU 根据语法、说话的上下文以及意图和实体来理解数据。
  2. NLP 会将文本转换成结构化数据。
  3. NLG 生成基于结构化数据生成的文本。

NLU 和 NLG 是自然语言处理引擎的子集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NLP NLU(source)

更多参考资料:

  1. 人工智能真实还是只是这十年的炒作??
  2. 人工智能:定义、类型、实例、技术
  3. 人工智能 vs 机器学习
  4. 机器学习为什么要实现人工智能?
  5. 机器学习类型和算法
  6. 【线性回归部分-1】
  7. 【线性回归第二部分(示例实现)

一定要在 上关注我LinkedInTwitterinsta gram获取更多更新。如果你喜欢这篇文章,请鼓掌并分享它。****

在这里加入我们的 WhatsApp 社区。

Kotlin 的 NLP

原文:https://towardsdatascience.com/nlp-with-kotlin-ec84c068650?source=collection_archive---------16-----------------------

使用 n 元语法的第一种方法

自然语言处理( NLP )是许多打着“机器学习”商标的应用程序的核心,尽管它们是自己的一组算法和接近人工智能的方式(对此有所保留)

NLP 用于创建聊天机器人,当你请求支持时,它可以帮助你提供相似的搜索结果;通过提供更容易处理的文本表示来翻译文本或减轻其他应用程序必须做的工作

NLP 的一个应用是生成或猜测序列中的下一个单词。与其他机器学习过程一样,猜测下一个单词需要训练一个模型,并使用它进行推理。

在这个例子中,您将看到如何构建一个在字符级工作的简单的单词生成器。

完成这项任务有不同的方法。在过去的几年里,不同风格的 RNN 正在击败其他产生文本的机制。然而,在这个项目中,我决定放弃它们,转而采用更简单的 n-gram 表示,因为它更适合解决这个问题

如果你想直接进入代码,可以在这里找到

[## 麦考比/机器学习

在 GitHub 上创建一个帐户,为 mccorby/MachineLearning 的开发做出贡献。

github.com](https://github.com/mccorby/MachineLearning)

什么是 n 元模型?

n-gram 基本上是一种将文本分割成一系列连续标记的方法

例如,对于文本“在拉曼查的一个村庄,我不想想起它的名字”,一个 4 克的表示将是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

n-gram 语言模型将使用这种表示,通过计算不同的可能延续出现的次数来估计序列中下一个项目(一个单词、一个字符、一个完整的句子)的概率

此项目中使用的 n-gram 语言模型由地图的地图表示,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个条目代表一个 n-gram,带有序列中可能的字符的映射以及在语料库中找到的出现次数

这由一个映射<字符串、映射<字符、Int > > 表示

下面的代码用于定型模型

Training process for character-based n-gram language model

在构建更复杂的架构和方法时,n 元模型经常被用作基线模型

生成文本

为了使用这个模型生成文本,应用程序将获取一个初始输入(或空字符串)并查找下一个字符的候选字符。该字符被添加到输入中,形成在后续步骤中使用的历史

一个使用 5 克模型的样本没有唐吉诃德的初始种子,如下所示

第十章。

它的工作是给
的黑客装上马鞍,同时处理角色并追逐角色
去了拉曼查的一个村庄

其中对待角色和追求他,他把角色和实践自己拿起他的收入。这个人物和追求他的那个保持兵刃
的人物和追求它的人一样,都曾在他的收入里。所以,对它的追求也是如此,没有被称为 quexana 的欲望。角色的性格和追求,给角色装上马鞍,让自己成为一名骑士,周六吃点残羹剩饭,周六吃点扁豆,周六吃点扁豆,瘦瘦的,一个老圆盾,很久以前就不是他的收入了。这个人物和追求他的那个拉曼查保持兵刃之一

这段文字看起来很像塞万提斯写的东西(如果不是在他最好的时候)

缓和

但是当模型没有注册历史时会发生什么呢?然后它将停止工作,因为没有下一个字符

在这些情况下,使用一些技术。其中有平滑,特别是愚蠢的退避

简而言之,愚蠢的退避将使用较低阶的 n 元文法来计算丢失条目的概率

选择字符

根据用于训练模型的语料库,选择下一个字符可能很棘手。如果总是选择具有最高概率的字符,则模型有可能陷入重复

为了避免这个问题,使用了从与当前历史相关联的一组可能候选中随机选择的字符

丰富

  • 与任何其他机器学习问题一样,在构建系统时需要一系列步骤:数据检查、清理、模型评估
  • 用于训练模型的语料库可以被清理,去除停用词

结论

这个项目展示了如何创建一个字符级的 n-gram 语言模型来生成文本。

我将使用这个模型作为该项目的第二部分的基础。

敬请期待!

神经网络:你需要知道的一切

原文:https://towardsdatascience.com/nns-aynk-c34efe37f15a?source=collection_archive---------1-----------------------

任何大型 ML 项目的主干都始于一个网络……一个神经网络,这是你需要了解的所有信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A Neural Network performing a prediction

如副标题所述,神经网络 (NNs)正在几乎任何需要启发式方法来解决问题的地方被使用。这篇文章将教你所有你需要了解的 NN。读完这篇文章后,你应该对神经网络有一个大致的了解,它们是如何工作的,以及如何自己制作一个。

以下是我要复习的内容:

  • 神经网络的历史
  • 什么是真正的神经网络?
  • 单位/神经元
  • 重量/参数/连接
  • 偏差
  • 超参数
  • 激活功能
  • 层层
  • 神经网络学习时会发生什么?
  • 实施细节(如何管理项目中的一切)
  • 关于神经网络的更多信息(更多资源链接)

我偶尔会写这些有些简短但内容丰富的文章,以帮助您了解更多关于 AI 和机器学习的知识。您可以在 twitter 上关注我的或在这里关注我的来了解我的最新文章。你也可以在 twitter 上问我问题,或者在这里发表评论。

我花了一个多星期才写完这篇文章的所有内容,如果你觉得有帮助就鼓掌吧。我希望这篇文章教你一些新的东西,让我们开始吧!

神经网络的历史

因为,我不想用很多关于 NNs 的历史来烦你,我只会简单回顾一下他们的历史,T42。如果你想更深入地了解他们的历史,这里有一篇关于这个主题的维基文章。这一部分主要基于维基文章。

这一切都始于 1943 年沃伦·麦卡洛克 和 沃尔特·皮茨 创造了第一个神经网络模型。他们的模型纯粹基于数学和算法,由于缺乏计算资源而无法测试。

后来,在 1958 年, 弗兰克·罗森布拉特 创造了第一个可以进行模式识别的模型。这将改变一切。 感知器 。然而,他只给出了符号和模型。实际模型仍然无法测试。在此之前有相对较少的研究。

第一个可以测试的多层神经网络由阿列克谢·伊瓦赫年科、T21和帕拉于 1965 年发表。

此后,由于机器学习模型的高可行性,神经网络的研究停滞不前。这是 1969 年由 马文·明斯基西蒙·派珀特 完成的。

然而,这种停滞是相对短暂的,因为 6 年后的 1975 年 Paul Werbos 提出了 反向传播 ,它解决了【XOR】问题,并且总体上使神经网络学习更加有效。

Max-pooling 后来在 1992 年引入,它有助于 3D 对象识别,因为它有助于最小平移不变性和对变形的容忍。

在 2009 年至 2012 年间,尤尔根·施密德胡伯的 研究小组创造的 递归神经网络 和深度前馈神经网络在 模式识别机器学习 中赢得了 8 项国际比赛。

2011 年,Deep NNs 开始将卷积层与最大池层相结合,最大池层的输出随后被传递到几个完全连接的层,这些层之后是输出层。这些被称为 卷积神经网络

在这之后还有一些研究,但是这些是你应该知道的主要话题。

什么是真正的神经网络?

一个想到 NN 的好方法是作为一个 复合函数 。你给它一些输入,它给你一些输出。

基本神经网络的体系结构由三部分组成。这些是:

  • 单位/神经元。
  • 连接/重量/参数。
  • 偏见。

上面提到的所有东西都是你构建一个神经网络的基本架构所需要的。

你可以把这些想象成一个建筑的积木/砖块。根据你对建筑功能的要求,你可以安排砖块,反之亦然。水泥可以被认为是砝码。不管你的砝码有多重,如果你手头没有足够数量的砖块来解决问题,这座建筑将会倒塌。然而,你可以让建筑以最小的精度运行(用最少的砖),然后逐步地在这个架构上解决问题。

我将在后面的部分中更多地讨论权重、偏差和单位。这些部分可能很短,但是这些部分强调了它们的重要性。

单位/神经元

作为 NNs 架构的三个部分中最不重要的部分,这些函数包含权重和偏差,并等待数据到达它们。数据到达后,它们执行一些计算,然后使用一个激活函数将数据限制在一个范围内(大多数情况下)。

把这些单位想象成一个包含权重和偏差的盒子。盒子从两端打开。一端接收数据,另一端输出修改后的数据。然后数据开始进入盒子,盒子将权重与数据相乘,然后将偏差加到相乘后的数据上。这是一个单一的单位,也可以认为是一个功能。此函数与此类似,是直线的函数模板:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

y = mx + b

想象一下有多个这样的东西。从现在开始,您将为同一个数据点(输入)计算多个输出。这些输出然后被发送到另一个单元,该单元然后计算神经网络的最终输出。

如果这一切都在你眼前一闪而过,那么继续读下去,你应该能理解更多。

重量/参数/连接

作为神经网络最重要的部分,这些(和偏差)是神经网络为了推广到一个问题必须学习的数字。这就是此时你需要知道的全部。

偏见

这些数字代表神经网络“认为”在将权重与数据相乘后应该添加的内容。当然,这些总是错误的,但是神经网络也会学习最优偏差。**

超参数

这些是您必须手动设置的值。如果你把神经网络想象成一台机器,改变机器行为的节点就是神经网络的超参数。

你可以在这里阅读我的另一篇文章(遗传算法+神经网络=两全其美)找出如何让你的计算机学习神经网络的“最佳”超参数。

激活功能

这些也称为映射函数。它们在 x 轴上接受一些输入,并输出一个限定范围内的值(大多数情况下)。大多数情况下,它们用于将单元的大输出转换为较小的值,并提高神经网络的非线性度。你对激活函数的选择可以极大地提高或阻碍你的神经网络的性能。如果您愿意,您可以为不同的单元选择不同的激活功能。

以下是一些常见的激活功能:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Sigmoid function

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The tanh function

  • ReLU :整流线性单元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The ReLU function

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Leaky ReLU function

这就是帮助神经网络在任何问题中获得复杂性的原因。增加层数(单位)会增加神经网络输出的非线性。

每一层都包含一定数量的单元。大多数情况下的数量完全取决于创作者。然而,对于一个简单的任务有太多的层会不必要地增加它的复杂性,并且在大多数情况下会降低它的准确性。反之亦然。

每个神经网络都有两层。这些是输入和输出层。这两者之间的任何层都称为隐藏层。下图中的神经网络包含一个输入层(8 个单元)、一个输出层(4 个单元)和 3 个隐藏层,每个隐藏层包含 9 个单元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A Deep Neural Net

具有两个或更多隐藏层的 NN,每层包含大量单元,称为深度神经网络,它催生了一个新的学习领域,称为深度学习。图中所示的神经网络就是这样一个例子。

神经网络学习时会发生什么?

教神经网络概括问题的最常见方法是使用梯度下降。因为我已经写了一篇关于这个主题的详细文章,你可以阅读来充分理解 GD(梯度下降),我将不在这篇文章中解释 GD。下面是 GD 文章:渐变下降:你需要知道的一切

再加上 GD,另一种教授 NN 的常用方法是使用反向传播。利用这一点,使用微积分中的链规则将神经网络输出层的误差向后传播。对于一个没有很好掌握微积分的初学者来说,理解这个很有挑战性,所以不要被它淹没。点击此处查看一篇文章,当我在与反向传播作斗争时,这篇文章确实帮了我大忙。我花了一天半的时间才弄明白错误反向传播时发生了什么。

在训练神经网络时有许多不同的注意事项。然而,在一篇面向初学者的文章中浏览它们会非常乏味,而且对初学者来说是不必要的。

实施细节(如何管理项目中的一切)

为了解释项目中的一切是如何管理的,我创建了一个 JupyterNotebook 包含一个学习 XOR 逻辑门的小 NN。点击这里查看笔记本。

在查看并理解笔记本中发生的事情后,您应该对基本神经网络是如何构造的有一个大致的概念。

在笔记本中创建的 NN 中的训练数据以矩阵形式排列。这是数据在中的一般排列方式。不同项目中显示的矩阵的维度可能会有所不同。

通常对于大量的数据,数据被分成两类:训练数据(60%)和测试数据(40%)。然后,神经网络根据训练数据进行训练,然后根据测试数据测试其准确性。

关于神经网络的更多内容(更多资源的链接)

如果您仍然不明白发生了什么,我建议您查看下面提供的资源链接。

YouTube:

Coursera:

就这样,希望你学到了新的东西!

如果你觉得这篇文章有帮助,请鼓掌。在 Twitter 上关注我在这里关注我的最新帖子。如果你有任何问题,你可以发微博给我,或者通过评论让我知道。我很乐意回答这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值