1

当您通过 crf_learn 使用 -t 选项构建模型文件时:crf_learn template train_data -t model

然后它会生成两个模型文件,其中一个是model.txt。

谁能告诉浮点数是什么意思?

请参见以下示例:

版本:100 成本因素:1 最大:40 xsize:1

U00:%x[0,0] B

36 B 20 U00:、 26 U00:か 18 U00:が 22 U00:こ 8 U00:た 10 U00:ち 2 U00:っ 4 U00:て 34 U00:に 12 U00:の 0 U00:よ 28 U00:ら24 U00:れ 32 U00:上 14 U00:世 16 U00:代 30 U00:地 6 U00:私</p>

-0.3022268562246992 0.3022268562246989 -0.3629407244093161 0.3629407244093156 -0.3327259487028221 0.3327259487028215 0.3462799099537973 -0.3462799099537980 0.3452020097664334 -0.3452020097664336 -0.3218750203631590 0.3218750203631575 0.0376944272290242 -0.0376944272290280 0.3329631783491211 -0.3329631783491230 -0.3092967308014029 0.3092967308014015 0.3413769126433928 -0.3413769126433950 0.3786782765859961 -0.3786782765859980 0.5208645073272351 -0.5208645073272384 -0.3261580548802839 0.3261580548802814 -0.3615756495615902 0.3615756495615884 -0.3248593224319323 0.3248593224319312 0.3281895709166696 -0.3281895709166719 -0.3040331359589971 0.3040331359589951 0.2836939567332580 -0.2836939567332600 -0.1530917919770705 -0.1613508585854637 0.4245699543724943 -09901273038

我的理解是:每个浮点数应该对应每个模板,例如:第一个浮点数“-0.3022268562246992”应该对应“36 B”。但是为什么浮点数的数量是模板数量的两倍呢?这些浮点数是什么意思?

非常感谢,

帅华

4

1 回答 1

1

在阅读了部分 CRF++058 源代码后,我知道如何理解 crf_learn 输出。我将使用一些示例来解释输出。

==== 基本 ====

假设我们有以下训练数据:

毎  k   B
日  k   I
新  k   I  
聞  k   I
社  k   I
特  k   B
別  k   I 
顧  k   B
問  k   I

而且我们的模板很简单,只有一行:U00:%x[0,0]

  1. 所以本例的特征数为9,有:毎、日、新、闻、社、特、别、顾、问。
  2. 现在让训练数据保持不变,在模板中添加另一个特征:

U00:%x[0,0]

U00:%x[-1,0]/%x[0,0]/%x[1,0]

现在我们在模板中有两个“特征”。所以特征总数变为18个,有:

毎, 日, 新, 聞, 社, 特, 別, 顧, 問    
 ../毎/日
毎/日/新
日/新/聞
新/聞/社   
聞/社/特
社/特/別
特/別/顧    
別/顧/問    
顧/問/..

(这个带有两条规则的特征模板将适用于每个单词)

  1. 现在让我们在训练数据中添加一个重复的单词,如下:
毎  k   B
毎  k   B
日  k   I
新  k   I  
聞  k   I
社  k   I
特  k   B
別  k   I 
顧  k   B
問  k   I

“毎”这个词出现了两次,但只被视为一个特征。所以特征的数量仍然是 18。

==== 前进 ====

现在让我们看看如何理解“model.txt”中的内容。

1)空格线用于分隔不同的块:

1.第一块:

    version: 100
    cost-factor: 1
    maxid: 670
    xsize: 1

maxid 取决于特征的数量和标签的数量。

以第一个训练数据为例:(9个不同的词,两个标签=> B和I)

id 应该从 0 开始, 0+2=2, 2+2=4, ... 16. maxid 是 16。

在这里,为什么步骤是2?

因为我们有两种类型的标签。实际上每个单词对应两个不同的标签,例如:

0 毎 ==> B
1 毎 ==> I

2 日 ==> B
3 日 ==> I 
...
14 問 ==> B
15 問 ==> I

2. 第二块:

列出训练数据中的所有标签:

B

I

3. 第三块:

列出所有使用的模板:

U00:%x[0,0]

4.第四块:

特征 id、模板和对应的词:

0 U00:毎
2 U00:日
...

5.第五块:

对于每个功能,每个标签的可能性:

每个单词有两种可能对应。

可能性 < 0 将被忽略。

——帅华

于 2017-08-14T23:43:27.480 回答