分类目录归档:自然语言处理

加速机器学习:从主动学习到BERT和流体标注

Deep Learning Specialization on Coursera

知道创宇IA-Lab  岳永鹏

机器学习模型代码优化是为了获得更高效(时间更少、存储更少、计算规模更大)执行的机器指令和具有更强泛化能力的模型,获得更高效执行的机器指令可以采用多核和高频的CPU计算,以及采用并行计算和向量化计算。而获得具有更强泛化能力的模型不仅仅与选择的模型有关,还与标注数据的数量和质量有关。而数据标注需要大量标注人员从事重复而枯燥的工作,这也必然会增加成本。

本文将介绍主动学习(Active Learning)以及主动学习结合Google今年发布的流体标注(Fluid Annotation)和BERT(Bidirectional Encoder Representation from Transformers)对加速机器学习有什么启示。

继续阅读

polyglot:Pipeline 多语言NLP工具

Deep Learning Specialization on Coursera

知道创宇IA-Lab 岳永鹏

目前,在NLP任务处理中,Python支持英文处理的开源包有NLTK、Scapy、StanfordCoreNLP、GATE、OPenNLP,支持中文处理的开源工具包有Jieba、ICTCLAS、THU LAC、HIT LTP,但是这些工具大部分仅对特定类型的语言提供支持。本文将介绍功能强大的支持Pipeline方式的多语言处理Python工具包:polyglot。该项目最早是由AboSamoor在2015年3月16日在GitHub上开源的项目,已经在Github收集star 1021个。

特征

  • 语言检测 Language Detection (支持196种语言)
  • 分句、分词 Tokenization (支持165种语言)
  • 实体识别 Named Entity Recognition (支持40种语言)
  • 词性标注 Part of Speech Tagging(支持16种语言)
  • 情感分析 Sentiment(支持136种语言)
  • 词嵌入 Word Embeddings(支持137种语言)
  • 翻译 Transliteration(支持69种语言)
  • 管道 Pipelines

继续阅读

谷歌云平台上基于TensorFlow的高级机器学习专项课程

Deep Learning Specialization on Coursera

Coursera近期推了一门新专项课程:谷歌云平台上基于TensorFlow的高级机器学习专项课程(Advanced Machine Learning with TensorFlow on Google Cloud Platform Specialization),看起来很不错。这个系列包含5门子课程,涵盖端到端机器学习、生产环境机器学习系统、图像理解、面向时间序列和自然语言处理的序列模型、推荐系统等内容,感兴趣的同学可以关注:Learn Advanced Machine Learning with Google Cloud. Build production-ready machine learning models with TensorFlow on Google Cloud Platform.

课程链接:http://coursegraph.com/coursera-specializations-advanced-machine-learning-tensorflow-gcp
继续阅读

AI Challenger 2018 文本挖掘类竞赛相关解决方案及代码汇总

Deep Learning Specialization on Coursera

AI Challenger 2018 已近尾声,各赛道top选手已经结束了代码核验,正在准备12月18、19日 AI Challenger 决赛答辩材料的路上。在本年度 AI Challenger 即将尘埃落定之时,这里整理一批目前网上可见的文本挖掘相关赛道的解决方案和代码,欢迎补充,同时感谢github,感谢各位开源的同学。

细粒度用户评论情感分析

在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值,并且在互联网行业有极其广泛的应用,主要用于个性化推荐、智能搜索、产品反馈、业务安全等。本次比赛我们提供了一个高质量的海量数据集,共包含6大类20个细粒度要素的情感倾向。参赛人员需根据标注的细粒度要素的情感倾向建立算法,对用户评论进行情感挖掘,组委将通过计算参赛者提交预测值和场景真实值之间的误差确定预测正确率,评估所提交的预测算法。

貌似是最火爆的一个赛道,Testa 提交队伍有468支,详细介绍请参考该赛道主页:https://challenger.ai/competition/fsauor2018
继续阅读

详解TensorFlow™ GPU 安装

Deep Learning Specialization on Coursera

知道创宇IA-Lab  岳永鹏

TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算。借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU、GPU、TPU)和设备(桌面设备、服务器集群、移动设备、边缘设备等)。TensorFlow™ 最初是由 Google Brain 团队(隶属于 Google 的 AI 部门)中的研究人员和工程师开发的,可为机器学习和深度学习提供强有力支持,并且其灵活的数值计算核心广泛应用于许多其他科学领域。目前TensorFlow™ 有适用于CPU(TensorFlow CPU)和GPU(TensorFlow GPU)的两种安装选择。 有区别于通过pip安装TensorFlow CPU版本,安装TensorFlow GPU还需要更多的底层依赖。

$ pip install tensorflow==1.12

$ pip install tensorflow-gpu==1.12

TensorFlow GPU主要是通过NVIDIA提供的CUDA和cuDNN存取GPU,从而实现比CPU快数十倍的深度学习训练加速能力。本文主要介绍TensorFlow GPU版本的安装和使用。

继续阅读

深度学习实践:从零开始做电影评论文本情感分析

Deep Learning Specialization on Coursera

最近读了《Python深度学习》, 是一本好书,很棒,隆重推荐。

本书由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。书中包含30多个代码示例,步骤讲解详细透彻。由于本书立足于人工智能的可达性和大众化,读者无须具备机器学习相关背景知识即可展开阅读。在学习完本书后,读者将具备搭建自己的深度学习环境、建立图像识别模型、生成图像和文字等能力。

各方面都很好,但是总感觉哪里有点欠缺,后来想想,可能是作者做得太好了,把数据预处理都做得好好的,所以你才能“20行搞定情感分析”,这可能也是学习其他深度学习工具过程中要面临的一个问题,很多工具都提供了预处理好的数据,导致学习过程中只需要调用相关接口即可。不过在实际工作中,数据的预处理是非常重要的,从数据获取,到数据清洗,再到基本的数据处理,例如中文需要分词,英文需要Tokenize, Truecase或者Lowercase等,还有去停用词等等,在将数据“喂”给工具之前,有很多事情要做。这个部分,貌似是当前一些教程有所欠缺的地方,所以才有了这个“从零开始做”的想法和系列,准备弥补一下这个缺失,第一个例子就拿《Python深度学习》这本书第一个文本挖掘例子练手:电影评论文本分类-二分类问题,这也可以归结为一个情感分析任务。

首先介绍一下这个原始的电影评论数据集aclIMDB: Large Movie Review Dataset, 这个数据集由斯坦福大学人工智能实验室于2011年推出,包含25000条训练数据和25000条测试数据,另外包含约50000条没有标签的辅助数据。训练集和测试集又分别包含12500条正例(正向评价pos)和12500负例(负向评价neg)。2018免费送彩金游戏数据,更详细的介绍可参考该数据集的官网:http://ai.stanford.edu/~amaas/data/sentiment/, paper: Learning Word Vectors for Sentiment Analysis, 和数据集里的readme。

然后下载和处理这份数据:Large Movie Review Dataset v1.0,下载链接;

http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz

下载之后进行解压:tar -zxvf aclImdb.tar.gz,可以用tree命令看一下aclImdb的目录结构:

tree aclImdb -L 2

继续进入训练集正例的目录看一下: cd aclImdb/train/pos/:

这个里面包含了12500篇英文评论,我们随机打开一个看一下里面的文本内容:

vim 1234_10.txt

I grew up watching this movie ,and I still love it just as much today as when i was a kid. Don't listen to the critic reviews. They are not accurate on this film.Eddie Murphy really shines in his roll.You can sit down with your whole family and everybody will enjoy it.I recommend this movie to everybody to see. It is a comedy with a touch of fantasy.With demons ,dragons,and a little bald kid with God like powers.This movie takes you from L.A. to Tibet , of into the amazing view of the wondrous temples of the mountains in Tibet.Just a beautiful view! So go do your self a favor and snatch this one up! You wont regret it!

继续阅读

BERT相关论文、文章和代码亚美游AMG88汇总

Deep Learning Specialization on Coursera

BERT最近太火,蹭个热点,整理一下相关的亚美游AMG88,包括Paper, 代码和文章解读。

1、Google官方:

1) BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

一切始于10月Google祭出的这篇Paper, 瞬间引爆整个AI圈包括自媒体圈: https://arxiv.org/abs/1810.04805

2) Github: https://github.com/google-research/bert

