条件随机场-应用

  今天介绍CRFs在中文分词中的应用

  工具:CRF++,可以去 https://taku910.github.io/crfpp/ 下载,训练数据和测试数据可以考虑使用bakeoff2005,这是链接 http://sighan.cs.uchicago.edu/bakeoff2005/

  首先需要了解一些概念

  字标记法——统计分词模型常用的方法,可以将分词问题转化为分类问题。这里我们介绍一下4-tag字标记法,4-tag指的是文档中的每个字都对应一个标记,一共有4类标记,分别是:B、M、E、S,分别代表一个字处于词的开始位置、中间位置、 结束位置,以及一个单子构成一个词。以“我是中国人”为例来说明,标记完的结果是

我  S

是  S

中  B

国  M

人  E

  这样给文档中的每个字都赋予一个标记,那么我们可以将分词任务视为一个分类问题--将文档中的每个字分别赋予一个类标记。

然而,如果将分词仅仅视为一个分类任务来考虑,那么得到的结果很可能不太理想,因为分词需要考虑上下文,如果仅考虑字本身的特征,还是无法得到想要的效果,而CRFs模型天然考虑了上下文特征,通常在需要考虑上下文特征的序列标注问题中能取得不错的效果。

在CRFs模型中,我们将一句话视为一个最大团(最大团的概念可以回顾下CRF第一篇),这样我们只需要求得所有候选词序列的联合概率分布的最大值(每个词对应一个随机变量),那么就可以得到一个分词的标注序列。

n-gram模型——用于限定我们考虑特征的范围,以uni-gram和bi-gram为例来说明,uni-gram窗口大小为1(cut-off=1)只考虑单字的特征,bi-gram窗口大小为2(cut-off=2)考虑两个连续字的特征,比如“我是中国人”,bi-gram在取每个字的特征的时候,只分别考虑“我是”、“是中”、“中国”、“国人”、“人”范围内的特征。笔者推测这样划分的原理应该是句子马尔科夫链的性质——一个字只和它周围的若干字有关联,越远,关联越弱。

  下面介绍CRF++工具包

  CRF++工具包输入数据的格式是这样的:

1  D  B
2 D M
月 W E
3 D B
1 D M
日 W E
, S S
中 W B
共 W M
中 W M
央 W E
  第一列是文档中的字,第二列是字的特征(比如我们规定数字用D表示,普通字用W表示,标点符号用S表示等),第三列是4-tag字标记。
CRF++引入了特征模板的概念,用于扩展特征集(显然上面的输入数据格式能提供的特征太少了),模板这样定义的(以上面的输入数据为例,假设当前字符为“共”)
templateexpanded feature
%x[0,0]
%x[0,1]W
%x[-1,0]
%x[-2,1]S
%x[0,0]/%x[0,1]共/W
ABC%x[0,1]123ABCW123
  %x[row,column]row是相对当前字符的行下标,column是列下标。

  特征模板长这样:
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-1,0]/%x[0,0]
U06:%x[0,0]/%x[1,0]U10:%x[-2,1]
U11:%x[-1,1]
U12:%x[0,1]
U13:%x[1,1]
U14:%x[2,1]
U15:%x[-2,1]/%x[-1,1]
U16:%x[-1,1]/%x[0,1]
U17:%x[0,1]/%x[1,1]
U18:%x[1,1]/%x[2,1]U20:%x[-2,1]/%x[-1,1]/%x[0,1]
U21:%x[-1,1]/%x[0,1]/%x[1,1]
U22:%x[0,1]/%x[1,1]/%x[2,1]# Bigram
B

  其中U01这些是特征ID,空行没任何意义,#Unigram #Bigram这些是解释说明,指的是下面用的是哪类模型。

  训练的话,可以在命令行进入项目根目录之后(或者添加环境变量方便在任意位置识别训练程序)输入
  crf_learn template_file train_file model_file
  crf_learn是训练程序,template_file指的是模板路径,train_file指的是训练数据路径,model_file指的是生成的模型文件路径(目录+文件)
  有4个可选参数,分别是
-a CRF-L2 or CRF-L1:
  选择L1正则化还是L2正则化(正则化的目的是防止过拟合,一般而言,L2正则化更优,因为L1正则化偏向于减少项的个数,而L2正则化偏向于降低每一项前面的系数,使之趋向于0,而不是减少为0)

   -c float

      这个参数设置CRF的hyper-parameter。c的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过拟合和欠拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。

 -f NUM

      这个参数设置特征的cut-off threshold。CRF++使用训练数据中至少NUM次出现的特征。默认值为1。当使用CRF++到大规模数据时,只针对特定数据的特征可能会有几百万,这个选项就会在这样的情况下起到作用。

    -p NUM

      如果电脑有多个CPU,那么那么可以通过多线程提升训练速度。NUM是线程数量。

  所以我们在命令行训练数据也可以这样写:
crf_learn -f 3 -c 1.5 template_file train_file model_file
  下面是测试数据的命令行:
crf_test -m model_file test_files
  model_file指的是模型文件的路径,test_files指的是测试数据文件的路径,这里就不需要指定模板文件的路径了,因为其路径已经写入模型文件中
测试数据的文件格式与训练数据文件格式相同,运行测试命令会增加第四列,表示预测的各个字符的标记,然后可以用程序将其转化为我们想要的分词形式即可。
由于训练时间太长,笔者决定下期发布相关代码,敬请期待!

转载于:https://www.cnblogs.com/xueyinzhe/p/7225923.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces-808D Array Division (multiset 折半???)

题目链接: http://codeforces.com/problemset/problem/808/D 题意: 给定一个数列,移动0或1个数字,使数列能从某个位置分开前后两半的和相等。 思路: from: http://www.cnblogs.com/robin1998/p/6864278.html 我们可以假想有个隔板…

