IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> CRF(条件随机场) 学习总结 -> 正文阅读

[人工智能]CRF(条件随机场) 学习总结

1. Why CRF(条件随机场)

如果用softmax给序列中的每一帧都进行分类。并没有直接考虑输出的上下文关联

CRF主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活,如下图所示

逐帧softmax并没有直接考虑输出的上下文关联

?条件随机场

然而,当我们设计标签时,比如用s、b、m、e的4个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如s后面就不能接m和e,等等。逐标签softmax并没有考虑这种输出层面的上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。

而CRF则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:

CRF在输出端显式地考虑了上下文关联

CRF在输出端显式地考虑了上下文关联

2. 什么是CRF

当然,如果仅仅是引入输出的关联,还不仅仅是CRF的全部,CRF的真正精巧的地方,是它以路径为单位,考虑的是路径的概率

2.1?模型概要

假如一个输入有nn帧,每一帧的标签有kk种可能性,那么理论上就有knkn种不同的输出。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径。

4tag分词模型中输出网络图

?4tag分词模型中输出网络图

而在序列标注任务中,我们的正确答案是一般是唯一的。比如“今天天气不错”,如果对应的分词结果是“今天/天气/不/错”,那么目标输出序列就是bebess,除此之外别的路径都不符合要求。换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从knkn条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是knkn类中选一类的分类问题!

这就是逐帧softmax和CRF的根本不同了:前者将序列标注看成是nk分类问题,后者将序列标注看成是1k^n分类问题。

3.?序列标注模型中的两种标记模式

3.1?SBME标记法

S 表示 表示单个字的词(single word) , B表示词的开始(begin)即首字,M表示词的中间(Middle)即词的中间字,E表示词的结尾(end),即尾字 一般在用数字这样表示:

# -1, unknown
# 0-> 'S'
# 1-> 'B'
# 2-> 'M'
# 3-> 'E'

样例: 我爱使用小米手机玩王者荣耀? ?->?我<S>爱<S>使<B>用<E>小<B>米<M>手<M>机<E>玩<S>王<B>者<M>荣<M>耀<E>

3.2? CS标记法

C 表示 当前的字char和后面字char是连续的,它们共同表示一个词,S 表示 当前字char和后面字char是两个不同的词 。
一般用数字这样表示:
 #-1,unkonwn
 # 0  -> 'C'
 # 1 -> 'S'

样例:???我爱使用小米手机玩王者荣耀? ->?我<S>爱<S>使<C>用<S>小<C>米<C>手<C>机<S>玩<S>王<C>者<C>荣<C>耀<S>?

4. 代码实现

安装tensorflow-addons. 因为Tensorflow 1 的实现在contrib. tensorflow 2的实现在Tensorflow_addons里面

pip install tensorflow-addons

测试例子

import tensorflow_addons as tfa
import tensorflow as tf
import numpy as np

inputs=tf.random.truncated_normal([2,10,5])
target=tf.convert_to_tensor(np.random.randint(5,size=(2,10)),dtype=tf.int32)
out=tf.keras.layers.Softmax(inputs)

lens=tf.convert_to_tensor([9,6],dtype=tf.int32)
log_likelihood,tran_paras=tfa.text.crf_log_likelihood(inputs, target, lens)
batch_pred_sequence,batch_viterbi_score=tfa.text.crf_decode(inputs,tran_paras,lens)
loss=tf.reduce_sum(-log_likelihood)
print('log_likelihood is :',log_likelihood.numpy())
print('batch_pred_sequence is :',batch_pred_sequence.numpy())
print('loss is :',loss.numpy())

输出

log_likelihood is : [-18.046837 -14.958561]
batch_pred_sequence is : [[0 3 1 4 3 4 2 0 4 3]
 [3 0 3 3 2 2 4 1 4 1]]
loss is : 33.005398

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:05:19  更:2021-08-29 09:05:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 17:59:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码