0%

条件随机场 CRF

标题 说明 附加
如何轻松愉快地理解条件随机场(CRF)? milter 浅析 2017
如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别? Scofield 详解 2018
zh-NER-keras 基于keras的BiLstm与CRF实现命名实体标注this project is a sample for Chinese Named Entity Recognition(NER) by Keras 2.1.4 2018
【中文分词】条件随机场CRF

科普 CRF

逐标签Softmax

条件随机场

逐标签softmax是一种简单有效的方法,但有时候会出现不合理的结果。比如我们用sbme来做4标签分词时,逐标签softmax无法排除出现bbbb这样的序列的可能性,但这个序列是违反了我们的解码规则(b后面只能接m或e)。

因此,有人说逐标签softmax不需要动态规划,那是不对的,这种情况下,我们至少需要一个“非0即1”的转移矩阵,直接把不合理的转移概率设为0(如p(b|b) =0,然后通过动态规划保证得到合理的序列。

线性链CRF

bilsm_crf_model.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from keras.models import Sequential
from keras.layers import Embedding, Bidirectional, LSTM
from keras_contrib.layers import CRF
import process_data
import pickle

EMBED_DIM = 200
BiRNN_UNITS = 200


def create_model(train=True):
if train:
(train_x, train_y), (test_x, test_y), (vocab, chunk_tags) = process_data.load_data()
else:
with open('model/config.pkl', 'rb') as inp:
(vocab, chunk_tags) = pickle.load(inp)
model = Sequential()
model.add(Embedding(len(vocab), EMBED_DIM, mask_zero=True)) # Random embedding
model.add(Bidirectional(LSTM(BiRNN_UNITS // 2, return_sequences=True)))
crf = CRF(len(chunk_tags), sparse_target=True)
model.add(crf)
model.summary()
model.compile('adam', loss=crf.loss_function, metrics=[crf.accuracy])
if train:
return model, (train_x, train_y), (test_x, test_y)
else:
return model, (vocab, chunk_tags)

使用条件随机场 CRF 完成命名实体识别 NER

本站所有文章和源码均免费开放,如您喜欢,可以请我喝杯咖啡