Linq中dbSet 的查询

1.Find:按照关键字的ID号来查询(速度快) 如: ADShiTi aDShiTi db.ADShiTis.Find(id); 2.FirstOrDefault:根据部分条件查询,显示最前的一条 如:按照daCID进行查找,有&#xff0c…

AJAX详解教程

AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。本身不是一种新技术,而是多个技术综合。用于快速创建动态网页的技术。一般的网页如果需要更新内容,必需重新加载个页面。而 AJAX通过浏览器与服务器进行少量数据交换&#…

JSON转换工具

JSON的处理: JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅…

如何获取codeforces的完整数据

推荐: 如何获取codeforces的完整数据?(玄学方法) http://www.cnblogs.com/Saurus/p/6220513.html转载于:https://www.cnblogs.com/cmyg/p/7232386.html

Vue与Element入门使用

Vue: Vue是一套构建用户界面的渐进式前端框架。只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合。通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。视图:负责页面渲染,主要由HTMLCSS构…

nRF51822 配对之device_manager_init 调用,以及保证 用户数据存储 的Flash 操作不与device manager 模块冲突...

昨天 遇到了一个烦心的问题,被老外客户怼了两句,恼火,很想发火,发现英文不够用,算了,就不跟直肠的鬼佬一般见识。说正事。 最近的一个nRF51822MT2503 钱包防丢项目,准备接近量产了。昨天做APP的…

表单的ajax填入问题

又是表单 今天的表单是用事件委托从table里面获得eventId,用get请求从后台获得json数据填入表单中 第一个执行的比较顺利,但当再添加一个事件之后,修改(将数据填入表单)功能竟然失灵了,然后各种找原因&…

Redis基础-下载安装配置

Nosql: NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用: 应对基于海量用户和海量数据前提下的数据处理问题。 特征: 可扩容,可伸缩大数据量下高性能…

R学习-- 数组和矩阵

生成 4行5列的数组,逐列逐行赋值x array(1:20, dim c(4,5))依据已知向量生成二维数组i array(c(1:3,3:1,4:6,5:7), dimc(3,4))也能够调整行列顺序 (3行4列变为4行3列)i array (c(1:3,3:1,4:6,7:9), dimc(4,3))数组a元素作为索引值操作数组…

PHP获取客户端ip的五种方式

方法一 1 <?php 2 $ip $_SERVER["REMOTE_ADDR"]; 3 echo $ip; 方法二 <?php $user_IP ($_SERVER["HTTP_VIA&qu…

Jedis使用

Jedis&#xff1a; Jedis是Redis官方推荐的Java连接服务工具。Java语言连接redis服务还有这些SpringData、Redis 、 Lettuce下载地址&#xff1a;https://mvnrepository.com/artifact/redis.clients/jedisAPI文档&#xff1a;http://xetorthio.github.io/jedis/ 连接练习&#…

Centos6.6升级python2到python3

系统更新部分&#xff1a; 一、由于系统原有的源无法连接&#xff0c;需要更新为新的源。起初&#xff0c;首选163的源&#xff0c;但是由于更改源以后&#xff0c;无法使用yum等问题&#xff0c;所以直接使用上海交通大学提供的源。 修改前&#xff0c;将原来/etc/yum.repos.d…

转:20分钟教你使用hexo搭建github博客

注册Github账号 这里我们就不多讲了&#xff0c;小伙伴们可以点击这里&#xff0c;进入官网进行注册。 创建仓库 图片来自Github登录账号后&#xff0c;在Github页面的右上方选择New repository进行仓库的创建。 图片来自Github在仓库名字输入框中输入&#xff1a; Github昵称.…

Maven入门详解与安装配置

Maven&#xff1a; Maven出现前的问题&#xff1a; 假设你现在做了一个项目&#xff0c;项目中肯定要用到一些jar包&#xff0c;比如说mybatis&#xff0c;log4j&#xff0c;JUnit等&#xff0c;除了这些之外&#xff0c;你有可能用到你的同事开发的其他的东西&#xff0c;比如…

前台打断点

很简单&#xff1a; 1.按F12 2.点击Sources 3.打开你要进行的js文件&#xff08;&#xff09; 4.点击你要运行的方法 5.触发按钮点击 6.排除&#xff08;触发按钮点击之后有两个按钮和半透明的&#xff09; 7.半透明的第一个按钮是过程一个断点直接跳到另一个断点 8.半透明的第…

构造函数的五种继承方法

1、使用call或apply绑定构造函数 animal.apply(this.arguments) 2、使用prototype属性 Cat.prototypenew Animal(); Cat.prototype.constructorCat; var cat1new Cat("大毛","黄色"); alert(cat1.species);//动物 3、直接集成prototype属性 function Anima…

Vue生命周期与自定义组件

自定义组件&#xff1a; Element 组件其实就是自定义的标签。例如<el-button> 就是对<button>的封装。 本质上&#xff0c;组件是带有一个名字且可复用的 Vue 实例&#xff0c;完全可以自己定义。 定义格式&#xff1a; Vue.component(组件名称, {props:组件的属性…

hdu 3641 数论 二分求符合条件的最小值数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid3641 学到&#xff1a; 1、二分求符合条件的最小值 /*二分查找符合条件的最小值 */ ll solve() {__int64 low 0, high INF, mid ;while(low < high){mid (low high) >> 1; // printf("%d&&\n&quo…

Spring DI(依赖注入)

DI依赖注入 IoC&#xff08;Inversion Of Control&#xff09;控制翻转&#xff0c;Spring反向控制应用程序所需要使用的外部资源DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;应用程序运行依赖的资源由Spring为其提供&#xff0c;资源进入应用程序的方…