Текущее: грустное о некоторых CRF тулкитах

Jun 17, 2016 08:43

Делаю эксперимент с частеречной разметкой по бессловарной русской морфологии... По сути получилась стандартная задача sequence labelling, которую в данном случае естественно решать с помощью conditional random fields, благо цепочка событий-слов одномерна и фичи пока бинарные.

И-за странного поведения уважаемого мной CRFSuite начал смотреть на другие тулкиты. И вот такая грустная вещь обнаружилась. По непонятным мне причинам многие тулкиты, выглядящие очень аппетитно по набору возможностей типа многопоточность и работа с огромными датасетами, очень сильно ограничивают формат входного датасета.

Когда-то, увидев работу CRF++ в составе японского парсера Cabocha, я начал с ним экспериментировать и очень быстро уперся в следующее ограничение. Обучающие паттерны допускают только одну фичу на слово. Потом с помощью специальных правил-шаблонов одиночные фичи у слов можно объединить в униграммные...триграммные фичи. Но суть остается та же - ровно одна фича на слово:


Here's an example of such a file: (data for CoNLL shared task)

He PRP B-NP
reckons VBZ B-VP
the DT B-NP
current JJ I-NP
account NN I-NP
deficit NN I-NP
will MD B-VP
narrow VB I-VP
to TO B-PP
only RB B-NP
# # I-NP
1.8 CD I-NP
billion CD I-NP
in IN B-PP
September NNP B-NP
. . O

He PRP B-NP
reckons VBZ B-VP
..

Это убивает преимущество CRF перед HMM. В итоге, я стал работать с CRFSuite, в котором для каждого слова можно задавать множество фич, причем наборы фич могут почти не пересекаться, то есть быть sparse. Такой подход сильно упрощает обучение. Кроме того, либа написана на C++ и достаточно просто прикрутилась к моему POS Tagger'у.

И вот теперь решил поискать что-то на замену CRFSuite.

Сначала SharpCRF. Одна фича на токен!
There is an example (a bigger training example file is at download section, you can see and download it there):

!
PUN
S

Tokyo
NNP
S_LOCATION

and
CC
S

New
NNP
B_LOCATION

York
NNP
E_LOCATION

are
VBP
S

major
JJ
S

financial
JJ
S

centers
NNS
S

.
PUN
S

!
PUN
S

p
FW
S

'
PUN
S

y
NN
S

h
FW
S

44
CD
S

University
NNP
B_ORGANIZATION

of
IN
M_ORGANIZATION

Texas
NNP
M_ORGANIZATION

Austin
NNP
E_ORGANIZATION

Беда. Попытка спилить в исходниках генерацию фич из шаблонов успехом не увенчалось. Там довольно простой C# код, но на одном из этапов я не смог разобраться с причинами ошибки и оставил попытки.

Затем Wapiti. Смотрю примеры датасетов в архиве - опять эти проклятые шаблоны для генерации фич из одиночных фич для слов.

Пока остановился на CRF ADF, в котором наборы признаков для CRF можно задавать напрямую без ограничений. Работает медленно, вроде бы не параллелиться, но для проверки самой идей бессловарной морфологии годится. Исходники на C#, но я в них по не лазал, так как бинарник успешно заработал "из коробки".

PS: FlexCRFs вроде бы тоже свободен от этого неудобного ограничения на задание признаков. Хотя документация у них не ахти, особенно описание формата файлов с датасетами.

conditional random fields, crf

Previous post Next post
Up