适用于开发人员的DeepPavlov:#1 NLP工具和创建聊天机器人

大家好! 我们正在打开一系列文章,致力于解决与自然语言处理(或仅仅是NLP)有关的实际问题,并使用由我们的神经系统和深度学习实验室团队开发的开源库DeepPavlov创建交互式代理(聊天机器人)。 MIPT。 该周期的主要目的是使广泛的开发人员熟悉DeepPavlov,并展示如何在不具备机器学习和数学博士学位的知识的情况下解决应用的NLP问题。

NLP的任务包括确定文本的色调,解析命名实体,确定其他人想要从您的机器人中获得什么:订购比萨饼或获取帮助信息等等。 您可以在此处阅读有关NLP任务和方法的更多信息。

在本文中,我们将告诉您如何使用无需使用任何其他配置或培训即可使用的,经过预先训练的NLP模型来运行REST North。

该周期的所有文章:
1. 针对开发人员的DeepPavlov:#1 NLP工具和创建聊天机器人
2. 针对开发人员的DeepPavlov:#2的设置和部署



安装DeepPavlov


在下文中,将给出用于Linux的指令。 对于Windows,请参阅我们的文档。

  • 使用当前受支持的Python版本创建并激活虚拟环境:

    virtualelnv env -p python3.7 source env/bin/activate 
  • 在虚拟环境中安装DeepPavlov:

     pip install deeppavlov 

使用DeepPavlov模型运行REST服务器


在我们首次使用DeepPavlov模型启动服务器之前,先讨论一下库体系结构的某些功能将很有用。

DP中的任何模型均包含:

  • Python代码;
  • 可下载的组件-在特定数据(嵌入,神经网络权重等)上的序列化学习结果;
  • 配置文件(以下称为config),其中包含有关模型使用的类,下载的组件的URL,Python依赖项等信息。

在接下来的文章中,我们将进一步介绍DeepPavlov的内幕,现在我们只需要知道以下内容:

  • DeepPavlov中的任何模型均通过其配置名称来标识。
  • 要运行该模型,您需要从DeepPavlov服务器下载其组件。
  • 另外,要运行模型,必须安装它使用的Python库。

我们将推出的第一个模型将是多语言命名实体识别(NER)。 该模型根据文本词所属的命名实体的类型(专有名称,地理名称,货币名称等)对文本词进行分类。 最新版NER的配置名称:

 ner_ontonotes_bert_mult 

我们使用以下模型启动REST服务器:

  1. 在活动虚拟环境中安装在其配置中指定的模型依赖项:

     python -m deeppavlov install ner_ontonotes_bert_mult 
  2. 从DeepPavlov服务器下载序列化的模型组件:

     python -m deeppavlov download ner_ontonotes_bert_mult 

    序列化的组件将下载到默认情况下位于DeepPavlov主目录中
     ~/.deeppavlov 
    下载时,将根据服务器上组件的哈希值检查已下载组件的哈希值。 如果匹配,将跳过下载并使用现有文件。 下载组件的大小平均可在0.5到8 Gb之间变化,在某些情况下,解压缩后可达20 Gb。
  3. 我们使用以下模型启动REST服务器:

     python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005 

作为此命令的结果,将启动在主机的5005端口上具有模型的REST服务器(默认端口为5000)。

初始化模型后,可以在URL http: http://127.0.0.1:5005找到具有API文档和测试能力的http://127.0.0.1:5005 。 我们将通过将具有以下JSON内容的终结点发送到http://127.0.0.1►005/modelPOST请求来测试模型:

 { "x": [ "        .", " -      15 " ] } 

作为响应,我们应该获取以下JSON:

 [ [ ["", "", "", "", "", "", "", "", "", "."], ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"] ], [ ["", "", "-", "", "", "", "", "", "", "15", ""], ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"] ] ] 

对于这些示例,我们将分析REST API DeepPavlov。

API DeepPavlov


每个DeepPavlov模型都有至少一个输入参数。 在REST API中,对参数进行命名,其名称是传入字典的键。 在大多数情况下,参数是需要处理的文本。 您可以在DeepPavlov文档的“模型”部分中了解有关模型返回的参数和值的更多信息

在该示例中,两行的列表被传递给参数x,每行都有一个单独的标记。 在DeepPavlov中,所有模型均接受独立处理的值的列表(批次)作为输入。

术语“批处理”是指机器学习领域,是指由算法或神经网络同时处理的独立输入值的包。 与将相同值分别转移到输入中相比,该方法使您可以减少(通常-显着)批处理中一个元素的模型处理时间。 但是,仅在处理完所有元素之后才发出处理结果。 因此,在形成进料批次时,有必要考虑模型的速度及其各个元素所需的处理时间。

如果DeepPavlov模型有多个参数,则每个参数都有其自己的值批,并且在输出时,该模型始终会给出一个答案批。 传出批次的元素是具有相同索引的传入批次的处理元素的结果。

在上面的示例中,模型的结果是将每一行细分为令牌(单词和标点符号),并将令牌相对于其代表的命名实体(组织名称,货币)进行分类。 目前, ner_ontonotes_bert_mult模型能够识别18种类型的命名实体,可以在此处找到详细描述。

DeepPavlov的其他现成模型


除DeepPavlov中的NER之外,在撰写本文时,还提供以下现成的模型:

文字问答


文本问题的答案是该文本的一部分。 模型配置squad_ru_bert_infer

请求示例:

 { "context_raw": [ "DeepPavlov   .", " -      15 ." ], "question_raw": [ "  DeepPavlov?", "     ?" ] } 

结果:

 [ [" ", 27, 31042.484375], ["15 ", 39, 1049.598876953125] ] 

侮辱检测


识别侮辱该文本的对象(在撰写本文时,仅适用于英语)。 模型配置:insults_kaggle_conv_bert

请求示例:

 { "x": [ "Money talks, bullshit walks.", "You are not the brightest one." ] } 

结果:

 [ ["Not Insult"], ["Insult"] ] 

情绪分析


文本的调性分类(正,中性,负)。 模型配置rusentiment_elmo_twitter_cnn

请求示例:

 { "x": [ "   DeepPavlov.", "    DeepPavlov.", "    ." ] } 

结果:

 [ ["positive"], ["neutral"], ["negative"] ] 

复述检测


确定两个不同的文本是否具有相同的含义。 型号配置stand_paraphraser_ru

要求:

 { "text_a": [ "   ,  .", "      ." ], "text_b": [ " ,     ,   .", "       ." ] } 

结果:

 [ [1], [0] ] 

随时可以在此处找到所有现成的DeepPavlov模型的当前列表。

结论


在本文中,我们介绍了DeepPavlov API和开箱即用提供的库的某些文本处理功能。 应当记住,对于任何NLP任务,在与任务主题域(域)相对应的数据集上训练模型时,将获得最佳结果。 另外,原则上甚至不能在所有场合都训练更多的模型。

在以下文章中,我们将考虑其他库设置,从Docker启动DeepPavlov,然后继续进行教学模型。 并且不要忘记DeepPavlov有一个论坛 -提出有关库和模型的问题。 感谢您的关注!

Source: https://habr.com/ru/post/zh-CN472890/


All Articles