crf++ 工具 templates

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18617299/article/details/83183418

train.txt
---
        迈    v    B    N    N    N    O 
        向    v    E    N    N    N    O 
        充    nz    B    N    N    N    O 
        满    nz    M    N    N    N    O 
        希    nz    M    N    N    N    O 
        望    nz    E    N    N    N    O 
        的    uj    W    Y    Y    Y    O 
        新    nz    B    N    N    N    O 
        世    nz    M    N    N    N    O 
        纪    nz    E    N    N    N    O 
        —    x    W    N    N    N    O 
        —    x    W    N    N    N    O 
        一    m    B    N    N    N    B_TIME 
        九    m    M    N    N    N    M_TIME 
        九    m    M    N    N    N    M_TIME 
        八    m    M    N    N    N    M_TIME 
        年    m    E    N    N    N    M_TIME 
        新    t    B    N    N    N    M_TIME 
        年    t    E    N    N    N    E_TIME 
        讲    n    B    N    N    N    O 
        话    n    E    N    N    N    O 
        (    x    W    Y    Y    Y    O 
        附    n    B    N    N    N    O 
        图    n    M    N    N    N    O 
        片    n    E    N    N    N    O 
        1    m    W    Y    N    N    O 
        张    nr    W    N    N    N    O 
        )    x    W    Y    Y    Y    O 

template文件
---
            >  # Unigram
            >             U00:%x[-2,0]
            >             U01:%x[-1,0]
            >             U02:%x[0,0]
            >             U03:%x[1,0]
            >             U04:%x[2,0]
            >             U05:%x[-2,0]/%x[-1,0]/%x[0,0]
            >             U06:%x[-1,0]/%x[0,0]/%x[1,0]
            >             U07:%x[0,0]/%x[1,0]/%x[2,0]
            >             U08:%x[-1,0]/%x[0,0]
            >             U09:%x[0,0]/%x[1,0]
            >             
            >             # Bigram
            >             B
            
* 上面template 文件说明:
在每一个模板中,特殊宏 *%x[row,col]* 用于指定输入数据的token。*row* 从当前的token指定到相对的位置,*col*指定列的绝对位置。
![avtr](https://s1.ax1x.com/2018/08/22/Po5i2d.png)

* 假设当前token为第三行的 充 ,U00 -- U04,就是取到 迈 向 充 满 希[unigram]。
* U05-U09,它们其实就是像U00--U04这样的特征的组合。U08、U09这样的叫bigram(和下面的Bigram不同,一般而言比Bigram灵活一点),U05-U07叫trigram。其实CRF++工具根据模板生成的特征也不过是一些字符串和对应的编号,然后通过学习得到特征函数的权重。
* 模板怎么写,这取决于你,一般来说会有一个窗口(即考虑当前token前几个后几个),大小自定义,源码里好像限制窗口最大为17,如果你的特征有多列,可能要多写些像U00-U04这样的模板,不同的地方在于[,]里的第二项还有像U05-U09这样的组合特征模板,下面的Bigram特征一般没用,用的话也是最简单的B。   

猜你喜欢

转载自blog.csdn.net/qq_18617299/article/details/83183418