自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

real_ilin的博客

滴水穿石

  • 博客(111)
  • 收藏
  • 关注

原创 学习曲线判断模型状态:欠拟合 or 过拟合

文章目录模型的方差与偏差Validation CurveLearning Curve模型的方差与偏差每种模型都有优点和缺点,一个模型的泛化误差可以分解为偏差(bias)、方差(variance)和噪音(noise)。偏差是不同训练集的平均误差,方差是对不同训练集的敏感程度,而噪音是数据本身的属性。为了使得方差和偏差最小(也就是泛化能力最大),常用的方法是选择算法(线性或非线性)及算法的超参数,...

2019-06-14 00:46:24 5773

原创 Homebrew update卡住解决方法

brew update卡住的解决方法:将官方源替换为国内镜像Homebrew源代码仓库cd “$(brew --repo)”git remote set-url origin https://mirrors.ustc.edu.cn/brew.gitHomebrew Bottlesecho ‘export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles’ >> ~/.zshrc source ~/.

2021-09-26 14:57:30 933

原创 C++中的指针与引用

C++中的指针非常好理解,只要记住以下三条就行:指针变量也是一种变量类型,就像整形变量int一样;指针就是地址,一说到指针的值就是地址,赋值的时候也要把变量的地址赋值给指针变量;可以通过指针访问变量举个例子:#include <iostream>using namespace std;int main(){ int r = 5; int *p = &r; cout << "r:" << r << endl;

2021-05-17 01:03:37 341

原创 分类的损失函数为什么用交叉熵而不用MSE?

在NLP的应用中,分类算法是最常用的算法,而分类算法最常用的损失函数是交叉熵。为什么我们会用交叉熵作为分类算法的标配呢?在模型的训练过程中,最小化交叉熵意味着模型学到了什么?为什么不用均方误差(MSE)作为分类算法的损失函数呢?如果MSE不好,那其他的损失函数,比如合页损失(Hing Loss)呢?交叉熵最小话到底在学什么?博文中介绍了信息熵、KL散度、交叉熵,从信息论的角度解释了为什么可以用交叉熵来作为分类算法的损失函数。在机器学习中,实际上有三个概率分布:真实数据的分布、训练数据的分布、模型学习到

2021-04-10 23:38:03 2191

原创 如何使用pytorch进行多GPU训练

pytorch使用多GPU训练有两种方式:DataParallel和ModelParallel,这里主要介绍DataParallel机制: DataParallel的机制是把每个minibatch分为GPU个数份儿,然后把原始模型复制到多个GPU上,在每个GPU上进行正向传播,在反向传播的时候,把梯度相加(而不是求平均)更新到原始模型上。两种指定GUP id的方式:通过环境变量:os.environ["CUDA_VISIBLE_DEVICES"]="1,2,3,4",好处是只对指定的ids的GPU.

2021-03-16 13:12:58 4480 1

原创 pytorch中的乘法

pytorch中的乘法pytorch中的乘法一共有四种,有*乘,torch.mul,torch.mm,torch.matmul。其中*乘和torch.mul都是element-wise的乘法,也就对应元素相乘。而后两种是数学上的矩阵乘法。pytorch的广播机制点积是broadcast的。broadcast是torch的一个概念,简单理解就是在一定的规则下允许高维Tensor和低维Tensor之间的运算。broadcast的概念稍显复杂,在此不做展开,可以参考官方文档关于broadcast的介

2021-01-09 22:44:59 5057

原创 数据结构:树

二叉树1. 二叉树的基本概念层数、高度、叶子结点、非叶子结点下图中:二叉树一共有三层,第一层上的结点为1,第二层的结点有2个,分别为2、3,第三层的结点有2个:4和5。树的深度为最大层数,最大层数是3,所以树深为3.二叉查找树(BST):二叉查找树的规则是,对于树中的任意一个结点,都满足,它的左孩子上的所有结点的值都比该结点小,而它的右孩子上的所有结点的值都比该结点大。与该结点值相同的的结点可以放在左孩子上,也可以放在右孩子上,这个可以根据实际情况灵活实现。2. 二叉树的性质二叉树第iii层

2021-01-03 20:03:17 105

原创 链表翻转

曾经在面试时候被问到单链表的翻转,今天又重新总结了一下。对于链表的遍历有两种,一种是线性的,比如for或while,另一种是非线性的,也就是递归。对于翻转单链表的线性遍历有两种思路,一种是创建一个新链表,头结点插入法,另一种是就地反转法。前者理解相对容易一些,先说第一种方法,再说第二种。单链表翻转在重新说一下题目的定义:定义一个链表的单结点:class ListNode: def __init__(self, x): self.value = x self.next = None创

