crf++ 里的特征模板

本贴最后更新于 2223 天前,其中的信息可能已经时移世异

一:

Unigram 和 Bigram 模板分别生成 CRF 的状态特征函数 和转移特征函数 。其中 是标签, 是观测序列, 是当前节点位置。每个函数还有一个权值,具体请参考 CRF 相关资料。

crf++ 模板定义里的 %x[row,col],即是特征函数的参数

举个例子。假设有如下用于分词标注的训练文件:

北 N B 京 N E 欢 V B 迎 V M 你 N E

其中第 3 列是标签,也是测试文件中需要预测的结果,有 BME 3 种状态。第二列是词性,不是必须的。

特征模板格式:%x[row,col]。x 可取 U 或 B,对应两种类型。方括号里的编号用于标定特征来源,row 表示相对当前位置的行,0 即是当前行;col 对应训练文件中的列。这里只使用第 1 列(编号 0),即文字。

1、Unigram 类型
每一行模板生成一组状态特征函数,数量是 LN 个,L 是标签状态数。N 是此行模板在训练集上展开后的唯一样本数,在这个例子中,第一列的唯一字数是 5 个,所以有 LN = 3*5=15。

例如:U01:%x[0,0],生成如下 15 个函数:

func1 = if (output = B and feature=U01:"北") return 1 else return 0 func2 = if (output = M and feature=U01:"北") return 1 else return 0 func3 = if (output = E and feature=U01:"北") return 1 else return 0 func4 = if (output = B and feature=U01:"京") return 1 else return 0 ... func13 = if (output = B and feature=U01:"你") return 1 else return 0 func14 = if (output = M and feature=U01:"你") return 1 else return 0 func15 = if (output = E and feature=U01:"你") return 1 else return 0

这些函数经过训练后,其权值表示函数内文字对应该标签的概率(形象说法,概率和可大于 1)。

又如 U02:%x[-1,0],训练后,该组函数权值反映了句子中上一个字对当前字的标签的影响。

2、Bigram 类型

与 Unigram 不同的是,Bigram 类型模板生成的函数会多一个参数:上个节点的标签 。

生成函数类似于:

func1 = if (prev_output = B and output = B and feature=B01:"北") return 1 else return 0

这样,每行模板则会生成 LLN 个特征函数。经过训练后,这些函数的权值反映了上一个节点的标签对当前节点的影响。

 

每行模版可使用多个位置。例如:U18:%x[1,1]/%x[2,1]

字母 U 后面的 01,02 是唯一 ID,并不限于数字编号。如果不关心上下文,甚至可以不要这个 ID。

二:

根据 CRF++ 包中给出的例子可以较为清楚的知道有那些模板构建方法。模板构建分为两类,一类是 Unigram 标注,一类是 Bigram 标注。 
Unigram 模板是比较常用的模板,这类模板提取的信息较为全面,组成的模板数量也比较多;Bigram 模板比较简单,一般是当前词和前面一个词的自动组合生成的 Bigram 特征集合。 
主要介绍 Unigram 模板

Unigram U00:%x[-2,0]  U01:%x[-1,0]  U02:%x[0,0]  U03:%x[1,0]  U04:%x[2,0]  U05:%x[-2,0]/%x[-1,0]/%x[0,0]  U06:%x[-1,0]/%x[0,0]/%x[1,0]  U07:%x[0,0]/%x[1,0]/%x[2,0]  U08:%x[-1,0]/%x[0,0]  U09:%x[0,0]/%x[1,0] 

这是 CRF++ 例子中给出的模板,一共有 9 个模板,先看第一个模板,表示当前词和前面的第二个词组成的特征,以‘小明今天穿了一件红色上衣’为例,符合 CRF++ 处理格式的这句话应该变成如下形式: 

小 B  明 I  今 B  天 I  穿 S  了 S  一 B  件 I  红 B  色 I  上 B  衣 I 

假设我们有三个标记 tag,B(表示一个词的开头那个字),I(表示一个词的结尾那个字),S(表示单个字的词),先看第一个模板 U00:%x[-2,0],第一个模板产生的特征如下: 
如果当前词是‘今’,那-2 位置对应的字就是‘小’, 
每个特征对应的字如下: 

U00:%x[-2,0]=====>小  U01:%x[-1,0]=====>明  U02:%x[0,0]=====>今  U03:%x[1,0]=====>天  U04:%x[2,0]=====>穿  U05:%x[-2,0]/%x[-1,0]/%x[0,0]=====>小/明/今  U06:%x[-1,0]/%x[0,0]/%x[1,0]=====>明/今/天  U07:%x[0,0]/%x[1,0]/%x[2,0]=====>今/天/穿  U08:%x[-1,0]/%x[0,0]=====>明/今  U09:%x[0,0]/%x[1,0]=====>今/天 

根据第一个模板 U00:%x[-2,0]能得到的转移特征函数如下: 

func1=if(output=B and feature=’U00:小‘ ) return 1 else return 0 

其中 output=B 指的是当前词(字)的预测标记,也就是’今‘的预测标记,每个模板会把所有可能的标记输出都列一遍,然后通过训练确定每种标记的权重,合理的标记在训练样本中出现的次数多,对应的权重就高,不合理的标记在训练样本中出现的少,对应的权重就少,但是在利用模板生成转移特征函数是会把所有可能的特征函数都列出来,由模型通过训练决定每个特征的重要程度。 

func2=if(output=I and feature=’U00:小’) return 1 else return 0  func3=if(output=S and feature=’U00:小) return 1 else return 0 

得到三个特征函数之后当前这个字’今‘的特征函数利用第一个模板就得到全不了,然后扫描下一个字‘天‘,以’天‘字作为当前字预测这个字的标记 tag,同样会得到三个特征函数:

func4=if(output=B and feature=’U00:明’) return 1 else return 0  func5=if(output=I and feature=’U00:明’) return 1 else return 0  func6=if(output=S and feature=’U00:明’) return 1 else return 0 

特征函数中的 feature 指的是当前词的-2 位置对应的词或对应的词的特征,因为在这里没有其他特征了,所以用字本身做特征,有的会有词性,那 feature 就会是’明‘这个字对应的词性而不是字本身了。 
这个 feature 的作用就是确定模板所确定的当前词和临近词

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 186 关注
  • crf
    1 引用
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 58 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 11 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 605 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 101 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1706 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 541 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 4 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 22 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 519 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 35 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 159 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • danl
    150 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 65 回帖 • 444 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 174 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 7 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 211 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 651 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • sts
    2 引用 • 2 回帖 • 197 关注