如何使用 Mallet 进行序列标记任务?
How do I use Mallet for my sequence labeling task?
我正在尝试将 mallet 包合并到我的 java 代码中以用于我的序列标记任务。但是,我不太确定我应该如何仅根据 mallet 网站上的数据导入指南进行操作。谁能帮我解决这个问题?
我的第一个问题是关于序列数据的导入。我在网站上看到的唯一数据格式是InstanceList,但是,我们应该如何用数据结构来描述序列。例如,如果我们有多个序列(A、B、C 是标签):
S1: A B B B B A B B;
S2:B A B B B B C;
S3:C B A B B B。
我应该如何将它们放入训练数据中? S1 的 InstanceList,S2 的 InstanceList 和 S3 的 InstanceList?然后如何将它们一起作为训练数据?
我的第二个问题是关于如何将特性设置到实例中。我已经有了特征权重和标签,那么有没有一种简单的方法可以让我设置实例?比如我在序列中有一个item的features [0.1, 0.2, 0.5, 0.4, 0.1],标签为B,如何在不经过multiple pipeline process的情况下将features设置到Instance结构中?
此外,我打算将CRF模型用于我的序列标记任务。除了标签,我还想知道整个序列的概率。我有可能得到这些信息吗?我在网站上看到了这样的东西:
double logScore = new SumLatticeDefault(crf,inputSeq,outputSeq).getTotalWeight();
double logZ = new SumLatticeDefault(crf,inputSeq).getTotalWeight();
double prob = Math.exp(logScore - logZ);
这是我想要的吗?如果是,这里的 inputSeq 和 outputSeq 是什么?
序列标记任务的标准输入格式是每行一个标记,序列之间用空行分隔
feature1 feature2 feature3 ... A
feature2 feature4 feature6 ... B
feature1 feature3 feature8 ... C
feature2 feature3 feature4 ... C
在大多数情况下,CRF 特征被假定为二元的。如果您有已知值的特征,您可能需要编写一些额外的代码。 class SvmLight2FeatureVectorAndLabel
可能有用。
inputSeq
变量应为 FeatureVectorSequence
,outputSeq
变量应为 LabelSequence
。这些分别是 Instance
的数据和目标字段。
我正在尝试将 mallet 包合并到我的 java 代码中以用于我的序列标记任务。但是,我不太确定我应该如何仅根据 mallet 网站上的数据导入指南进行操作。谁能帮我解决这个问题?
我的第一个问题是关于序列数据的导入。我在网站上看到的唯一数据格式是InstanceList,但是,我们应该如何用数据结构来描述序列。例如,如果我们有多个序列(A、B、C 是标签): S1: A B B B B A B B; S2:B A B B B B C; S3:C B A B B B。 我应该如何将它们放入训练数据中? S1 的 InstanceList,S2 的 InstanceList 和 S3 的 InstanceList?然后如何将它们一起作为训练数据?
我的第二个问题是关于如何将特性设置到实例中。我已经有了特征权重和标签,那么有没有一种简单的方法可以让我设置实例?比如我在序列中有一个item的features [0.1, 0.2, 0.5, 0.4, 0.1],标签为B,如何在不经过multiple pipeline process的情况下将features设置到Instance结构中?
此外,我打算将CRF模型用于我的序列标记任务。除了标签,我还想知道整个序列的概率。我有可能得到这些信息吗?我在网站上看到了这样的东西:
double logScore = new SumLatticeDefault(crf,inputSeq,outputSeq).getTotalWeight();
double logZ = new SumLatticeDefault(crf,inputSeq).getTotalWeight();
double prob = Math.exp(logScore - logZ);
这是我想要的吗?如果是,这里的 inputSeq 和 outputSeq 是什么?
序列标记任务的标准输入格式是每行一个标记,序列之间用空行分隔
feature1 feature2 feature3 ... A
feature2 feature4 feature6 ... B
feature1 feature3 feature8 ... C
feature2 feature3 feature4 ... C
在大多数情况下,CRF 特征被假定为二元的。如果您有已知值的特征,您可能需要编写一些额外的代码。 class SvmLight2FeatureVectorAndLabel
可能有用。
inputSeq
变量应为 FeatureVectorSequence
,outputSeq
变量应为 LabelSequence
。这些分别是 Instance
的数据和目标字段。