2021-01-02 14:33:50 195 1

原创 对话系统简介

https://medium.com/@nisar.shah1/introduction-to-dialogue-systems-part-1-475a06ab78ad

2020-12-26 09:11:27 526

原创 池化层

import torch.nn.functionals as F# 卷积核为1x3, 步长是2的池化层nn.MaxPool1d(3, stride=2)# 卷积核为3x3,步长为2的池化层nn.MaxPool2d(3, stride=2)如果超出边界则跳到下一个batch中。pytorch 中nn.MaxPool1d() 和nn.MaxPool2d()对比...

2020-10-23 01:28:26 373

原创 python 跳出两层循环

if __name__ == '__main__': for i in range(5): print(f'i:{i}') for j in range(6, 10): print(f'->j:{j}') if j > 7: break else: continue break在内层中如果不是break,则外层循环走e

2020-10-17 16:30:34 11897 4

原创 史上最全命名实体识别(NER)教程

在NLP中,命名实体识别(Named Entity Recognization,NER)是一个非常重要的任务,比如信息抽取中,NER是第一步,首先识别出文本中的命名实体。在问答系统中,尤其是任务导向的问答或KBQA的第一步是就是命名实体识别,识别出实体在做下一步的槽填充。命名实体是什么?NER主流的算法是什么?NER的metric是怎么定义的?NER任务中的语料有哪些?NER任务语料NER的baseline模型:bilstm-cr算法原理是什么?序列标注之Bi-LSTM-CRF当使用基于B

2020-10-01 21:07:28 4409 1

原创 中文开放知识图谱

