Python 条件随机场(CRF) 序列标注 介绍及工具简单用法解析

2023-10-27

CRF简介

  Conditional Random Field:条件随机场,一种机器学习技术。

  CRF由Lafferty等人于2001年提出,结合了最大熵模型和隐马尔可夫模型的特点,是一种无向图模型,近年来在分词、词性标注和命名实体识别等序列标注任务中取得了很好的效果。条件随机场是一个典型的判别式模型,其联合概率可以写成若干势函数联乘的形式,其中最常用的是线性链条件随机场。

  感兴趣的同学可以去参看此贴,对CRF的原理进行了详细的介绍:
  如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?

CRF++ 用法介绍

安装

  在Linux或者Mac OS系统下,下载C++源代码安装包(CRF++-0.58.tar.gz)之后,按照如下步骤进行安装:

  • CD命令进入到代码主目录后,依次输入以下命令configuremake(sudo) make install就可以完成C++库的安装。
    注:最后一条需要管理员模式,输入”sudo”进入

  • 再进入到子目录python下,安装python包:

    python setup.py build
    (sudo) python setup.py install
  • 安装完毕之后,可以在python解释器下测试:import CRFPP, 如果不报错,则准备工作就绪。

用法介绍

  在CRF++ 的example目录下有个seg目录,这个seg目录对应的是一个日文分词的样例,我们后续的工作可以按照这个案例来进行。在安装包目录下,执行cd example/seg命令后,切换到seg目录后,发现有4个文件:

exec.sh(执行脚本)
template(特征模板)
test.data(测试集)
train.data(训练集)    

  有了这4个文件,我们可以做得事情就比较简单,只要按测试集,训练集的格式准备数据就可以了,特征模板和执行脚本可以套用,不过这里简单解读一下这几个CRF++文件。首先来看训练集:

毎 k   B
日 k   I
新 k   I
聞 k   I
社 k   I
特 k   B
別 k   I
顧 k   B
問 k   I 

  这里第一列是待分词的日文字,第二列暂且认为是词性标记,第三列是字标注中的2-tag(B, I)标记,这个很重要,对于我们需要准备的训练集,主要是把这一列的标记做好,不过需要注意的是:列与列之间是制表符“\t”隔开的,否则会导致feature_index.cpp(126) [max_size == size] inconsistent column size错误。

  再来看测试集的格式:

よ h   I
っ h   I
て h   I
私 k   B
た h   B
ち h   I
の h   B
世 k   B

  同样也有3列,第一列是日文字,第二列第三列与上面是相似的,不过在测试集里第三列主要是占位作用。事实上,CRF++对于训练集和测试集文件格式的要求是比较灵活的,首先需要多列,但不能不一致,既在一个文件里有的行是两列,有的行是三列;其次第一列代表的是需要标注的“字或词”,最后一列是输出位”标记tag”,如果有额外的特征,例如词性什么的,可以加到中间列里,所以训练集文件最少要有两列
  接下里我们再来详细的分析一下特征模板文件:
  

# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 条件随机场(CRF) 序列标注 介绍及工具简单用法解析 的相关文章

  • 【算法】Java 中栈的使用

    栈是一种重要的数据结构 满足后进先出 是面试中会重点考察的内容 下面通过例题来学习栈的使用 1 力扣20 有效的括号 1 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确
  • 软件中常用的反义词组

    软件中常用的反义词组 add remove begin end create destroy insert delete first last g et release increment decrement put get add del
  • 软件项目中的成本构成及估算方法

    随着知识经济 信息时代的来临 计算机软件业迅猛发展 商品化 资本化 资产化的计算机软件的价值 评估的社会需求也日益增多 而且有越来越多的趋势 由于系统软件通常是一些规模大 复杂程度高的人一 机系统 因此 系统软件的开发 使用 维护 管理的过
  • linux安装.AppImage后缀安装包

    假设有个安装包名称为 myinstall AppImage 添加权限后直接可以运行 chmod a x myinstall AppImage myinstall AppImage
  • ubuntu18 新增配置用户删除用户

    进入root用户 sudo su 输入密码 新安装的ubuntu修改root用户密码 sudo passwd 输入密码 useradd 命令格式 命令一 这种命令会在登录界面显示用户名 sudo useradd m ftpuser d ho
  • 安卓手机玩游戏卡顿怎么解决_和平精英:你还在为游戏卡顿掉帧而烦恼吗?5招之内帮你解决...

    相信大家在玩和平精英时必然会遇到游戏卡顿的现象吧 想要解决这些问题吗 赤几现在就来教你哟 在上个游戏版本的时候 不少小伙伴在玩和平精英的时候遇到人会出现画面掉帧很厉害的情况 一般只要卡了就说明附近有人了 但最近的更新中 官方尽可能的优化了这
  • Excel批量创建带超链接的工作表目录

    工作中总会遇到包含多个工作表的工作簿 很多人都在想这时候如果能有一个目录 不但能显示出所有的工作表名称 还能够链接跳转到指定的工作表 该有多好呀 于是 一些勤奋的人们就开始行动了 他们手动创建超链接指向各个工作表 但当工作表数量很多时 手动
  • 2023华为od机试 Python【拔河比赛】

    前言 本题使用Python解答 如果需要Java代码 请参考以下链接 点我 题目 我们需要为拔河比赛挑选人选 挑选规则如下 1首先按身高排序 然后按体重排序 2 选出10个最合适的人选 输入是一个数组 数组存储的是所有人员的身高 体重信息
  • vue项目的简体繁体切换

    vue项目的简体繁体切换 在项目中有这样的一个需求 需要对APP内的字体进行简体和繁体的切换 一开始在项目中下载引入了vue i18n的语言包 但是有个缺点就是i18n语言包不能对接口返回的字体进行转换 还有的就是只能实现部分字体的转换 工

