简介

世界上产生的文本数据量十分惊人:谷歌每秒处理超过40000次搜索!根据福布斯的报道,我们每分钟要发送1600万条短信,在脸谱网(Facebook)上发布51000条评论。对门外汉来说,光是掌握数据量的绝对大小就很难吧?

仅新闻网站和其他在线媒体每小时就会生成大量文本内容。如果没有正确的工具,分析数据中的模式则令人望而生畏。在此我们将讨论运用实体识别技术的条件随机域 (Conditional Random Fields, CRF)方法。

本文解释了自标注数据集上条件随机域的概念及其python实现。这是一个非常有趣的概念,相信你会喜欢与我一起开启这次旅行!

目录

1. 什么是实体识别?

2. 案例研究的目的和理解不同的方法

3. 条件随机域 (CRF)的构造

4. 标注训练数据

利用GATE进行标注

5. 利用Python构建和训练一个CRF模块

什么是实体识别?

随着人们对自然语言处理(NLP)的深入研究,实体识别技术得到了越来越多的运用。实体通常可以定义为数据科学家或业务感兴趣的那部分文本,可以频繁提取的实体有人名、地址、帐号、位置等。这些只是简单的例子,我们可以根据手头的问题定义自己的实体。

举个简单的实体识别的例子:如果数据集中有任何带有“London”的文本,该算法将自动将其分类或分类为一个位置(你一定对我要做的事情有了大致的了解)。

让我们通过一个简单的案例研究来更好地理解这个课题。

案例研究的目的&理解不同方法

假设你是一家保险公司的分析团队成员,理赔小组每天都会收到数千封客户的索赔申请电子邮件。理赔操作小组在处理每封电子邮件之前都会查看每一封电子邮件,并用邮件中的详细信息来更新一份在线表单。

现在要求你与IT团队协作,实现在线表单填充自动化。针对这个任务,分析团队需要构建一个定制的实体识别算法。

要识别文本中的实体,首先必须能够识别模式。例如,如果我们需要识别索赔号,我们可以查看它周围的单词,如“my id is”或“my number is”等等。让我们研究下面将要提到的识别模式的几种方法。

1. 正则表达式:正则表达式(RegEx)是一种有限状态自动器,它们能识别遵循某种结构的模式。例如,电子邮件ID、电话号码等可以很好地利用RegEx来识别。但这种方法的缺点是,需要知道在索赔号之前可能出现的所有准确单词。这不是一种学习方法,而是一种蛮力的方法。

2. 隐马尔可夫模型(Hidden Markov Model, HMM):这是一种识别和学习模式的序列建模算法。虽然HMM在学习模式中考虑了实体周围的未来观察,但它假设特征之间是相互独立的。这种方法比正则表达式更优,因为我们无需为单词集精准建模。但就性能而言,它并不是最好的实体识别方法。

3. MaxEnt马尔可夫模型(MEMM):这也是一种序列建模算法。这个算法无需假设特征是相互独立的,也不用考虑未来的观察学习模式。就性能而言,它也不是识别实体关系的最佳方法。

4. 条件随机域 (CRF):这种序列建模算法不仅假设特征之间相互依赖,而且在学习模式时考虑未来的观察。它结合了HMM和MEMM的优点。就性能而言,它被认为是解决实体识别问题的最佳方法。

构造条件随机域 (CRF)

词袋(BoW)方法适用于多个文本的分类问题,这种方法假定单词的存在与否比单词的顺序更为重要。然而,词袋(BoW)方法也存在一些问题,如实体识别、词性(part of speech)识别中,单词顺序很重要。条件随机域 (CRF)使用词的序列,而不仅仅是词的存在。

现在让我们来了解CRF是如何构造的。

下面是CRF的公式,其中Y是隐藏状态(例如,词性的一部分),X是观察到的变量(在我们的示例中,这是实体或它周围的其他单词)。

一般说来,CRF公式有两个组成部分:

1. 归一化:你可能已经注意到:方程的右边没有概率,但是有权值和特征。然而,预期的输出是一个概率,因此需要归一化。归一化常数Z(X)是所有可能的状态序列之和,使总数成为1。您可以在参考文献中找到更多细节,从而了解我们是如何得出这个值的。

2. 权重和特征:该部分可视为具有权值和相应特征的Logistic回归公式。权重估计采用最大似然估计,特征则由我们来定义。

标注训练数据

在了解CRF模型之后,我们来管理训练数据。第一步是标注。标注是对相应的单词打标记的过程。为简单起见,我们假设只需要将2个实体填充到在线表单里,即索赔人的名称和索赔号。

以下是收到的电子邮件样本。需要对这样的电子邮件进行标注之后,才可以训练CRF模型。标注之后的文本为XML格式。尽管你可以选择用你自己的方式标注文档,但我会告诉你如何使用GATE架构来做同样的事情。

