在CRF模型中添加数值特征是否可行或有益?例如,序列中的位置信息。
我正在使用CRFsuite。看起来所有特征都会被转换为字符串,例如’pos=0’、’pos=1’,这样就失去了作为欧几里得距离的意义。
或者我应该用这些特征训练另一个模型,例如SVM,然后与CRF模型进行集成?
回答:
我发现CRFsuite确实可以处理数值特征,至少根据这份文档来看是这样的:
- {“string_key”: float_weight, …} 字典,其中键是观察到的特征,值是它们的权重;
- {“string_key”: bool, …} 字典;True 被转换为1.0权重,False 被转换为0.0;
- {“string_key”: “string_value”, …} 字典;这相当于 {“string_key=string_value”: 1.0, …}
- [“string_key1”, “string_key2”, …] 列表;这相当于 {“string_key1”: 1.0, “string_key2”: 1.0, …}
- {“string_prefix”: {…}} 字典:嵌套字典会被处理,并在每个键前加上“string_prefix”。
- {“string_prefix”: […]} 字典:嵌套列表会被处理,并在每个键前加上“string_prefix”。
- {“string_prefix”: set([…])} 字典:嵌套列表会被处理,并在每个键前加上“string_prefix”。
只要满足以下条件:
- 我保持输入格式正确;
- 我使用浮点数而不是浮点数的字符串;
- 我对其进行归一化处理。