数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、使用
2.1 数据文件格式
如果要使用
CRF++
,则训练文件、测试文件必须满足特定的格式:- 文件由很多
token
组成,每个token
占据一行,包含固定数量的字段。 - 所有
token
的字段数量相等,字段的数量没有限制,字段之间用空白分隔(空格符或者tab
符)。 - 每个字段通常表示某种含义。如:第一列表示
单词
、第二列表示词性
、第三列表示属性
...。 - 一个
sentence
由多个token
表述,sentence
之间通过空行来区分边界。 - 训练文件中,最后一个字段必须是标记,它将作为
CRF++
训练的目标。
- 文件由很多
2.2 模板文件
CRF++
使用模板文件来生成特征。模板文件需要用户编写,从而指定需要生成哪些特征。模板文件中,每一行都定义了一个特征模板。
模板文件中,以
#
开头的行是注释行。空行也会被认为是注释行而被剔除。
有两种类型的特征模板,它们通过特征模板的第一个字符来区分。
Unigram
特征模板:模板的第一个字符串为U
,这种特征模板用于描述unigram
特征。Bigram
特征模板:模板的第一个字符串为B
,这种特征模板用于描述bigram
特征。
2.2.1 宏语句
特征模板中,经常使用宏语句
%x[row,col]
。其中:%x
是固定的,是宏语句的引导字符。row
是一个整数,指定了相对于当前的数据行的行数。col
是一个整数,指定了采用第几个字段(从0
开始编号)。注意:标记列不能作为特征,因此也就不能出现在特征模板中。
假设输入数据为:
xxxxxxxxxx
He PRP B-NP reckons VBZ B-VP the DT B-NP << 当前行 current JJ I-NP account NN I-NP则下列特征模板为:
xxxxxxxxxx
%x[0,0] --> the %x[0,1] --> DT %x[-1,0] --> reckons %x[-2,1] --> PRP %x[0,0]/%x[0,1] --> the/DT ABC%x[0,1]123 --> ABCDT123
2.2.2 Unigram 特征模板
给定一个
Unigram
特征模板U01:%x[0,1]
,它会生成 $ MathJax-Element-10 $ 个特征函数,其中 $ MathJax-Element-10 $ 为训练数据的行数(剔除空白行,因为空白行是sentence
的分隔符)。每个特征函数为:
xxxxxxxxxx
func1 = if (output = LABEL1 and feature="U01:xx1") return 1 else return 0 func2 = if (output = LABEL2 and feature="U01:xx2") return 1 else return 0 func3 = if (output = LABEL3 and feature="U01:xx3") return 1 else return 0 .... funcM = if (output = LABELM and feature="U01:xxM") return 1 else return 0其中:
LABEL1,...,LABELM
就是训练文件中,每一行的标记。feature="U01:xx1",...,feature="U01:xxM"
就是训练文件中,每一行由U01:%x[0,1]
指定的、从该行提取到的特征。
事实上,上述生成的特征函数会有大量重复。
假设标记的种类一共有 $ MathJax-Element-16 $ 个,由
U01:%x[0,1]
指定的、从该行提取到的特征的种类一共有 $ MathJax-Element-14 $ 个, 则特征函数的种类一共有 $ MathJax-Element-8 $ 个。CRF++
会按照 $ MathJax-Element-16 $ 种标记, $ MathJax-Element-14 $ 种特征来自动生成 $ MathJax-Element-8 $ 个特征函数。
2.2.3 Bigram 特征模板
给定一个
Bigram
特征模板B01:%x[0,1]
,它会生成 $ MathJax-Element-10 $ 个特征函数,其中 $ MathJax-Element-10 $ 为训练数据的行数(剔除空白行,因为空白行是sentence
的分隔符)。每个特征函数为:
xxxxxxxxxx
func2 = if (output = LABEL2/LABEL1 and feature="U01:xx2") return 1 else return 0 func3 = if (output = LABEL3/LABEL2 and feature="U01:xx3") return 1 else return 0 func4 = if (output = LABEL4/LABEL3 and feature="U01:xx4") return 1 else return 0 .... funcM = if (output = LABELM/LABELM_1 and feature="U01:xxM") return 1 else return 0其中:
LABEL1,...,LABELM
、feature="U01:xx1",...,feature="U01:xxM"
的意义与Unigram
中的相同。在
Bigram
中,特征函数中的output
是当前的输出标记和前一个输出标记的联合,这也是它称作bigram
的原因。注意:它联合的是标记,而不是特征。特征的联合由宏语句来实现。
上述生成的特征函数也会有大量重复。
假设标记的种类一共有 $ MathJax-Element-16 $ 个,由
U01:%x[0,1]
指定的、从该行提取到的特征的种类一共有 $ MathJax-Element-14 $ 个,则CRF++
会按照 $ MathJax-Element-16 $ 种标记, $ MathJax-Element-14 $ 种特征自动生成 $ MathJax-Element-15 $ 个特征函数。当标记的种类 $ MathJax-Element-16 $ 较大时,
Bigram
会生成非常多的特征函数,其中非常多的特征函数在样本中的返回值只有少量的1
。这中情况下,模型的训练和测试将会非常低效。
如果某一行的内容只有一个字符
B
,则它表示:由当前的输出标记和前一个输出标记的联合生成的特征函数。
2.2.4 模板标识符
在
Unigram
特征模板和Bigram
特征模板中,在U
或者B
之后往往跟随一个数字作为标识符。标识符的作用是区分不同模板生成的特征。
例如:
xxxxxxxxxx
The DT B-NP pen NN I-NP is VB B-VP << 当前行 a DT B-NP如果有标识符,则以下两个模板生成的特征函数为:
U01:%x[-2,1]
:if (output = B-VP and feature="U01:DT") return 1 else return 0
U02:%x[1,1]
:if (output = B-VP and feature="U02:DT") return 1 else return 0
如果没有标识符,则以下两个模板生成的特征函数为:
U:%x[-2,1]
:if (output = B-VP and feature="U:DT") return 1 else return 0
U:%x[1,1]
:if (output = B-VP and feature="U:DT") return 1 else return 0
可见这两个模板生成的特征函数无法区分。
如果你需要使用
Bag Of Words:BOW
特征,则你可以不使用模板标识符。如果你需要考虑词序,则必须使用模板标识符。
2.3 训练
训练也称作
encoding
, 是通过crf_learn
程序来完成的。训练的命令为:
xxxxxxxxxx
crf_learn template_file train_file model_file其中:
template_file
:人工编写的模板文件train_file
:人工标注的训练文件model_file
:CRF++
生成的模型文件
训练的输出内容如下:
x CRF++: Yet Another CRF Tool Kit Copyright(C) 2005 Taku Kudo, All rights reserved. reading training data: 100.. 200.. 300.. 400.. 500.. 600.. 700.. 800.. Done! 1.94 s Number of sentences: 823 Number of features: 1075862 Number of thread(s): 1 Freq: 1 eta: 0.00010 C: 1.00000 shrinking size: 20 Algorithm: CRF iter=0 terr=0.99103 serr=1.00000 obj=54318.36623 diff=1.00000 iter=1 terr=0.35260 serr=0.98177 obj=44996.53537 diff=0.17161 ...
其中:
iter
:表示迭代次数terr
:表示标记的训练错误率,它等于标记的训练错误数量
/标记的总数
。serr
:表示sentence
的训练错误率,它等于sentence的训练错误数量
/sentence的总数
。obj
:当前的目标函数值。当目标函数值收敛到某个固定值时,CRF++
停止迭代。diff
:目标函数值的相对变化。它等于当前的目标函数值减去上一个目标函数值。
常用训练参数:
-a CRF-L2
或者-a CRF-L1
:选择训练算法。CRF-L2
表示L2
正则化的CRF
,它也是CRF++
的默认选择。CRF-L1
表示L1
正则化的CRF
。-c float
:设置CRF
的正则化项的系数 $ MathJax-Element-22 $ ,float
是一个大于0的浮点数,默认为 1.0。如果 $ MathJax-Element-22 $ 较大,则
CRF++
容易陷入过拟合。通过调整该参数,模型可以在欠拟合和过拟合之间取得平衡。-f NUM
:设置特征的下限,NUM
是一个整数,默认为 1 。如果某个特征(由特征模板生成的)发生的次数小于
NUM
,则该特征会被忽略。当应用于大数据集时,特征的种类可能到达上百万,此时设置一个较大的
NUM
会过滤掉大部分低频特征,提高模型的计算效率。-p NUM
:设置线程数量,NUM
是一个整数。如果是多核
CPU
,则可以通过多线程来加速训练。NUM
表示线程的数量。-t
:同时生成文本格式的模型,用于调试。-e float
:设置停止条件的阈值,float
是一个大于0的浮点数,默认为 1.00.0001。-v
:显示版本并退出程序。-m NUM
:设置LBFGS
的最大迭代次数,NUM
是一个整数,默认为 10K 。
在
v0.45
以后的CRF++
版本中,支持single-best MIRA
训练算法。Margin-infused relaxed algorithm:MIRA
是一种超保守在线算法, 在分类、排序、预测等应用领域取得不错成绩。通过参数
-a MIRA
来选择MIRA
算法。输出:
xxxxxxxxxx
CRF++: Yet Another CRF Tool Kit Copyright(C) 2005 Taku Kudo, All rights reserved. reading training data: 100.. 200.. 300.. 400.. 500.. 600.. 700.. 800.. Done! 1.92 s Number of sentences: 823 Number of features: 1075862 Number of thread(s): 1 Freq: 1 eta: 0.00010 C: 1.00000 shrinking size: 20 Algorithm: MIRA iter=0 terr=0.11381 serr=0.74605 act=823 uact=0 obj=24.13498 kkt=28.00000 iter=1 terr=0.04710 serr=0.49818 act=823 uact=0 obj=35.42289 kkt=7.60929 ...其中:
iter,terr,serr
:意义与前面CRF
相同act
:working set
中,active
的样本的数量uact
:对偶参数达到软边界的上界 $ MathJax-Element-22 $ 的样本的数量。如果为
0
,则表明给定的训练样本是线性可分的。obj
:当前的目标函数值 $ MathJax-Element-20 $kkt
:最大的kkt
违反值。当它为 0.0 时,训练结束。
参数:
-c float
:设置软边界的参数 $ MathJax-Element-22 $ ,float
是一个大于0的浮点数。如果 $ MathJax-Element-22 $ 较大,则
CRF++
容易陷入过拟合。通过调整该参数,模型可以在欠拟合和过拟合之间取得平衡。-H NUM
:设置shrinking size
。当一个训练
sentence
未能应用于更新参数向量NUM
次时,认为该sentence
不再对训练有用。此时CRF++
会删除该sentence
。当
shrinking size
较小时,会在早期发生收缩。这会大大减少训练时间。但是不建议使用太小的
shrinking size
,因为训练结束时,MIRA
会再次尝试所有的训练样本,以了解是否所有KKT
条件得到满足。shrinking size
条小会增加重新检查的机会。-f NUM
、-e
、-t
、-p
、-v
:意义与前面CRF
相同
2.4 测试
测试也称作
decoding
, 是通过crf_test
程序来完成的。测试的命令为:
xxxxxxxxxx
crf_test -m model_file test_file1 test_file2 ...其中:
model_file
:由crf_learn
生成的模型文件test_file1,test_file2...
:多个测试文件。其格式与训练文件相同。它将被
crf_test
添加一列(在所有列的最后)预测列
常用参数:
xxxxxxxxxx
crf_test -v0 -n 20 -m model test.datav
系列参数:指定输出的级别,默认为0
级,即v0
。级别越高,则输出的内容越多。其中:
-v0
:仅仅输出预测的标签。如:B
。-v1
:不仅输出预测的标签,还给出该标签的预测概率。如:B/0.997
。-v2
:给出每个候选标签的预测概率。如:I/0.954883 B/0.00477976 I/0.954883 O/0.040337
。
注意:
v0
也可以写作-v 0
。其它也类似。-n NUM
:返回NUM
个最佳的可能结果,结果按照CRF
预测的条件概率来排序。每个结果之前会给出一行输出:
# 结果序号 条件概率
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论