收到的电子邮件全文如下:

“Hi,

I am writing this email to claim my insurance amount. My id is abc123 and I claimed it on 1st January 2018. I did not receive any acknowledgement. Please help.

Thanks,

randomperson”

标注后的电子邮件全文如下:

“Hi, I am writing this email to claim my insurance amount. My id is abc123 and I claimed on 1st January 2018. I did not receive any acknowledgement. Please help. Thanks, randomperson”

使用GATE架构进行标注

让我们了解如何使用文本工程的通用架构 (GATE)对文本进行标注。请按照以下步骤安装GATE。执行下载的安装程序,按照安装步骤来安装GATE平台

安装完成之后,运行应用程序可执行文件,如下所示:打开应用程序后,通过右键单击“LanguageResources”>New>GateDocument,将电子邮件迭代加载到语言资源中,如下所示。给每个电子邮件命名,将编码设置为“utf-8”,这样在Python中就没有问题了,通过单击SourceUrl中的图标浏览电子邮件,如下所示。

1. 一次打开一封电子邮件,开始标注练习。有两种方式来构建标注释

A.将标注后的XML加载到GATE中并使用它

b.在fly中创建标注并使用它们。在本文中,我们将演示这种方法。

2. 单击“语言资源”中的电子邮件即可打开它。点击“注释集”,然后将光标放在选定的单词上面,停顿几秒钟。弹出一个标注窗口,然后键入标注来代替“_NEW_”,按Enter键。这样一个新的标注便创建好了。如下所示,重复以上操作,对每封电子邮件添加注释。为所有训练邮件都有添加好标注之后,通过导航到Language Resources>NEW>GATE Corpus创建一个易于使用的语料库

给新语料库取一个名字作为参考,点击导航图标,将每一封电子邮件添加到语言语料库中,如下所示

通过右键单击语料库,并导航到“Inline XML(.xml)”,将语料库保存为本地文件夹中的“Inline XML(.xml)”,如下所示:

在下一个弹出窗口中,选择预填充的标注类型并删除它们,手动键入标注内容代替预填充的标注。单击“includeFeatures”选项,将其设定为假(False),并在“rootElement”框中键入“Document”。完成所有这些更改后,单击“Save To”图标,将文件保存到计算机上的文件夹中。以下截图供参考。

上述过程将所有带标注的电子邮件保存到一个文件夹中。

用Python构建和训练CRF模块首先下载pycrf模块。PIP安装的命令是“pip install python-crfsuite”, conda安装的命令是“conda install -c conda-forge python-crfsuite”。

如果按照上述步骤无法安装,请从win-64/python-crfsuite-0.9.2-py27_vc9_0.tar.bz2提取pycrfSuet和python_crfsuite-0.9.2-py2.7.egg-info文件,并将它们放在其他包所在的文件夹中。例如,如果使用Anaconda,那么可以把它们放在 anaconda>lib>site-packages文件夹中。

安装完成之后,您就可以训练和构建自己的CRF模块了。让我们开始吧!

首先定义和构建一些函数。

然后导入带标注的训练数据。

生成特征,这些是NER算法在nltk中使用的默认特性,可以对它进行修改定制。

好了,我们可以构建特征,并创建训练和测试数据框架。

来测试一下模型。

还可以通过选择相应的行号“i”来检查任意预测值。

检查一下模型的性能。

打印分类报告。可以在此模型的基础上,构建更好的特征来提高性能。

现在,您已经了解到如何标注训练数据,如何使用Python来训练CRF模型,以及如何从新文本中识别实体。虽然该算法提供了一些基本的特征集,但是您也可以提出自己的一组特征来提高模型的准确性。

尾注

总结一下,这是我们在本文中讨论的要点:实体是当前的业务问题感兴趣的那一部分文本

在识别实体的过程中,单词的序列或标记是识别实体模式的重要方法

虽然正则表达式、基于图形的模型、隐马尔可夫模型和最大熵马尔可夫模型可以识别实体。然而,条件随机场(CRF)是一种流行且可以更好地解决实体识别问题的方法

CRF是一种基于无向图的模型,它考虑的词不仅发生在实体之前,而且还可以在它之后

可以利用GATE架构对训练数据进行标注

提供的Python代码可以帮助训练CRF模型并从文本中提取实体

总之,本文为您的业务问题提供一个良好的起点。

参考文献