11月Google推出了代码和预训练模型,再次引起群体亢奋。

3) Google AI Blog: Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing

2、第三方解读:
1) 张俊林博士的解读, 知乎专栏:从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

我们在AINLP微信公众号上转载了这篇文章和张俊林博士分享的PPT,欢迎关注:

2) 知乎: 如何评价 BERT 模型?

3) 【NLP】Google BERT详解

4) [NLP自然语言处理]谷歌BERT模型深度解析

5) BERT Explained: State of the art language model for NLP

6) BERT介绍

7) 论文解读:BERT模型及fine-tuning

8) NLP突破性成果 BERT 模型详细解读

9) 干货 | BERT fine-tune 终极实践教程: 奇点智能BERT实战教程,在AI Challenger 2018阅读理解任务中训练一个79+的模型。

10) 【BERT详解】《Dissecting BERT》by Miguel Romero Calvo
Dissecting BERT Part 1: The Encoder
Understanding BERT Part 2: BERT Specifics
Dissecting BERT Appendix: The Decoder

3、第三方代码:

1) pytorch-pretrained-BERT: https://github.com/huggingface/pytorch-pretrained-BERT
Google官方推荐的PyTorch BERB版本实现,可加载Google预训练的模型:PyTorch version of Google AI's BERT model with script to load Google's pre-trained models

2) BERT-pytorch: https://github.com/codertimo/BERT-pytorch
另一个Pytorch版本实现:Google AI 2018 BERT pytorch implementation

3) BERT-tensorflow: https://github.com/guotong1988/BERT-tensorflow
Tensorflow版本:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

4) bert-chainer: https://github.com/soskek/bert-chainer
Chanier版本: Chainer implementation of "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding"

5) bert-as-service: https://github.com/hanxiao/bert-as-service
将不同长度的句子用BERT预训练模型编码,映射到一个固定长度的向量上:Mapping a variable-length sentence to a fixed-length vector using pretrained BERT model
这个很有意思,在这个基础上稍进一步是否可以做一个句子相似度计算服务?有没有同学一试?

6) bert_language_understanding: https://github.com/brightmart/bert_language_understanding
BERT实战:Pre-training of Deep Bidirectional Transformers for Language Understanding: pre-train TextCNN

7) sentiment_analysis_fine_grain: https://github.com/brightmart/sentiment_analysis_fine_grain
BERT实战,多标签文本分类,在 AI Challenger 2018 细粒度情感分析任务上的尝试:Multi-label Classification with BERT; Fine Grained Sentiment Analysis from AI challenger

8) BERT-NER: https://github.com/kyzhouhzau/BERT-NER
BERT实战,命名实体识别: Use google BERT to do CoNLL-2003 NER !

9) BERT-keras: https://github.com/Separius/BERT-keras
Keras版: Keras implementation of BERT with pre-trained weights

10) tbert: https://github.com/innodatalabs/tbert
PyTorch port of BERT ML model

11) BERT-Classification-Tutorial: https://github.com/Socialbird-AILab/BERT-Classification-Tutorial

12) BERT-BiLSMT-CRF-NER: https://github.com/macanv/BERT-BiLSMT-CRF-NER
Tensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuning

14) bert-chinese-ner: https://github.com/ProHiryu/bert-chinese-ner
使用预训练语言模型BERT做中文NER

持续更新,BERT更多相关亚美游AMG88欢迎补充,欢迎关注我们的微信公众号:AINLP

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:

本文链接地址:BERT相关论文、文章和代码亚美游AMG88汇总 /?p=10870

一文详解深度学习在命名实体识别(NER)中的应用

Deep Learning Specialization on Coursera

近几年来,基于神经网络的深度学习方法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中,深度学习也获得了不错的效果。最近,笔者阅读了一系列基于深度学习的NER研究的相关论文,并将其应用到达观的NER基础模块中,在此进行一下总结,与大家一起分享学习。

1、NER 简介

NER又称作专名识别,是自然语言处理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代性强的实体,通常包括人名、地名、组织机构名、日期时间、专有名词等。NER系统就是从非结构化的输入文本中抽取出上述实体,并且可以按照业务需求识别出更多类别的实体,比如产品名称、型号、价格等。因此实体这个概念可以很广,只要是业务需要的特殊文本片段都可以称为实体。

