自然语言处理-注意点

  • 高频虚词作为停用词
  • 当有大量已标注数据可用时,只使用整体数据的10%进行评估常会出现安全问题。
  • 高频虚词作为停用词
  • 当有大量已标注数据可用时,只使用整体数据的10%进行评估常会出现安全问题。
  • 决策树特别适合有很多层次分类区别的情况。
  • 决策树需要按照特定的顺序检查特征。
  • 一阶逻辑是计算语义的一个不错的选择
  • 语料分析指的是技术层面的分析,并不关注语料库的语言学分析。
  • 在句法分析中,文法规则被用于确定哪些句子是合法的。
  • 词法分析基于较小的词条,更关注词的意义。但是语义分析关注更大的组块,语义分析可以处理短语层面、段落层面、文档层面的信息。
  • 词向量(word2vec)技术可以被用于解决语义层面的消歧。

预处理

  • 将数据进行小写化转换有利于预处理合NLP应用的后续阶段。如:句法分析。
  • 分句是识别句子边界的过程,也称为断句、句子切分或句子边界消歧。这一过程识别一句话的起始和结束位置。
    • 开源工具如下:
      • Opennlp
      • Stanford corenlp
      • Gate
      • nltk
  • 词形还原和词干提取密切相关
  • 在词形还原中需要考虑词语的词性和上下文,但是在词干提取中不需要考虑。
  • Nltk包含了一个英文停用词的可读列表。可以在自己的nlp应用中定义想要去除的停用词

句子级别和词级别预处理

  • 词条化将一段句子切成单词、句子和有意义的短语的过程。词条化的输出是单词,也叫做词条。

特征工程和NLP算法

  • 特征生成阶段概览:
    • 第一步:语料库收集;
    • 第二步:句子分析;
    • 第三步:预处理;
    • 第四步:预处理后的自然语言语料—>应用特征工程技术—>生成特征
  • 机器学习模型的准确率和效率主要依赖于特征。
  • 特征工程的挑战:
    • 获取好的特征很困难,有时非常复杂;
    • 在生成特征后,需要决定选择哪些特征并在此基础上应用机器学习技术,这一过程起重要作用。选择合适的特征的过程叫做特征选择;
    • 在特征选择的过程中,有时需要清除一部分不太重要的特征,这也是特征工程中的一个关键部分;
    • 人工特征是十分耗时的;
    • 特征工程依赖于领域专业知识,或至少是领域相关的基础知识。
  • 在nlp领域,句法分析器是一个把自然语言表示的句子或词条序列作为输入的程序或者工具。
  • 句法分析器的结果通常表示成一个句法分析树或者抽象语法树,它们通过文法规则生成。
  • 文法规则中符号含义:
    • S:代表句子;
    • Np:代表名词短语;
    • VP:代表动词短语;
    • N:代表名词;
    • V:代表动词。
    • Art:代表冠词a,an,the
  • 上下文无关文法(CFG)也被称为短语结构文法。
  • 概率上下文无关文法(PCFG)
    • 任意一个非终结符的概率之和都为1
  • 文法规则中,右半部分只存在空字符的规则叫做空规则;左右两部分都分别只包含一个符号的规则叫做一元规则;如:Np->N。右半部分包含两个符号的规则叫做二元规则。
  • 为其他语言构建一个句法分析器,可以使用CKY算法。
  • CKY算法使用自底向上句法分析方法从句子中接收单词并构建句法树。
  • 使用cky算法开发自己的句法分析器的步骤:
    • 需要有人工标注句法树的标注语料;如果是按照penn treebank格式标注的,那么可以进行下一步。
    • 根据已标注语料,可以派生出文法规则并为每个规则计算概率
    • 应用cnf进行文法转换
    • 使用包含概率的文法规则并将他们应用在大规模语料中,使用cky算法和Viterbi算法获得可能性最高的句法分析结构。如果你有大量的数据,你可以使用机器学习并将它处理为一个多分类问题。最后一步是选择最大概率的结果作为最优句法树。
  • 下载stanford句法分析器
  • 句法分析的挑战:
    • 对混杂的语言进行句法分析是困难的。一个句子包含多个语种。

