![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NLP
文章平均质量分 79
energy_百分百
while(1){慢几步,深几度}
展开
-
#深入理解# DNN+HMM 语音识别模型
上一篇文章详细解析了 GMM+HMM语音识别模型,在这篇文章中,我们将重点介绍DNN+HMM语音识别模型将DNN应用在语音识别有两种方式:1. 令DNN取代GMM+HMM中的GMM,但是首先要训练一个GMM+HMM的语音识别模型,得到初始状态概率训练一个分类器,输入一个特征帧能够得到一个这个特征属于每一个状态的概率...原创 2021-07-07 10:43:39 · 978 阅读 · 0 评论 -
#透彻理解# GMM+HMM 语音识别模型 [识别+训练] 过程
1.识别过程:对于每一帧的特征,根据状态转移矩阵A,2. 训练过程:使用k-means等方法初始化每个状态对应GMM中每个高斯分布的权重参数原创 2021-07-02 22:11:39 · 1904 阅读 · 1 评论 -
通俗理解隐马尔可夫模型(HMM)
HMM(隐马尔可夫模型)对于一个观测序列,我们认为这个观测序列是由另一个状态序列输出的,而这个状态序列我们称之为隐马尔可夫链隐马尔可夫链每次可以输出一个观测值,但是一个观测值一次只能被一个状态输出;HMM 的每一个状态输出完一个观测值后会根据概率转换到其他状态(其他状态也包括自身状态)然后在下一个状态下在输出下一个观测值,直到输出所有观测值时结束一个HMM包含三组参数(π,A,B\pi,A,Bπ,A,B):数组π\piπ:表示初始化时每种状态被选择的概率(初始概率分布);矩阵A(N * N,N=原创 2021-06-28 23:35:24 · 1660 阅读 · 2 评论 -
语音识别(Speech Recognition)综述
1. 语音识别的基本单位1.1 Phonemea unit of sound 是声音的最基本单位,每个词语token的声音由多个 phoneme 组成1.2 Graphemesmallest unot of a writing system 每个单词书写最基本的单位,简单来说:英文的grapheme可以认为是词缀, 由 [26个英文字母 + 空格 + 标点符号]组成中文的grapheme是汉字1.3 Word英文可以用单词作为语音识别的最基本单位,但包括中文在内的很多语言无法使用word作为原创 2021-06-18 16:31:42 · 7193 阅读 · 4 评论 -
#深入探究# Adam和SGDM优化器的对比
1. Adma 和 MSGDAdam和MSGD作为当今最优秀的两种深度学习优化器,分别在效率和精度上有着各自的优势,下面我们将分析两种优化器各自优势的原因,两边的两张图分别是 几种常见的优化器在猫狗分类数据集上的分类准确率曲线,第一个是训练集,第二个是测试集以下两张图是某个NLP任务中,几种模型的准确率和困惑度指标变换曲线通过上边两幅图片可知:Adma在训练集上的准确率较高,MSGD在测试集上的准确率较高Adma的速度更快,但MSGD能够得到好的效果第一个结论可以用下边这个图来解释:原创 2021-06-07 16:55:19 · 10991 阅读 · 0 评论 -
#手写代码# 用Bert+CNN解决文本分类问题
文章目录1 配置文件2 定义模型2.1 __init__(self,config)函数2.1 conv_and_pool()函数2.3 forward(self,x)函数1 配置文件首先定义一个配置文件类,类里边存放Bert和CNN的一些超参数class Config(object): ''' 配置参数 ''' def __init__(self,dataset): # 模型名称 self.model_name='Bert CNN Mo原创 2021-05-25 10:04:42 · 3706 阅读 · 5 评论 -
#手写代码# 用Bert+LSTM解决文本分类问题
1 配置文件首先定义一个配置文件类,类里边存放Bert和LSTM的一些超参数class Config(object): ''' 配置参数 ''' def __init__(self,dataset): self.model_name='Bert RNN Model' # 训练集,测试集,检验集,类别,模型训练结果保存路径 # self.train_path=dataset+'/data/dev.txt' #原创 2021-05-24 22:57:03 · 4095 阅读 · 7 评论 -
深入理解 PyTorch 的一维卷积和二维卷积,一维池化和二维池化
PyTorch 的一维卷积和二维卷积的输入都可以是多维的默认情况下,一维卷积只对输入的最后一维进行操作,二维卷积只对输入的最后两维进行操作;如果想要对输入的倒数第二维度进行一维卷积,那么必须使用二维卷积进行操作,同时卷积核的第二个维度保持和输入数据的最后一个维度保持一致,这样就能保证卷积核在输入数据的倒数第二个维度上进行滑动了;经过这样的卷积以后,输出数据的最后一个维度会变成1,这时一般会使用 unsqueeze() 函数删除数据的最后一个维度上述思想对PyTroch中的一维池化和二维池化同样适用原创 2021-05-24 14:12:08 · 3268 阅读 · 1 评论 -
通俗理解 TextCNN网络结构
TextCNN和图像CNN最大的区别就在于TextCNN是一维卷积,而图像CNN是二维卷积有些人认为一维卷积核二维卷积的区别在于输入数据的维度,认为一维卷积的输入是一维数据,二维卷积的输入是二维数据;其实不然,两个最大的区别是卷积滑动的方向:一维卷积只在一个唯独上进行滑动二维卷积先在第一个维度上滑动,然后在第二个维度上滑动,比如对于图像来说,卷积核先在第一行像素上横向活动,然后再在第二行上横向滑动…textCNN过程如下图所示:对于一个 n*k 的文本序列,n代表文本序列的长度,k代表embe原创 2021-05-21 14:46:12 · 696 阅读 · 0 评论 -
#手写代码# 使用Bert进行文本分类(包含文本预处理、自定义分类器、模型训练与评估)
用预训练的Bert模型进行文本分类,主要的工作有两个,分别是:文本预处理自定义全连接层分类网络并将分类网络连接到 预训练好的Bert网络之后1 配置文件首先,我们需要定义一个配置文件,定义一系列要使用到的参数class Config(object): ''' 配置参数 ''' def __init__(self,dataset): self.model_name='LiChenhao Bert Model' # 训练集,测试集,检原创 2021-05-20 11:02:18 · 4761 阅读 · 5 评论 -
通俗理解 Adam 优化器
Adma的公式如下,这里我们主要分析红色的标记的这4行公式:公式1、2分别计算 历史梯度的一阶指数平均 和 历史梯度平方的一阶指数平均 ,公式3是计算变量更新值,由公式3可知,变量更新值正比于历史梯度的一阶指数平均值,反比于历史梯度平方的一阶指数平均值;历史梯度的一阶指数平均值历史梯度的一阶指数平均可以理解为求历史梯度的加权平均,距离当前时刻距离越远权重越小如果变量在某一维度更新时,梯度存在较大震荡(梯度更新值正负交替),那么得到的历史梯度的一阶指数平均值通过正负抵消会得到一个较小的值;如果变量原创 2021-05-17 16:04:55 · 9985 阅读 · 1 评论 -
从源码解析 Bert 的 BertPooler 模块
前文链接:energy百分百:从源码解析 Bert 的 Embedding 模块energy百分百:从源码解析 Bert 的 BertEncoder 模块以上两篇文章解析了Bert的BertEmbedding、BertEncoder模块,接下来分析bert的第三个重要模块 BertPoolerBertPooler模块本质上就是一个全连接层网络,或者说一个分类器;BertPooler模块接在bert的堆叠encoder层后,主要用于解决序列级的NLP任务BertPooler模块源码class原创 2021-05-07 23:44:31 · 4955 阅读 · 3 评论 -
从源码解析 Bert 的 BertEncoder 模块
前文链接->从源码解析 Bert 的 Embedding 模块上一篇文章解析了 Bert 的 BertEmbedding 模块,接下来分析 bert的第二个重要模块 BertEncoderBertEncoder源码class BertEncoder(nn.Module): def __init__(self, config): super(BertEncoder, self).__init__() layer = BertLayer(config)原创 2021-05-07 22:53:22 · 4312 阅读 · 3 评论 -
从源码解析 Bert 的 Embedding 模块
前边从源码层面对BertModel类进行了一个深入的解析,接下来从云源码层面对 BertModel 类中的BertEmbeddings模块进行解析1. BertEmbeddings 类源码class BertEmbeddings(nn.Module): """Construct the embeddings from word, position and token_type embeddings. """ def __init__(self, config):原创 2021-05-07 21:50:10 · 3617 阅读 · 2 评论 -
#深入探究# PyTorch中的 forward() 方法详解
在PyTorch的很多函数中都会包含 forward() 函数,但是也没见哪里调用过forward() 函数,不免让人产生疑惑想要了解 forward() 函数的作用,首先要了解 Python 中的 __ call __ 函数,__ call __ 函数的作用是能够让python中的类能够像方法一样被调用,通过下边的例子来理解一下:class X(object): def __init__(self, a, b, range): self.a = a self原创 2021-05-06 22:57:42 · 7966 阅读 · 7 评论 -
从源码层面,深入理解 Bert 框架
看了好多 Bert 的介绍文章,少有从源码层面理解Bert模型的,本文章将根据一行一行源码来深入理解Bert模型BertBertModel 类的源码如下(删除注释)class BertModel(BertPreTrainedModel): def __init__(self, config): super(BertModel, self).__init__(config) self.embeddings = BertEmbeddings(config)原创 2021-04-29 23:11:55 · 2686 阅读 · 4 评论 -
#最全面# 使用 Bert 解决下游 NLP 实际任务
文章目录1 四大NLP下游任务1 句子对分类任务1.1 MNLI1.2 QQP1.3 QNLI1.4 STS-B1.5 MRPC1.6 RTE1.7 SWAG2 单句子分类任务2.1 SST-22.2 CoLA3 问答任务3.1 SQuAD v1.14 单句子标注任务2 使用Bert实现自动文本摘要1 四大NLP下游任务BERT在概念上很简单,在经验上也很强大。它推动了11项自然语言处理任务的最新技术成果,而这11项NLP任务可分类为四大自然语言处理下游任务。这四类任务分别是:句子对分类任务、单句子分类原创 2021-04-16 14:03:28 · 3636 阅读 · 0 评论 -
#深入理解# Bert框架原理
Bert 全称 Bidirectional Encoder Representations from Transformers ,从全称可知,Bert内部使用的是一个双向的transformer的encoder结构。此前将预训练的语言模型应用到NLP任务主要有两种策略,一种是基于特征的语言模型,如ELMo模型;另一种是基于微调的语言模型,如OpenAI GPT。这两类语言模型各有其优缺点,而BERT的出现,似乎融合了它们所有的优点,因此才可以在诸多后续特定任务上取得最优的效果。1. Bert 的网络结构原创 2021-04-16 11:11:12 · 1299 阅读 · 0 评论 -
#由浅入深# 从 Seq2seq 到 Transformer
1 seq2seq模型传统的seq2seq模型,本质上就是一个自编码器,由编码器和解码器两部分组成,中间通过语义变量相连接;但是传统seq2seq模型中的编码器会将序列中所有时刻的序列数据转换成一个固定长度的语义变量;然后对于不同时刻的输出解码器共用这个语义变量,这就导致以下问题:对于不同长度的序列数据全部有损压缩为固定长度的语义变量,对于较长的序列数据,压缩必然会损失大量信息将不同时刻的序列数据转化为一个语义变量,对于编码器和解码器来说,无法进行并行计算编码器将不同时刻的序列数据转化为一个语义变原创 2021-04-07 21:43:09 · 968 阅读 · 0 评论 -
#最全面# NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)
自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的基于统计的方法基于统计的方法就是:用一个词语周边其他词语出现的次数来表示每一个词语,此时每个词向量的维度等于词库容量,每一维存储着词库对应序号的词语出现在当前词语周围的次数,所有这些词向量组成的矩阵就是共现矩阵我们也可以换一个角度来理解共现矩阵,共现矩阵就是两个词同时出现的次数,共现矩阵的i行j列的数值表示词库中第i个词和第j个词同时出现的次数,同时共现矩阵是对角线为零的斜对称矩阵大家原创 2021-04-06 14:17:13 · 2484 阅读 · 1 评论 -
#深入理解# NLP 中的 Feature-based 和 Fine-tune 两种学习方法
基于神经网络的语言模型根据学习方法不同大体可以分为两大类,分别是Feature-based和Fine-tuneFeature-based 方法是通过训练神经网络从而得到词语的embedding,换句话说就是通过神经网络得到更恰当的向量来表示词库中的每一个词语,Feature-based 方法不使用模型本身,而是使用模型训练得到的参数作为词语的 embeddingFine-tune 方法会根据下游特定的任务,在原来的模型上面进行一些修改,使得最后输出是当前任务需要的。这些修改一般是在模型的最后一层,或者原创 2021-04-01 23:02:46 · 1321 阅读 · 1 评论 -
#彻底理解# NLP中的word2vec
首先简单概括一下 word2vec 的思想:word2vec的目的是用指定维度的向量来表示词库中的每一个词,这些向量更利于后期进行各种NLP任务;每个词语对应的词向量本质上是语言模型中的一些权重参数,因此我们需要通过训练网络的方式得到这些权重的最优值,换句话说,我们通过预测未知词的方式训练网络,目的并不是真的要去使用模型预测未知词,而是提取网络的网络的权重参数 进而得到词向量,然后拿这些词向量作为词语的另一种表示形式去进行别的模型里完成NLP任务word2vec的目的是通过训练语言模型得到词向量,而早在原创 2021-03-08 23:43:10 · 442 阅读 · 0 评论 -
从NLP中的标记算法(tokenization)到bert中的WordPiece
所谓 tokenization ,就是如何提取或者说是记录文本中词语,常用的tokenization有词级标记 (Word level tokenization)、字符级标记 (Character level tokenization)、子字级标记 (Subword level tokenization)词级标记 (Word level tokenization)词级标记就是用空格和标点符号讲一段文本分割成许多词语,词级标记标记的最小维度是词语;虽然词级标记是一种符合常识的标记方法,但是他也存在着诸多原创 2021-03-07 23:28:40 · 1601 阅读 · 0 评论