【机械学习】杂记

来源:互联网 发布:点点财富网络借贷 编辑:程序博客网 时间:2024/05/02 01:00

1.详细
CRF简介

Conditional Random Field:条件随机场,一种机器学习技术(模型)

CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如:

分词(标注字的词位信息,由字构词)词性标注(标注分词的词性,例如:名词,动词,助词)命名实体识别(识别人名,地名,机构名,商品名等具有一定内在规律的实体名词)

本文主要描述如何使用CRF技术来进行中文分词。
CRF VS 词典统计分词

基于词典的分词过度依赖词典和规则库,因此对于歧义词和未登录词的识别能力较低;其优点是速度快,效率高CRF代表了新一代的机器学习技术分词,其基本思路是对汉字进行标注即由字构词(组词),不仅考虑了文字词语出现的频率信息,同时考虑上下文语境,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果;其不足之处是训练周期较长,运营时计算量较大,性能不如词典分词

CRF VS HMM,MEMM

首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。

CRF分词原理

  1. CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:

    词首,常用B表示
    词中,常用M表示
    词尾,常用E表示
    单子词,常用S表示

  2. CRF分词的过程就是对词位标注后,将B和E之间的字,以及S单字构成分词

  3. CRF分词实例:

    原始例句:我爱北京天安门
    CRF标注后:我/S 爱/S 北/B 京/E 天/B 安/M 门/E
    分词结果:我/爱/北京/天安门

CRF分词工具包

上面介绍了CRF技术思想以及如何用于分词,下面将介绍如何在实际开发中使用CRF进行分词工作。目前常见的CRF工具包有pocket crf, flexcrf 车crf++,目前网上也有一些它们3者之间的对比报告,个人感觉crf++在易用性,稳定性和准确性等综合方面的表现最好,同时在公司的项目开发中也一 直在使用,因此下面将概述一下crf++的使用方法(具体细节可以到crf++官方主页去查 阅,http://crfpp.sourceforge.net/)


2.详细
常见的分类与聚类算法

所谓分类分类,简单来说,就是根据文本的特征或属性,划分到已有的类别中。如在自然语言处理NLP中,我们经常提到的文本分类便就是一个分类问题,一般的模式分类方法都可用于文本分类研究。常用的分类算法包括:决策树分类法,朴素的贝叶斯分类算法(native Bayesian classifier)、基于支持向量机(SVM)的分类器,神经网络法,k-最近邻法(k-nearest neighbor,kNN),模糊分类法等等(所有这些分类算法日后在本blog内都会一一陆续阐述)。分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。但是很多时候上述条件得不到满足,尤其是在处理海量数据的时候,如果通过预处理使得数据满足分类算法的要求,则代价非常大,这时候可以考虑使用聚类算法。而K均值(K-means clustering)聚类则是最典型的聚类算法(当然,除此之外,还有很多诸如属于划分法K-MEDOIDS算法、CLARANS算法;属于层次法的BIRCH算法、CURE算法、CHAMELEON算法等;基于密度的方法:DBSCAN算法、OPTICS算法、DENCLUE算法等;基于网格的方法:STING算法、CLIQUE算法、WAVE-CLUSTER算法;基于模型的方法,本系列后续会介绍其中几种)。

3.详细
准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

 相关(Relevant),正类无关(NonRelevant),负类被检索到(Retrieved)true positives(TP 正类判定为正类,例子中就是正确的判定”这位是女生”)false positives(FP 负类判定为正类,”存伪”,例子中就是分明是男生却判断为女生,当下伪娘横行,这个错常有人犯)未被检索到(Not Retrieved)false negatives(FN 正类判定为负类,”去真”,例子中就是,分明是女生,这哥们却判断为男生–梁山伯同学犯的错就是这个)true negatives(TN 负类判定为负类,也就是一个男生被判断为男生,像我这样的纯爷们一准儿就会在此处)

准确率(accuracy),其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
精确率(precision)的公式是这里写图片描述,它计算的是所有”正确被检索的item(TP)”占所有”实际被检索到的(TP+FP)”的比例.

召回率(recall)的公式是这里写图片描述,它计算的是所有”正确被检索的item(TP)”占所有”应该检索到的item(TP+FN)”的比例。

F1值就是精确值和召回率的调和均值,也就是这里写图片描述,
这里写图片描述


4.过拟合-详细
在对模型进行训练时,有可能遇到训练数据不够,即训练数据无法对整个数据的分布进行估计的时候,或者在对模型进行过度训练(overtraining)时,常常会导致模型的过拟合(overfitting)。
为了防止过拟合,我们需要用到一些方法,如:
early stopping、数据集扩增(Data augmentation)、
正则化(Regularization)、Dropout等。


5.HMM-详细
HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子:一个东京的朋友每天根据天气{下雨,天晴}决定当天的活动{公园散步,购物,清理房间}中的一种,我每天只能在twitter上看到她发的推“啊,我前天公园散步、昨天购物、今天清理房间了!”,那么我可以根据她发的推特推断东京这三天的天气。在这个例子里,显状态是活动,隐状态是天气。

任何一个HMM都可以通过下列五元组来描述:

:param obs:观测序列:param states:隐状态:param start_p:初始概率(隐状态):param trans_p:转移概率(隐状态):param emit_p: 发射概率 (隐状态表现为显状态的概率)

求解最可能的隐状态序列是HMM的三个典型问题之一,通常用维特比算法解决。维特比算法(Viterbi被广泛应用到分词,词性标注等应用场景)就是求解HMM上的最短路径(-log(prob),也即是最大概率)的算法。

EM算法: 只有观测序列,无状态序列时来学习模型参数,即Baum-Welch算法
维特比算法: 用动态规划解决HMM的预测问题,不是参数估计
前向后向:用来算概率
极大似然估计:即观测序列和相应的状态序列都存在时的监督学习算法,用来估计参数


6.影响聚类算法效果的主要原因有:
特征选取
模式相似性测度
分类准则

0 0