NLP。 基础知识。 技术。 自我发展。 第一部分


你好 我叫Ivan Smurov,我是ABBYY的NLP研究小组的负责人。 您可以在这里了解我们小组的工作。 我最近在深度学习学院做了一个关于自然语言处理(NLP)的讲座-这是MIPT物理技术学院应用数学和计算机科学学院的一个小组,面向对编程和数学感兴趣的高年级学生。 也许我的演讲摘要对某人有用,所以我将与哈勃分享。

由于无法一次掌握所有内容,因此将本文分为两部分。 今天,我将讨论在NLP中如何使用神经网络(或深度学习)。 在本文的第二部分中,我们将重点介绍最常见的NLP任务之一-提取命名实体(命名实体识别,NER)的任务,并详细分析其解决方案的体系结构。



什么是NLP?


处理自然语言(即人们说和写的语言)文本的任务繁多。 有一组经典的NLP任务,其解决方案是实际使用的。

  • 首先也是历史上最重要的任务是机器翻译。 它已经实践了很长时间,并且取得了巨大的进步。 但是,获得高质量的全自动翻译(FAHQMT)的任务仍未解决。 从某种意义上说,这就是NLP引擎,您可以执行的最大任务之一。

    图片
  • 第二项任务是文本分类。 给出了一组文本,任务是将这些文本分类。 哪一个 这是军团的问题。

    从实用的角度来看,应用它的第一个也是最实际的方法之一是将字母分为垃圾邮件和垃圾邮件(不是垃圾邮件)。

    另一个经典的选择是将新闻按类别分类(分类)-外交政策,体育,大热门等。或者,例如,您收到信件,并且想要将在线商店的订单与机票和酒店预订区分开。

    文本分类问题的第三个经典应用是情感分析。 例如,评论的分类为正面,负面和中立。


    由于可以将文本分为许多类别,因此文本分类是NLP最受欢迎的实际任务之一。
  • 第三个任务是检索命名实体NER。 我们在文本部分中选择与预先选择的实体集相对应的部分,例如,您需要在文本中查找所有位置,人员和组织。 在文本“ Ostap Bender-Horns and Hooves”办公室主任”中,您应该理解Ostap Bender是一个人,而“ Horns and Hooves”是一个组织。 为什么在实践中需要此任务以及如何解决它,我们将在本文的第二部分中讨论。
  • 第四个任务与第三个任务相关联-提取事实和关系(关系提取)的任务。 例如,有一种工作态度(职业)。 从“ Ostap Bender-“ Horns and Hooves”办公室主任”的文字可以明显看出,我们的英雄与“ Horns and Hooves”的专业关系有关。 可以通过许多其他方式说相同的话:“ Ostap Bender办公室由“ Horns and Hooves”办公室领导,或者“ Ostap Bender从简单的施密特中尉的儿子担任“ Horns and Hooves”办公室的负责人。” 这些句子不仅在谓语上而且在结构上也不同。

    经常强调的其他关系的示例包括购买和出售,所有权,具有诸如日期,地点等(出生)等属性的出生事实。

    该任务似乎没有明显的实际应用,但是尽管如此,它仍被用于非结构化信息的结构化中。 此外,它在问题解答和对话系统中,在搜索引擎中也很重要-始终在您需要分析问题并了解与之相关的类型以及答案存在哪些限制时。

    图片
  • 接下来的两个任务可能是最宣传的。 这些是问答系统(聊天机器人)。 Amazon Alexa,Alice是对话系统的经典示例。 为了使它们正常工作,必须解决许多NLP任务。 例如,文本分类有助于确定我们是否属于面向目标的聊天机器人方案之一。 假设是“汇率问题”。 需要关系提取来确定脚本模板的占位符,并且在没有陷入任何场景的情况下,就常见主题(“谈话者”)进行对话的任务将对我们有帮助。

    问答系统也是可以理解和有用的东西。 您问汽车一个问题,汽车正在数据库或文本正文中寻找答案。 此类系统的示例是IBM Watson或Wolfram Alpha。
  • 经典NLP问题的另一个示例是Sammarization。 问题的陈述很简单-输入系统接受大文本,而输出是较小的文本,以某种方式反映了较大文本的内容。 例如,需要一台机器来生成文本,其名称或注释的重新输入。

    图片
  • 另一个流行的任务是论证挖掘,即在文本中寻找合理性。 给您一个事实和一个文本,您需要在文本中找到该事实的理由。

这绝不是NLP任务的完整列表。 有几十个。 总的来说,使用自然语言编写的文本可以完成的所有操作都可以归因于NLP的任务,只是列出的主题是耳目一新的,它们具有最明显的实际应用。

为什么解决NLP任务很困难?


