
NLP实战记录
文章平均质量分 77
本人的NLP实战过程 主代码
Lyttonkeepgoing
这个作者很懒,什么都没留下…
展开
-
HMM隐马尔可夫模型最详细讲解与代码实现
首先就要说到中文分词 现阶段的分词手法一般有三大流派1.基于规则: 前后向最大匹配2.基于统计:HMM, CRF3.基于深度学习:Bilstm+crf 那么我们今天重点要讲的就是其中之一HMM隐马尔可夫模型 再说一下为什么要进行分词?1.更好的理解语义(能够提高模型性能)2.为了更重要的任务 如(命名实体识别、情感分析、文本分类 、语义识别等等)3.应用场景的需要 (淘宝、百度)搜索算法对于分词的要求就非常高But 并非所有中文任务都需要进行分词! 比如说 Bert (NSP)然后绕不开的一个点就是语料原创 2022-07-01 01:10:23 · 2858 阅读 · 1 评论 -
NLP实战8--beam search的介绍及实现
1.Beam Search的介绍在进行模型评估的时候,每次我们选择概率最大的token id 作为输出,那么整个输出的句子的概率就是最大的么?beam search 的又被作为束机搜索,是一种seq2seq中用来优化输出结果的算法(不在训练过程中使用)例如:传统的获取编码器输出的过程中,每次只选择概率最大的那个结果,作为当前时间步的输出,等到输出结束,我们会发现整个句子可能并不通顺。虽然在每一个时间步上的输出确实是概率最大的,但是整体的概率却不一定是最大的,我们经常把叫做贪心算法(gree.原创 2021-12-27 00:47:47 · 1729 阅读 · 0 评论 -
NLP实战7--seq2seq实现3(pytorch)/decoder实现
实现解码器解码器主要负责实现对编码之后结果的处理,得到预测值,为后续计算损失做准备此时需要思考:1.使用什么样的损失函数,预测只需要是什么格式!! 这个思想非常重要 要清楚的了解需要得到一个什么样的值, 是什么样的形状针对当前问题,我们可以理解为当前的问题是一个分类的问题,即每次的输出其实是选择一个概率最大的词真实的形状是[batch_size, max_len],从而我们知道输出的结果需要是一个[batch_size, max_len, vocab_size]的形状即预测值的最后一原创 2021-12-16 22:06:43 · 789 阅读 · 0 评论 -
NLP实战6--seq2seq实现2(pytorch)/encoder实现
编码器的准备编码器(encoder)的目的就是为了对文本进行编码,把编码后的结果交给后续的程序使用,所以在这里我们可以使用embedding+gru的结构来使用,使用最后一个time step的输出(hidden_state)作为句子的编码结果注意:1.embedding 和 gru的参数,这里我们让gru中batch放前面2.输出结果的形状3.Lstm和gru中,每个time step的输入会进行计算,得到结果整个是一个和句子长度相关的循环,手动实现速度较慢 1...原创 2021-12-13 17:36:23 · 1465 阅读 · 0 评论 -
NLP实战5--seq2seq实现1(pytorch)
seq2seq原理1.seq2seq = encoder + decoderencoder负责对输入句子的理解,转化为context vector,decoder负责对理解后的句子的向量进行处理,解码,获得输出。在encoder的过程中得到的context vector作为decoder的输入,那么这样一个输入,怎么能够得到多个输出呢?就是将当前一步的输出,作为下一个单元的输入,然后得到结果outputs = []while True: output = decoder(o.原创 2021-12-10 22:05:05 · 1043 阅读 · 0 评论 -
NLP实战4--哈夫曼树、哈夫曼编码、fasttext模型架构、负采样
模型的封装为了在项目中更好的使用模型,需要对模型进行简单的封装,输入文本,返回结果这里我们把使用单个字作为特征和把词语作为特征的手段结合起来实现 这种方法也是后面常用的ensemble方法1.fastText的模型架构fasttext的架构非常简单:输入层 隐藏层 输出层输入层:是对文档embedding之后的向量,包含有n-gram特征隐藏层:是对输入数据的求和平均输出层:是文档对应标签如下图所示:这里再复习一下n-gram的理解1、词袋模型bag ..原创 2021-12-08 22:02:59 · 782 阅读 · 0 评论 -
NLP实战3--fasttext文本分类/数据准备
1.文本分类的目的文本分类的目的就是意图识别,如果当前我们的项目下,只有两种意图需要被识别出来,对应的就是二分类问题,如果我们的聊天机器人有多个功能,那么我们需要分类的类别就有多个,就是一个多分类问题。例如,如果我们希望我们的聊天机器人能够播报当前的时间,那么我们就需要准备关于询问时间的语料,同时其目标值就是一个新的类别。在训练之后,通过这个新的模型,判断出用户询问的是当前的时间这个类别,那么就返回当前的时间。同理,如果我们还希望聊天机器人能够播报未来一天的天气,那么这个机器人就还需要增添一个新的进原创 2021-12-05 22:29:22 · 1355 阅读 · 1 评论 -
NLP实战2--分词api的实现
1.准备词典和停用词1.1 准备词典1.2准备停用词原创 2021-12-05 18:12:55 · 988 阅读 · 0 评论 -
NLP实战1--词典、停用词、问答对的准备
语料的准备1.词典 2.停用词 3.问答对 4.相似问题1.分词词典最终词典的格式1.1 词典来源1.各种输入法的词典2.手动收集,根据要求收集词典1.2 词典处理jieba分词jieba.lcut(sentence) 对句子进行分词jieba.load_userdict(path) 读取路径jieba.posseg.cut() 返回词性在网上下载输入法词典,输入法词典都是特殊格式,需要使用特殊的工具才能够把它转化成文本格式工具名称:...原创 2021-12-02 22:17:02 · 476 阅读 · 0 评论 -
pytorch文本序列化的方法
在介绍word embedding的时候,我们说过,不会直接把文本转化为向量,而是先转化为数字,再把数字转化为向量,那么这个过程如何实现?这里我们可以考虑把文本中的每个词语和其对应的数字,使用字典保存,同时实现方法把句子通过字典映射为包含数字的列表。实现文本序列化之前,考虑一下几点:1.如何使用字典把词语和数字进行对应2.不同的词语出现的次数不尽相同,是否需要对高频或者低频词语进行过滤,以及总的词语数量是否需要进行限制3.得到词典之后,如何把句子转化为数字序列,如何把数字序列转化为句子原创 2021-11-28 20:13:31 · 1036 阅读 · 0 评论 -
LSTM api的介绍及使用示例(pytorch)
1.LSTMapi介绍LSTM和GRU都是由torch.nn提供torch.nn.LSTM(input_size, hidden_size, num_layers, batch_first, dropout, bidirectional)(1)input_size:输入数据的形状,即embedding_dim 就是embeddingsize 一个词语用多少维向量表示(2)hidden_size:隐藏层的数量,即每一层有多少个LSTM单元(3)num_layer:即RNN中LSTM单元的层原创 2021-11-30 20:44:17 · 2286 阅读 · 0 评论 -
记录详细的pytorch文本情感分类实战过程
word embedding APItorch.nn.Embedding(num_embeddings, embedding_dim)参数介绍:1.num_embeddings:词典的大小 (当前词典中不重复词的个数) 2.embedding_dim:embedding的维度(用多长的向量表示我们的词语)使用方法:embedding = nn.Embedding(vocab_size, 300) # 实例化 embedding维度为300维 ...原创 2021-11-27 22:15:58 · 1077 阅读 · 0 评论 -
pytorch的入门操作(2)
接上篇 轴交换只能用transpose和permute 千万不能用view()(8)取值 tensor[1, 3]获取tensor中第一行第三列的值 如果要取这个18 三维t4[1, 2, 1] 第二块 第三行第二列 如果要取整个第一块 t4[0] 或者t4[0, :, :](9)赋值 tensor[...原创 2021-11-27 16:34:04 · 2579 阅读 · 0 评论 -
pytorch的入门操作(1)
1.Tensora:各种数值数据都可已称为张量b:常数:scaler:0阶张量c:向量:vector:1阶张量d:矩阵:matrix:2阶张量e:3阶张量2.张量的创建方式1.使用python中的列表或者序列来创建tensortorch.tensor([[1., -1.], [1., -1.]])2.使用numpy中的数组创建tensortorch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))3.使用torch的api创建t..原创 2021-11-26 22:40:15 · 872 阅读 · 0 评论