Как создать нотацию IOB2 из объекта, чтобы его можно было использовать в CRFSuite?

Я смотрел на Python-CRFSuite ( https://github.com/scrapinghub/python-crfsuite) и Parserator ( https://github.com/datamade/parserator) и, используя эти два инструмента вместе, вы можете легко создать модель CRF с некоторыми данными обучения, записанными в формате xml.

У меня есть проблема с пониманием того, как данные XML преобразуются в нотацию (IOB2), которую можно использовать в CRFSuite ( http://www.chokkan.org/software/crfsuite/).

Если я правильно понимаю:

  1. Parserator берет каждую строку обучающих данных, которые вы ему предоставляете, и создает объект, содержащий несколько бит данных (all_digits, length, endinpunc и т. Д. И т. Д.). Это будет выглядеть примерно так для первой строки:

[{'abbrev': False, 'digits': 'all_digits', 'word': False, 'trailing.zeros': '0', 'length': 'd:3', 'endsinpunc': False, 'directional': False, 'street_name': False, 'has.vowels': False, 'next': {'abbrev': False, 'digits': 'no_digits', 'word': 'main', 'trailing.zeros': False, 'length': 'w:4', 'endsinpunc': False, 'directional': False, 'street_name': False, 'has.vowels': True, 'address.end': True}, 'address.start': True}, {'abbrev': False, 'digits': 'no_digits', 'word': 'main', 'trailing.zeros': False, 'length': 'w:4', 'endsinpunc': False, 'directional': False, 'street_name': False, 'has.vowels': True, 'previous': {'abbrev': False, 'digits': 'all_digits', 'word': False, 'trailing.zeros': '0', 'length': 'd:3', 'endsinpunc': False, 'directional': False, 'street_name': False, 'has.vowels': False, 'address.start': True}, 'address.end': True}]

  1. Затем Parserator передает эти данные в CRFSuite с помощью оболочки Python-CRFSuite.

Итак, если вы посмотрите на проект parserator, то есть файл training.py, который содержит следующие несколько строк:

trainer = pycrfsuite.Trainer (verbose = False, params = params_to_set) для xseq, yseq в формате zip (X, Y): trainer.append (xseq, yseq)

xseq - это объект выше ([{'abbrev': False, 'digits'....), а yseq в моем случае был ('AddressNumber', 'StreetName')

У меня возникают проблемы с пониманием того, как эти xseq и yseq конвертируются в нотацию IOB2, которую можно использовать CRFSuite напрямую. Как объект JSON, подобный приведенному выше, преобразуется в нотацию IOB2, как показано ниже:

B-NP He B-VP считает B-NP I-NP текущим I-NP счетом I-NP дефицит B-VP будет I-VP сужать B-PP к B-NP только I-NP # I-NP 1.8 I-NP млрд B-PP в B-NP сентябрь O .

Я ломал голову над этим в течение недели или двух, и, кажется, не могу понять это. У меня нет большого опыта работы с Python или C++, поэтому заранее прошу прощения, если я упустил что-то очевидное.

0 ответов

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