Python自然语言处理笔记【二】文本分类之监督式分类的细节问题
一、选择正确的特征
1.建立分类器的工作中如何选择相关特征,并且为其编码来表示这些特征是首要问题。
2.特征提取,要避免过拟合或者欠拟合
- 过拟合,是提供的特征太多,使得算法高度依赖训练数据的特性,而对于一般化的新例子不起作用,在小型训练集上通常会出现这种问题。
- 欠拟合,是特征太少,算法不能很好地反映实例的特性
3.用错误分析的方法来完善特征集,首先选择开发集,其中包含用于创建模型的语料数据。然后开发集分为训练集和开发测试集。
>>> train_names = names[1500:]
>>> devtest_names = names[500:1500]
>>> test_names = names[:500]
注意:
- 训练集用于训练模型,开发测试集用于进行错误分析,测试集用于系统的最终评估。进行错误分析的是单独的测试开发集,不是测试集。
- 语料数据分为两类:开发集和测试集 。 开发集通常被进一步分为训练集和开发测试集。
- 将语料分为适当的数据集,我们使用训练集训练一个模型,然后在开发测试集上运行。
4.使用开发测试集,我们可以生成一个分类器预测名字性别时的错误列表。
>>> errors = []
>>> for (name, tag) in devtest_names:
... guess = classifier.classify(gender_features(name))
... if guess != tag:
... errors.append( (tag, guess, name) )
借助错误分析可以调整我们的特征提取器包括两个字母后缀的特征。这个错误分析过程可以不断重复,检查存在于由新改进的分类器产生的错误中的模式, 每一次错误分析过程被重复。
注意:一旦我们已经使用了开发测试集帮助我们开发模型,关于这个模型在新数据会表 现多好,我们将不能再相信它会给我们一个准确地结果!因此,保持测试集分离、未使用过, 直到我们的模型开发完毕是很重要的。
二、文档分类
对于分类文档时:
1.构造已经标记类别的文档清单
2.为文档定义特征提取器,对于文档主题识别,可以为每个词定义一个特性以表示该文档是否包含这个词。
三、词性标注
训练一个分类器来算出那个后缀最有信息量
1.找出最常见的后缀
>>> from nltk.corpus import brown
>>> suffix_fdist = nltk.FreqDist()
>>> for word in brown.words():
... word = word.lower()
... suffix_fdist.inc(word[-1:])
... suffix_fdist.inc(word[-2:])
... suffix_fdist.inc(word[-3:])
>>> common_suffixes = suffix_fdist.keys()[:100]
>>> print common_suffixes
2.定义一个特征提取器函数,检查给定的单词的这些后缀:
>>> def pos_features(word):
... features = {}
... for suffix in common_suffixes:
... features['endswith(%s)' % suffix] = word.lower().endswith(suffix)
... return features
分类器在标记时,将根据特征提取函数所强调的那些属性来做标记。
四、探索上下文语境
基于词的上下文特征,不能只传递已标注的词,而是传递整个(未标注的)句子,以及目标词的索引。
这种方式是使用依赖上下文的特征提取器来定义一个词性标记分类器。
这能提高词性标注器的性能,但无法研究一般的情况
五、序列分类
为了获取相关的分类任务之间的依赖关系,我们可以使用联合分类器模型,为相关输入选择适当的标签。
在词性标注的例子中,各种不同的序列分类器模型可以被用来为一个给定的句子中的所有的词共同选择词性标签。
连续分类或贪婪序列分类策略,即为第一个输入找到最有可能的 类标签,然后在此基础上帮助找到下一个输入的最佳的标签。这个过程不断重复直到所有的输入都被贴上标签。
过程:定义特征提取器,可以继续建立我们的序列分类器。在训练中,使用 已标注的标记为特征提取器提供适当的历史信息,但标注新的句子时,我们基于标注器本身的输出产生历史信息。
六、其他序列分类方法
转型联合分类的工作原理是为输入的标签创建一个初始值,然后反复提炼那个值,尝试修复相关输入之间的不一致。
Python自然语言处理笔记【二】文本分类之监督式分类的细节问题的更多相关文章
- Python自然语言处理笔记【一】文本分类之监督式分类
一.分类问题 分类是为了给那些已经给定的输入选择正确的标签. 在基本的分类任务中,每个输入都被认为与其他的输入是隔离的.每个类别的标签集是预先定义好的(只有把类别划分好了,才能给输入划分类别). 分类 ...
- Python 自然语言处理笔记(一)
一. NLTK的几个常用函数 1. Concordance 实例如下: >>> text1.concordance("monstrous") Displaying ...
- python 自然语言处理(二)____获得文本语料和词汇资源
一, 获取文本语料库 一个文本语料库是一大段文本.它通常包含多个单独的文本,但为了处理方便,我们把他们头尾连接起来当做一个文本对待. 1. 古腾堡语料库 nltk包含古腾堡项目(Project Gut ...
- 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...
- NLTK学习笔记(二):文本、语料资源和WordNet汇总
目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...
- 《简明python教程》笔记二
面向对象的编程: 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例.对象可以使用普通的属于对象的变量存储数据.属于一个对象或类的变量被称为域.对象也可以使用属于类的函数来具 ...
- webdriver(python)学习笔记二
自己开始一个脚本开始学习: # coding = utf-8 from selenium import webdriver browser = webdriver.Firefox() browser. ...
- python unittest 测试笔记(二):使用Requests
1. Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用.[Python Requests快速入门 :]http://cn.python-requests.org/z ...
- python基础学习笔记二之列表
1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append() #直接在结尾追加 s.insert() ...
随机推荐
- Qt自定义控件大全+designer源码
抽空将自定义控件的主界面全部重写了一遍,采用左侧树状节点导航,看起来更精美高大上一点,后期准备单独做个工具专用每个控件的属性设计,其实qt自带的designer就具备这些功能,于是从qt4的源码中抽取 ...
- js post 下载文件
function DownLoadPost(url,data) { if (url && data) { var form = $('<form>{{ xsrf_form_ ...
- 24、设计模式、webpack
利用静态属性:长驻内存 (一) 单例模式 概念:单个实例,只有一个对象,多次创建,返回同一个对象. 单例模式的核心:==确保只有一个实例==,并提供全局访问. //利用了静态属性:长驻内存 funct ...
- 关于vue-cli创建项目(小白)
vue-cli,都说是vue脚手架,一般cli是命令行的意思,一看就知道与node有关,其实脚手架是建筑工用的工具,给工人踩在上面干活的,这里借用它的意思,我觉得应该叫vue平台工具大家更容易懂,毕竟 ...
- vue前后分离---数据模拟
最近为在做CRM的前期工作,忙里偷闲写了个关于数据模拟方面的东西 主要是现在博客中满天都再说前后分离,但是还没有几个实际操作的---让许多新手{-_-} 方法一: 启动一个express静态服务器-- ...
- js中级小知识2
1.面向对象 js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差.所以作者就收到java和c的影响,往面向对象靠齐.js天生有一个Objec ...
- (三)juc高级特性——虚假唤醒 / Condition / 按序交替 / ReadWriteLock / 线程八锁
8. 生产者消费者案例-虚假唤醒 参考下面生产者消费者案例: /* * 生产者和消费者案例 */ public class TestProductorAndConsumer { public stat ...
- dokuwiki 安装配置
dokuwiki如果在用户注册的时候,发生"发送密码邮件时产生错误.请联系管理员!",那么需要配置sendmail. 在linux平台下,参考这个帖子https://www.dok ...
- 20144306《网络对抗》MAL_恶意代码分析
一.基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控? 使用Windows自带的schtasks指 ...
- 【Python全栈-后端开发】Django进阶2-Form表单
Django进阶2-Form表单 Django的Form主要具有一下几大功能: 生成HTML标签(可以保留上次输入内容) 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页 ...