NLP与常见基础任务、应用
NLP与常见基础任务
1 什么是NLP?
自然语言处理NLP可以看成两部分之和:自然语言理解(NLU)+自然语言生成(NL G)。
NLU是从语音或文本中理解其意思含义。目的是Understanding。
NLG是从理解的意思中生成语音或文本。目的是Generate。
NLP中语义理解NLU的挑战:
1 多种表达方式
很多句子共同表达一种含义,比如:吴恩达又出了一门机器学习的课;吴恩达新出了一门机器学习的课;吴恩达的机器学习的课又新出了。
2 一词多义
苹果手机的性能还是挺好的。 这个苹果还是挺好吃的。
上面的句子中的苹果是不同的含义。
2 NLP中的基础任务
分词 tokenize
词性标注 POS --->标示名词、动词、形容词等等。
命名实体识别
句法分析 (Syntatic Analysis) --->分析句子是主谓宾还是结构。
语义分析 (Semantic Analysis) --->单词/句子/文章的含义等等。
2.1 分词 (tokenize、word segmentation)
英文 ...
天池文本分类实践
天池文本分类实践
这次的实践依托天池的中文预训练模型泛化能力挑战赛,完成数据集OCNLI、OCEMOTION、TNEWS上的任务。
0 文本分类任务简介
0.1 数据集
数据集说明
OCNLI:是第一个非翻译的、使用原生汉语的大型中文自然语言推理数据集;
OCEMOTION:是包含7个分类的细粒度情感性分析数据集;
TNEWS:来源于今日头条的新闻版块,共包含15个类别的新闻;
0.2 任务简介
任务及数据格式说明
任务1: \(\color{purple}{OCNLI--中文原版自然语言推理}\)
数据格式: id 句子1 句子2 标签
123450 一月份跟二月份肯定有一个月份有. 肯定有一个月份有 01 一月份跟二月份肯定有一个月份有. 一月份有 12 一月份跟二月份肯定有一个月份有. 一月二月都没有 23 一点来钟时,张永红却来了 一点多钟,张永红来了 04 不讲社会效果,信口开河,对任何事情都随意发议论,甚至信谣传谣,以讹传讹,那是会涣散队伍、贻误事业的 以讹传讹是有害的 0
任务2: \(\color{purlpe ...
朴素贝叶斯分类器
朴素贝叶斯分类器(Naive Bayes Classifiers)
0 准备知识
概率(Probability):用于表示一件事情发生的可能性大小。有时,我们可以用一件事情发生的频率(实验做了很多很多次)来代表概率。(这个是频率派对概率的认识,当然还存在很多其他有不同的认识的派别)
条件概率(Conditional Probability):用于表示一件事情(A)发生后另外一件事情(B)发生的概率,用\(P(B|A)\)。条件概率\(P(B|A)\)的计算可以用韦恩图来说明,在事件A发生了的情况下,那么B发生的可能性是A和B相交的面积除以A的面积。
用公式来表示即: \[
P(B|A) = \frac{P(A,B)}{P(A)}
\]
1 朴素贝叶斯分类器简介
朴素贝叶斯分类器是一种对特征之间的相互影响做出了一定假设(这种假设让模型更简单,naive)的贝叶斯分类器。
朴素贝叶斯模型的直觉如下图所示: 这是朴素贝叶斯分类器作用于一个影评,文字的顺序被忽略掉了(看成是bag of words),利用的是每个字的频率。
朴素贝叶斯分类器属于概率型分类器,也 ...
逻辑回归分类器
二分类--逻辑回归分类器
1 逻辑回归简介
部分参考《Speech and Language Processing》。附上最新版链接电子版传送门
部分参考《统计学习方法》
逻辑回归是社会和自然科学最重要的分析方法之一。在自然语言处理中,逻辑回归是监督学习中分类方法的baseline,它和神经网络拥有十分亲近的关系,其实神经网络可以被看成是一系列的逻辑回归分类器堆叠起来的。
逻辑回归可以用于二分类(例如"positive"和"negative"),同样也可以用于多分类(多项式逻辑回归)。
深入了解逻辑回归之前,需要先明白的一些概念。
1 生成式和判别式分类器
关于生成式分类器(generative classifier)和判别式分类器(discriminative classifier):这是两种截然不同的机器学习模型框架。
举个例子:假设我们尝试分类猫和狗的图片。生成式模型的目标将会是理解狗长什么样子、猫长什么样子,你可以让模型"生成出"或者说成是画出一个狗。给定一张测试图片,系统会问是猫的模型更合适还是狗的模型更合适,然后选择更合适的那个作为它的标签 ...
集成学习之Bagging
集成学习之Bagging
0 关于集成学习要说的事
0.1 什么是集成学习?
集成学习(Ensemble Learning)通过构建并结合多个学习器来完成学习任务。
集成学习的一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,可以是决策树、BP神经网络等。
同质集成与异质集成:如果在集成的时候用到的个体学习器都是一样类型的,那么这样的集成是“同质”的;如果个体学习器存在不同的类型,那么这样的集成就是“异质”的。
0.2 集成学习怎么才能获得好的结果?
集成学习把多个学习器结合起来,如何能获得比最好的单一学习器更好的性能呢?
考虑一个简单的例子:在二分类任务中,假定有三个分类器在三个测试样本上的表现如下图所示,根据投票法(少数服从多数)产生集成后的结果。图中对号代表分类正确,叉号代表分类错误。那么,分析可知不同分类器需要好而不同才能达到提升效果的作用,也就是需要各个分类器都有不错的分类效果同时它们还要有差异(多样性--否则集成就没有什么提升的作用了)。但其实个体学习器的“准确性”和“多样性”本身是存 ...
集成学习之Boosting
集成学习之Boosting
关于集成学习的简介,参考另外一篇博客传送门
1 什么是Boosting?
Boosting是指每个基学习器在前一个基学习器的基础上进行学习,最后综合所有基学习器的预测值产生最终的预测结果。(这里综合的方法常常是加权法。)整个训练和测试过程如下图所示:
具体来说,Boosting是一种串行学习的方法。首先,第一个学习器对训练样本进行学习;然后基于第一个学习器的预测效果对训练样本进行调整,让第一个学习器预测错误的样本在接下来得到更多的关注;基于调整后的样本分布来寻找(或训练)下一个学习器,重复上面的步骤。最后达到设定的学习器数量就终止,对所有的学习器的结果进行加权给出最后的结果。
基于Boosting的方法需要解决其过程中的两个问题:
如何在每一轮改变训练数据的权值和概率分布?
如何将各个学习器组合起来(以发挥更好的效果)?
关于弱学习器和强学习器:一般来说,弱学习器是指准确率一般的学习器(也就是准确率仅仅比随机猜测略高的学习算法);强学习器是指准确率很高且能在多项式时间内完成的学习算法。在这里,各个学习器一般为弱学习器,它们组合起 ...
集成学习之Stacking
集成学习之Stacking
前面已经了解了Bagging博客传送门和Boosting博客传送门,这篇博客要接着来看集成学习的Stacking。
Stacking集成学习严格来说并不是一种算法,而是一种复杂的对模型集成的策略。
Stacking集成学习可以理解为两层架构:第一层含有多个基础分类器,把预测的结果(或者称为元特征)传递给第二层;第二层通常拥有一个分类器(一般是逻辑回归),把第一层分类器的结果当作特征进行拟合,最后输出预测结果。基于Stacking进行训练和测试过程如下图所示:
1 Blending
在正式看Stacking之前,先来了解“简化版的Stacking”,也就是Blending。
1.1 Blending集成学习的方法和步骤
Blending集成学习的方法和步骤如下:
将数据划分为原训练集和测试集。其中,原训练集需要再继续划分出训练集和验证集。
创建第一层的模型。第一层的模型之间可以同质(相同种类)也可以异质(不同种类)。
使用训练集中的数据来训练第一层的模型(多个);然后将验证集中的数据输入到第一层训练好的模型中得到第一层 ...
链表
链表
1 什么是链表?
链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。
最简单的链表就是单链表,如下图所示:
其余的类型还有双向链表、循环链表等等,不同点就在于指针的运用。
2 LeetCode上的链表题
2.1 反转链表 (206 反转链表)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000];
-5000 <= Node.val <= 5000。
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
(Yes, I can)
我的解法:
12345678910111213141516171819202122232425262728293031323334353637## @lc app=lee ...
NLP之对话系统(Dialogue System)与问答系统(QA)
对话(Dialogue)
参考1 参考2
1 对话的目的:
完成一个任务(用户的要求)
闲聊
侧重于服务他人。用户的输入可以多种多样,例如提问、打招呼、下指令、抒发情绪等。
2 对话系统
对话系统有两种实现方式:
基于流水线(pipeline)实现的对话系统一般由自然语言理解(Natural Language Understanding)、对话管理(Dialogue Management)、自然语言生成(Natural Language Generation)构成。
基于端到端(end-to-end)实现的对话系统,这种方式是结合深度学习,通过海量数据训练,挖掘出从用户自然语言输入到系统自然语言输出的整体映射关系,而忽略中间过程的一种方法。(目前,工业界的问答系统大多采用流水线的方式。)
3 基于流水线(pipeline)实现的对话系统
对话系统包含的过程的详细内容如下:
a. 自然语言理解(Natural Language Understanding)
自然语言理解(Natural Language Understanding):将 ...
XGBoost与LightGBM
XGBoost
1 XGBoost
1.1 什么是XGBoost?
XGBoost:eXtreme Gradient Boosting,从名字上我们知道它是在梯度提升Gradient Boosting框架下的集成学习算法。
XGBoost是之前博客所讲的GBDT(传送门)的高效实现。XGBoost中的基学习器可以是CART决策树,也可以是线性分类器。我们说XGBoost是GBDT的高效实现,那么XGBoost和GBDT的区别是?
XGBoost和GBDT的区别:
XGBoost给损失函数增加了正则化项(L1正则项或者L2正则项——视学习目标的不同而取不同的正则化项)。
有些损失函数是很难计算出导数的,考虑到这种情况XGBoost使用损失函数的二阶泰勒展开来近似损失函数。
GBDT中决策树在节点分裂时遍历所有特征的所有可能划分,然后再选择最优分裂点。XGBoost在节点分裂时使用分位点及分位数近似地计算,有效降低计算量。
1.2 XGBoost的原理与推导
假设数据集为:\(\mathcal{D}=\left\{\left(\mathbf{x}_{i}, y_ ...