词性标注

  • 词性以及定义
  • 对词性标注器来说,一个不认识的单词会被标注为fw(外文)
  • 短语级别或者从句级别的词性
  • 开发词性标注器,需要下面步骤:
    • 标注好的语料;
    • 选择特征;
    • 利用python 的sklearn 库中的决策树分类器训练模型;
    • 正确率检查;
    • 使用模型进行词性标注。
  • 使用treetagger库生成词性
  • 通常使用stanford句法分析器,因为它的准确率很高,同时非常灵活,可以生成json格式、xml格式或文本格式的输出。
  • 语法校正系统需要考虑句子中的所有短语和每个单词的词性。开发问答系统,名词短语和动词短语是句子中最重要的特征。
  • 除了word2vec,另一个有力资源是wordnet,这是我们能够获取到的最大的人工标注语料库,其中的每个词都有标签,这些数据库有助于找出某个词的语义。

NLP中的基础统计特征

  • 词频-逆文档频率(TF-IDF):使用TF-IDF能够学习一个词对于数据集中的一个文档的重要性
  • TF-IDF包含两个部分:词频和逆词频。词频表示每个词在文档或数据集中出现的频率。等式如下:
    • TF(t)=词t在一篇文档中出现的次数/这篇文档的总词数。
    • 逆文档频率实际上告诉我们一个单词对文档的重要性。当计算TF时,对每个词赋予了同等的重要性,它出现的越多,它的tf就越高。如果它出现了100次,也许相比其他出现更少的词,它并不携带那么多的信息,因此需要赋予他们权重,决定每个词的重要性。
    • IDF(t)=( 文档的篇数/包含词t文档的篇数)
    • 计算TF-IDF公式如下:
      • TFIDF=(词t在一篇文档中出现的次数/这篇文档的总词数) (文档的篇数/包含词t文档的篇数)
  • 使用两个库-textblob和scikit-learn计算TF-IDF。
  • TF-IDF应用
    • 通常可以使用TF-IDF进行文本数据分析,得到最准确的关键词信息;
    • 如果你在开发一个文本摘要应用,并正在进行统计。TF-IDF是生成摘要最重要的特征;
    • TF-IDF权重的变动常用于搜索引擎,以求出文档的得分以及同用户检索的相关性;
    • 文本分类应用将TF-IDF和BOW一起使用。
  • 向量化
    • 向量化试图将每个词映射为一个整数。Sklearn通过dictvectorizer将文本转化为onehot编码,还有countvectorizer,将文本集合转化为词频的矩阵表示。最后可以使用word2vec将文本转化为向量表示
    • one-hot编码:每个词都是由一个二进制向量表示的,第N位表示词典中的第n个单词。
      • 应用:1)很多人工神经网络接收one-hot编码格式作为语义信息并生成输出向量;
    • word2vec算法接收向量化的one-hot编码单词作为输入;
  • 编码器将输入数据映射为不同的特征表示,我们使用one-hot编码。而解码器将特征表示映射回输入数据空间。在深度学习中,解码器了解哪个向量代表哪个词,因为它可以根据输入机制进行解码。

规范化

  • 统计学规范化:统计学领域的规范化用于进行特征缩放。如果有一个数据集,其中一个数据属性的范围太高,而其他数据属性的范围太小,那么通常需要应用统计技术将所有数据属性或特征映射到一个共同的数值范围内。Eg:最小最大化方法。