任务的措词不是很复杂,但是任务本身并不简单,因为我们使用的是自然语言。 一词多义(多义词具有共同的初始含义)和同义(具有不同含义的词发音并书写相同)的现象是任何自然语言的特征。 如果说俄语的母语的人很好地理解,一方面热情的接待战斗技术几乎没有共同之处,另一方面, 温暖的啤酒与自动啤酒没有什么共同之处,自动系统必须学习很长时间。 为什么将“ 按空格键继续 ”翻译成无聊的“ 要继续,按空格键 ”比“ 按空格键 将继续工作更好

  • 一词多义:停止(过程或建筑物),桌子(组织或物体),啄木鸟(鸟或人)。
  • 谐音:钥匙,弓,锁,火炉。

    图片
  • 语言复杂性的另一个经典示例是代词回指。 例如,让我们获得文本“ 看门人两个小时的雪,他感到不满意” 。 代词“他”可以指看门人和下雪人。 根据上下文,我们很容易理解他是管理员,而不是下雪人。 但是要使计算机也容易理解这一点并不容易。 代词照应的问题仍未得到很好的解决;仍在积极地提高决策质量。
  • 另一个增加的复杂性是省略号。 例如,“ 佩蒂亚吃了一个绿色的苹果,玛莎吃了一个红色的苹果 。” 我们知道玛莎吃了一个红苹果。 但是,让机器也了解这一点并不容易。 现在,仅在很小的情况下(几百个句子)解决了恢复省略号的任务,并且在它们上,完全恢复的质量显然很弱(大约为0.5)。 显然,对于实际应用而言,这样的质量是不好的。

顺便说一句,在今年的对话会议上,将同时举办关于回指和俄文间隙(一种椭圆形)的曲目。 对于这两项任务,案件集的体积比目前现有建筑物的体积大几倍(此外,为了留空,案件的体积比案件的体积大一个数量级,不仅对于俄语,而且对于所有语言而言)。 如果您想参加这些建筑物的比赛, 请单击此处(注册,但没有短信)

如何解决NLP任务


与图像处理不同,您仍然可以在NLP上找到描述使用经典算法(例如SVMXgboost )而不是神经网络的解决方案的文章,这些文章显示的结果也不比最新解决方案差。

但是,几年前,神经网络开始击败经典模型。 重要的是要注意,对于大多数任务,基于经典方法的解决方案通常是唯一的,与解决体系结构以及属性收集和处理方式中的其他问题不同。

但是,神经网络体系结构更为通用。 网络本身的体系结构很可能也有所不同,但规模要小得多,存在全面普及的趋势。 但是,对于大多数NLP任务而言,具有什么功能以及我们如何工作,几乎是相同的。 仅神经网络的最后一层有所不同。 因此,我们可以假设已经形成了一个NLP流水线。 关于安排方式,我们现在将告诉您更多。

管道NLP


这种使用标志的方式,对于所有任务来说几乎是相同的。

在语言方面,与我们合作的基本单位就是单词。 或更正式地称为“令牌”。 我们使用此术语是因为尚不清楚2128506是什么-这是一个词吗? 答案并不明显。 令牌通常通过空格或标点符号与其他令牌分开。 从您从我们上面描述的困难中可以理解,每个令牌的上下文非常重要。 有不同的方法,但是在95%的情况下,模型工作期间要考虑的上下文是包含初始令牌的提议。

通常在提案级别解决许多任务。 例如,机器翻译。 通常,我们只翻译一个句子,根本不使用更广泛的上下文。 有些任务并非如此,例如对话系统。 重要的是要记住以前询问过该系统的内容,以便它可以回答问题。 但是,报价也是我们合作的主要单位。

因此,执行流水线以解决几乎所有任务的前两个步骤是分段(将文本分为句子)和令牌化(将句子分为令牌,即单个单词)。 这是通过简单的算法完成的。

接下来,您需要计算每个令牌的特征。 通常,这分为两个阶段。 首先是计算上下文无关的令牌属性。 这是一组迹象,绝不取决于围绕我们令牌的其他词语。 常见的上下文无关属性是:

  • 嵌入
  • 象征性的迹象
  • 特定于特定任务或语言的其他功能

我们将在下面更详细地讨论嵌入和符号符号(关于符号符号-不是今天,而是在本文的第二部分),但是现在让我们给出其他符号的示例。

最常用的功能之一是语音部分或POS标签(语音部分)。 此类功能对于解决许多问题(例如,解析任务)可能很重要。 对于具有复杂形态的语言(例如俄语),形态特征也很重要:例如,在这种情况下,名词是什么样的形容词。 由此,我们可以对提案的结构得出不同的结论。 同样,形态学对于词素化(将单词还原为初始形式)是必需的,借助于它我们可以减小属性空间的维数,因此形态学分析被积极地用于大多数NLP问题。

当我们解决不同对象之间的交互很重要的问题时(例如,在关系提取任务中或在创建问题解答系统时),我们需要对建议的结构有很多了解。 这需要解析。 在学校里,每个人都对一个主题,谓语,加法等进行句子解析。语法分析是这种精神的产物,但更为复杂。