学术上NER所涉及的命名实体一般包括3大类(实体类,时间类,数字类)和7小类(人名、地名、组织机构名、时间、日期、货币、百分比)。

实际应用中,NER模型通常只要识别出人名、地名、组织机构名、日期时间即可,一些系统还会给出专有名词结果(比如缩写、会议名、产品名等)。货币、百分比等数字类实体可通过正则搞定。另外,在一些应用场景下会给出特定领域内的实体,如书名、歌曲名、期刊名等。

NER是NLP中一项基础性关键任务。从自然语言处理的流程来看,NER可以看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最大问题。同时NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。

NER当前并不算是一个大热的研究课题,因为学术界部分学者认为这是一个已经解决的问题。当然也有学者认为这个问题还没有得到很好地解决,原因主要有:命名实体识别只是在有限的文本类型(主要是新闻语料中)和实体类别(主要是人名、地名、组织机构名)中取得了不错的效果;与其他信息检索领域相比,实体命名评测预料较小,容易产生过拟合;命名实体识别更侧重高召回率,但在信息检索领域,高准确率更重要;通用的识别多种类型的命名实体的系统性能很差。

2. 深度学习方法在NER中的应用

NER一直是NLP领域中的研究热点,从早期基于词典和规则的方法,到传统机器学习的方法,到近年来基于深度学习的方法,NER研究进展的大概趋势大致如下图所示。

图1:NER发展趋势

在基于机器学习的方法中,NER被当作序列标注问题。利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。NER 任务中的常用模型包括生成式模型HMM、判别式模型CRF等。条件随机场(ConditionalRandom Field,CRF)是NER目前的主流模型。它的目标函数不仅考虑输入的状态特征函数,而且还包含了标签转移特征函数。在训练时可以使用SGD学习模型参数。在已知模型时,给输入序列求预测输出序列即求使目标函数最大化的最优序列,是一个动态规划问题,可以使用Viterbi算法解码来得到最优标签序列。CRF的优点在于其为一个位置进行标注的过程中可以利用丰富的内部及上下文特征信息。

图2:一种线性链条件随机场

近年来,随着硬件计算能力的发展以及词的分布式表示(word embedding)的提出,神经网络可以有效处理许多NLP任务。这类方法对于序列标注任务(如CWS、POS、NER)的处理方式是类似的:将token从离散one-hot表示映射到低维空间中成为稠密的embedding,随后将句子的embedding序列输入到RNN中,用神经网络自动提取特征,Softmax来预测每个token的标签。

这种方法使得模型的训练成为一个端到端的过程,而非传统的pipeline,不依赖于特征工程,是一种数据驱动的方法,但网络种类繁多、对参数设置依赖大,模型可解释性差。此外,这种方法的一个缺点是对每个token打标签的过程是独立的进行,不能直接利用上文已经预测的标签(只能靠隐含状态传递上文信息),进而导致预测出的标签序列可能是无效的,例如标签I-PER后面是不可能紧跟着B-PER的,但Softmax不会利用到这个信息。

学界提出了DL-CRF模型做序列标注。在神经网络的输出层接入CRF层(重点是利用标签转移概率)来做句子级别的标签预测,使得标注过程不再是对各个token独立分类。

2.1 BiLSTM-CRF

LongShort Term Memory网络一般叫做LSTM,是RNN的一种特殊类型,可以学习长距离依赖信息。LSTM 由Hochreiter &Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题上,LSTM 都取得了相当巨大的成功,并得到了广泛的使用。LSTM 通过巧妙的设计来解决长距离依赖问题。

所有 RNN 都具有一种重复神经网络单元的链式形式。在标准的RNN中,这个重复的单元只有一个非常简单的结构,例如一个tanh层。

图3:传统RNN结构

LSTM 同样是这样的结构,但是重复的单元拥有一个不同的结构。不同于普通RNN单元,这里是有四个,以一种非常特殊的方式进行交互。

图4:LSTM结构

LSTM通过三个门结构(输入门,遗忘门,输出门),选择性地遗忘部分历史信息,加入部分当前输入信息,最终整合到当前状态并产生输出状态。

