Как сделать файл шаблона из CRF++?

Я новичок в CRF++. Я учу себя, глядя на его руководство: http://crfpp.googlecode.com/svn/trunk/doc/index.html?source=navbar

И я не понимаю, что это значит:

Это шаблон для описания функций Unigram. Когда вы даете

шаблон "U01:%x[0,1]", CRF++ автоматически генерирует набор функций

функции (func1 ... funcN), такие как:

func1 = if (output = B-NP и feature="U01:DT") вернуть 1, иначе вернуть 0

func2 = if (output = I-NP и feature="U01:DT") вернуть 1, иначе вернуть 0

func3 = if (output = O и feature="U01:DT") вернуть 1, иначе вернуть 0

.... funcXX = if (output = B-NP и feature="U01:NN") вернуть 1, иначе вернуть 0

funcXY = if (output = O и feature="U01:NN") вернуть 1, иначе вернуть 0. Количество функций, сгенерированных шаблоном

составляет (L * N), где L - номер выхода

Почему есть много строк для функций Unigram и что они значат?

2 ответа

Посмотрев документацию достаточно долго, думаю, я понял это.

Возьмите пример в документации, где входные данные:

He        PRP  B-NP
reckons   VBZ  B-VP
the       DT   B-NP 
current   JJ   I-NP 
account   NN   I-NP

и шаблон функции (в формате %x[row, col], где row относительно вашей текущей позиции) %x[0,1]

когда %x[0,1] расширяется, в зависимости от текущего токена, он может сканировать одну из строк внутри набора [PRP, VBZ, DT, JJ, NN] (т.е. одна из уникальных строк из 1-го столбца, где самый левый столбец - это столбец 0). Для каждой из этих строк он создает набор функций функций формы (глядя на 3-й ряд входных данных):

func1 = if (output = B-NP and feature="U01:DT") return 1 else return 0
func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0
func3 = if (output = O    and feature="U01:DT") return 1 else return 0
...

где эта конкретная строка (DT в приведенном выше коде) сравнивается с каждым выходным классом.

Так что, если выходные классы [B-NP, I-NP, O] шаблон функции, расширенный до функций, будет выглядеть следующим образом:

# row 1 (He, PRP, B-NP)
func1 = if (output = B-NP and feature="U01:PRP") return 1 else return 0
func2 = if (output = I-NP and feature="U01:PRP") return 1 else return 0
func3 = if (output = O    and feature="U01:PRP") return 1 else return 0

# row 2 (Reckons, VBZ, B-VP)
func4 = if (output = B-NP and feature="U01:VBZ") return 1 else return 0
func5 = if (output = I-NP and feature="U01:VBZ") return 1 else return 0
func6 = if (output = O    and feature="U01:VBZ") return 1 else return 0

# Row 3 (the, DT, B-NP)
func7 = if (output = B-NP and feature="U01:DT") return 1 else return 0
func8 = if (output = I-NP and feature="U01:DT") return 1 else return 0
func9 = if (output = O    and feature="U01:DT") return 1 else return 0

# Row 4 (current, JJ, I-NP)
func10 = if (output = B-NP and feature="U01:JJ") return 1 else return 0
func11 = if (output = I-NP and feature="U01:JJ") return 1 else return 0
func12 = if (output = O    and feature="U01:JJ") return 1 else return 0

# Row 5 (account, NN, I-NP)
func13 = if (output = B-NP and feature="U01:NN") return 1 else return 0
func14 = if (output = I-NP and feature="U01:NN") return 1 else return 0
func15 = if (output = O    and feature="U01:NN") return 1 else return 0

Относительно того, где упоминается документация:

Количество функций объектов, сгенерированных шаблоном, составляет (L * N), где L - количество классов вывода, а N - количество уникальных строк, развернутых из данного шаблона.

В этом случае L будет 3, а N будет 5.

Для определенного шаблона%x[i,j] i представляет смещения (строку) текущей позиции, j представляет элемент (столбец), который вы хотите использовать. Предоставленные данные:

He        PRP  B-NP

reckons   VBZ  B-VP

the       DT   B-NP

current   JJ   I-NP  << CURRENT TOKEN

account   NN   I-NP

% x [0,1] относится к слову, смещение к текущему слову равно 0, его тег pos - JJ, а выходной тег - I-NP.

Переместить дальнее слово, %x[0, 1] -> тег pos = NN, тег вывода = I-NP

Каждая функция относится к паре возможных значений текущего слова и его тега pos.

Обновить:

Я думаю, что объяснение выше довольно простое при условии, что вы хорошо понимаете модель CRF.

Ссылка на модель CRF

CRF++ является копией Sha и Pereira (2003)

Другие вопросы по тегам