【发布时间】:2013-11-07 15:03:03
【问题描述】:
我想知道是否有人可以在这里帮助我。我认为这可能对任何试图在 GATE(文本工程通用架构)上进行机器学习的人有用。所以基本上要进行机器学习,我首先需要向一些 jape 文件添加一些代码,这样我的输出 XML 文件就会打印出 Annotation Id 值作为特征。下面提供了一个示例:
<Annotation Id="1491" Type="Person" StartNode="288" EndNode="301">
<Feature>
<Name className="java.lang.String">id</Name>
<Value className="java.lang.String">1491</Value>
</Feature>
(注意1491的特征值与Annotation Id="1491"匹配。这是我想要的。)
为什么我需要这个: 我正在对最初不包含注释的纯文本文档进行机器学习。在执行此操作时,我使用 GATE 网站上的 2012 年 6 月培训课程作为指南。我特别关注模块 11:关系教程(它找到了个人和组织之间的雇佣关系)。我利用 93 个预注释文档的语料库进行训练,然后将学习到的模块应用到我的文档中。但首先我通过 ANNIE 运行我的文档。它创建了许多注释和功能,但不是机器学习所需的一切。我通过反复试验和调查了解到,我的注释文档必须包含每个“人员”和“组织”类型的带有注释 ID 的特征。我认识到批量学习 PR 中使用的配置文件 (relations-config.xml) 会查找“Person”和“Organization”类型的 id 特征。如果这些 ID 功能不存在,它将不会运行。所以我手动添加它,然后通过机器学习“APPLICATION”模式运行它。它工作得很好。但是,我显然不想每次都手动将 id 功能添加到我的 XML 文件中。
我通过门禁密码得出的结论: 我相信我已经找到了需要更改的代码文件(final.jape、org_context.jape 和 name_context.jape),以便他们可以将该 id 功能添加到包含“Person”和“Organization”的每个注释中。我不太了解 GATE 使用的语言(我是机械工程师,而不是软件工程师),这可能就是我无法弄清楚的原因(哈!)。无论如何,我可能会离开,并且可能需要添加几行才能让 jape 文件正常工作,但我觉得我已经非常准确地指出了它。有两段代码相似但略有不同,这是我目前存在的祸根。第一个通过迭代器循环,第二个没有。我复制/粘贴了下面的那两个,并用一行说明 WHAT_DO_I_PUT_HERE 表明我认为我的问题和解决方案在哪里。如果有人能帮我写出我需要写的东西来得到我的结果,我将不胜感激。
谢谢! - 托德
///////////第一段代码///////////////////p>
Rule: PersonFinal
Priority: 30
//({JobTitle}
//)?
(
{TempPerson.kind == personName}
)
:person
-->
{
gate.FeatureMap features = Factory.newFeatureMap();
gate.AnnotationSet personSet = (gate.AnnotationSet)bindings.get("person");
gate.Annotation person1Ann = (gate.Annotation)personSet.iterator().next();
gate.AnnotationSet firstPerson = (gate.AnnotationSet)personSet.get("TempPerson");
if (firstPerson != null && firstPerson.size()>0)
{
gate.Annotation personAnn = (gate.Annotation)firstPerson.iterator().next();
if (personAnn.getFeatures().containsKey("gender")) features.put("gender", personAnn.getFeatures().get("gender"));
}
features.put("id", WHAT_DO_I_PUT_HERE.getId().toString());
features.put("rule1", person1Ann.getFeatures().get("rule"));
features.put("rule", "PersonFinal");
outputAS.add(personSet.firstNode(), personSet.lastNode(), "Person", features);
outputAS.removeAll(personSet);
}
////////////////////////////////////////////p>
Rule:OrgContext1
Priority: 1
// company X
// company called X
(
{Token.string == "company"}
(({Token.string == "called"}|
{Token.string == "dubbed"}|
{Token.string == "named"}
)
)?
)
(
{Unknown.kind == PN}
)
:org
-->
{
gate.AnnotationSet org = (gate.AnnotationSet) bindings.get("org");
gate.FeatureMap features = Factory.newFeatureMap();
features.put("id", WHAT_DO_I_PUT_HERE.getId().toString());
features.put("rule ", "OrgContext1");
outputAS.add(org.firstNode(), org.lastNode(), "Organization", features);
outputAS.removeAll(org);
}
【问题讨论】:
-
我认为您不应该修改库,因为您的代码将与任何未来版本不兼容。
标签: java xml annotations machine-learning gate