我想知道是否有人可以在这里帮助我。我认为这可能对任何试图在 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 的特征。我承认配置文件(relations-config. 批处理学习 PR 中使用的 xml) 查找“Person”和“Organization”类型的 id 特征。如果这些 ID 功能不存在,它将不会运行。所以我手动添加它,然后通过机器学习“APPLICATION”模式运行它。它工作得很好。但是,我显然不想每次都手动将 id 功能添加到我的 XML 文件中。
我用 GATE 代码得出的结论:我相信我找到了需要更改的代码文件(final.jape、org_context.jape 和 name_context.jape),以便他们可以将该 id 功能添加到包含“Person”的每个注释中”和“组织”。我不太了解 GATE 使用的语言(我是机械工程师,而不是软件工程师),这可能就是我无法弄清楚的原因(哈!)。无论如何,我可能会离开,并且可能需要添加几行才能让 jape 文件正常工作,但我觉得我已经非常准确地指出了它。有两段代码相似但略有不同,这是我目前存在的祸根。第一个通过迭代器循环,第二个没有。我复制/粘贴了下面的那两个,并用一行说明 WHAT_DO_I_PUT_HERE 表明我认为我的问题和解决方案在哪里。如果有人可以帮助我完成我需要写的内容以获得我的结果,我将非常感激。
谢谢!- 托德
/////////// 第一段代码 //////////////
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);
}
/////////// 第二段代码 ///////////////
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);
}