图5:LSTM各个门控结构

应用于NER中的biLSTM-CRF模型主要由Embedding层(主要有词向量,字向量以及一些额外特征),双向LSTM层,以及最后的CRF层构成。实验结果表明biLSTM-CRF已经达到或者超过了基于丰富特征的CRF模型,成为目前基于深度学习的NER方法中的最主流模型。在特征方面,该模型继承了深度学习方法的优势,无需特征工程,使用词向量以及字符向量就可以达到很好的效果,如果有高质量的词典特征,能够进一步获得提高。

图6:biLSTM-CRF结构示意图

2.2 IDCNN-CRF

对于序列标注来讲,普通CNN有一个不足,就是卷积之后,末层神经元可能只是得到了原始输入数据中一小块的信息。而对NER来讲,整个输入句子中每个字都有可能对当前位置的标注产生影响,即所谓的长距离依赖问题。为了覆盖到全部的输入信息就需要加入更多的卷积层,导致层数越来越深,参数越来越多。而为了防止过拟合又要加入更多的Dropout之类的正则化,带来更多的超参数,整个模型变得庞大且难以训练。因为CNN这样的劣势,对于大部分序列标注问题人们还是选择biLSTM之类的网络结构,尽可能利用网络的记忆力记住全句的信息来对当前字做标注。

但这又带来另外一个问题,biLSTM本质是一个序列模型,在对GPU并行计算的利用上不如CNN那么强大。如何能够像CNN那样给GPU提供一个火力全开的战场,而又像LSTM这样用简单的结构记住尽可能多的输入信息呢?

Fisher Yu and Vladlen Koltun 2015 提出了dilated CNN模型,意思是“膨胀的”CNN。其想法并不复杂:正常CNN的filter,都是作用在输入矩阵一片连续的区域上,不断sliding做卷积。dilated CNN为这个filter增加了一个dilation width,作用在输入矩阵的时候,会skip所有dilation width中间的输入数据;而filter本身的大小保持不变,这样filter获取到了更广阔的输入矩阵上的数据,看上去就像是“膨胀”了一般。

具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,可以很快覆盖到全部的输入数据。

图7:idcnn示意图

图7中可见感受域是以指数速率扩大的。原始感受域是位于中心点的1x1区域:

(a)图中经由原始感受域按步长为1向外扩散,得到8个1x1的区域构成新的感受域,大小为3x3;

(b)图中经过步长为2的扩散,上一步3x3的感受域扩展为为7x7;

(c)图中经步长为4的扩散,原7x7的感受域扩大为15x15的感受域。每一层的参数数量是相互独立的。感受域呈指数扩大,但参数数量呈线性增加。

对应在文本上,输入是一个一维的向量,每个元素是一个character embedding:

图8:一个最大膨胀步长为4的idcnn块

IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits完全一样,加入CRF层,用Viterbi算法解码出标注结果。

在biLSTM或者IDCNN这样的网络模型末端接上CRF层是序列标注的一个很常见的方法。biLSTM或者IDCNN计算出的是每个词的各标签概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。

3. 实战应用

3.1 语料准备

Embedding:我们选择中文维基百科语料来训练字向量和词向量。

基础语料:选择人民日报1998年标注语料作为基础训练语料。

附加语料:98语料作为官方语料,其权威性与标注正确率是有保障的。但由于其完全取自人民日报,而且时间久远,所以对实体类型覆盖度比较低。比如新的公司名,外国人名,外国地名。为了提升对新类型实体的识别能力,我们收集了一批标注的新闻语料。主要包括财经、娱乐、体育,而这些正是98语料中比较缺少的。由于标注质量问题,额外语料不能加太多,约98语料的1/4。

3.2 数据增强

对于深度学习方法,一般需要大量标注语料,否则极易出现过拟合,无法达到预期的泛化能力。我们在实验中发现,通过数据增强可以明显提升模型性能。具体地,我们对原语料进行分句,然后随机地对各个句子进行bigram、trigram拼接,最后与原始句子一起作为训练语料。

另外,我们利用收集到的命名实体词典,采用随机替换的方式,用其替换语料中同类型的实体,得到增强语料。