概率模型-语言模型

  • 语言模型(Language model)有两个基本目标

    • LM的目的是为一个句子或词序列赋一个概率;
    • LM还预测了下一个词的概率,也就是说它预测下面最有可能出现的一个词。
    • 任何一个计算上面任务的模型叫做语言模型。LM使用条件概率链式法则,这是条件概率的一个扩展。
  • 使用马尔可夫假设计算条件概率。如果有一个长句子,我们希望尝试预测它的下一个词,那你需要考虑现在已经出现的所有词来计算下一个词的概率。但是在马尔科夫假设中,只需要考虑最后一个、两个或者三个词来计算下一个词的概率,这就是马尔科夫假设。

  • 一个使用一元语法模型的简单的语言模型只考虑词本身,你只需要考虑单词的概率生成一个随机的单词序列。

  • 如果使用二元模型,那么前一个词将决定序列中的下一个词。
    如何计算n元模型的语言模型中的概率?以二元模型为例,参照下边的等式:

    • 需要计算的是词和共现的次数,以及出现的次数。
      如果采用四元或五元模型,语言模型的结果将非常好,因为句子在语义结构中考虑了长依赖。用四元或者五元模型可以构建出一个非常好的语言模型。
  • 语言模型应用

    • 机器翻译使用语言模型计算目标端语言模型概率以选择最好的翻译结果;
    • 使用二元语言模型提供词语建议,修正拼写;
    • 文本摘要采用了语言模型;
    • 问答系统需要语言模型计算回答的概率。
  • 索引应用

    • 当处理多分类任务时,我们希望将目标类别转换为数值形式,因此可以使用StringIndexr。
    • 也可以使用IndexToString接口从目标类生成文本。
  • 排序

    • 本质上,排序算法用于找到输入和输出的相关性。
    • 索引和排序在nlp中不经常使用,但是,当你尝试构建一个与机器学习相关的应用程序时,他们更为重要。它主要用于学习用户偏好。
  • 特征工程的优点

    • 应用ML算法来解决NLP问题时,特征工程是nlp领域最重要的方面。
    • 更好的特征提供更大的灵活性。即使你选择了一个不太理想的ml算法,也会得到很好的结果。即使是不太复杂的模型,也可以获取良好的准确率。
    • 当特征良好的时候简单的ML模型也可以有很好的结果。
    • 更好的特征带来更高的准确率。在特征工程上花更多的时间,为数据集生成适当的特性是有必要的。如果你得到了适当的特征,你已经成功一半。
  • 特征工程的挑战:

    • 在NLP领域中,可以轻易获取属于分类特征或基本NLP属性的特征。我们必须把这些特征转换为数字格式,这是最具挑战的部分;
    • 虽然有一些方法可以使用,如TF-IDF, one-hot编码,排序,共现矩阵,词嵌入,word2vec等,能够把文本数据转换为数字格式,但仍不是很多,这部分仍富有挑战性。
  • word2vec, doc2vec, glove等高阶算法都是词嵌入技术的一部分。这些技术将帮助我们有效地将文本特征转换为数字格式,尤其是在需要使用语义的时候。

