【问题标题】:can I use numerical features in crf model我可以在 crf 模型中使用数值特征吗
【发布时间】:2014-11-26 22:39:11
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 知道了。我选择 CRFsuite 的原因是它带有一个很好的python wrapper,它易于使用。在另一个模型中使用这些数值特征然后与 crf 集成会有所帮助吗?
  • 好像不对,CRF是一个序列分类器。将它与非序列模型集成是相当奇怪的。寻找一种在 CRF 中实际包含数字特征的方法会更有利可图,正如之前所说,CRF 完全能够执行此类操作
【解决方案2】:

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

  • {“string_key”: float_weight, ...} dict 其中键是观察到的特征,值是它们的权重;
  • {“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”: {...}} dicts:嵌套的 dict 被处理,并且“string_prefix”被添加到每个键。
  • {“string_prefix”: [...]} dicts: 嵌套列表被处理,“string_prefix” 被添加到每个键。
  • {“string_prefix”: set([...])} dicts: 嵌套列表被处理,“string_prefix” 被添加到每个键。

只要:

  1. 我保持输入格式正确;
  2. 我使用浮点数与浮点数字符串;
  3. 我将其标准化。

【讨论】:

    【解决方案3】:

    只是为了澄清一下 Lishu 的答案(这是正确的,但在我尝试之前可能会像它对我所做的那样让其他读者感到困惑)。这个:

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

    可以写成

    {“feature_template_name”: feature_value, ...} dict 其中键是特征名称,值是它们的值

    即有了这个,你没有设置与这个 feature_template 对应的 CRF 的权重,而是这个特性的值。我更喜欢将它们称为具有特征值的特征模板,以便一切都比“特征”更清楚。然后,CRF 将学习与此特征模板的每个可能特征值相关的权重

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2014-01-09
      • 2016-03-27
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多