Файл шаблона 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++.