- 博客(182)
- 资源 (4)
- 收藏
- 关注
原创 pandas对文本数据进行长度统计
在NLP的各项任务中,都需要对语料的长度有一个概括性的了解,例如平均长度、最大长度,大多数语料的长度范围等,以此来确定输入模型时的最大文本长度。pandas库有一种写法可以快速的统计文本语料的长度情况。
2023-02-15 13:15:51 984 1
原创 剑指 Offer 48. 最长不含重复字符的子字符串
题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pw...
2022-03-17 17:18:35 307
原创 剑指 Offer 36. 二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操作。当转化完成以
2022-03-15 21:44:19 357
原创 剑指 Offer 31. 栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(
2022-03-13 17:12:08 184
原创 剑指 Offer 26. 树的子结构
题目描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \1 2给定的树 B: 4 /1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2...
2022-03-13 15:02:57 228
原创 剑指 Offer 22. 链表中倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.本题很容易想到的一个做法就是遍历两边链表,第一遍记录链表长度len,然后再第二次遍历中数到第len-k个结点
2022-03-13 14:28:03 837
原创 剑指 Offer 18. 删除链表的节点
题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,
2022-03-13 11:39:29 139
原创 剑指 Offer 13. 机器人的运动范围
题目描述地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2
2022-03-12 21:13:00 196
原创 剑指 Offer 07. 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 <= 节点个数
2022-03-12 16:09:40 586
原创 剑指 Offer 04. 二维数组中的查找
题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 t
2022-03-12 15:33:41 308
原创 剑指 Offer 03. 数组中重复的数字
题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000本题最简单的办法就是开一个map,遍历数组中每个数字,如果遍历到的数字已经在map里了就返回,否则添加到map中...
2022-03-12 15:00:03 278
原创 剑指 Offer 42. 连续子数组的最大和
题目描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <=arr.length <= 10^5 -100 <= arr[i] <= 100本题使用动态规划的思想,定义 f(i) 为以第 i 个数字结尾的子数...
2022-02-27 20:53:03 337
原创 面试题32 - I. 从上到下打印二叉树
题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]提示:节点总数 <= 1000 本题是二叉树的层序遍历,使用了队列这一数据结构,主要思路就是在遍历每一层的结点的时候,先将它自身输出,然后判断是否存在左右子节点,如果存在的话先后存入队列中。...
2022-02-23 21:17:24 630
原创 剑指 Offer 35. 复杂链表的复制
题目描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]].
2022-01-10 11:28:40 127
原创 剑指 Offer 06. 从尾到头打印链表
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000 链表的逆序输出,但是不用对链表本身进行倒置,所以就简单地读出所有元素然后逆序返回即可,也就是栈的思想,也可以用Python中列表的倒序写法,代码如下:class Solution(object): def reversePrint(self, head...
2021-12-14 10:47:44 826
原创 剑指 Offer 30. 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); ...
2021-12-13 17:15:30 938
原创 剑指 Offer 09. 用两个栈实现队列
题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","delet...
2021-12-13 10:28:12 259
原创 BERT实现关系分类抽取(pytorch)
前两天在GitHub上看到这样一个关系分类抽取模型(地址:GitHub),这个模型的思路大致是将关系抽取转化成对两个实体的关系进行分类,在这里对模型文件进行一下解释记录。 在这个项目中模型的结构定义在relation_extraction/model.py文件中...
2021-12-09 11:04:46 4850 4
原创 pytorch训练BERT模型实现文本分类的详细过程
最近项目组让我做一个文本分类的小任务,我一直习惯了做NLP的各种任务都起手用BERT看效果,这次数据质量较高,虽然label有点多,但F1还是达到了0.9以上。之前对BERT的预训练过程做过详细解释,文章中的代码就是一段简洁的预训练Demo代码,对于了解BERT的原理有很大帮助。结合原理和代码来理解bert模型https://blog.csdn.net/Q_M_X_D_D_/article/details/110405114 然后对BERT+CRF的...
2021-10-20 11:04:49 9620 10
原创 pytorch中的cross_entropy函数
cross_entropy函数是pytorch中计算交叉熵的函数。输入主要包括两部分,一个是维度为(batch_size,class)的向量,class表示分类的数量,这个就表示模型预测的分类结果;另一个是维度为(batch_size)的一维矩阵,表示每个样本的真实分类。输出的就是交叉熵的值。交叉熵 交叉熵是常见的损失函数,公式如下: 其中y是真实分类,是通过softmax处理后的模型预测分类。在上面说了函数的输入分别是(batch_size,cl...
2021-10-14 11:11:10 11353 2
原创 机器学习中的交叉熵
信息量 熵在信息学中的概念就是一个系统“内在的混乱程度”,也可以理解为系统中所含的信息量大小。比如说一句话:“杨倩在东京奥运会中夺得了金牌”,如果在东京奥运会之前说这句话,那么这句话包含的信息量就很大,因为在赛前杨倩能不能拿金牌是一件非常不确定的事;但是当奥运会结束后,这句话包含的信息量就非常小了,因为杨倩已经确定拿了金牌。所以信息量也可以定义为:事件又不确定变为确定的困难程度。假设将信息量定义为:f(x) := 信息量...
2021-10-13 11:22:32 833
原创 NLP中的Layer Normalization
最近在学习pytorch的模型训练过程,注意到了module模块中train和eval两个函数。train函数用在模型训练之前,表示进入训练模式,如果模型中有BN层和Dropout层,则启动;eval用在模型测试和验证时,表示评估模式,不启动模型中的BN层和Dropout层。这两个函数还是比较好理解的,Dropout层我们也比较熟悉,但在NLP领域中BN(Batch Normalization)层不是很常见,通常我们使用layer nomalization,所以就学习了一下。Batch ...
2021-10-02 21:24:49 1423
原创 BERT+CRF实现中文命名实体识别(TensorFlow)
本篇解读了基于BERT+CRF做中文NER这篇文章中的代码,在该篇作者的GitHub上可以下载源码:源代码。这段代码对BERT模型的实现较为简洁,删掉了谷歌源代码中我们可能用不到的部分,保留了核心部分。对于那些想要快速上手BERT的同学是非常好的学习机会,在看懂这个之后再去学习谷歌的源代码会更加轻松。BERT-CRF模型之前有写过BERT模型和CRF模型的详解,建议往下看之前一定要了解这两个模型的原理:结合原理和代码来理解bert模型、结合原理与代码理解BiLSTM-CRF模型(pytorch)。B
2021-06-26 14:37:05 15773 17
原创 结合原理与代码理解BiLSTM-CRF模型(pytorch)
前言本文主要记录学习使用BiLSTM-CRF模型来完成命名实体识别的过程中,对原理和代码的理解。下面会在对官方示例代码(tutorial)的详细解析中加入对模型原理的解释。在学习原理的过程中主要参考了这两篇博客:命名实体识别(NER):BiLSTM-CRF原理介绍+Pytorch_Tutorial代码解析,其中有不少图能帮助我们更好地理解模型;Bi-LSTM-CRF算法详解-1,这篇里的公式推导比较简单易懂。下面的解析会借鉴这两篇博客中的内容,建议在往下看前先读一下这两篇了解原理。在BiLSTM-CRF
2020-12-08 11:26:17 5052 2
原创 BERT模型迁移到GPU上的调试经历(pytorch)
写在前面前几天阅读了一段bert模型预训练的代码,并写了解析(结合原理和代码来理解bert模型),但是这段代码中的语料是手动添加的两个人的一段对话,不足以显示模型的效果。于是我想用实验室的中医语料数据来训练该模型,由于数据增多,模型也更庞大,于是想把模型及数据迁移到GPU上,过程中遇到了不少的bug,但debug时也了解了一些pytorch模型的运行细节,在此做个记录。pytorch如何使用GPUpytorch调用GPU也很简单,首先在程序最开始指定要使用的设备名称,例如这样:device
2020-12-03 19:33:18 3762 1
原创 CRF用于命名实体识别(快速上手实现)
写在前面最近在看命名实体识别相关的模型,实验室正好有中医典籍文本的命名实体标注数据集,拿来练练构建一个简单的CRF模型,顺便记录下来,代码可以作为一个参考,手中有标注数据集就可以使用这段代码来训练自己的CRF模型。本次实验用到了sklearn_crfsuite库,这是一个轻量级的CRF库,不仅提供了训练预测方法,还提供了评估方法。数据集的格式大致如下图所示:每行包含一个字和对应的标注,用空行来分隔开每句话。采用了四个符号(B、I、O、S),分别表示实体的起始字、实体的剩余部分、非实体、单字实体。
2020-12-02 22:16:07 3791 4
原创 结合原理和代码来理解bert模型
写在前面本文主要记录在学习https://blog.csdn.net/qq_37236745/article/details/108845470这篇博客中的bert模型代码时,我所理解的和学到的东西。本文会结合bert模型原理对这篇博客中的代码进行逐行逐句细致的解析,一些实在看不懂的地方会略过,一些错误的地方希望大家指正。源代码首先贴上博客中的源代码,其中有我添加的补充注释,如果有兴趣也可以继续往下看更加详细的解析。这段代码实现了bert模型的预训练任务,语料是两个人的几句英文对话,方便把注意力
2020-12-02 20:54:24 4545 2
原创 知识图谱入门知识
概念知识图谱是人工智能技术发展的必然趋势,人工智能要想从感知智能走向认知智能,就需要构建一个满足自然语言处理和理解需求的全方位、高精度的知识库。知识图谱本质上是一种大规模的语义网络,由实体、属性、关系组成。“实体”是知识图谱中的基本元素,可以是世间万物;“属性”是对实体特征的一种描述;“关系”是两个实体间存在的关联。在知识图谱中,表示实体间关系的基本单位为(实体,关系,实体)三元组,而实体的属性由“属性—值”对来表示,如果将实体与实体的属性也看做是一个关系的话,可以将“属性—值”重构为(实体,属性,
2020-11-22 16:44:30 1547
原创 K-Means算法简介
问题描述假设有下面这样一个数据集,想要对其中的数据进行分类,分为两个聚类。例如算法流程K-Means算法是个迭代算法,其迭代过程分为两步:聚类分配和中心移动。首先随机生成两个点,即聚类中心,如下图所示。然后开始算法的迭代过程:(1)首先进行聚类分配,遍历所有样本,按照样本与两个聚类中心的距离大小来将每个样本分配给两个聚类中心。即把样本分配到离他最近的那个聚类中心。(2)然后进行聚类中心的移动。计算出同类所有数据的均值,然后将该类数据的聚类中心移动到那个均值上。.
2020-11-15 19:52:39 2894
原创 LSTM模型预测时间序列(快速上手)
写在前面 LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要看懂LSTM模型的原理是非常困难的,但有些时候我们不得不快速上手搭建一个LSTM模型来完成预测任务。下面我将对一个真实的时间序列数据集进行LSTM模型的搭建,不加入很多复杂的功能,快速的完成数据预测功能。 问题大概如下:某煤矿有一个监测井,我们每20分钟获...
2020-10-29 20:52:49 163115 190
原创 神经网络的简单实现
同或逻辑运算 在吴恩达的机器学习教程中,讲解了同或逻辑运算的神经网络实现原理,我将其用python语言实现一下。异或即相同取1,不同取0,运算法则如下:x1 x2 x1 XNOR x2 0 0 1 1 0 0 0 1 0 1 1 1 同或运算的实现过程包括三个部分:x1 AND x2、(NOT x1) AND (NOT x2)、x1 OR x2...
2020-10-28 14:06:36 893
原创 神经网络基础知识
背景 假设有这样一个监督学习训练集,如下图所示: 如果使用逻辑回归的方法,我们的预测函数可能包含很多的非线性项,在只有两个特征的情况下,逻辑回归所训练出的预测函数也许可以表现得很好。 如果问题中的特征项非常多的时候,预测函数将会变得非常复杂。假设有100个特征,而且函数中只包含二次项,那样的话预测函数中将会出现大约5000个二次项。不仅如此,如果算上三次项、四次项等,预测函数的特征空间将急剧膨胀。而且当参数很多时,也可能出现过拟合的现象。 ...
2020-10-25 10:15:52 569
原创 线性回归的简单python实现
单变量简单线性回归 以波士顿房价问题为例,数据集中共有三个输入变量,一个输出变量,在此我们只是用其中一个输入变量来进行拟合。 1、首先读取数据文件,python中的pandas库可以处理多种格式的数据文件,以csv文件为例,将数据集数据读入内存中:# 读取数据文件data=pd.read_csv("housing.csv")examdf=DataFrame(data) 2、将整个数据集划分为训练集和测试集,在这里用到了sklearn库中的tra...
2020-10-21 20:52:49 2042
原创 分类问题之logistic回归算法
logistic回归算法 假设今天医院有一位病人要诊断他的肿瘤是良性的还是恶性的,诊断只可能有两个结果,良性的用0表示,恶性的用1表示,这就是一个典型的分类问题,而且是简单的二分类问题。 如果分类的结果不止有两个,例如通过前段时间的天气数据来预测明天的天气情况,可能有下雨、下雪、晴朗、多云等多种结果,这种就是多分类问题。 在分类问题中,我们想要得到离散化的输出结果,而不是线性回归所输出的那种连续函数,所以线性回归对于分类问题并不适用。logistic回归...
2020-10-20 16:30:34 553
原创 Batch梯度下降基本知识
梯度下降的定义 当回归问题中特征较多时,预测函数的参数也会跟着变多,此时代价函数的最小化将会非常困难。而梯度下降算法可以帮助我们在参数很多的情况下找到最优的参数取值。 假设我们站在一座小山上,我们的任务就是一直向下走直到处在最低点。首先环顾四周,找一个当下最陡峭的方向,以固定的步长向该方向走一步,再重复此过程,最终会走到一个区域的最低点,但不一定是整座山的最低点。值得注意的是,当我们一开始站的位置不同时,最后走到的位置也可能不同,即会产生不同的局部最优解。梯度下降算法的...
2020-10-19 17:05:15 1315
原创 线性回归基础知识
线性回归定义 线性回归属于机器学习中监督学习的范畴。其训练集中的数据一般拥有多个输入变量(也称特征)和一个输出变量,我们对训练集中的数据进行拟合,得到一条近似曲线,并输出为确定的连续函数,即预测函数,是一个从输入变量x到输出变量y的关系函数。然后就可以使用该预测函数对输入的数据进行结果预测。 如上图所示,红叉表示训练集中数据的坐标,蓝色线即为拟合的预期函数曲线。预测函数及代价函数 假设回归模型中的数据只有一个输入变量,即只有一个特征,以房屋估价为...
2020-10-19 16:37:20 886
原创 考研复试常见问题(操作系统)
操作系统的作用有哪些? 1、操作系统是计算机资源的管理者 处理机管理 内存管理 文件管理 设备管理 2、操作系统提供了使用计算机硬件系统的接口 命令接口 图形接口 程序接口 3、操作系统扩充了计算机 使得计算机不仅有硬件,还有软件的支持,操作更加方便,功能更加强大内核是什么? 内核是计算机底层软件,是计算机...
2020-05-14 16:10:46 513
原创 考研复试常见问题(C/C++、Java)
C语言与C++的主要区别: C语言是面向过程编程的典范,C语言以过程为中心,用算法进行驱动。C++是继承C语言而来的,不仅包含面向过程编程,也包含了面向对象编程,支持类、封装、继承、多态等特性。指针与变量的自增自减有何区别: 指针的自增自减改变的是所指向的内存地址,而变量的自增自减改变的是变量的值宏定义是什么: 宏定义是C++的预处理指令之一,它主要完成一个替换操作,在程序中遇到该符号时,自动替换其值,不占内存和编译时间。引用与值传递的区别:...
2020-05-12 22:36:25 1972
原创 Python爬取京东商品评论(三)
本篇用作前两篇的首尾,并解决最后一个问题。 第一篇中我介绍了Python爬虫的基本语法,介绍了如何分析页面、如何分析json文件,并将爬取评论的基本功能实现了,是最初的版本。链接:Python爬取京东商品评论(一) 第二篇中我对第一篇的程序进行了大量的修改,改进了数据量、自动化等问题,对程序代码进行了整理,程序功能已经比较完整且稳定。链接:Python爬取京东商品评论(二) 本篇解决第二篇中的一个遗留问题,即自动获取不同配色的手机的商品代...
2020-05-09 13:09:35 3123 4
社交平台上经济类话题的文章热度信息,数据是真实的,但不是真实日期
2023-03-16
BERT实现文本分类.rar
2021-10-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人