使用重新注销构建用于自然语言处理的管道

作者-亚历克斯Mikhalev阿吉特·辛格·雷纳

目标

在本教程中,您将学习如何使用重新凝血.在本演示中,我们将利用Kaggle CORD19数据集。该实现旨在避免耗尽内存,利用Redis集群和RedisGears,其中使用RedisGears允许处理存储上的数据,而不需要移动数据进出Redis集群-使用Redis集群作为数据结构。Redis集群支持高达1000个节点的水平可伸缩性,并与RedisGears一起提供了一个分布式系统,数据科学/ML工程师可以专注于处理步骤,而不必担心为分布式计算编写大量脚手架。

nlp

该项目是为旨在使其他人更容易贡献和建立更好信息和知识管理产品的项目。

为什么数据科学家使用RedisGears?

重新凝血具有巨大的潜力,特别是对于文本处理 - 您可以在不需要将它们移入和退出内存的情况下处理数据“on data”。重要观点摘要:

  • 在内存存储中(如果它是Redis集群的水平缩放)
  • 无需移入移出即可处理(数据上的)数据
  • Gears—就像Hadoop上的Spark一样,在存储器(内存中)上智能地处理数据,而无需将数据移入移出
  • redis在群集模式下与Redisgears和Python启用启用了20 MB RAM。想想您可以将更多的数据加入笔记本电脑或服务器。

什么是知识图?

今天,我们生活在世界的新系统中,而不仅仅是文件,文件夹或网页,而且具有它们之间的属性和关系的实体,组织成类别和类别的层次结构。这些系统从军事工业综合体到我们日常生活中的任何地方。Palantir,PRINER和其他数据公司在军事和安全部队,QUID和RECORDEDFUTURE使竞争性分析,瓶装和类似企业能够实现竞争性分析,使在线声誉分析能够实现大规模的智力和抵抗议员。Microsoft Graph支持企业的新型生产力应用程序,谷歌知识图形和微软的Satori启用日常搜索查询,以及通过使他们能够回答有关世界事实的问题,与亚马逊信息图一起为相应的AI助理提供电量

所有这些(以及许多其他更专业的)系统都用于不同的领域,但它们都使用知识图作为基础。

知识图形是在其中一个供应商之一的座右铭之后,从不同数据源的信息远离信息的最佳方法之一 -“这是关于事物而不是字符串的”

知识图表由词库,分类和本体论组成。在这一管道中,我假设知识在医疗元留下捕获uml如果文本中的概念是同一个句子的一部分,则它们是相关的,因此概念成为节点,它们的关系成为边缘:

concepts1concepts2

概念具有CUI(概念唯一标识符),这些将是节点中的主键,链接到UMLS同义词典。例如,如果你搜索“温度和湿度如何影响2019-nCoV的传播?”在演示网站上http://thepattern.digital/并将滑块移动到1996年,有一个边缘连接传输(C5190195)和出生(C5195639)和句子的一部分匹配,“传播到婴儿出生的速度”,“出生于题为”婴幼儿的报告中的报告“.”

concepts3

用于NLP预处理的重新注销

总体架构概述(组件图)

component_diagram.

接收步骤——非常简单,将所有JSON记录放入RedisCluster,然后NLP管道开始处理所有记录,代码是在这里

NLP管道步骤如何适应RedisGears?

  1. 对于每一个记录检测语言(抛弃非英语),它是滤器

  2. 把段落映射成一个句子平底图

  3. 句子拼写检查-它是地图

  4. 将句子保存到哈希 -处理器

步骤1。先决条件

确保在系统中安装了virtualenv

第二步。克隆存储库

吉特 克隆——递归子模块https://github.com/applied-knowledge-systems/the-pattern.git
cd 模式

步骤3.提出申请

docker compose-f docker-compose.dev.yml up--build-d

步骤4。应用集群配置设置

您可以部署PyTorch和spacy在RedisGears上运行。

抨击 post_start_dev.sh
重要的

对于以数据科学为中心的部署,RedisCluster应该处于HA模式,每个主服务器至少有一个从服务器。您需要更改rgcluster的一些默认参数,以适应PyTorch和spacy库(每个库的压缩容量都超过1GB)的大小,并提供相应的设置。

第五步。创建或激活Python虚拟环境

cd / the-pattern-platform /。

第六步。创造新环境

您可以通过

Conda create-n pattern_env Python 3.8

或者,您可以使用以下CLI进行激活:

~/venv\u cord19/bin/激活 #or创建新venv
皮普 安装 -r要求.txt

步骤7.运行管道

bash cluster_pipeline.sh.

步骤8。验证NLP管道的功能

等待一点,然后检查:

验证填充的redis图表:

redis-cli -p 9001 -h 127.0 .0.1 GRAPH.QUERY "MATCH (n:entity) RETURN count(n) as entity_count"
redis-cli -p 9001 -h 127.0 .0.1 GRAPH.QUERY “匹配(e:实体) - [r] - >(t:实体)返回计数(r)为edge_count”