根据问答数据的性质可以分为开放域和特定知识领域(比如保险类、金融类、公司内部产品类)等。开放域上的主要是百科类的数据。中文开放知识图谱联盟构建了多个中文开放域的知识图谱。链接的中文百科知识图谱是OpenKG正在从事的一项工作。目的是促进百科类、通用域的知识图谱的开放与互联。目前已经初步建立了国内几个主要中文开放百科类知识图谱的链接,这包括Zhishi.me(狗尾草科技、东南大学)、CN-DBPedia(复旦大学)、XLore(清华大学)、Belief-Engine(中科院自动化所)、PKUPie(北京大学

2020-09-11 17:14:59 1479

原创 Adam与AdamW

1. Adam optimizeradam优化器是经常使用到的模型训练时的优化器,但是在bert的训练中不起作用,具体表现是,模型的f1上不来。2. AdamWtransformers 库实现了基于权重衰减的优化器,AdamW,这个优化器初始化时有6个参数,第一个是params,可以是torch的Parameter,也可以是一个grouped参数。betas是Adam的beta参数,b1和b2。eps也是Adam为了数值稳定的参数。correct_bias,如果应用到tf的模型上时需要设置为False

2020-09-06 22:46:42 19979 1

原创 Attention

随着NLP技术的发展,word embedding,CNN,RNN,LSTM,GRU。RNN解决了时间序列问题,但是随着文本长度的增加,用最后一个时间步来表示整个文本,会有表达能力不足的现象。这个时候出现了长短期记忆算法,参考文献https://www.infoq.cn/article/lteUOi30R4uEyy740Ht2...

2020-08-03 23:11:48 109

原创 TextCNN

使用卷积进行文本分类:对句子进行Embedding,并进行padding,使得句子长度一致。网络架构第一层:Embedding第一层为输入层。输入层是一个 n∗kn *kn∗k 的矩阵,其中nnn为一个句子中的单词数,kkk是每个词对应的词向量的维度。也就是说,输入层的每一行就是一个单词所对应的kkk维的词向量。另外,这里为了使向量长度一致对原句子进行了padding操作。我们这里使用 xix_ixi​表示句子中第iii 个单词的kkk维词嵌入。每个词向量可以是预先在其他语料库中训练好的,也可

2020-08-01 00:32:29 589

原创 rasa的使用

rasa的使用https://www.jianshu.com/p/ad11f5815447rasa使用指南01https://terrifyzhao.github.io/2018/09/17/Rasa%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%9701.htmlrasa使用指南02https://terrifyzhao.github.io/2019/02/26/Rasa%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%9702.htmlaction有三种

2020-07-06 23:58:01 1879 1

原创 leetcode——integer break(343)

# -*- encoding: utf-8 -*-"""Given a positive integer n, break it into the sum ofat least two positive integers and maximize the product of those integers.Return the maximum product you can get.Example 1:Input: 2Output: 1Explanation: 2 = 1 + 1, 1

2020-07-01 00:38:48 106

原创 leetcode统计记录

分类题号题目难度题目大意解决思路遍数动态规划70Climbing Stairseasy递归树/动态规划1链表83Remove Duplicates from Sorted Listeasy一次遍历 current指针1链表21Merge tow sorted linked listeasy四个指针1数组27Remove elementseasy原位删除数组中指定的元素,并返回新数组的长度双指针1数组15...

2020-06-30 10:19:37 374

原创 智能问答平台调研

目前落地的对话机器人公司产品技术百度UnitKBQA+FAQgoogleDialogue flow网易七鱼阿里小蜜KBQA1. 百度的Unit智能对话定制与服务平台UNIT(Understanding and Interaction Technology),主页:https://ai.baidu.com/unit/home一个简单的对话技能从无到有需要以下四个步骤:创建技能配置意图及词槽配置训练数据训练模型Unit是一个对外的

2020-06-28 10:26:11 538

原创 neo4j的使用

文章目录neo4j安装cypher基本语法neo4j安装最快的方式是使用docker安装,官方教程:https://neo4j.com/developer/docker-run-neo4j/docker run \ --name testneo4j \ -p7474:7474 -p7687:7687 \ -d \ -v $HOME/neo4j/data:/data \ -v $HOME/neo4j/logs:/logs \ -v $HOME/neo4j/

2020-06-27 19:00:28 487

原创 基于知识图谱的问答

各个大厂的问答产品公司产品技术百度UnitgoogleDialogue flow网易七鱼阿里小蜜结构化处理的阿里小蜜:https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247493403&idx=1&sn=9cd4a6d15687c52c4a02694538d6bca5&chksm=fbd75577cca0dc6196e23e6aa676ef8ee87

2020-06-22 23:56:07 292

原创 pickle中的坑

https://stackoverflow.com/questions/27732354/unable-to-load-files-using-pickle-and-multiple-modules

2020-06-19 23:26:32 288

原创 git不同项目设置邮箱

git 设置全局姓名和邮箱git config --global user.name xxxgit conifg --global user.email [email protected]不同项目设置名字和邮箱git config user.name xxxgit config user.email [email protected]

2020-06-19 23:06:25 606

原创 最通俗易懂的Bert教程

文章目录一. transformer encoder0. Tansformer 整体感受1. positional encodingpositional \ encodingpositional encoding, 即**位置嵌入**(或位置编码);2. self attention mechanismself \ attention \ mechanismself attention mechanism, **自注意力机制**3. 残差连接和La

2020-05-30 00:45:13 2168

原创 pytorch Dataset与DataLoader

在模型训练或预测时,需要加载数据集,对数据集进行预处理,提取特征,并分批读取,在minibatch内对数据进行Padding。训练时用到的数据处理和预测时用到的数据的处理可以在同一个Dataset中,这样可以复用一些数据处理的函数。from torch.utils.data import Datasetclass MyDataset(Dataset): def __init__(self,is_train): pass def __getitem__(self, idx): pass d

2020-05-29 17:46:13 221 2

原创 在每个批内pad一个tensor

当一个Dataset处理完数据后,需要加载时,希望在一个mini batch内pad数据,把数据pad成这个批内最大的长度,减小不必要的显存消耗。torch给提供了这样的函数,在torch.nn.utils.rnn.pad_sequence函数。# 函数返回一个T x B x * 或 B x T x *的一个tensor,当batch_first=True时,B在前面。# 需要pad的tensor的维度放在第一个维度上。"""This function returns a Tensor of si

2020-05-27 19:24:34 272

原创 pytorch 分割一个tensor并求平均

pytorch的torch.add()及torch.split()函数import torch# outputs是一个[batch, seq, 40]维的tensor,把outputs分割成两个[batch, seq, 20]的tensor,并每个元素求平均值add = torch.add(*torch.split(outputs, 20, dim=2)) / 2

2020-05-27 10:05:17 4020 2

原创 pytorch LSTM的dropout参数

pytorch的LSTM及RNN的dropout不会对每个time step进行dropout,只对一层的输出设置了dropout。在新版本的pytorch中,对于1层的lstm,dropout参数无效了,就说明对每个时间步是不dropout的。源码中,也是最后一层的输出时才加上的dropout.for i in range(num_layers): all_output = [] for j, inner in enumerate(inners): l = i * num_direct

2020-05-26 16:11:05 11390 4

原创 pytorch的Embedding层

class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)num_embeddings (int) - 嵌入字典的大小embedding_dim (int) - 每个嵌入向量的大小padding_idx (int, optional) - 如果提供的话,输出遇到此下标时用零填充.

