深度学习主要在自然语言处理以及计算机视觉发挥着重大的作用,今天主要结合工作谈一下对于自然语言处理方面的理解,同时也对于自己的学习总结有一个很好的梳理作用。
自然语言处理包括但不仅限于文本分类,情感分析,实体识别和抽取,词性标注等等。
jieba(结巴)是一个强大的分词库,完美支持中文分词。可以自己导入分词词典,也可以做词性标注,对于未登录词,使用HMM隐马尔科夫模型处理。
当然还有其他的分词,比如清华的分词等等。。。
word2vec是google在2013年推出的一个NLP工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。word2vec也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。
关于词向量的原理可以参考以下网站:
word2vec原理(一) CBOW与Skip-Gram模型基础
word2vec原理(二) 基于Hierarchical Softmax的模型
word2vec原理(三) 基于Negative Sampling的模型
关于word2vec可以直接安装gensim库使用
word2vec是静态词向量,在word2vec模型中固定的词拥有固定的词向量,而无法解决一词多义的情况,例如:苹果可以在文中有水果的含义,也可以在文中有手机电脑的含义,而elmo是使用bilstm基于上下文实现动态词向量。
具体使用可参考以下链接:
http://www.linzehui.me/2018/08/12/%E7%A2%8E%E7%89%87%E7%9F%A5%E8%AF%86/%E5%A6%82%E4%BD%95%E5%B0%86ELMo%E8%AF%8D%E5%90%91%E9%87%8F%E7%94%A8%E4%BA%8E%E4%B8%AD%E6%96%87/
https://github.com/allenai/bilm-tf
ELMO 在迁移到下游任务时,会将不同层的特征采用加权求和的方式来获得每个词的最终表示。事实证明, ELMO 的确解决了多义性问题, 词性也能对应起来了。但, ELMO 的缺点也十分明显:
在了解BERT和OpenAI GPT之前,需要先了解Transformer的结构,编码器和解码器,具体可参考我的博客:
一文详解transformer(Attention Is All You Need)原理
GPT 虽然不是第一个预训练语言模型,但它的出现更具开创意义,基于Transformer的解码器堆栈组成,其特点很明显:
GPT 1.0 与 GPT 2.0 的出现说明了以下几点:
训练前模型架构的差异。BERT使用双向Transformer。OpenAI GPT使用从左到右的Transformer。ELMo使用独立训练的从左到右和从右到左LSTM的连接来为下游任务生成特性。在这三个层次中,只有BERT表示在所有层中同时受左右上下文的制约。
BERT是基于Transformer的编码器堆栈组成的,同时找到正确的任务来训练编码器的Transformer堆栈是一个复杂的障碍,BERT采用了来自早期文献的“屏蔽语言模型”概念(在那里它被称为完形填空任务)来解决这个问题。
除了屏蔽15%的输入,BERT还混合了一些东西,以改进模型后来的微调方式。有时它会随机地将一个单词替换成另一个单词,并要求模型预测在那个位置上的正确单词。
Figure:BERT input representation. The input embeddings is the sum of the token embeddings, the segmentation embeddings and the position embeddings.
有关BERT的中文翻译:https://github.com/yuanxiaosc/BERT_Paper_Chinese_Translation
更多内容可参考:https://blog.csdn.net/hufei_neo/article/details/94739500
ERNIE 2.0 是基于持续学习的语义理解预训练框架,使用多任务学习增量式构建预训练任务。ERNIE 2.0 中,新构建的预训练任务类型可以无缝的加入训练框架,持续的进行语义理解学习。 通过新增的实体预测、句子因果关系判断、文章句子结构重建等语义任务,ERNIE 2.0 语义理解预训练模型从训练数据中获取了词法、句法、语义等多个维度的自然语言信息,极大地增强了通用语义表示能力。
有关更详细的介绍在:https://github.com/PaddlePaddle/ERNIE
CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注。。但是其各自有自身的特点,HMM模型是对转移概率和表现概率直接建模,统计共现概率。而MEMM模型是对转移 概率和表现概率建立联合概率,统计时统计的是条件概率。MEMM容易陷入局部最优,是因为MEMM只在局部做归一化,而CRF模型中,统计了全局概率,在 做归一化时,考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置的问题。
更多有关内容可参考:https://www.cnblogs.com/hellochennan/p/6624509.html