检查API响应:

旋度 -i -h “application / json内容类型: - x - d后 "{"搜索":"温度和湿度如何影响2019-nCoV的传播"}"
http://localhost:8080/gsearch

演练

RedisGears允许部署和运行机器学习库,如斯帕西伯特变形金刚,上述解决方案采用更简单的方法:

GB. GB. “KeysReader”
GB. 滤器 过滤语言
GB. 平底图 parse_paragraphs
GB. 地图 拼写检查句子
GB. 弗雷奇 save_sentences.
GB.
GB. 注册 “段落:” keyTypes '细绳' “杂烩” 模式 “async_local”

这是整个管道:这7条线路允许您使用所有可用的CPU在分布式集群或单机上运行逻辑—在需要扩展1000多个节点之前,无需进行任何更改。对于所有字符串或散列,我使用为命名空间段落注册的KeyReader。我的管道需要在异步模式下运行。对于数据科学家,我建议使用gb.run来确保gears功能正常工作,它将以批处理模式运行,然后将其更改为register,以捕获新数据。默认情况下,函数将返回输出,因此需要count()-以防止将整个数据集回迁到命令发出机器(Cord19为90 GB)。

整体预处理是一个简单的 -完整代码在这里。

要记住的事情:

  1. 节点进程只能在本地保存 - 我们不移动数据,您要保存的任何内容都应该具有HashTAG,例如添加到Counctioned_docs的集合:

    执行 “悲伤” “processed_docs_ {% s}’ 标签 Starts_id.
  2. 例如,将外部库加载到计算威胁中,例如symspell需要额外的词典,并需要两个步骤加载:

    """
    加载符号拼写和相关词典
    """
    符号拼写 没有一个
    def load_symspell
    进口 pkg_resources.
    从…起 symspellpy 进口 符号拼写 冗长
    符号拼写 符号拼写 max_dictionary_edit_distance 1 prefix_length 7
    dictionary_path pkg_resources. 资源文件名
    “symspellpy” “频率字典\u en\u 82\u 765.txt”
    bigram_path pkg_resources. 资源文件名
    “symspellpy” “frequency_Bigram Dictionary_en_243_342.txt”
    # term_index是术语的列,count_index是
    #术语频率的列
    符号拼写 加载字典 dictionary_path 术语索引 0 count_index. 1
    符号拼写 load_bigram_dictionary bigram_path 术语索引 0 count_index. 2
    回来 符号拼写
  3. SCISPacy是一个很棒的图书馆和数据科学工具,但在部署它的几个迭代之后,我最终读取了UMLS Methathesaurus的数据模型文档,并决定直接从UMLS数据构建AHO-Corasick Automata。(MRXW_ENG.RRF包含映射到CUI的英语的所有术语表格)。AHO-Corasick允许我将传入的句子与对节点的对(医学词典的概念)匹配,并将句子作为图中的边缘,齿轮相关代码很简单:

    bg=GearsBuilder('KeysReader')
    bg.foreach (process_item)
    bg.count ()
    BG.Register('句子:*',mode =“async_local”,onregistered = onregisteredautomata)

OnRegisteredAutomata将执行类似的符号上面的例子,除了它将下载预构建的Aho-Corasick automata (30Mb)。Aho-Corasick是一个非常快的匹配器,允许执行>900 Mb每秒的文本,甚至在普通笔记本电脑上,RedisGears集群使数据和ML模型的分布非常平滑,并使用可用的CPU和内存进行匹配。完整的匹配器密码

matcher的输出:节点和边是使用另一种RedisGears模式rgsync的候选对象,您可以在其中快速写入Redis,而RedisGears将使用RedisStreams将数据复制到较慢的存储中。但我决定使用streams和手工制作RedisGraph数据库的人口,这将是下一篇博文的重点。

匹配器的输出:节点和边是使用另一个RedisGears模式的候选rgsync你可以快速写入Redis和RedisGears将复制数据到较慢的存储使用RedisStreams,而这个演示使用流和填充RedisGraph数据库的节点和边计算每个rank。

呼吁采取行动

我们采用JSON格式的OCR扫描,并将其转换为知识图(Knowledge Graph),演示了如何实现基于统一医学语言系统的传统语义网络/OWL/Methathesaurus技术。Redis生态系统为数据科学社区提供了很多服务,它可以作为Kaggle笔记本、ML框架的核心,使数据的部署和分发更加有趣。我们行业的成功取决于我们的工具如何协同工作——无论它们是工程、数据科学、机器学习还是组织或架构。

在RedisLabs和社区的协作下,完整的管道代码可以通过https://github.com/applied-knowledge -systems/the-pattern-platform..如果您想在本地尝试,那么您可以在存储库的根目录中找到Docker启动脚本以及短QuickStart指南。PR和建议是欢迎。该项目的总体目标是允许其他人在其顶部构建更有趣的管道。

工具书类

Baidu