高级特征工程和NLP算法

  • 词嵌入技术:在自然语言处理中,语言模型和特征工程技术把词汇表中的单词或是短语映射成实数的向量。把词汇映射成一系列实数值的技术,就是词嵌入技术。
  • 分布语义:分布语义研究领域注重研发一些对语言学项(item)的语义相似度的量化和分类的技术及理论,这些技术和理论建立在大规模文本数据的分布特性(distributional property)上。
  • 通过使用word2vec等分布语义工具,可以使用不同领域的词的向量值来区分他们。所有含义相近的词在语料库中具有相似的分布,他们会被分在一起。
  • 分布语义技术中的word2vec。word2vec是一个强大的、无监督的词嵌入技术。
  • word2vec使用两层神经网络,接收大规模的文本数据或语料输入,然后可以对应给定文本产生一系列的向量。word2vec创造了一个高维的向量空间,这个空间可以有数百维。
    • 在向量空间中,语料中的每个词都由一个对应的向量表示。因此,向量空间仅仅是大规模文本语料中的词对应的向量表示
    • 对句子中的每个词进行one-hot编码,如果语料库中有很多句子,那么向量的维度等于语料中词汇表的规模。如果使用这种高维度的表示来做自然语言处理,那么就需要大规模计算的能力,且这种高维的矩阵操作会很费时。
    • one-hot编码不能反映词汇之间的语义相关性。Eg:cat和cats,one-hot的编码并不能反映这两个词具有很强的相似度。
    • 对one-hot编码的向量进行与操作(点乘),这种编码方式不能标答这种词之间的相似度。
    • 想要找到准确的词汇之间的相似度关系,使用wordnet是不够的。Wordnet是专家编写的,由于是人工创造的,所以主观性比较强。使用WORDNET需要的时间代价和精力代价更大。
  • 2013年提出的word2vec非常善于找出词汇的相似度关系,同时可用于处理之前的技术(one-hot编码和wordnet)处理不了的语义关系
  • word2vec模型中的词汇表示、组成模块和参数
    • 1)基于表示的分布相似度;
    • 2)word2vec模型的组成部分;
    • 3)word2vec模型的逻辑;
    • 4)word2vec模型背后的算法和数学理论;
    • 5)与word2vec模型相关的一些事情;
    • 6)word2vec模型的应用。
  • 基于表示的分布相似度
    • 分布相似度概念是通过考察词汇所处的上下文环境来得到代表词义的一些数值。词义十分依赖于上下文环境。
    • 词的分布表示是指使用一个向量来对词进行表示。可使用一个稠密向量来表示一个词,并且该向量能够很好地预测其上下文范围中的词。所预测出的这些词与其他的一些词又存在相关关系,这样可以进行相似度度量。
    • 基于每个词预测其他的具有相同上下文环境的词,其他被预测的词也执行相同的操作来预测更多其他的词,因此需要一个好的算法来执行这种递归操作。
    • 基于表示的分布相似度实际上是语义理论的一部分,它可以帮助我们理解日常生活中使用的词的词义;而分布表示是指用一个向量来表示一个词。
    • 为了生成词对应的向量,我们使用one-hot编码或其他技术,重要一点是,需要生成携带相似度意义的向量,这样才能理解一个词的语义。
  • word2vec模型的组成部分:
    • word2vec的输入;
    • word2vec的输出;
    • word2vec模型的构建模块。
      • word2vec的输入:使用原始的文本语料作为输入
      • word2vec的输出:目前:我们想要得到一个词的向量表示来表示词的意义,同时能表达分布相似度。
    • 直接的目标是将每个词映射成向量,以便于预测上下文环境中的词。而给定上下文环境,我们能预测与该环境最匹配的词
    • word2vec模型的构建模块:
      • 使用神经网络搭建:神经网络是从大规模数据中学习知识的非常好的算法
  • word2vec模型的框架结构组成:
    • word2vec中有三个主要的模块:
      • 词汇表构建器;
      • 上下文环境构建器;
      • 两层的神经网络。
  • 词汇表构建器:
    • 接收原始文本数据(多数情况下是句子),。词汇表构建器根据给定的文本语料构建词汇表,方式是从语料中搜集独一无二的词,来构建词汇表。
    • Python的一个类库:genism.可以使用genism对语料构建词汇表。
    • 词汇表中的每个词都是词汇表中的一个对象,包括词序号和出现频次,这些都是词汇表构建器的输出。
  • 上下文环境构建器:
    • 上下文环境构建器使用词汇表构建器的输出结果,以及上下文环境窗口中的词作为输入,然后产生输出。
    • 上下文窗口是一个滑动的窗口,你可以为每个使用word2vec工具的NLP应用定制窗口大小。一般来说:NLP应用的上下文窗口值设为5~10个词。如果你设定窗口大小为5,那么需要考虑中心词左边的5个词和右边的5个词。通过这种方式捕获中心词周边的信息。
      中心词和周边词构成上下文环境构建器的输入。上下文环境构建器的输出是词对(word pairing).
    • 词对会被输入到神经网络中进行训练。网络会根据词对的出现次数学习到基本的数据信息。
  • 两层的神经网络:
    • Word2vec神经网络的结构细节:

      • 第一层是输入层;
      • 第二层是隐层;
      • 第三层(最后一层)是输出层。
    • 网络中每层的作用:

      • 输入层:输入层神经元的个数要和训练的词汇表的大小一致;
      • 隐层:隐层神经元的数量就是最后得到的词向量的维度大小;
      • 输出层:输出层和输入层的神经元数量保持一致。
    • 输入层接收的输入是one-hot编码的词。假设词汇表的大小是V,表示语料中有V个不同的词。假设词向量的维度是N,输入层到隐层的连接可以使用形状为VN的输入矩阵W1表示,W1中的一行表示词汇表中的一个词。同理,从隐层到输出层的网络连接可以使用输出矩阵W0表示,该矩阵大小为NV,每一列表示词汇表中的一个词。
      训练开始前,W1和W0矩阵中的元素使用随机的小数值进行初始化,这是神经网络训练的通用输出化方法。

    • 最终目标是获得输出层的词的概率分布结果,这种概率分布反映了词与输入的环境上下文词的相关程度。
      我们讲的是概率,但是输出层的结果却是向量,所以需要将其转换为概率,即输出层的所有结果加和为1。在word2vec中,使用softmax函数将输出层激活函数计算后的值进行归一化。

  • 从目标向量减去预测得到的概率向量,就能得到预测误差或者误差向量。得到误差或误差向量后,就能据此对各个权重矩阵进行调整。这里需要调整的权重矩阵是 和。将网络的误差进行传播后调整权重矩阵 和的技术叫做反向传播(backpragagation)。
  • 训练过程中,神经网络持续迭代学习语料中不同的上下文环境词-目标词(context-target)词对,这就是word2vec按顺序学习词和词之间关系,并得到词向量的方法。
  • Word2vec两版本区别在于主要的算法不同:
    • 两个主要的流程算法
      • 连续词袋(cbow);
      • 跳跃语法(skip-gram)。
  • 连续词袋算法:
    • 在连续词袋算法中,目标词的上下文环境由其周边的多个词来表示。这种情况下,需要改变神经网络的结构,尤其是输入层。现在,输入层不能只接收一个单词的one-hot编码向量了,需要加入另几个输入层来表示 。
    • 如果增加上下文词,那么就需要增加额外的输入层来表示每一个词,所有的这些输入层结果被连接起来,送入隐层。计算公式没有发生变化,和之前提出的保持一致,只是需要为其他的上下文词计算 。
  • 跳跃语法:
    • SG(skip-gram)模型反过来利用目标词和上下文词。目标词以one-hot编码的向量形式输入给输入层,隐层不发生变化,输出层会循环多次来生成指定数量的上下文词。
    • 举例说明:使用‘cat’和‘tree’作为上下文词,”climbed”作为目标词。SG模型的输入向量应该是词”climbed”的one-hot编码的形式,输出向量应该是‘cat’和‘tree’的向量。
    • 区别在于:SG模型中的微小调整是所有的误差向量被加和到一起,通过梯度回传的方式调整权重值。这意味着每个输出层的权重矩阵在训练的过程中会保持一致。
  • 词汇表构建阶段用到的技术;
    • 从数据中构建词汇表的时候,可能用到一些优化技术。Lossy counting算法是其中的一个重要技术。
    • Lossy counting算法用来确定数据集中出现频次大于用户设定的阈值的元素。这个算法将数据流作为输入,而不是一个有限规模的数据集。
    • 使用lossy counting算法时,一些低频的元素会从频次表中周期性地被移除。频次阈值通常由用户设定。
    • 当有一个大规模的语料,想优化训练速度的时候,可以使用lossy counting算法。
  • 上下文环境构建过程中使用的技术:
    • 1)动态窗口缩放或动态上下文窗口;
    • 2)下采样(subsampling);
    • 3)剪枝(pruning)。
  • 动态上下文窗口技术根据目标词给每个上下文词赋予相应的权重。技术的出发点是离目标词越近的词应该是越重要的。
    • 动态上下文窗口技术认为更近的上下文词能提供更多的信息,我们在实际窗口1~L范围中使用均匀采样方法来赋予权重。例如:上下文窗口大小是5,覆盖到的词的权重服从均匀分布,那么最近的词权重是5/5,次近的是4/5。。。。。。
    • 通过赋予权重,能对结果进行更好的优化。
    • 词汇是对训练数据的采样。下采样技术是移除频繁词的技术,对于移除停用词非常有用。这项技术随机地移除词,这些词在语料中频繁出现。
    • 使用下采样技术移除语料和窗口范围中出现频次较高没有太多必要的词,以此来提高训练样本集的质量。
    • 剪枝:
      • 在使用上下文环境构建器构造词对的时候,剪枝也经常被使用。当有个较大的词汇表需要处理的时候,需要移除较低频率的词,可以通过设置python类库gensim中的参数max_vocab-size限制整个词表的规模。
      • 剪枝可以减少训练样本的数量,提高质量。如果不剪除掉数据集中出现频次较低的词,模型精度会差一些。所以这是提高精度的方法。
  • 神经网络算法
    • 训练带有激活函数的神经元,以及如何使用损失函数来计算预测结果的偏差。
    • 定义错误函数来说明模型预测结果的偏离程度。目标是将偏离程度尽可能的降低,需要提高预测的准确率。
    • 训练过程中,模型接收输入,根据误差函数算出误差,然后更新神经元权重,如此重复迭代进行训练。迭代过程一直进行,直到我们在最后的预测结果上得到最小的误差。
  • 误差函数也叫做损失函数。使用求偏导的方法来最小化误差的方法叫做梯度下降法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__BC__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值