概述
这篇博文主要进行源码的一些解析,至于像LSTM和CRF这种算法的原理不做过多的解释,在代码中它们也被简单的封装成一两行代码。CRF的理论至今很少见到比较详尽易懂的博客,基本是怼公式,我看得也是云里雾里,为了快速上手,还是决定从源码搞起,先把东西做了,再补细节。
代码部分
还是先放一张模型的整体图,希望大家有个整体的把握。
主要的就三层,look-up,lstm,crf,架构还是比较清晰的。这模型已经出来三年了,网上开源代码一大堆,在本文结束的地方,我会放上一个比较简单源码的链接。
main
先从主函数看起,前面是一些参数的设置,这边都写在了主函数里面,其实可以另外配置一个参数设置文件。
import tensorflow as tf
import numpy as np
import os, argparse, time, random
from model import BiLSTM_CRF
from utils import str2bool, get_logger, get_entity
from data import read_corpus, read_dictionary, tag2label, random_embedding
## Session configuration
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
#屏蔽了一些打印日志,只显示ERROR
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # default: 0
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
config.gpu_options.per_process_gpu_memory_fraction = 0.2 # need ~700MB GPU memory
## hyperparameters
##一些参数的设置
parser = argparse.ArgumentParser(description='BiLSTM-CRF for Chinese NER task')
parser.add_argument('--train_data', type=str, default='data_path', help='train data source')
parser.add_argument('--test_data&