下图给出了BiLSTM-CRF模型的训练曲线,可以看出收敛是很缓慢的。相对而言,IDCNN-CRF模型的收敛则快很多。

图9:BiLSTM-CRF的训练曲线

图10:IDCNN-CRF的训练曲线

3.3 实例

以下是用BiLSTM-CRF模型的一个实例预测结果。

图11:BiLSTM-CRF预测实例

4. 总结

最后进行一下总结,将神经网络与CRF模型相结合的CNN/RNN-CRF成为了目前NER的主流模型。对于CNN与RNN,并没有谁占据绝对优势,各有各的优点。由于RNN有天然的序列结构,所以RNN-CRF使用更为广泛。基于神经网络结构的NER方法,继承了深度学习方法的优点,无需大量人工特征。只需词向量和字向量就能达到主流水平,加入高质量的词典特征能够进一步提升效果。对于少量标注训练集问题,迁移学习,半监督学习应该是未来研究的重点。

ABOUT

2018免费送彩金游戏作者

朱耀邦:达观数据NLP算法工程师,负责达观数据NLP基础模块的研究、优化,以及NLP算法在文本挖掘系统中的具体应用。对深度学习、序列标注、实体及关系抽取有浓厚兴趣。

达观数据王子豪:这5个例子,小学生都能秒懂分类算法

Deep Learning Specialization on Coursera
分类算法作为数据挖掘、机器学习中重要的研究领域,在新闻分类、黄反广告识别、情感分析、观点挖掘等应用实践中都有着广泛的应用。如何将朴素贝叶斯、决策树、支持向量机这些常见的分类算法通俗易懂地讲给对人工智能感兴趣的人?达观研究院的这篇分类算法科普文章,以日常生活为例子,让小学生都能秒懂分类算法。

试想,8岁的小明是你刚上小学的儿子,长得可爱,古灵精怪,对世界充满好奇。

这天饭后,刚写完家庭作业的小明看到你在书桌前对着电脑眉头紧锁,便跑了过来问你:“爸爸(妈妈),你在做什么呀?”。

身为算法工程师的你正为公司的一个分类项目忙得焦头烂额,听到小明的问话,你随口而出:“分类!”

“分类是什么?”

听到儿子的追问,你的视线终于离开屏幕,但想说的话还没出口又咽了回去……

分类是什么?

简单来说,分类就是对事物进行区分的过程和方法。

在你眼里乖巧的小明是一个好孩子,同时你也想确保他会在学校做一名“好学生”而不是“坏学生”。这里的区分“好学生”和“坏学生”就是一个分类任务,2018免费送彩金游戏这点,达观研究院可以帮你回答小明的疑问。

K最邻近

“别和其他坏学生在一起,否则你也会和他们一样。”        —— 家长

这句话通常来自家长的劝诫,但它透露着不折不扣的近邻思想。在分类算法中,K最近邻是最普通也是最好理解的算法。它的主要思想是通过离待预测样本最近的K个样本的类别来判断当前样本的类别。

家长们希望孩子成为好学生,可能为此不惜重金购买学区房或者上私立学校,一个原因之一是这些优秀的学校里有更多的优秀学生。与其他优秀学生走的更近,从K最近邻算法的角度来看,就是让目标样本与其他正样本距离更近、与其他负样本距离更远,从而使得其近邻中的正样本比例更高,更大概率被判断成正样本。

 

朴素贝叶斯

“根据以往抓获的情况来看,十个坏学生有九个爱打架。”      —— 教导主任

说这句话的训导主任很有可能就是通过朴素贝叶斯算法来区分好、坏学生。

“十个坏学生有九个爱打架”就意味着“坏学生”打架的概率P(打架|坏学生)=0.9,假设根据训导处历史记录坏学生占学生总数P(坏学生)=0.1、打架发生的概率是P(打架)=0.09,那么这时如果发生打架事件,就可以通过贝叶斯公式判断出当事学生是“坏学生”的概率P(坏学生|打架)=P(打架|坏学生)×P(坏学生)÷P(打架)=1.0,即该学生100%是“坏学生”。

朴素贝叶斯算法成立的一个前提是满足特征间条件独立假设。假如教导主任还管学生早恋问题,那么他通过“打架”和“早恋”两种特征来判断学生的前提必须是——在已知学生“好坏”的情况下“打架”和“早恋”之间没有关联。这样的假设可能和实际情况不符合,但让训导主任判断起来更加简单粗暴。

