Условные случайные поля - как они работают? - PullRequest
0 голосов
/ 10 сентября 2010

Я прочитал статьи, связанные с этим вопросом . Я наполовину понял. Может кто-нибудь помочь мне разобраться, как это реализовать?

Я предполагаю, что функции генерируются некоторыми эвристиками. Использование POS-тегера в качестве примера; Возможно, просмотр данных обучения показывает, что 'bird' помечен NOUN во всех случаях, поэтому функция f1(z_(n-1),z_n,X,n) генерируется как

(if x_n = 'bird' and z_n = NOUN then 1 else 0)

Где X - входной вектор, а Z - выходной вектор. Во время тренировки с весами мы обнаруживаем, что этот f1 никогда не нарушается, поэтому соответствующий вес \1 (\ для лямбды) окажется положительным и относительно большим после тренировки. Как угадывание функций, так и обучение кажутся сложными, но в остальном все просто.

Я заблудился от того, как применить модель к нетегированным данным. Инициализируйте выходной вектор с некоторыми произвольными метками, а затем измените метки, где они увеличивают сумму по всем \ * f?

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

Я не совсем уверен, правильно ли я вас понимаю, но да, на выходной стороне каждый вектор дополняется символом начала и конца.

Вы также правы относительно функций функций, генерируемых некоторой эвристикой.Обычно эвристика состоит в том, чтобы принимать все возможные комбинации.В вашем примере будет функция функции для каждой пары (слово, тег), что приведет к большому количеству функций.Распространенным способом формулирования таких функций является использование шаблона объекта.

При оценке модели вас не волнует нормализация, поэтому вы ищете последовательность, которая дает вам наибольший член числителя.Обычно для этого используется алгоритм Витерби, за исключением очень больших наборов меток - или в вашем примере большого количества возможных тегов - в этом случае используются приближения.

Витерби на CRF работает так же, как с HMM.Вы начинаете с начала вашей последовательности и вычисляете максимальную вероятность, заканчивающуюся под имеющимся словом, то есть максимум для каждого слова по всем предшественникам или, поскольку имеется только один предшественник, символ START.На следующем шаге вы перебираете все метки, которые возможны для второго элемента вашего прогноза, т.е. z_2.Максимум ненормированной вероятности может быть вычислен как из значений узлов предшественника, то есть из значений, которые вы вычислили на первом шаге, так и из вашей модели.В частности, вы комбинируете потенциалы предшественника, переход к рассматриваемому узлу и сам узел и находите максимум по всем предшественникам.И да, поскольку функции функций не ограничивают зависимость от исходной стороны, вы можете взять любую информацию из нее.

Когда вы прибываете в конец, вы возвращаетесь назад, чтобы определить, как был достигнут максимум.

Для дальнейшего чтения я рекомендую доклад Рахула Гупты.

1 голос
/ 15 сентября 2010

Для линейных CRF, представляющих простые последовательности слов, вы можете использовать алгоритм Витерби (как уже упоминалось в muckl).

Для других топологий вам нужно будет найти другие алгоритмы.

Точный вывод труднодостижим для многих топологий, и можно использовать алгоритм приблизительного вывода, такой как репараметризация на основе дерева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...