NLP校招总复习
文章平均质量分 88
针对自然语言处理(NLP)互联网企业校招常见问题的总复习
木尧大兄弟
自然语言处理/大语言模型/深度学习/机器学习/AIGC/编曲混音
展开
-
【Python刷题Leetcode】高级数据结构
一、Trie树(208、211)字典树 搜索输入前缀预测后面内容就是这个数据结构 用路径存字符,而不是节点二、并查集【方法1】深度优先搜索(跟岛屿数量的区别:这里visit数组是一维的)class Solution: def findCircleNum(self, M: List[List[int]]) -> int: # 方法1 图的DFS if not M: return 0 #原创 2020-08-07 21:33:01 · 275 阅读 · 0 评论 -
【Python刷题Leetcode】动态规划(爬楼梯/打家劫舍/最大字段和/找零钱/三角形/最长上升子序列/最小路径和/地牢游戏)
class Solution: # 递归法 超时了 def climbStairs1(self, n: int) -> int: if n==1 or n==2: return n # 第1次爬1阶 共climbStairs1(n-1);第1次爬2阶 共climbStairs1(n-2); return self.climbStairs1(n-1)+self.climbStairs1(n-2) ...原创 2020-08-04 23:37:23 · 278 阅读 · 0 评论 -
【Python刷题Leetcode】搜索(DFS+BFS)
深度优先(递归) or 宽度优先(队列)class Solution: def numIslands(self, grid: List[List[str]]) -> int: if not grid: return 0 # 初始化mark标记数组 mark = [] for row in grid: mark.append([0 for _ in grid[0]])...原创 2020-08-02 18:18:58 · 485 阅读 · 0 评论 -
【Python刷题Leetcode】哈希表与字符串(最长回文串、词语模式、同字符词、重复的DNA序列、滑动窗口和子串)
class Solution: def longestPalindrome(self, s: str) -> int: counter = {} for each in s: if each not in counter: counter[each]=1 else: counter[each]+=1 res = ...原创 2020-07-23 21:05:15 · 177 阅读 · 0 评论 -
【Python刷题Leetcode】二叉树和图(路径之和、最近公共祖先、二叉树转链表、课程安排)
【二叉树的深度优先遍历(深搜)】class Solution: def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]: paths = [] # 存储结果 cur_path = [] # 栈 暂存路径 cur_sum = 0 # 暂存总和 def pre_order(node, cur_sum): .原创 2020-07-17 15:23:11 · 189 阅读 · 0 评论 -
【Python刷题Leetcode】递归/回溯/分治(求子集、组合求和、括号生成、逆序数)
非递归解法:class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: n = len(nums) output = [[]] for num in nums: output += [curr + [num] for curr in output] print(output) ...原创 2020-07-15 23:36:01 · 859 阅读 · 0 评论 -
【Python刷题Leetcode】贪心算法(分糖果、摇摆序列、移除K个数、跳跃游戏、射击气球、加油次数)
排序,遍历糖果(糖果id++),若满足当前孩子,孩子id++。最终孩子id就是满足的孩子数。class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: # 每个孩子需求/饼干大小从小到大排序 child = sorted(g) food = sorted(s) child_idx = 0 food_i..原创 2020-07-14 10:51:54 · 722 阅读 · 0 评论 -
【Python刷题Leetcode】栈/队列/堆(栈队相互实现、min函数的栈、合法出栈序列、计算器、第k大元素、找中位数)
from collections import dequeclass MyStack: def __init__(self): """ Initialize your data structure here. """ self.q = deque() # 队列实现栈:队列允许右进左出:q.append() q.popleft() len(q) # 需要改为栈的 左进左出 def p...原创 2020-07-12 22:21:57 · 386 阅读 · 0 评论 -
【Python刷题Leetcode】链表(反转、找交点、快慢指针找环、分割列表、深拷贝、合并链表)
# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 非递归方法 def reverseList1(self, head: ListNode) -> ListNode: new_head = None # 新链表头节点初始为None 放在老链表最前面 ...原创 2020-07-11 21:16:18 · 441 阅读 · 0 评论 -
【NLP复习】逻辑回归的原理、推导和常见问题
逻辑回归:假设数据服从伯努利分布(0-1分布),通过极大似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。(用回归的方式求概率p,根据p和阈值求二分类结果,所以叫他回归但实际是分类)预测函数、损失函数、梯度下降推导:常见问题:为什么用sigmoid函数? 如果选择单位阶跃函数的话,它是不连续的不可微。而如果选择sigmoid函数,它是连续的 sigmoid能够将z转化为一个接近0或1的值。 LR的假设是什么? 一是:假设数据服从伯努利分布 二是:假设模原创 2020-07-08 13:06:13 · 544 阅读 · 0 评论 -
【NLP复习】数据结构之各种排序算法的Python实现+大数据查找算法
一、排序选择排序:每轮选后面最小的数跟前面待处理的交换 def select_sort(lists): """ 选择排序:第i轮(i=0,1,...,n-1)选最小的一个 跟第i个交换 :param lists: :return: """ length = len(lists) for i in range(length - 1): min_idx = i # 第i轮 从第i+1个往后找最小的原创 2020-06-28 15:29:12 · 257 阅读 · 0 评论 -
【NLP复习】SVM
SVM的学习策略就是间隔最大化(红线H3与黑白两种点都有较大间隔)。数据点若是p维向量,我们用p-1维的超平面来分开这些点(如图是2维点,用1维直线分割),与感知机训出的超平面不同(无穷多个比如H1和H2),SVM间隔最大化训出来的超平面是唯一的。由简到繁的三种情况对应的SVM(线性可分、线性不可分、非线性映射):一、线性可分的SVM...转载 2020-06-23 11:13:43 · 206 阅读 · 0 评论 -
【NLP复习】Attention机制
Attention机制通过对encoder所有时间步的hidden state加权平均来得到背景变量。其中a就是softmax把Q跟K的值们归一化了机器翻译: Q是decoder每一步的hidden state K是encoder每一步的hidden state V=K 通过Q跟K算出V中hidden states们的权重,让V中这些hidden state加权求和 文本分类(self-Attention): Q=K=V=句子各个词的embedding 两种Att原创 2020-06-22 15:32:54 · 206 阅读 · 0 评论 -
【NLP复习】Pytorch现场手敲模型训练代码的模版
Pytorch现场手敲模型训练代码四大步骤:数据定义 模型定义 loss和optim定义 循环开训一、数据定义from torch.utils.data import Datasetfrom torch.utils.data import DataLoaderimport torchclass trainDataset(Dataset): def __init__(self): # 读入全部数据 self.data = torch.Tens原创 2020-06-22 10:34:30 · 899 阅读 · 0 评论 -
【NLP复习】梯度爆炸和消失的产生和缓解(Batch Normalization)
一、梯度爆炸和消失咋产生的?梯度爆炸的原因:网络层之间的梯度(偏导大于1)累乘导致指数级增长会产生梯度爆炸 梯度消失的原因:反向传播时激活函数(如sigmoid的导数的最大值为0.25,tanh比sigmoid好点,最大值是1)求梯度导致前面乘了一堆的小于1的数,靠近输入层的地方梯度消失二、如何缓解?减少层数、batch size、learning rate 使用relu或者leaky relu激活函数 梯度截断(Gradient Clipping)防止梯度爆炸。其思想是设置阈值,更新梯..原创 2020-06-21 20:42:01 · 959 阅读 · 0 评论 -
【NLP复习】CNN(TextCNN)、RNN、LSTM、GRU
一、CNN(TextCNN)TextCNN跟传统CNN的区别:卷积核不是正方形的,宽度跟词向量维度相等。二、RNN缺陷:长期依赖不大行;反向传播时前面梯度为后面梯度联乘,依赖于激活函数和网络初始参数,可能会梯度消失(sigmoid)或者爆炸(relu)。三、LSTM第一步:忘记门,决定细胞状态需要丢弃哪些信息。ft输出0-1的数。极端情况,0表示不保留,1表示都保留。第二步,输入门,决定给细胞状态添加哪些新的信息。第三步,将前两步信息结合。原创 2020-06-21 16:40:41 · 1790 阅读 · 0 评论 -
【NLP复习】聚类算法及其改进
一、K-means算法K-means的步骤 1.随机选k个聚类中心 2.遍历每个样本,找离自己最近的聚类中心并归到那簇 3.归完对每类算均值,更新这k个聚类中心 4.重复2,3直到聚类中心不再变 二、K-means算法的改进K-means++:对k选取的改进,思想是初始的聚类中心之间的相互距离要尽可能的远。 轮盘法就是随机生成一个0到1的数,看看这个数落在了哪个样本点对应的区间(这个区间大小跟Step2算的概率是正相关,所以被选为聚类中心的概率越大,这个随机数落到这个区间原创 2020-06-20 13:45:58 · 1025 阅读 · 0 评论 -
【NLP复习】数据预处理和特征选择:方差、相关系数、K方检验、互信息、树模型
先拿一张特征工程的导图镇楼。本文主要复习特征工程的核心——特征处理(数据预处理,特征选择,降维)。一、数据预处理量纲不统一怎么办?(猫咪的身高和体重) 标准化(前提是特征值服从正态分布,通过算特征的均值和标准差转成标准正态分布) 区间缩放法(利用两个最值进行缩放,将特征取值缩放到某范围,例如[0, 1]等) 标准化与归一化的区别(标准化按特征值,也就是按列;归一化按行搞成单位向量) 定量特征信息冗余怎么办?(给的特征是猫咪的体重,我们只需要“肥”or“瘦”而不需要具体体重)原创 2020-06-19 11:37:46 · 2236 阅读 · 1 评论 -
【NLP复习】关键词提取方法(TF-IDF、TextRank)
一、TF-IDF TF =某词在文档中出现的次数 / 文档的总词数 IDF =log_e ( 语料库中文档总数 / 包含该词的文档数+1 ) 优点:简单快速 不足:没考虑单词的位置和语义信息;生僻词的IDF值会过高;重要人名地名信息抽的效果不好;依赖于分词结果 二、TextRank d为阻尼系数一般是0.85;两个词汇节点在长度为K的窗口中共现就把他们给连起来。 优点:考虑了单词之间的相互关系 不足:没有考虑单词的语义信息,缺少对上下文的整体考虑,词..原创 2020-06-18 21:48:50 · 657 阅读 · 0 评论 -
【NLP复习】常用激活函数的比较
一、啥是激活函数?为啥用激活函数?常用的有哪些?啥是激活函数?激活函数是上层节点的输出和下层节点的输入之间的一个非线性函数关系。 为啥用激活函数?要是不用激活函数,不管多少层的神经网络说白了都是些线性变换的叠加,网络的逼近能力有限,所以引入非线性函数。 常用的有哪些?早期:sigmoid、tanh;近期:Relu及其改进(Leaky-ReLU、P-ReLU、R-ReLU...)、Maxout二、Sigmoid函数Sigmoid公式、求导、图像: Sigmoid的导数的图像:原创 2020-06-18 14:20:38 · 417 阅读 · 0 评论 -
【NLP复习】深度学习中的优化方法
概述:前言为需要优化的原因,正文为梯度下降/随机梯度下降/小批量随机梯度下降/动量法/AdaGrad算法/RMSProp算法/AdaDelta算法/Adam算法。前言:需要优化的原因(局部最小值和鞍点):x=x-η ▽f(x) :学习率η过大(overshooting):收敛不了越来越偏离最优值;学习率过小(undershooting)收敛速度过慢,费资源。一、梯度下降、随机梯度下降、小批量随机梯度下降梯度下降:梯度为训练集所有样本点梯度之和求平均 随机梯度下降:每次随机挑一个样本..原创 2020-06-18 12:35:17 · 997 阅读 · 0 评论 -
【NLP复习】关于词向量的基础知识和BERT问世之前的模型
一、解释一下词袋和文本离散表示?文本表示分为离散表示和分布式表示。离散表示的代表就是词袋模型,one-hot、TF-IDF、n-gram都可以看作是词袋模型的词向量表示方法。去重后扔进字典里,没有顺序可言。 句子的one-hot编码:如果出现了某词 该词位置为1 向量长度为词表大小 TF-IDF: n-gram:比如2-gram,“音乐纯粹”会分成“音”、“音乐”、“乐”、“乐纯”、“纯”、“纯粹”、“粹”,优点是考虑了词的前后关系,缺点是词表维度大增。 文本的离散表示存在着数据稀疏、向量维度过原创 2020-06-16 22:41:26 · 412 阅读 · 0 评论 -
【NLP复习】决策树ID3/C4.5/CART的区别以及预剪枝、后剪枝
一、决策树的生成算法有哪些?区别是啥?ID3:由熵增(信息增益)来决定哪个特征是父节点,哪个特征需要分裂(选择属性时偏向选择取值多的属性)。对于一组数据,熵越小说明分类结果越好。熵定义如下: 信息增益 = entroy(前) - entroy(后) C4.5:对于ID3可能越分越细导致过拟合,于是C4.5中,优化项要除以分割太细的代价,这个比值叫做信息增益率,显然分割太细分母增加,信息增益率会降低。 信息增益比 = 惩罚参数 * 信息增益 CART:分类回归树(Classific..原创 2020-06-15 17:34:10 · 927 阅读 · 0 评论 -
【NLP复习】如何解决过拟合?
一、过拟合的原因主要原因是训练数据中存在噪音或者训练数据太少,或训练集和测试集特征分布不一致 根本的原因则是特征维度(或参数)过多,导致模型完美拟合训练集,对新数据的预测结果较差二、如何解决过拟合simpler model structure:减小模型复杂度(缩小宽度和减小深度) data augmentation:随机drop和shuffle、同义词替换、回译、文档裁剪...... regularization:L0范数是指向量中非0的元素的个数,L1范数是指向量中各个元素绝对值之和,也叫原创 2020-06-15 11:07:10 · 1851 阅读 · 0 评论 -
【NLP复习】NER:用HMM(隐马)训练,用维特比算法预测
一、命名实体识别(NER)是生成模型还判别模型?主流模型?是生成模型:P(x|y),训练过程根据tag预测token;而判别模型P(y|x)与之相反 基于LM的主流模型:BERT/LSTM+CRF 概率图模型:HMM 二、何为HMM?两个假设和三种参数?如何训练?有啥缺点?HMM就是由隐藏状态(如实体类型)生成可观测结果(本文)的过程 两个假设: 【下图蓝色】t 时刻的实体标签只与 t-1 时刻的标签相关 【下图粉色】观测独立假设,也就是t+1时刻的观测结果文本只与t+1时刻的实体标原创 2020-06-14 23:09:35 · 1243 阅读 · 1 评论 -
【NLP复习】集成学习——Bootstraping、Bagging、Boosting、GBDT、XGBoost
一、Bootstraping、Bagging、Boosting的思想?Bootstraping(自助抽样法): 从给定训练集中有放回的均匀抽样。假设给定的数据集包含d个样本。 该数据集有放回地抽样d次,训练集中没出现的概率就是d次都未被选中的概率,即(1-1/d)^d。当d趋于无穷大时,这一概率就将趋近于e^(-1)=0.368,所以留在训练集中的样本大概占原来数据集的63.2%。 Bagging(Bootstrap Aggregating的缩写,适合小样本和不知样本分布的情况,目的是减少方原创 2020-06-13 20:29:54 · 895 阅读 · 0 评论