热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BidirectionalLSTMCNNsCRF

上期使用LSTM做短文本分类效果不如CNN,或许有朋友会问什么场景下LSTM能体现出序列性的优势,本期使用双向LSTM-CNNs-CRF实现SequenceLabeling。CRF

上期使用LSTM做短文本分类效果不如CNN,或许有朋友会问什么场景下LSTM能体现出序列性的优势,本期使用双向LSTM-CNNs-CRF实现Sequence Labeling。

CRF-条件随机场

Conditional Random Fields,简称CRF

给定一组输入序列的条件下输出另一组序列的条件概率分布,判别式模型。

CRF优点:着眼于局部最优解,在已给出 z 的条件下计算可能的序列 y 的概率分布

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

LSTM优点:获取长时间序列上样本与样本之间的关系。而BiLSTM可以更有效的获取上下文的特征。

BiLSTM+CRF已在NLP多数场景中表现出让人意想不到的效果。比如分词,相比于传统的分词器,BiLSTM能发挥双向获取句子特征这一优势,分词效果更接近人的感觉。

分词实现的一个简单例子:

>>> print(sg.sentence_cut("ngram是自然语言处理中一个非常重要的概念,通常在NLP中,
人们基于一定的语料库,可以利用ngram来预计或者评估一个句子是否合理。
另外一方面,ngram的另外一个作用是用来评估两个字符串之间的差异程度。
这是模糊匹配中常用的一种手段。本文将从此开始,
进而向读者展示ngram在自然语言处理中的各种powerful的应用"))
['ngram', '是', '自然语言', '处理', '中', '一个', '非常', '重要', '的', '概念',
',', '通常', '在', 'NLP', '中', ',', '人们', '基于', '一定', '的', '语料库',
',', '可以', '利用', 'ngram', '来', '预计', '或者', '评估', '一个', '句子',
'是否', '合理', '。', '另外', '一方面', ',', 'ngram', '的', '另外', '一个',
'作用', '是', '用来', '评估', '两个', '字符串', '之间', '的', '差异', '程度',
'。', '这是', '模糊匹配', '中', '常用', '的', '一种', '手段', '。', '本文', '将',
'从此', '开始', ',', '进而', '向', '读者', '展示', 'ngram', '在', '自然语言',
'处理', '中', '的', '各种', 'powerful', '的', '应用']

CNN在Sequence Labeling中多数使用在英文里,它能更好的提取出单词中的形态信息,例如单词的前后缀;中文里,CNN也可以使用在句子里分词后的字层面,获取更多特征,有兴趣的朋友可以试试。

本期模型的实现来自于论文End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF

训练中使用的数据来自于CoNLL 2003

代码

全部代码链接在文章最后面

Char级的CNN实现

这里初始化embedding权重时使用的Glorot初始化

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

Word级BiLSTM实现

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

CRF的实现学习自tutorial-pytorch,不过教程中是逐条数据训练,而本期代码改进为按mini-batch训练

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

viterbi解码

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

结果

准确率:91.5%

《Bi-directional LSTM-CNNs-CRF》
《Bi-directional LSTM-CNNs-CRF》

全部代码

github代码


推荐阅读
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文介绍了如何使用JFreeChart库创建一个美观且功能丰富的环形图。通过设置主题、字体和颜色等属性,可以生成符合特定需求的图表。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 任务,栈, ... [详细]
  • 本文介绍了如何在MATLAB中实现单变量线性回归,这是基于Coursera上Andrew Ng教授的机器学习课程中的一个实践项目。文章详细讲解了从数据可视化到模型训练的每一个步骤。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • Python 中使用 Pyecharts 绘制雷达图详解
    本文将详细介绍如何在 Python 环境中利用 Pyecharts 库来创建美观且功能丰富的雷达图。适合需要图形化展示多维度数据的开发者和研究人员。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • Docker 自定义网络配置详解
    本文详细介绍如何在 Docker 中自定义网络设置,包括网关和子网地址的配置。通过具体示例展示如何创建和管理自定义网络,以及容器间的通信方式。 ... [详细]
author-avatar
担路赢客免费建站
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有