Пространственная кастомная модель для хинди - PullRequest
0 голосов
/ 30 октября 2019

Я недавно работал над обучением модели части речи для хинди в Spacy. Я уже обучил модель, но при анализе любого текста атрибут .pos_ любого токена всегда указывает на X. Мелкозернистые метки, .tag_ - которые были те, с которыми обучалась модель - все же верны.

Отображение между этими мелкозернистыми тегами и «универсальными» тегами (VERB, NOUN, ADJ и т. Д.) Находится в файле spacy/lang/hi/tag_map.py.

Lemma यूरोप, Lemmatized: False, POS: X, TAG: NNP
Lemma के, Lemmatized: False, POS: X, TAG: PSP
Lemma जिन, Lemmatized: False, POS: X, TAG: DEM
Lemma राजनीतिक, Lemmatized: False, POS: X, TAG: JJ
Lemma दलों, Lemmatized: False, POS: X, TAG: NN
Lemma को, Lemmatized: False, POS: X, TAG: PSP
Lemma व्यवस्था, Lemmatized: False, POS: X, TAG: NN
Lemma ,, Lemmatized: False, POS: SYM, TAG: SYM
Lemma राजनेताओं, Lemmatized: False, POS: X, TAG: NN
Lemma और, Lemmatized: False, POS: X, TAG: CC
Lemma मीडिया, Lemmatized: False, POS: X, TAG: NN
Lemma द्वारा, Lemmatized: False, POS: X, TAG: PSP
Lemma अति, Lemmatized: False, POS: X, TAG: INTF
Lemma दक्षिणपंथी, Lemmatized: False, POS: X, TAG: NN
Lemma कहा, Lemmatized: False, POS: X, TAG: VM
Lemma जाता, Lemmatized: False, POS: X, TAG: VAUX
Lemma है, Lemmatized: False, POS: X, TAG: VAUX
Lemma (, Lemmatized: False, POS: SYM, TAG: SYM
Lemma परन्तु, Lemmatized: False, POS: X, TAG: CC
Lemma मेरी, Lemmatized: False, POS: X, TAG: PRP
Lemma ओर, Lemmatized: False, POS: X, TAG: NST
Lemma से, Lemmatized: False, POS: X, TAG: PSP
Lemma सभ्यतावादी, Lemmatized: False, POS: X, TAG: NNP
Lemma कहा, Lemmatized: False, POS: X, TAG: VM
Lemma जाता, Lemmatized: False, POS: X, TAG: VAUX
Lemma है, Lemmatized: False, POS: X, TAG: VAUX
Lemma ), Lemmatized: False, POS: SYM, TAG: SYM
Lemma उनकी, Lemmatized: False, POS: X, TAG: PRP
Lemma आलोचना, Lemmatized: False, POS: X, TAG: NN
Lemma उनकी, Lemmatized: False, POS: X, TAG: PRP
Lemma भूलों, Lemmatized: False, POS: X, TAG: NN
Lemma और, Lemmatized: False, POS: X, TAG: CC
Lemma अतिवादिता, Lemmatized: False, POS: X, TAG: NN
Lemma के, Lemmatized: False, POS: X, TAG: PSP
Lemma कारण, Lemmatized: False, POS: X, TAG: PSP
Lemma की, Lemmatized: False, POS: X, TAG: VM
Lemma जाती, Lemmatized: False, POS: X, TAG: VAUX
Lemma है|, Lemmatized: False, POS: X, TAG: NNPC

Небольшое расследованиеЯ обнаружил, что причина, по которой .pos_ имеет это значение X, заключается в том, что в сгенерированном двоичном файле lang_model/tagger/tag_map все его ключи указывают на 101, который является "кодом", назначенным ЧастиРечь X, что Other.

Я предполагаю, что он генерирует ключи, указывающие на 101, потому что нет информации о том, как он должен сопоставлять каждый из предоставленных тегов из набора данных с "универсальными". Дело в том, что я могу предоставить tag_map.py в определении моего Hindi(Language) класса, но при передаче текста через конвейер он в конечном итоге будет использовать карту тегов, определенную в каталоге tagger/, созданную с помощью выводакоманда train.

Вот ссылка, которая пояснит, что я объясняю: https://universaldependencies.org/tagset-conversion/hi-conll-uposf.html

Первый элемент первого столбца (CC, DEM, INTF и т. Д.) - те, которые предоставляются модели. Универсальные теги - это теги из второго столбца.

Мой вопрос: где я должен определить тег_карты для перезаписи тега, сгенерированного командой spacy train?

1 Ответ

0 голосов
/ 30 октября 2019

Вам необходимо добавить tag_map.py к spacy/lang/hi/ и указать модель по умолчанию (которая загружается с spacy train hi) для загрузки. Похоже, у вас уже есть tag_map.py, но если нет, вы можете увидеть примеры для любого из языков, которые предоставили пространственные модели, например:

https://github.com/explosion/spaCy/blob/master/spacy/lang/en/tag_map.py

Импортировать тегmap и добавьте ее в HindiDefaults in spacy/lang/hi/__init__.py для загрузки карты тегов:

from .tag_map import TAG_MAP

class HindiDefaults(Language.Defaults):
    tag_map = TAG_MAP

Я думаю, вы также можете изменить карту тегов в nlp.vocab.morphology.tag_map на лету после инициализации пустогомодели до начала обучения, но я не думаю, что есть простой способ сделать это с параметрами командной строки, равными spacy train, поэтому для этого потребуется специальный сценарий обучения.

Вы можете использовать spacy debug-data hi train.json dev.jsonчтобы убедиться, что настройки работают, так как он будет отображать предупреждения для любых тегов в ваших данных обучения, которых нет в карте тегов.

...