spacy создать новую языковую модель с данными из корпуса - PullRequest
0 голосов
/ 03 мая 2018

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

Я следовал инструкциям на их сайте и сделал то же самое, что и в этом посте . Но я не понимаю, как добавлять данные, такие как словарь или слова. (например, «заполнить» языковой шаблон)

Я понял, что есть некоторые инструменты разработки для тех же самых этих операций, но их выполнение плохо документировано, поэтому я не понимаю, как правильно их установить и использовать, особенно если они в Python 2.7, который конфликтует с моей просторной установкой, так как использует python 3.

На данный момент у меня есть corpus.txt (из википедии), на котором я хочу тренироваться, и шаблон языка со значениями по умолчанию, такими как stop_words.py, tokenizer_exceptions.py и т. Д., Которые я создал и заполнил вручную.

Кто-нибудь когда-нибудь делал это правильно и мог бы помочь мне здесь?

1 Ответ

0 голосов
/ 07 мая 2018

В spaCy есть три основных компонента «языковой модели»: «статические» данные для конкретного языка , поставляемые в Python (исключения токенайзера, стоп-слова, правила для отображения мелкозернистых в грубые детализированные теги части речи), статистическая модель , предназначенная для прогнозирования тегов части речи, зависимостей и именованных объектов (обученных в большом помеченном корпусе и включенных в двоичные веса) и необязательно векторы слов , которые можно преобразовать и добавить до или после тренировки. Вы также можете обучить свои собственные векторы для своего исходного текста, используя библиотеку, такую ​​как Gensim , а затем добавить их в spaCy.

spaCy v2.x позволяет вам обучать все компоненты конвейера независимо или в режиме реального времени, поэтому вы можете обучать тэггер, парсер и распознаватель сущностей вашим данным. Все это требует помеченных данных . Если вы обучаете новый язык с нуля, вы обычно используете существующий древовидный банк. Вот пример корпуса Universal Dependencies для испанского языка (который также использовался для обучения испанской модели spaCy). Затем вы можете преобразовать данные в формат spaCy в формате JSON и использовать команду spacy train для обучения модели. Например:

git clone https://github.com/UniversalDependencies/UD_Spanish-AnCora
mkdir ancora-json
python -m spacy convert UD_Spanish-AnCora/es_ancora-ud-train.json ancora-json
python -m spacy convert UD_Spanish-AnCora/es_ancora-ud-dev.json ancora-json
mkdir models
python -m spacy train es models ancora-json/es_ancora-ud-train.json ancora-json/es_ancora-ud-dev.json

Я не знаю, что у вас в corpus.txt и является ли оно полностью помеченным или только необработанный текст. (Я также не знаю ни одного существующего ресурса для люксембургского языка - кажется, что это довольно сложно найти!) Если ваши данные помечены, вы можете преобразовать их в формат spaCy, используя один из встроенных преобразователей или ваш собственный маленький сценарий. Если ваш корпус состоит только из необработанного текста, вы должны сначала пометить его и посмотреть, подходит ли он для обучения общей языковой модели. В конечном счете, это сводится к экспериментам, но вот несколько стратегий:

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

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

...