随机推荐

  • AcWing 826. 单链表

    题目 实现一个单链表 链表初始为空 支持三种操作 1 向链表头插入一个数 2 删除第k个插入的数后面的数 3 在第k个插入的数后插入一个数 现在要对该链表进行M次操作 进行完所有操作后 从头到尾输出整个链表 注意 题目中第k个插入的数并不是
  • Spring中@component的使用

    Spring中 component的使用 component是spring中的一个注解 它的作用就是实现bean的注入 在探究 component前先了解一下注解 何为注解 注解本质上就是一个类 开发中我们可以使用注解 取代 xml配置文件
  • [项目管理-14]:大规模组织的项目管理办公室PMO

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第1章 什么是PMO 1 1 PMO定义 1 2 PMO的由来 1 3 PMP的职责 第2章 PMO的组织架构 1 1 架构 1 2
  • Python 之 元组小结

    字典是Python中唯一内建的映射类型 字典中的值并没有特殊的顺序 键可以是数字 字符串甚至是元组 dic 1 a 2 b 3 c dict 创建字典 gt gt gt dic 1 a 2 b 3 c gt gt gt dic dict d
  • HAL库函数中的HAL_I2C_Mem_Write /HAL_I2C_Mem_Read中的DevAddress解析

    在HAL库函数中的HAL I2C Mem Write HAL I2C Mem Read两个函数的作用就是玩IIC设备中写入 读取多个直接的数据 函数原型 HAL StatusTypeDef HAL I2C Mem Read I2C Hand
  • java---lambda函数

    背景 lambda 表达式是一个可传递的代码块 可以在以后执行一次或多次 就类似于sort arrs comparator 函数在排列结束之前会不停调用comparator代码块 在java中传递一个代码段并不容易 不能直接传递代码段 Ja
  • LeetCode常见经典算法——KMP算法

    常见经典算法 KMP算法 参考 https www bilibili com video BV1jb411V78H from search seid 6567338116212695926 关键字 有效回溯 最大公共前后缀长度 样本串的ne
  • 西门子200PLC软件的安装和使用

    西门子200PLC软件 v4 0 STEP 7 MicroWIN SP6 的安装和使用 文章目录 目录 文章目录 前言 二 安装时可能会出现的问题 1 无法进行安装并出现英文提示 2 解决方法 三 通信问题 PC PG设置无PC PPI C
  • makefile基础及常用规则

    什么是makefile 或许很多Windows的程序员都不知道这个东西 因为那些Windows的IDE都为你做了这个工作 但我觉得要作一个好的和professional的程序员 makefile还是要懂 特别在Unix下的软件编译 你就不能
  • HTML炫酷文字流

    看到了黑客帝国里源代码 也用HTML写了一个 css padding 0 margin 0 html overflow hidden Html部分
  • Nodejs实现给手机发送短信验证码用于登录功能(免费短信)

    我们开发的应用通常需要通过手机短信验证码验证进行登录 方便了那些容易忘记密码的用户 同时也降低了是密码被盗的风险性 文章目录 1 注册容联云通信账号 免费 2 nodejs发送请求即可发送短信验证码 1 注册容联云通信账号 免费 1 点击这
  • HTTP 304状态码的详细讲解

    HTTP 304状态码的详细讲解 304状态码或许不应该认为是一种错误 而是对客户端有缓存情况下服务端的一种响应 整个请求响应过程如下 客户端在请求一个文件的时候 发现自己缓存的文件有 Last Modified 那么在请求中会包含 If
  • Python实现动态画图并生成gif图像(matplotlib)

    通过Matplotlib中的animation可以方便的生成动态的画图并保存到gif文件 示例代码如下 import numpy as np import matplotlib pyplot as plt import matplotlib
  • 2021-11-07

    Your CLT does not support macOS 11 5 It is either outdated or was modified Please update your CLT or delete it if no upd
  • python数组变整数

    对于array格式的数组来说 numpy提供了一个方便的函数 np trunc arr 来执行取整操作 A np array 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 B np trunc A print B 1 2
  • 打印vector容器的模板函数

    今天在测试vector的时候想写一个vector的打印函数 为了测试不同数据类型的vector 肯定是编一个模板函数 然后就报错 直到看了 理解typename的两个含义 才明白哪里出错 下面是最后正确的代码 include
  • elementui el-form中el-form-item自定义label

    问题描述 在开发中有时候对表单的label需要加入图标 如下图所示 实现方法 将自定义代码块中加入属性slot label 即可 下面是代码实现 仅提供自定义label行 方便大家使用
  • element-ui 修改el-form-item样式

    文章目录 form结构 修改el form item所有样式 只修改label 只修改content 只修改input 只修改button form结构
  • 电芯制备流程

    电芯制备流程 电芯是最基本的单位 多个电芯 cell 组成一个模组 module 多个模组主城一个电池包 pack 电芯cell工艺流程分为三大步 极片制备 电芯组装 化成检测 极片制备 电芯的正负极表面有活性材料 且具有特定形状的集流体
  • Python 条件随机场(CRF) 序列标注 介绍及工具简单用法解析

    CRF简介 Conditional Random Field 条件随机场 一种机器学习技术 CRF由Lafferty等人于2001年提出 结合了最大熵模型和隐马尔可夫模型的特点 是一种无向图模型 近年来在分词 词性标注和命名实体识别等序列标