决策树

“先看抽不抽烟,再看染不染头发,最后看讲不讲脏话。”  ——社区大妈

社区大妈经验丰富,有一套自己的判断逻辑。假设“抽烟”、“染发”和“讲脏话”是社区大妈认为的区分“好坏”学生的三项关键特征,那么这样一个有先后次序的判断逻辑就构成一个决策树模型。在决策树中,最能区分类别的特征将作为最先判断的条件,然后依次向下判断各个次优特征。决策树的核心就在于如何选取每个节点的最优判断条件,也即特征选择的过程。

而在每一个判断节点,决策树都会遵循一套IF-THEN的规则:

IF “抽烟” THEN -> “坏学生”

ELSE

IF “染发” THEN -> “坏学生”

ELSE IF “讲脏话” THEN -> “坏学生”

ELSE -> “好学生”

逻辑回归

“上课讲话扣1分,不交作业扣2分,比赛得奖加5分。”   ——纪律委员

班上的纪律委员既勤恳又严格,总是在小本本上记录同学们的每一项行为得分。在完成对每一项行为的评分后,纪律委员根据最终加总得到的总分来判断每位同学的表现好坏。

上述的过程就非常类似于逻辑回归的算法原理。我们称逻辑回归为一种线性分类器,其特征就在于自变量x和因变量y之间存在类似y=ax+b的一阶的、线性的关系。假设“上课讲话”、“不交作业”和“比赛得奖”的次数分别表示为x1、x2、和x3,且每个学生的基础分为0,那么最终得分y=-1*x1-2*x2+5*x3+0。其中-1、-2和5分别就对应于每种行为在“表现好”这一类别下的权重。

Sigmoid函数图像

对于最终得分y,逻辑回归还通过Sigmoid函数将其变换到0-1之间,其含义可以认为是当前样本属于正样本的概率,即得分y越高,属于“表现好”的概率就越大。也就是说,假如纪律委员记录了某位同学分别“上课讲话”、“不交作业”和“比赛得奖”各一次,那么最终得分y=-2-1+5=2,而对2进行Sigmoid变换后约等于0.88,即可知该同学有88%的概率为“好学生”。

支持向量机

“我想个办法把表现差的学生都调到最后一排。”  ——班主任

即使学生们再不情愿,班主任也有一万个理由对他们的座位作出安排。对于“坏学生”,一些班主任的采取的做法是尽量让他们与“好学生”保持距离,即将“坏学生”们都调到教室的最后一排。这样一来,就相当于在学生们之间画了一条清晰的分割界线,一眼就能区分出来。

支持向量机的思想就是如此。支持向量机致力于在正负样本的边界上找到一条分割界线(超平面),使得它能完全区分两类样本的同时,保证划分出的间隔尽量的大。如果一条分割界线无法完全区分(线性不可分),要么加上松弛变量进行适当的容忍,要么通过核函数对样本进行空间上的映射后再进行划分。对于班主任来讲,调换学生们的座位就相当于使用了核函数,让原本散落在教室里的“好”、“坏”学生从线性不可分变得线性可分了。

结束语

分类和分类算法的思想其实无处不在。而在实际工程中,分类算法的应用需要关注的地方还有很多。达观数据在中文文本分类方面拥有丰富的实践经验和心得。想了解这方面的内容,敬请期待下一篇文章《中文文本分类——你需要了解的10项关键内容》。

2018免费送彩金游戏作者

王子豪:达观数据高级NLP算法工程师,负责达观数据文本挖掘和NLP算法的开发及应用,在文本分类、观点挖掘和情感分析等领域有丰富实践经验。

如何学习自然语言处理:NLP领域经典《自然语言处理综论》英文版第三版更新

Deep Learning Specialization on Coursera

如何学习NLP? 我觉得先要学好英语、数学和编程,因为英文世界的资料更丰富和原创,而数学会让你读论文的时候游刃有余、编程可以让你随时随地实现相关的idea。这好像是废话,那么闲话少说,进入正题。