2020-05-25 16:19:56 2187

转载 模型训练过程中loss不减少

https://blog.csdn.net/zongza/article/details/89185852

2020-05-22 11:15:02 890

原创 文本分类

常用的方法传统机器学习方法,对文本做tf-idf处理svctree-based:RandomForest神经网络方法FasttextTextRNNTextCNN(字)TextCNN(词)Bert

2020-05-21 10:00:44 344

原创 leetcode——动态规划——70

最经典的爬台阶问题递归树的思路:红色的有重复计算,所以用空间换时间的思想来优化递归。# -*- encoding: utf-8 -*-class Solution: """对于递归树来说,使用纯递归的方法,O(n)=2^n,有重复计算的情况""" def stairs_climbing(self, n: int) -> int: if n == 2: return 2 if n == 1: return 1 return s

2020-05-13 00:14:11 107

原创 事件抽取

文章目录一、事件抽取的定义二、ACE2005数据集事件类型一、事件抽取的定义命名实体识别、关系抽取、事件抽取是NLP中信息抽取的主要任务。事件抽取是把含有事件信息的非结构化文本以结构化的形式呈现出来,在自动文摘、自动问答、信息检索等领域有着广泛的应用。近些年来 ,事件抽取一直吸引着许多研究机构和研究者的注意力。MUC (Message Understanding Conference) 会议、ACE ( Automatic Content Extraction) 会议是典型的含有事件抽取任务的评测会议

2020-05-11 23:41:45 9764 2

原创 深入理解交叉熵

在分类问题上,包括二分类和多分类,我们使用交叉熵作为损失函数,那什么是交叉熵?为什么选用交叉熵作为分类问题的损失函数?交叉熵又有什么优点和缺点?在pytorch中如何使用交叉熵损失函数的?参考:https://zhuanlan.zhihu.com/p/35709485https://zhuanlan.zhihu.com/p/61944055https://pytorch.org/docs/...

2020-05-08 13:13:51 244

原创 多分类metric的macro-averge与micro-average

macro-average是每个类有相同的权重,precision、recall或f1_score,先求和再除以类别的个数。跟样本的个数没有关系。micro-average:每个样本有相同的权重。macro与micro的区别:如果各个类别的样本个数相差不的话,macro-average与micro-average相差不大如果不同类型样本个数不均衡时,比如有一个类型的样本数据特别多,...

2020-05-07 23:18:38 1850 1

原创 Albert_zh转化为pytorch版本

背景由于google提供bert_base_zh的参数太多,模型大太,大约400M,无论是使用bert进行fine-tuning或者是对bert进行再训练的训练成本会变大。所以就对bert进行了一些优化。主要从以下几个点对bert进行了优化:词嵌入向量的因式分解O(V∗H)−>O(V∗E+E∗H)O(V*H)->O(V*E +E*H)O(V∗H)−>O(V∗E+E∗H)...

2020-05-06 23:30:47 1567 5

原创 pytorch——随机数生成

在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如:torch.rand()torch.randn()torch.normal()torch.linespace()在很长一段时间里我都没有区分这些方法生成的随机数究竟有什么不同,由此在做实验的时候经常会引起一些莫名其妙的麻烦。所以在此做一个总结,以供大家阅读区分,不要重蹈我的覆辙。均匀分布torch.rand(...

2020-05-02 13:12:12 466

原创 pytorch——unsqueeze与expand

torch中的unsqueeze()函数来增加一个维度,expand()函数以行或列来广播。# -*- encoding: utf-8 -*-import torch# 需求是对一个batch_size=2, seq_len=3的两个序列进行mask的扩展,# 扩展为[batch_size, seq_len, 4, seq_len]tokens = torch.tensor([[1,2...

2020-05-02 11:39:37 2808

原创 pytorch扩展tensor的一个维度或多个维度

在使用神经网络的过程中,经常会用到把一个tensor扩展一个或多个维度的情况,然后把扩展后的维度用来广播。扩展一个维度的情况,使用unsqueeze()函数,缩小一个维度使用squeeze()函数。参数是dim,是一个int。也就是说只能扩展或缩小一个维度。t = torch.tensor([[1,2,3]])t = t.unsqueeze(0)#t.shape#[1, 1, 2]...

2020-05-01 10:10:56 11797

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除