Как мне использовать Mallet для моей задачи маркировки последовательностей?

Я пытаюсь включить пакет молотка в свой код Java для моей задачи маркировки последовательности. Однако я не очень уверен, как мне это сделать, используя только рекомендации по импорту данных на веб-сайте маллета. Кто-нибудь может мне помочь?

Мой первый вопрос касается импорта данных последовательности. Единственный формат данных, который я вижу на веб-сайте, это InstanceList, однако, как мы должны описывать последовательности со структурой данных. Например, если у нас есть несколько последовательностей (A, B, C — метки): S1: A B B B B A B B; S2: В А В В В В С; S3: C B A B B B. Как мне поместить их в обучающие данные? InstanceList для S1, InstanceList для S2 и InstanceList для S3? И тогда как я могу поместить их вместе в качестве обучающих данных?

Мой второй вопрос о том, как установить функции в экземпляры. У меня уже есть веса функций и метки, так есть ли простой способ установить экземпляры? Например, у меня есть функции [0,1, 0,2, 0,5, 0,4, 0,1] для элемента в последовательности и его метка B. Как я могу установить функции в структуру экземпляра, не проходя через процесс с несколькими конвейерами?

Кроме того, я планирую использовать модель CRF для своей задачи маркировки последовательностей. Помимо меток, я также хотел бы иметь вероятность всей последовательности. Могу ли я получить информацию? Я видел на сайте что-то вроде этого:

    double logScore = new SumLatticeDefault(crf,inputSeq,outputSeq).getTotalWeight();
    double logZ = new SumLatticeDefault(crf,inputSeq).getTotalWeight();
    double prob = Math.exp(logScore - logZ);

Этот собирается делать то, что я хочу? И если да, то какие здесь будут inputSeq и outputSeq?


person faz    schedule 23.06.2016    source источник


Ответы (1)


Стандартный входной формат для задачи маркировки последовательности — один токен на строку с последовательностями, разделенными пустой строкой.

feature1 feature2 feature3 ... A
feature2 feature4 feature6 ... B

feature1 feature3 feature8 ... C
feature2 feature3 feature4 ... C

В большинстве случаев признаки CRF предполагаются бинарными. Если у вас есть функции с известными значениями, вам может потребоваться написать дополнительный код. Класс SvmLight2FeatureVectorAndLabel может быть полезен.

Переменная inputSeq должна быть FeatureVectorSequence, а переменная outputSeq должна быть LabelSequence. Это поля данных и цели Instance соответственно.

person David Mimno    schedule 27.06.2016
comment
Разве SvmLight2FeatureVectorAndLabel не требует, чтобы данные были в формате svmlight? - person user1893354; 29.06.2017