Ank*_*sal 5 java classification machine-learning maxent
我正在尝试为maxent分类器创建Java实现。我需要将句子分为n不同的类别。
我看了斯坦福maxent分类器中的ColumnDataClassifier。但是我不明白如何创建训练数据。我需要训练数据的形式,其中训练数据包括用于单词的POS标签,以便用于分类的功能将类似于上一个单词,下一个单词等。
我正在寻找带有POS TAGGING句子和句子类别的训练数据。例如:
我/(POS)名称/(POS)是/(POS)XYZ /(POS)类别
任何帮助将不胜感激。
如果我理解正确的话,您正在尝试将句子视为一组 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 训练模型)
更多示例数据是:
这将产生样本:
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)