python语言特点多模型_利用CRF模型进行文本分类完整教程(Python语言)相关推荐

  1. python 估值模型_利用RFM模型建模,并通过聚类分析、分类,分别算出8中不同的价值会员...

    RFM-Clustering 利用RFM模型建模,并通过聚类分析.分类,分别算出8中不同的价值会员 RFM模型构建会员价值标签 R:最近一次消费(Recency) F:消费频率(Frequency) ...

  2. python如何实现接口安全_利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法与流程...

    本发明涉及人机交互技术领域,具体为一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法. 背景技术: 编程是人与计算机交互最直接与高效的方式,由于其专业性与敏感性,一般产品不会提供该 ...

  3. python文本分类模型_下载 | 最全中文文本分类模型库,上手即用

    原标题:下载 | 最全中文文本分类模型库,上手即用 本文转自『大数据文摘』 如何选择合适的模型上手进行中文文本分类呢? 别慌,福利来了,GitHub上一位名为"huwenxing" ...

  4. ML之FE:风控场景之金融评分卡模型之利用LoR模型权重变量系数正负符号结合p-value/P值大小实现变量筛选

    ML之FE:风控场景之金融评分卡模型之利用LoR模型权重变量系数正负符号结合p-value/P值大小实现变量筛选 目录 利用LoR模型权重变量系数正负符号结合p-value/P值大小实现变量筛选

  5. 【机器学习】贝叶斯分类三大实战项目:高斯模型进行疾病诊断、多项式模型进行文本分类、伯努利模型进行好/差评判别

    贝叶斯分类三大实战项目:高斯模型进行疾病诊断.多项式模型进行文本分类.伯努利模型进行好/差评判别 1 贝叶斯高斯模型 1.1 模块导入以及数据加载 1.2 划分数据 1.3 模型创建与评估 2 贝叶斯 ...

  6. python血压测量程序代码_利用TensorFlow2.0为胆固醇、血脂、血压数据构建时序深度学习模型(python源代码)...

    背景数据描述 胆固醇.高血脂.高血压是压在广大中年男性头上的三座大山,如何有效的监控他们,做到早发现.早预防.早治疗尤为关键,趁着这个假期我就利用TF2.0构建了一套时序预测模型,一来是可以帮我预发疾 ...

  7. python打代码运行图形_利用aardio给python编写图形界面

    前阵子在用python写一些小程序,写完后就开始思考怎么给python程序配一个图形界面,毕竟控制台实在太丑陋了. 于是百度了下python的图形界面库,眼花缭乱的一整页,拣了几件有"特色& ...

  8. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  9. python支持函数式编程吗_利用Fn.py库在Python中进行函数式编程

    尽管Python事实上并不是一门纯函数式编程语言,但它本身是一门多范型语言,并给了你足够的自由利用函数式编程的便利.函数式风格有着各种理论与实际上的好处(你可以在Python的文档中找到这个列表): ...

  10. python 翻译库本地库_利用python爬取并翻译GEO数据库

    原标题:利用python爬取并翻译GEO数据库 GEO数据库是NCBI创建并维护的基因表达数据库,始于2000年,收录了世界各国研究机构提交的高通量基因表达数据,现芯片集数据量高达12万以上.想要从这 ...

最新文章

  1. Leangoo英文版来了~
  2. Python 3 判断2个字典相同
  3. OSChina 周日乱弹 ——科普逗逼行为准则
  4. Activity传递对象的方法
  5. yii2中的rules验证规则
  6. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
  7. python threading.Semaphore
  8. qt connect函数_Qt官方示例广播发送器
  9. console.log()中的运算与打印事件
  10. The Journal of Neuroscience: 珠心算训练有助于提高儿童的视觉空间工作记忆
  11. 可复制的领导力前两章总结
  12. 计算机毕业设计Java移动垃圾分类车管理平台(源码+系统+mysql数据库+Lw文档)
  13. 用python编程一个图形_Python的图形化窗口编程(1)
  14. 快速刷新页面ajax出现404,react使用BrowserRouter打包后,刷新页面出现404
  15. python egg_python egg 简介
  16. canvas:绘制简单春联demo
  17. 可信时间戳服务,如何确保电子数据法律效力?
  18. 选择稀疏控制点的多标记点云标注
  19. 电脑用计算机软件一直闪退,电脑打开软件出现闪退的解决方法
  20. 互联网日报 | 蛋壳公寓否认破产;滴滴发布首款定制网约车D1;京东Q3营收1742亿元超预期...

热门文章

  1. FishC《零基础学习python》笔记--第002讲:用Python设计第一个游戏
  2. 嵌入式linux离线地图,基于gmap.net制作离线地图下载器
  3. Maven dependencyManagement 详解
  4. 大四学生发明文言文编程语言,脑洞新奇
  5. r语言degseq2_第二次RNA-seq实战总结(3)-用DESeq2进行基因表达差异分析
  6. 2013职称计算机试题,2013年职称计算机Word试题及答案(三)
  7. multisim模拟电路加法器_利用multisim仿真设计反相加法电路
  8. 微信公众平台开发者模式和编辑模式有什么用
  9. 郝斌数据结构与算法自学视频教程
  10. 如何直接操作SVN将分支代码合并到主干