去年写过一篇《如何学习自然语言处理:一本书和一门课》,介绍了NLP领域经典AMG88《自然语言处理综论(Speech and Language Processing)》第三版的相关情况,时隔一年,很多事情发生了变化,包括第二版的中文翻译版终于出了。作为NLP入门AMG88,十年前我读过这本书的第一版中文翻译版,第二版英文版;看到第二版中文翻译版和当前第三版英文版的相关内容,仿佛一个时代的跨越。

貌似为了方便2018年(斯坦福)秋季课程的原因,该书作者,NLP领域的大神 Daniel Jurafsky 教授和 James H. Martin 教授发布了一个截止2018年9月23日的单pdf文件:Speech and Language Processing (3rd ed. draft),包含了目前已经完成的所有章节,供用户下载和使用:

This is the release for the start of fall term 2018.
The slides are in the process of being updated now, we are putting them up as we write them.

Significantly rewritten version of 5, 6, 7, 8, 17, 18, 19, 23, 24, 25, and a draft of 9! New pedagogical sequences on neural networks and their training, starting with logistic regression and continuing with embeddings, feed-forward nets, and RNNs. Plus new or improved coverage of BPE, tf-idf, bias in embeddings, beam search decoding, HMMs, connotation frames, lexicon induction. reading comprehension/QA. Some chapters have been moved to the Appendix.

New lecture slides (so far) for chapters 6 and 25.

Here's a single pdf of the whole book-so-far!

Typos and comments welcome (just email slp3edbugs@gmail.com and let us know the date on the draft)!
And feel free to use the draft slides in your classes.

When will the book be finished? We're shooting for late 2019.

与之前的版本相比,重写了5、6、7、8、17、18、19、23、24、25章节的大部分内容和并新增了第9章节“递归神经网络中的序列处理(Sequence Processing with Recurrent Networks)”的草稿;调整了神经网络及其训练的教学顺序,从逻辑回归开始,到(词)嵌入,前馈网络以及递归神经网络;新增或者加大了BPE处理、tf-idf、柱搜索解码、隐马尔可夫模型、词典推理、阅读理解、自动问答等内容;一些旧的章节被移到附录。

另一个大家比较关心的问题,英文版第三版什么时候完工?官方预计要到2019年年底了。这本书英文版第一版自2000年出版,第二版英文版2008年出版,至今跨越接近20年,特别是这几年深度学习的风生水起,第三版增加了很多NLP和深度学习相关的内容,相对第二版变化有些大,这个第三版已完成章节的电子版草稿,总计有558页,估计全书完成时要秒杀第二版的厚度。

2018免费送彩金游戏作者,两位都是NLP领域的神牛,以下是第二版中文翻译版中详细的介绍:

Daniel Jurafsky现任斯坦福大学语言学系和计算机科学系副教授。在此之前,他曾在博尔德的科罗拉多大学语言学系、计算机科学系和认知科学研究所任职。他出生于纽约州的Yonkers,1983年获语言学学士,1992年获计算机科学博士,两个学位都在伯克利加利福尼亚大学获得。他于1998年获得美国国家基金会CAREER奖,2002年获得Mac-Arthur奖。他发表过90多篇论文,内容涉及语音和语音处理的广泛领域。James H. Martin现任博尔德的科罗拉多大学语言学系、计算机科学系教授,认知科学研究所研究员。他出生于纽约市,1981年获可伦比亚大学计算机科学学士,1988年获伯克利加利福尼亚大学计算机科学博士。他写过70多篇2018免费送彩金游戏计算机科学的论著,出版过《隐喻解释的计算机模型》(A Computational Model of Metaphor Interpretation)一书。

最后是如何下载这个电子版,其实官网上已经提供了相关的下载链接:https://web.stanford.edu/~jurafsky/slp3/ ,这篇文章上面的pdf也直接链向下载链接 ,如果还是无法下载这个电子版,可以关注我们的公众号:"NLPJob" , 回复 "slp3" 获取该书电子版以及 Daniel Jurafsky 教授之前在Coursera上开播的斯坦福大学自然语言处理课程相关资料视频(目前已绝版),一并学习自然语言处理。

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:

本文链接地址:如何学习自然语言处理:NLP领域经典《自然语言处理综论》英文版第三版更新 /?p=10785