机器学习领域最吸引人的任务之一是训练机器理解人类交流的进展。在机器学习领域,这个分支被称为自然语言处理。
本文试图解释自然语言处理的基本知识以及随着深入学习和神经网络的发展,自然语言处理取得的快速进展。
在我们做进一步研究之前,有必要了解一些基本知识。
什么是语言?
语言基本上是人类社会用来表达和交流思想的固定词汇。
作为他们成长过程的一部分,这些词汇代代相传,大部分保持不变,每年都有少量增加。
像字典这样的好资源被保存下来,这样当一个人遇到一个新单词时,他或她可以通过查阅字典来理解它的意思。一旦人们接触到这个词,它将被添加到他或她自己的词汇中,并可以用于进一步的交流。
计算机如何理解语言?
计算机是在数学规则下工作的机器。它不能解释或理解人类能轻易做什么,但它能在几秒钟内完成复杂的计算。
为了处理任何概念,计算机必须以数学模型的形式表达这些概念。
这一限制极大地限制了计算机可以使用的自然语言的范围和领域。目前,机器在执行分类和翻译任务方面非常成功。
分类基本上将一段文本分类,而翻译将文本转换成任何其他语言。
什么是自然语言处理?
自然语言处理,简称NLP,被广泛定义为软件对自然语言(如语音和文本)的自动操作。
自然语言处理的研究已经有50多年的历史了,它是随着计算机的兴起而从语言学领域发展起来的。
基本转换
如前所述,为了让机器理解自然语言(人类使用的语言),有必要将语言转换成某种可以建模的数学框架。以下是一些最常用的技术来帮助我们实现这一目标。
分词、词干提取、形状缩减
分词是将文本分解成单词的过程。分词可以发生在任何字符上,但是最常见的分词方法是在空格上分词。
词干提取是一种截断词尾以获得基本单词的粗略方法,通常包括去除派生词缀。派生是指由另一个词形成(派生)的词。衍生词通常属于与原词不同的词类。最常见的算法是波特算法。
单词的词汇和形态分析通常只是为了消除后缀的变化。后缀变化是在一个单词的末尾添加一组字母来改变它的意思。有些后缀的变化是复数加S,如蝙蝠、蝙蝠。由于词干提取是基于一组规则进行的,因此词干返回的词根可能不总是英语单词。另一方面,语素的减少可以适当减少语素,确保词根属于英语。
n-克
N-gram指的是将相邻单词组合在一起以表示目的的过程,其中n表示要组合在一起的单词数。
例如,考虑一句话:“自然语言处理对计算机科学至关重要。”
1克或1克模型将句子标记为单词的组合,因此输出将是“自然的、语言的、加工的、正确的、计算机的、科学的、批判的”
二元模型将其标记为两个单词的组合,输出将是“自然语言、语言处理、处理对,对计算机、计算机科学和科学至关重要”。
同样,三元模型将其分解为“自然语言处理、语言处理对、处理对计算机、计算机科学和计算机科学至关重要”,而N元模型将一个句子标记为N个单词的组合。
将自然语言分解成n-gram是保持句子中出现单词数量的关键,句子是自然语言处理中传统数学过程的主干。
转化法
Tf-idf是在单词袋模型表示中实现这一点最常见的方法。
过渡联邦国防军
TF-IDF是一种给单词打分的方法,它根据单词对句子意义的影响比例为单词提供足够的权重。分数是两个独立分数的乘积,单词频率(tf)和反向文档频率(idf)。
词频:词频表示文章中出现的词的频率。
逆文件频率(IDF):衡量一个单词提供的信息量,即它在所有文档中是常见的还是罕见的。它是通过对数(不适用)来计算的。n是文档总数,d是包含某个单词的文档数。
单一热编码
单一热编码是以数字形式表达单词的另一种方式。单词向量的长度等于词汇表的长度,每个句子由一个矩阵表示,行数等于词汇表的长度,列数等于句子中的单词数。当词汇中的一个单词出现在一个句子中时,单词向量相应位置的值为1,否则为0。
照片来源-谷歌
单词嵌入
单词嵌入是一组语言模型和特征学习技术共享的通用术语。词汇中的单词或短语被映射成由实数组成的向量。这项技术主要用于神经网络。
从概念上讲,它涉及到将一个单词从一个等于词汇长度的维度投射到一个更低的维度空间,这样相似的单词会投射得更近。
为了便于理解,我们可以将嵌入视为将每个单词投影到一个特征空间中,如下图所示。每个单词都被映射到一个特征空间(性别、皇室、年龄、食物等)。)
然而,事实上这些维度并不那么清晰或容易理解。然而,由于该算法是在维度的数学关系上训练的,这不会引起问题。从训练和预测的角度来看,维度所代表的内容对神经网络来说毫无意义。
如果你对直观理解线性代数感兴趣,投影和变换是一些机器学习算法背后的核心数学原理,我将强烈鼓励他们访问3Blue1Brown的《线性代数的本质》。(乙站携带相关视频,详情请见《线性代数的本质》)
表示方法
单词袋
为了使算法获得文本数据之间的关系,有必要使用清晰的结构化表示。
单词袋是一种在表中表示数据的方法,其中列表示语料库的总词汇,每行表示观察结果。单元格(行和列的交叉点)表示特定观察中列所代表的字数。机器理解具有易于理解的矩阵范式的句子是有帮助的,因此各种线性代数运算和其他算法可以应用于数据以建立预测模型。
以下是医学期刊文章样本的单词袋模型示例
这种表示非常有效,负责为一些最常用的机器学习任务(例如垃圾邮件检测、情感分类器等)生成模型。)。
然而,这种表示方法有两个主要缺点:
它忽略了文本的顺序/语法,从而失去了单词的上下文。
由这种表示方法生成的矩阵非常稀疏,并且更偏向于最常见的词。想象一下,算法主要取决于单词的数量,而在语言中,单词的重要性实际上与出现的频率成反比。频率较高的词是更常见的词,如,is,an,这不会显著改变句子的意思。因此,恰当地测量这些词以反映它们对句子意义的影响是很重要的。
嵌入式矩阵
嵌入矩阵是一种表示词汇中每个单词嵌入的方法。行代表单词嵌入空间的维度,列代表词汇中出现的单词。
为了将样本转换成其嵌入形式,将唯一热编码形式的每个单词乘以嵌入矩阵,以获得样本的单词嵌入形式。
需要记住的一点是,唯一的热编码仅指词汇表中单词位置值为1的n维向量,n是词汇表的长度。这些独特的热代码来自词汇,而不是观察到的结果。
循环神经网络(RNN)
循环神经网络,就像它的名字一样,是神经网络的一个非常重要的变体,广泛应用于自然语言处理。
循环神经网络的标准输入是一个单词,而不是完整的样本,这在概念上不同于标准神经网络。这给了神经网络处理不同长度句子的灵活性,这是标准神经网络所不能做到的(由于其固定的结构)。它还提供了在不同文本位置共享特征学习的额外优势,这是标准神经网络所不能做到的。循环神经网络在时间t输入句子的不同单词,并在时间t-1使用激活值。下图详细显示了循环神经网络的结构:
上述结构也称为多对多架构,即输入的数量等于输出的数量。这种结构在序列模型中非常有用。
除了上面提到的架构,还有三种常见的RNN架构。
1.多对一RNN:多对一架构指的是使用多输入(Tx)产生一个输出(Ty)的RNN架构。应用这种体系结构的一个例子是分类任务。
在上图中,h代表激活功能的输出。
2.一对多RNN:一对多架构指的是RNN基于单个输入值生成一系列输出值的情况。使用这种架构的一个主要例子是音乐生成任务,其中输入是jounre或第一个音符。
3.多对多(Tx不等于Ty)架构:该架构是指读取许多输入以产生许多输出的地方,其中输入的长度不等于输出的长度。使用这种架构的一个主要例子是机器翻译任务。
编码器是指网络中读取要翻译句子的部分。解码器是将句子翻译成所需语言的网络的一部分。
RNN的局限性
RNN是有效的,但它也有一定的局限性,主要在于:
上面的RNN架构示例只能捕获语言的一个方向上的依赖关系。基本上,在自然语言处理的情况下,它假设下列单词对前面单词的意思没有影响。根据我们的语言经验,我们知道这绝对是错误的。
RNN不能很好地捕捉长期依赖,梯度消失问题在RNN再次出现。
这两个限制导致了一个新的RNN建筑的出现,这将在下面讨论。
门控环路单元(GRU)
这是对基本循环单元的修改,有助于捕捉长期依赖性和解决消失梯度问题。
GRU增加了一个附加的存储单元,通常称为更新门或复位门。除了通常具有sigmoid函数和softmax输出的神经单元之外,它还包含一个附加单元,tanh作为激活函数。使用Tanh是因为它的输出可以是正的也可以是负的,所以它可以用来放大和缩小。然后,单元的输出与激活输入相结合,以更新存储单元的值。
因此,在每个步骤中,隐藏单元和存储单元的值被更新。存储单元中的值在确定要传递给下一个单元的激活值中起作用。
LSTM
在LSTM架构中,有一个更新门和一个忘记门,而不是像在GRU中那样只有一个更新门这种体系结构为存储单元提供了在时间t-1保留旧值并在时间t向其添加值的选项。
关于LSTM的更详细解释
双向RNN
在上面的RNN架构中,只考虑了之前时间戳出现的影响。在自然语言处理中,这意味着它只考虑当前单词出现之前单词的影响。然而,在语言结构上,情况并非如此,所以我们依靠双向RNN来拯救。
双向RNN由前向和后向循环神经网络组成,最终的预测是通过在任意给定时间t组合两个网络的结果来进行的,如图所示。
在本文中,我试图涵盖自然语言处理领域中所有流行的相关实践和神经网络体系结构。对于那些对学习更多神经网络感兴趣的人,我强烈建议你去Coursera学习吴恩达的课程。
你想看看相关的文件和参考资料吗?
您可能已经错过了这些企业的秋季招聘信息,添加了基站、美团、携程、网易等。(持续更新中.)
从今天开始,人工智能学习协会定期收集和推动关于主要企业职位和内部晋升的信息。同时,它还邀请成功的求职者和企业人力专家分享他们的求职经验。此外,我们将在社区工作推荐部分更新人工智能企业招聘和社会招聘信息。欢迎对发展人工智能产业感兴趣的应届毕业生将简历发送到人工智能学习俱乐部。
如果您有互联网问题,也可以咨询我,谢谢!如果你也想一起学习人工智能,欢迎留言交流。
原文地址:https://www.cnblogs.com/phploser/p/12203247.html