在Java中为Maxent分类器创建训练数据

Ank*_*sal 5 java classification machine-learning maxent

我正在尝试为maxent分类器创建Java实现。我需要将句子分为n不同的类别。

我看了斯坦福maxent分类器中的ColumnDataClassifier。但是我不明白如何创建训练数据。我需要训练数据的形式,其中训练数据包括用于单词的POS标签,以便用于分类的功能将类似于上一个单词,下一个单词等。

我正在寻找带有POS TAGGING句子和句子类别的训练数据。例如:

我/(POS)名称/(POS)是/(POS)XYZ /(POS)类别

任何帮助将不胜感激。

Vil*_*mko 2

如果我理解正确的话,您正在尝试将句子视为一组 POS 标签。

在您的示例中,句子“我的名字是 XYZ”将表示为一组 (PRP$、NN、VBZ、NNP)。这意味着,每个句子实际上都是长度为 37 的二进制向量(因为根据此页面+ 整个句子的 CLASS 结果特征,有36 个可能的 POS 标签)

可以为 OpenNLP Maxent 进行编码,如下所示:

PRP$=1 NN=1 VBZ=1 NNP=1 CLASS=SomeClassOfYours1
Run Code Online (Sandbox Code Playgroud)

或者简单地:

PRP$ NN VBZ NNP CLASS=SomeClassOfYours1
Run Code Online (Sandbox Code Playgroud)

(有关工作代码片段,请参阅我的答案:使用 openNLP maxent 训练模型

更多示例数据是:

  1. “到 1978 年,无线电城已经失去了它的魅力,洛克菲勒中心的所有者决定拆除老化的大厅。”
  2. “随着时间的推移,他完全被遗忘了,他的许多建筑被拆除,其他建筑也被麻木不仁地改变。”
  3. 诉讼称,“她一搬出去,活动房屋就被拆除了。”
  4. ...

这将产生样本:

IN CD NNP VBD VBN PRP$ NN CC DT NNS IN TO VB VBG CLASS=SomeClassOfYours2
IN NN PRP VBD RB VBN JJ IN PRP$ NNS CLASS=SomeClassOfYours3
IN RB PRP VBD RP DT JJ NN VBN NN CLASS=SomeClassOfYours2
...
Run Code Online (Sandbox Code Playgroud)

然而,我并不期望这样的分类会产生好的结果。最好利用句子的其他结构特征,例如可以使用斯坦福解析器获得的解析树或依存树。

编辑于2016年3月28日: 您还可以使用整个句子作为训练样本。但是,请注意: - 两个句子可能包含相同的单词,但具有不同的含义 - 过度拟合的可能性相当高 - 你应该使用短句子 - 你需要一个巨大的训练集

根据您的示例,我将按如下方式对训练样本进行编码:

class=CLASS My_PRP name_NN is_VBZ XYZ_NNP
...
Run Code Online (Sandbox Code Playgroud)

请注意,结果变量作为每行的第一个元素。

这是一个使用 的完整工作最小示例opennlp-maxent-3.0.3.jar


PRP$=1 NN=1 VBZ=1 NNP=1 CLASS=SomeClassOfYours1
Run Code Online (Sandbox Code Playgroud)

以及一些虚拟训练数据(存储为training-file.txt):

class=Male      My_PRP name_NN is_VBZ John_NNP
class=Male      My_PRP name_NN is_VBZ Peter_NNP
class=Female    My_PRP name_NN is_VBZ Anna_NNP
class=Female    My_PRP name_NN is_VBZ Gaby_NNP
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Indexing events using cutoff of 0
Computing event counts...  done. 4 events
Indexing...  done.
Sorting and merging events... done. Reduced 4 events to 4.
Done indexing.
Incorporating indexed data for training...  
done.
    Number of Event Tokens: 4
        Number of Outcomes: 2
      Number of Predicates: 7
...done.
Computing model parameters ...
Performing 100 iterations.
  1:  ... loglikelihood=-2.772588722239781  0.5
  2:  ... loglikelihood=-2.4410105407571203 1.0
      ...
 99:  ... loglikelihood=-0.16111520541752372    1.0
100:  ... loglikelihood=-0.15953272940719138    1.0
=======================================
class=Female
=======================================
Run Code Online (Sandbox Code Playgroud)