我可以在crf模型中使用数字特征吗?

时间:2014-10-01 23:40:44

标签: machine-learning nlp data-mining data-modeling crf

在crf模型中添加数字特征是否可行/好?例如在序列中的位置。

我正在使用CRFsuite。似乎所有功能都将转换为字符串,例如'pos = 0','pos = 1',然后它失去了它作为欧氏距离的含义。

或者我应该用它们训练另一种模型,例如svm,然后与crf模型合奏?

3 个答案:

答案 0 :(得分:7)

我发现CRFsuite确实处理数字特征,至少根据this documentation

  
      
  • {“string_key”:float_weight,...} dict在哪里观察到键的特征,值是它们的权重;
  •   
  • {“string_key”:bool,...} dict; True转换为1.0重量,False - 转换为0.0;
  •   
  • {“string_key”:“string_value”,...} dict;这与{“string_key = string_value”:1.0,...}
  • 相同   
  • [“string_key1”,“string_key2”,...]列表;这与{“string_key1”:1.0,“string_key2”:1.0,...}
  • 相同   
  • {“string_prefix”:{...}} dicts:处理嵌套的dict,并为每个键添加“string_prefix”。
  •   
  • {“string_prefix”:[...]} dicts:处理嵌套列表,并为每个键添加“string_prefix”。
  •   
  • {“string_prefix”:set([...])} dicts:处理嵌套列表,并为每个键添加“string_prefix”。
  •   

只要:

  1. 我保持输入格式正确;
  2. 我使用float vs string of float;
  3. 我规范了它。

答案 1 :(得分:4)

CRF本身可以使用数字功能,你应该使用它们,但是如果你的实现将它们转换为字符串(通过&#34编码二进制形式;一个热点编码")那么它可能会减少意义。我建议寻找更多"纯粹"允许连续变量的CRF。

一个有趣的事实是CRF的核心只是结构化的MaxEnt(LogisticRegression),它在连续域中工作,这种字符串编码实际上是从分类的方式值为连续域,因此您的问题实际上是"过度设计" CRFSuite忘记了CRF模型的实际功能。

答案 2 :(得分:0)

仅需澄清一下Lishu的答案(这是正确的,但可能会使其他读者感到困惑,直到我尝试为止)。这个:

{“ string_key”:float_weight,...} dict,其中观察到键的特征和值是其权重

本来可以写成

{“ feature_template_name”:feature_value,...}字典,其中键是要素名称,值是它们的值

即使用此功能,您无需设置与此Feature_template对应的CRF的权重,而可以设置此功能的值。我更喜欢使用具有特征值的特征模板,以使所有内容都比“特征”更清晰。然后,CRF将学习与此feature_template的每个可能feature_value相关的权重