Файл шаблона CRF++ и синтаксис предложения

Я пытаюсь использовать CRF++ для разбора строк продукта в различные классы атрибутов, чтобы я мог выполнить сопоставление продуктов, аналогичное этому вопросу.

Однако я сталкиваюсь с проблемой, заключающейся в том, что CRF не может точно предсказать теги, когда порядок слов в строке продукта еще не виден в учебном файле.

В качестве примера, я просто использую файл шаблона мешка с словами:

#Unigrams
U00:%x[-1,0]
U00:%x[0,0]
U00:%x[1,0]

#Bigrams
B

И я бегу crf_learn включая следующий пример данных обучения:

panasonic  NOUN  B-BRAND
digital  ADJ  B-PRODUCT
monitor  NOUN  I-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

При использовании этих обучающих данных модель корректно разбирает тестовую строку "цифровой монитор Panasonic 17 дюймов" на правильные выходные теги. Однако, когда я использую модель в строке, такой как "цифровой 17-дюймовый монитор Panasonic", модель не распознает правильные теги и вместо этого меняет теги "digital" и "monitor" на что-то вроде следующего:

panasonic  NOUN  B-BRAND
monitor  NOUN  B-PRODUCT
digital  ADJ  I-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

Однако мне нужно следующее:

panasonic  NOUN  B-BRAND
monitor  NOUN  I-PRODUCT
digital  ADJ  B-PRODUCT
17  #  B-SIZE
inch  #  I-SIZE

Это проблема с моим файлом шаблона, или CRF изначально ограничен синтаксисом? Или я могу как-то изменить файл шаблона или столбцы обучающих данных, чтобы зафиксировать / игнорировать порядок слов в строке продукта?

1 ответ

Во-первых, неправильные определения функций в файле шаблона.

Все шаблоны объектов определены как U00, Это означает, что есть только 1 функция, а не 3.

Во-вторых, я думаю, вы должны попробовать больше шаблонов функций, например:

#context of 3 words
U00:%x[-1,0]
U01:%x[0,0]
U02:%x[1,0]

#for POS Tag
U03:%x[0,1]

Надеюсь, это поможет в улучшении производительности:)

PS: Вы можете посмотреть https://youtu.be/GJHeTvDkIaE для понимания файлов шаблонов CRF++.

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