附加功能的另一个示例是令牌在文本中的位置。 我们可以先验地知道某些实体通常在文本的开头找到,反之亦然。

嵌入,符号和附加符号共同构成了不依赖于上下文的标记符号的向量。

上下文相关功能


上下文相关令牌属性是一组属性,这些属性不仅包含有关令牌本身的信息,还包含有关其邻居的信息。 有多种计算这些症状的方法。 在经典算法中,人们通常只是简单地走过“窗口”:他们将几个(例如三个)令牌带到原始令牌,之后又带了几个令牌,然后在这样的窗口中计算所有符号。 这种方法不可靠,因为用于分析的重要信息的距离可能分别大于窗口,因此我们可能会遗漏某些东西。

因此,现在所有上下文相关功能都以提议方式以提议方式计算:使用双向递归神经网络LSTM或GRU。 为了从与上下文无关的上下文中获取上下文相关的令牌属性,所有商品令牌的与上下文无关的属性都将提交给双向RNN(单层或多层)。 双向RNN在第i个时刻的输出是i令牌的上下文相关符号,其中包含有关先前令牌的信息(因为此信息包含在直接RNN的i值中)和有关后续令牌(t .k。该信息包含在逆RNN的相应值中。

此外,对于每个单独的任务,我们都会做一些不同的事情,但是前几层(直到双向RNN)几乎可以用于任何任务。

这种获取要素的方法称为NLP管道。



值得注意的是,在过去的两年中,研究人员一直在积极尝试改善NLP管道-在速度方面(例如,变压器-一种不包含RNN并因此能够更快学习和应用的基于自我注意的体系结构),以及所使用标志的观点(现在他们正在积极使用基于预先训练的语言模型(例如ELMo)的标志 ,或者他们正在使用预先训练的语言模型的第一层并在可用于任务的情况下对其进行重新训练-ULMFitBERT )。

字形嵌入


让我们仔细看看什么是嵌入。 粗略地说,嵌入是单词上下文的简洁表示。 为什么了解单词的上下文为什么很重要? 因为我们相信分布假说-含义相似的词在相似的上下文中使用。

现在让我们尝试对嵌入进行严格的定义。 嵌入是从分类特征的离散向量到具有预定维度的连续向量的映射。

嵌入的一个典型示例是单词嵌入(单词形式的嵌入)。

通常充当离散特征向量的是什么? 一个布尔向量,它对应于某个类别的所有可能值(例如,语音的所有可能部分或某个有限词典中的所有可能的单词)。

对于单词形式的嵌入,此类别通常是字典中单词的索引。 假设有一本尺寸为10万的字典。 因此,每个单词都有一个离散的特征向量-维度为10万的布尔向量,其中一个位置(我们字典中单词的索引)为1,其余为零。

为什么我们要将离散特征向量映射到连续的给定尺寸? 因为维数为10万的矢量不太方便用于计算,而维数为100、200或例如300的整数的矢量更方便。

原则上,我们不得尝试对此类映射施加任何其他限制。 但是,由于我们正在构建这样的映射,因此,我们尝试确保在某些意义上相似意义的单词的向量也接近。 这是使用简单的前馈神经网络完成的。

嵌入培训


如何训练嵌入? 我们正在尝试解决按上下文还原单词的问题(反之亦然,按单词还原上下文)。 在最简单的情况下,我们获取前一个单词的字典中的索引(字典维的布尔向量)作为输入,并尝试确定我们单词的字典中的索引。 这是使用具有极其简单的体系结构的网格完成的:两个完全连接的层。 首先是从字典尺寸的布尔向量到嵌入尺寸的隐藏层的完全连接层(即,仅将布尔向量乘以所需尺寸的矩阵)。 反之亦然,一个完全连接的层具有softmax,它来自隐藏在维度的隐藏层中的字典维度向量。 借助softmax激活函数,我们可以获得单词的概率分布,并可以选择最可能的选项。


第i个词的嵌入只是转换矩阵W中的第i个行。

在实际使用的模型中,体系结构较为复杂,但相差不大。 主要区别在于,我们不是使用上下文中的一个向量来定义单词,而是使用多个向量(例如,大小为3的窗口中的所有内容)。 一个比较流行的选择是,当我们尝试不按上下文预测单词,而是按单词预测上下文时。 这种方法称为跳过图。

让我们举一个应用实例的示例,该任务是在嵌入训练期间解决的(在CBOW变体中,根据上下文进行单词预测)。 例如,假设令牌上下文由2个先前的单词组成。 “ ”, , , “”.

, ( ), , .

, , , (, , ). — .

, , . , , , .

, — ELMo, ULMFit, BERT. , ( , , , ).

?


, 2 .

  • -, , , - 100 . – : , , .
  • -, . -. . . , , . , , . . , , .

图片

, . , , , , , . , , , , .

NER. , , . , , , , .

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


All Articles