实习点滴(3)--以“词性标注”为例理解CRF算法

2023-12-15 10:38

本文主要是介绍实习点滴(3)--以“词性标注”为例理解CRF算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        看了CRF相关的东西好几天了,现在也过来总结总结。我本人喜欢以讲故事的方式阐述一些东西,纯理论总是很抽象,而且很容易让人失去耐心。那就以“词性标注”为切入点,去理解一下CRF(Conditional Random Field)条件随机场的算法原理(难免有不对或者不全的地方,持续更新)。

      相关定义:

        CRF(Conditional Random Field)条件随机场模型是一种典型的判别式模型,它在观测序列的基础上对目标序列进行建模,重点解决“序列化标注问题”。言下之意,就是给定的输出识别序列Y和观测序列X,通过定义条件概率P(Y|X)来描述模型

      特点长处:

        条件随机场模型既具有判别式模型的优点,又具有产生式模型考虑到的上下文标记间的转移概率。以序列化形式进行全局参数优化和解码的特点,解决了其他判别式模型难以避免的标记偏执问题

      应用场景:

        可以用于“序列标记”、“数据分割”、“组块分析”等自然语言处理任务。在“中文分词”、“中文人名识别”、“歧义消除”等任务中表现很好。

      算法流程:

        首先,需要将分词语料的标注符号转化为用于命名实体序列标注的标记。

        其次,确定特征模板,一般采用当前位置的前后n个位置的字及其标记表示,即以当前位置的前后n个位置范围内的子串及其标记作为观察窗口(一般n取2~3)

        然后,得到相应的特征函数

        最后,剩下的工作就是训练CRF模型的参数λ0

      实例:词性标注

        词性标注,顾名思义,就是说一句话中预测出各个词组的词性(比如:动词、名词、形容词、介词等等)。

        以一句话:“我们是中国人”为例,通过词组分割后的结果就是:“我们(n)/是(v)/中国人(n)”(这里相当于是训练数据,这样的训练数据假设我们有1000条

        假设我们的label有5个:{名词,动词,形容词,介词,副词}(当然还有很多,这里点到为止)

        现在给出一个特征模板:以当前位置为起始,向后,以n=2为滑动窗口,即:当前词和接下来的一个词为一个特征模板(假设我们类似的特征模板有7个

        准备好了吗?要开始解释公式部分了,该部分请对照CRF的公式。

                                    

        其中,函数t()代表转移函数,而函数s()代表状态函数;j是模板序列号(一种模板有一种转移特征函数),k是标签个数(一个标签有一个状态函数)

        以上边那个模板为例,我们会得到一个5*5的转移矩阵(5代表我们的label个数),矩阵中每个数代表label-->label的个数(比如:当前词为名词,下一个词为动词的次数)

        来说说什么是“状态函数”吧,状态函数则表示在标注序列中第i个位置标记((以模板序列为段)某个label的概率。(第i个位置就有5个参数)

        再来说说什么是“转移函数”吧,就是在标注序列中第i个位置是某个label到另一个label的概率,这些概率都是基于统计频数计算的。(第i个位置就有5*5个参数)

这篇关于实习点滴(3)--以“词性标注”为例理解CRF算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496147

相关文章

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心