繁体   English   中英

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

[英]can I use numerical features in crf model

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

我正在使用CRFsuite 似乎所有的特征都将被转换为字符串,例如'pos = 0','pos = 1',然后失去它作为欧几里德距离的含义。

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

我发现CRFsuite确实处理了数字特征,至少根据这个文档

  • {“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 float的字符串;
  3. 我规范它。

CRF本身可以使用数字特征,你应该使用它们,但如果你的实现将它们转换为字符串(通过“一个热点编码”以二进制形式编码),那么它的重要性可能会降低。 我建议寻找更多“纯粹”的CRF,它允许连续变量。

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

只是为了澄清一点Lishu的答案(这是正确的,但可能会混淆其他读者,因为它对我来说,直到我尝试它)。 这个:

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

本来可以写成

{“feature_template_name”:feature_value,...} dict其中键是要素名称,值是其值

即,使用此功能,您不会设置与此feature_template对应的CRF的权重,而是设置此功能的值。 我更喜欢将它们称为具有特征值的特征模板,以便一切都比“特征”更清晰。 然后,CRF将学习与此feature_template的每个可能feature_values相关联的权重

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM