crf算法

CRF系列——一个简单的例子

对着背影说爱祢 提交于 2019-11-30 22:05:19
CRF可以应用于对一串序列进行自动标注的问题。例如对文字序列进行词性标,即要自动判断句子中每个单词的词性。在这样的问题中,每一个词的标注结果,不仅依赖于该词语本身,还会依赖于其他词语的标注结果。CRF可以考虑到这样的依赖关系。 本文会以一个词性标注的应用为例,介绍CRF所解决的问题以及CRF模型的建立,学习与预测过程。 任务描述 词性标注 (part-of-speech tagging),其目标就是对一个句子即一串单词的序列进行打标签(tagging),标注每个词的词性(ADJECTIVE, NOUN, PREPOSITION, VERB, ADVERB, ARTICLE)。我们假设在词性标准任务中, 每个单词的词性不仅依赖其本身,而且也会依赖其前一个单词 (这里做了简化,实际上每个单词的标注结果依赖更多东西)。 下面,我将针对对这个问题,建立一个简单的线性链条件随机场(linear-chain CRF)。并介绍这个CRF是如何表示上述的依赖关系,以及如何利用这个CRF来求解这个问题。 实际上,和其他的统计机器学习模型一样,我们有三个任务要完成: 1)指定模型参数(建立模型) 2)估计这些参数(学习) 3)利用这些参数进行预测(预测) 第一个任务——建立模型 特征函数 为了评价序列中每个单词属于各个tag的可能性,我们要根据单词的位置定义一系列 特征函数 (feature

CRF实现NER

北城余情 提交于 2019-11-30 04:14:23
1. NER(命名实体识别)   NER,英文全称:Named Entity Recognition。主要是用来识别一段文本中哪些是物体的名字,比如人名、公司名。   常见算法如下: 2. CRF (条件随机场)   CRF(Conditional random field,条件随机场)是一种 判别式模型 (HMM是生成式模型)。是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫(Markov)随机场。 3. 标签体系   对于NER任务,常见的标签体系包括IO、BIO、BMEWO、BMEWO+。下面举例说明不同标签体系的区别。 4. 开源工具   CRF++:C++实现,提供python 和 java接口。 详情参考 这里 。   NLTK : Python 的自然语言处理工具箱,使用方式参考 这里 。   Stanford NLP: Java 实现,但是集成到了 NLTK 里,所以也可以使用 Python。详情参考 这里 。   Sklearn_crfsuite: Python 的一个包,使用方式参考 这里 。 来源: https://www.cnblogs.com/chen8023miss/p/11558320.html

Hanlp中使用纯JAVA实现CRF分词

自作多情 提交于 2019-11-29 18:54:57
与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 双数组Trie树(DoubleArrayTrie)储存,得到了一个高性能的中文分词器。 开源项目 本文代码已集成到HanLP中开源: http://hanlp.com/ CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。 CRF解码 解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下: 首先任何字的标签不仅取决于它自己的参数,还取决于前一个字的标签。但是第一个字前面并没有字,何来标签?所以第一个字的处理稍有不同,假设第0个字的标签为X,遍历X计算第一个字的标签,取分数最大的那一个。 如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s',s),其中s'为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4

百度PaddlePaddle:

[亡魂溺海] 提交于 2019-11-29 03:50:19
百度正式发布PaddlePaddle深度强化学习框架PARL 近日,百度 PaddlePaddle 正式发布了深度强化学习框架 PARL,同时开源了基于该框架的、在 NeurIPS 2018 强化学习赛事中夺冠的模型完整训练代码。 项目地址如下:https://github.com/PaddlePaddle/PARL PARL 框架的名字来源于 PA ddlepaddle R einfocement L earning,是一款基于百度 PaddlePaddle 打造的深度强化学习框架。PARL 与现有强化学习工具和平台相比,具有更高的可扩展性、可复现性和可复用性,支持大规模并行和稀疏特征,能够快速 对工业级应用案例的验证。 为了帮助用户快速搭建可以和环境交互的机器人,PARL 抽象出数个基础类,包括 Model、Algorithm、Agent 等。 Model 类负责强化学习算法中的网络前向计算(forward)部分,通常嵌套在 Algorithm 类中。 Algorithm 类则定义了网络的更新机制(backward),通常属于一个 Agent。 Agent 类负责和环境进行交互,负责数据 I/O,并且收集数据训练集下的 algorithm。 通过这样的设计方案,PARL 保证了算法的可扩展性:针对同一个场景,用户想调研不同的网络结构对算法效果影响的时候,比如调研 RNN