TextClf: простой в использовании инструмент классификации текста на основе pytorch/sklearn.

NLP

Классификация текста является одной из наиболее распространенных задач при обработке естественного языка. От идентификации спама в приложениях почтовых ящиков до идентификации намерений запросов в поисковых системах, А затем к анализу настроений в обзорах продуктов, это на самом деле общие потребности в классификации текста вокруг нас. Чтобы помочь вам лучше справляться с часто встречающимися сценариями классификации текста, я недавно разработал набор инструментов.TextClf,использоватьTextClf, Вы можете быстро опробовать различные модели алгоритмов классификации, настроить параметры и построить базовый уровень, создав и изменив файлы конфигурации. С помощью этого набора инструментов вы можете отказаться от ряда сложных реализаций, таких как построение модели, обучение модели и тестирование модели, чтобы вы могли больше сосредоточиться на характеристиках самих данных и вносить целевые улучшения и оптимизации.

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

Домашняя страница TextClf на github находится по адресуGitHub.com/Веревка Сян…Студенты, которые хотят увидеть код напрямую, могут перейти на GitHub.

Ниже я в основном представлю следующие пунктыTextClf

Введение в TextClf

Обзор

Как упоминалось в предисловии, TextClf — это набор инструментов для сценариев классификации текста. Его цель — быстро опробовать различные модели алгоритмов классификации, настроить параметры и построить базовые уровни с помощью файлов конфигурации, чтобы пользователи могли больше сосредоточиться на данных. Его собственные характеристики, не целенаправленное улучшение и оптимизация.

TextClf имеет следующие возможности:

  • Он также поддерживает модели машинного обучения, такие как логистическая регрессия, линейные векторные машины и модели глубокого обучения, такие как TextCNN, TextRNN, TextRCNN, DRNN, DPCNN, Bert и т. д.
  • Поддерживаются несколько методов оптимизации, напримерAdam,AdamW,Adamax,RMSpropи т.д
  • Поддерживает различные методы настройки скорости обучения, такие какReduceLROnPlateau,StepLR,MultiStepLR
  • Поддерживает различные функции потерь, такие какCrossEntropyLoss,CrossEntropyLoss with label smoothing,FocalLoss
  • Конфигурацию можно создать, взаимодействуя с программой, а затем параметры можно быстро настроить, изменив файл конфигурации.
  • При обучении моделей глубокого обучения поддержка использования парembeddingслой иclassifierСлои обучаются с разной скоростью обучения
  • Поддержка переобучения с КПП
  • Благодаря четкой структуре кода вы можете легко добавлять собственные модели и использоватьtextclf, вам не нужно обращать внимание на методы оптимизации, загрузку данных и т. д., вы можете больше сосредоточиться на реализации модели.

с другими структурами классификации текстаNeuralClassifierСравнение:

  • NeuralClassifierНе поддерживает модели машинного обучения, а также модели с глубоким предварительным обучением, такие как Bert/Xlnet.

  • TextClfбыло бы лучше, чемNeuralClassifierОн более удобен для новичков, а четкая структура кода также облегчит вам его расширение.

  • В частности, для моделей глубокого обученияTextClfдумайте об этом как о двух частях,Embeddingслой иClassifierЭтаж.

    EmbeddingСлои могут быть случайно инициализированными векторами слов или предварительно обученными статическими векторами слов (word2vec、glove、fasttext) или динамический вектор слов, такой какBert,Xlnetи Т. Д.

    ClassifierУровни могут быть MLP, CNN, а также будут поддерживать различные модели, такие как RCNN, RNN с вниманием и так далее в будущем.

    поставивembeddingслой иclassifierСлои разделены, и при настройке модели глубокого обучения мы можем выбратьembeddingслой иclassifierСлои упорядочиваются и комбинируются, напримерBert embedding + CNN,word2vec + RCNNи Т. Д.

    Таким образом, с меньшей реализацией кода,textclfМожно охватить больше комбинаций моделей.

Идеи дизайна системы

TextClf рассматривает процесс классификации текста какПредварительная обработка, обучение модели, тестирование моделитри фазы.

Основное, что делается на этапе предварительной обработки:

  • Прочитайте исходные данные, выполните сегментацию слов и создайте словарь.
  • Анализ характеристик данных, таких как распределение меток
  • Сохраняйте в двоичной форме для легкого и быстрого чтения

После предварительной обработки данных мы можем обучать на них различные модели и сравнивать результаты моделей.

Этап обучения модели отвечает за:

  • Чтение предварительно обработанных данных
  • Факторы, необходимые для обучения модели на основе инициализации конфигурации, оптимизатора и т. д.
  • Обучите модель и оптимизируйте модель по мере необходимости

Основные функции этапа тестирования:

  • Загрузите модель, сохраненную на этапе обучения, для тестирования
  • Поддержка использования файлового или терминального ввода для тестирования.

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

Структура каталогов

textclfВ каталоге исходного кода есть шесть подкаталогов и два файла. Функция каждого элемента следующая:

├── config		# 包括预处理、模型训练、模型测试的各种参数及其默认设置
├── data		# 数据预处理、数据加载的代码
├── models		# 主要包括深度学习模型的实现
├── tester		# 负责加载模型进行测试
├── __init__.py # 模块的初始化文件
├── main.py		# textclf的接口文件,运行textclf会调用该文件中的main函数
├── trainer		# 负责模型的训练
└── utils		# 包含各种工具函数

Установить

Зависимая среда:python >=3.6

Установить с помощью пипа:

pip install textclf

Приведенная выше команда сначала преобразует кодcloneна локальный, затем переключитесь в каталог проекта, используйтеpipУстановитьtextclfи его зависимости. тогда вы можете использоватьtextclf!

быстрый старт

Давайте посмотрим, как использоватьtextclfОбучите модель для классификации текста.

в каталогеexamples/toutiaoСледующие файлы находятся в разделе:

  3900行 train.csv
   600行 valid.csv
   600行 test.csv
  5100行 total

Эти данные взяты изСегодняшний набор данных классификации заголовков новостей, Используется здесь как демо.

Формат файла следующий:

下周一(5.7日)手上持有这些股的要小心   news_finance
猪伪狂犬苗的免疫方案怎么做?    news_edu
小米7未到!这两款小米手机目前性价比最高,米粉:可惜买不到       news_tech
任何指望技术来解决社会公正、公平的设想,都是幻想        news_tech
诸葛亮能借东风火烧曹营,为什么火烧司马懿却没料到会下雨?        news_culture
福利几款旅行必备神器,便宜实用颜值高!  news_travel
抵押车要怎样年审和购买保险?    news_car
现在一万一平米的房子,十年后大概卖多少钱?      news_house
第一位有中国国籍的外国人,留中国五十多年,死前留下这样的话!    news_world
为什么A股投资者越保护越亏?     stock

Каждая строка файла состоит из двух полей: предложения и соответствующей метки, которые используются между предложением и меткой.\tсимволы разделены.

предварительная обработка

Первый шаг — предварительная обработка. Предварительная обработка завершит чтение исходных данных, выполнит сегментацию слов, создаст словарь и сохранит его в двоичной форме для легкого и быстрого чтения. Для управления параметрами препроцессинга требуется соответствующий конфигурационный файл,textclfсерединаhelp-configФункция может помочь нам быстро сгенерировать конфигурацию, запустив:

textclf help-config

входить0Пусть система сгенерирует для нас значение по умолчаниюPreprocessConfig, затем сохраните его какpreprocess.jsonдокумент:

(textclf) luo@luo-pc:~/projects$ textclf help-config
Config  有以下选择(Default: DLTrainerConfig): 
0. PreprocessConfig     预处理的设置
1. DLTrainerConfig      训练深度学习模型的设置
2. DLTesterConfig       测试深度学习模型的设置
3. MLTrainerConfig      训练机器学习模型的设置
4. MLTesterConfig       测试机器学习模型的设置
输入您选择的ID (q to quit, enter for default):0
Chooce value PreprocessConfig   预处理的设置
输入保存的文件名(Default: config.json): preprocess.json
已经将您的配置写入到 preprocess.json,你可以在该文件中查看、修改参数以便后续使用
Bye!

открыть файлpreprocess.json, вы можете увидеть следующее:

{
    "__class__": "PreprocessConfig",
    "params": {
        "train_file": "train.csv",
        "valid_file": "valid.csv",
        "test_file": "test.csv",
        "datadir": "dataset",
        "tokenizer": "char",
        "nwords": -1,           
        "min_word_count": 1
    }
}

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

Затем вы можете выполнить предварительную обработку в соответствии с файлом конфигурации:

textclf --config-file preprocess.json preprocess

Если ошибок нет, вывод следующий:

(textclf) luo@V_PXLUO-NB2:~/textclf/test$ textclf --config-file config.json preprocess
Tokenize text from /home/luo/textclf/textclf_source/examples/toutiao/train.csv...
3900it [00:00, 311624.35it/s]
Tokenize text from /home/luo/textclf/textclf_source/examples/toutiao/valid.csv...
600it [00:00, 299700.18it/s]
Tokenize text from /home/luo/textclf/textclf_source/examples/toutiao/test.csv...
600it [00:00, 289795.30it/s]
Label Prob:
+--------------------+-------------+-------------+------------+
|                    |   train.csv |   valid.csv |   test.csv |
+====================+=============+=============+============+
| news_finance       |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_edu           |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_tech          |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_culture       |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_travel        |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_car           |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_house         |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_world         |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| stock              |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_story         |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_agriculture   |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_entertainment |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_military      |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_sports        |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| news_game          |      0.0667 |      0.0667 |     0.0667 |
+--------------------+-------------+-------------+------------+
| Sum                |   3900.0000 |    600.0000 |   600.0000 |
+--------------------+-------------+-------------+------------+
Dictionary Size: 2981
Saving data to ./textclf.joblib...

Предварительная обработка выводит информацию о распределении меток для каждого набора данных. При этом обработанные данные сохраняются в бинарный файл./textclf.joblibбинго. (Каждая категория содержит одинаковое количество образцов.)

Подробное описание параметров предварительной обработки см.Документация.

обучить модель логистической регрессии

Точно так же мы сначала используемtextclf help-configгенерироватьtrain_lr.jsonконфигурационный файл, введите3Выберите конфигурацию для обучения моделей машинного обучения. Выбирайте по подсказкамCountVectorizer(способ векторизации текста) и модельLR:

(textclf) luo@luo-pc:~/projects$ textclf help-config
Config  有以下选择(Default: DLTrainerConfig): 
0. PreprocessConfig     预处理的设置
1. DLTrainerConfig      训练深度学习模型的设置
2. DLTesterConfig       测试深度学习模型的设置
3. MLTrainerConfig      训练机器学习模型的设置
4. MLTesterConfig       测试机器学习模型的设置
输入您选择的ID (q to quit, enter for default):3
Chooce value MLTrainerConfig    训练机器学习模型的设置
正在设置vectorizer
vectorizer 有以下选择(Default: CountVectorizer): 
0. CountVectorizer
1. TfidfVectorizer
输入您选择的ID (q to quit, enter for default):0
Chooce value CountVectorizer
正在设置model
model 有以下选择(Default: LogisticRegression): 
0. LogisticRegression
1. LinearSVM
输入您选择的ID (q to quit, enter for default):0
Chooce value LogisticRegression
输入保存的文件名(Default: config.json): train_lr.json
已经将您的配置写入到 train_lr.json,你可以在该文件中查看、修改参数以便后续使用
Bye!

Для более тонкой настройки, такой как параметры моделей логистической регрессии,CountVectorizerПараметры могут быть сгенерированы вtrain_lr.jsonбыть изменены в. Здесь для обучения используется конфигурация по умолчанию:

textclf --config-file train_lr.json train

Поскольку объем данных относительно невелик, вы должны сразу увидеть результаты. После тренировки,textclfЭффект модели будет протестирован на тестовом наборе, и модель будет сохранена вckptsПод содержанием.

Подробные описания параметров в обучении модели машинного обучения см.Документация.

Загрузите обученную модель для тестового анализа

первое использованиеhelp-configгенерироватьMLTesterConfigПо умолчанию установлено значениеtest_lr.json:

(textclf) luo@luo-pc:~/projects$ textclf help-config
Config  有以下选择(Default: DLTrainerConfig): 
0. PreprocessConfig     预处理的设置
1. DLTrainerConfig      训练深度学习模型的设置
2. DLTesterConfig       测试深度学习模型的设置
3. MLTrainerConfig      训练机器学习模型的设置
4. MLTesterConfig       测试机器学习模型的设置
输入您选择的ID (q to quit, enter for default):4
Chooce value MLTesterConfig     测试机器学习模型的设置
输入保存的文件名(Default: config.json): test_lr.json
已经将您的配置写入到 test_lr.json,你可以在该文件中查看、修改参数以便后续使用
Bye!

будетtest_lr.jsonсерединаinput_fileполе изменено наquery_intent_toy_data/test.csvпуть, а затем проверьте:

textclf --config-file test_lr.json test

испытание окончено,textclfРаспечатает точность, каждая этикеткаf1ценность:

Writing predicted labels to predict.csv
Acc in test file:66.67%
Report:
                    precision    recall  f1-score   support

  news_agriculture     0.6970    0.5750    0.6301        40
          news_car     0.8056    0.7250    0.7632        40
      news_culture     0.7949    0.7750    0.7848        40
          news_edu     0.8421    0.8000    0.8205        40
news_entertainment     0.6000    0.6000    0.6000        40
      news_finance     0.2037    0.2750    0.2340        40
         news_game     0.7111    0.8000    0.7529        40
        news_house     0.7805    0.8000    0.7901        40
     news_military     0.8750    0.7000    0.7778        40
       news_sports     0.7317    0.7500    0.7407        40
        news_story     0.7297    0.6750    0.7013        40
         news_tech     0.6522    0.7500    0.6977        40
       news_travel     0.6410    0.6250    0.6329        40
        news_world     0.6585    0.6750    0.6667        40
             stock     0.5000    0.4750    0.4872        40

          accuracy                         0.6667       600
         macro avg     0.6815    0.6667    0.6720       600
      weighted avg     0.6815    0.6667    0.6720       600

Подробные параметры тестирования модели машинного обучения см.Документация.

Обучите модель TextCNN

Процесс обучения модели глубокого обучения TextCNN примерно такой же, как и процесс обучения логистической регрессии.

Вот краткое объяснение. пройти первымhelp-configНастройте, следуйте подсказкам, выберите сначалаDLTrainerConfig, а затем выберитеAdam optimzer + ReduceLROnPlateau + StaticEmbeddingLayer + CNNClassifier + CrossEntropyLossВот и все.

(textclf) luo@V_PXLUO-NB2:~/textclf/test$ textclf help-config
Config  有以下选择(Default: DLTrainerConfig):
0. PreprocessConfig     预处理的设置
1. DLTrainerConfig      训练深度学习模型的设置
2. DLTesterConfig       测试深度学习模型的设置
3. MLTrainerConfig      训练机器学习模型的设置
4. MLTesterConfig       测试机器学习模型的设置
输入您选择的ID (q to quit, enter for default):
Chooce default value: DLTrainerConfig
正在设置optimizer
optimizer 有以下选择(Default: Adam):
0. Adam
1. Adadelta
2. Adagrad
3. AdamW
4. Adamax
5. ASGD
6. RMSprop
7. Rprop
8. SGD
输入您选择的ID (q to quit, enter for default):
Chooce default value: Adam
正在设置scheduler
scheduler 有以下选择(Default: NoneScheduler):
0. NoneScheduler
1. ReduceLROnPlateau
2. StepLR
3. MultiStepLR
输入您选择的ID (q to quit, enter for default):
Chooce default value: NoneScheduler
正在设置model
正在设置embedding_layer
embedding_layer 有以下选择(Default: StaticEmbeddingLayer):
0. StaticEmbeddingLayer
1. BertEmbeddingLayer
输入您选择的ID (q to quit, enter for default):
Chooce default value: StaticEmbeddingLayer
正在设置classifier
classifier 有以下选择(Default: CNNClassifier):
0. CNNClassifier
1. LinearClassifier
2. RNNClassifier
3. RCNNClassifier
4. DRNNClassifier
5. DPCNNClassifier
输入您选择的ID (q to quit, enter for default):0
Chooce value CNNClassifier
正在设置data_loader
正在设置criterion
criterion 有以下选择(Default: CrossEntropyLoss):
0. CrossEntropyLoss
1. FocalLoss
输入您选择的ID (q to quit, enter for default):q^Hq
请输入整数ID!
输入您选择的ID (q to quit, enter for default):q
Goodbye!
(textclf) luo@V_PXLUO-NB2:~/textclf/test$
(textclf) luo@V_PXLUO-NB2:~/textclf/test$ textclf help-config
Config  有以下选择(Default: DLTrainerConfig):
0. PreprocessConfig     预处理的设置
1. DLTrainerConfig      训练深度学习模型的设置
2. DLTesterConfig       测试深度学习模型的设置
3. MLTrainerConfig      训练机器学习模型的设置
4. MLTesterConfig       测试机器学习模型的设置
输入您选择的ID (q to quit, enter for default):1
Chooce value DLTrainerConfig    训练深度学习模型的设置
正在设置optimizer
optimizer 有以下选择(Default: Adam):
0. Adam
1. Adadelta
2. Adagrad
3. AdamW
4. Adamax
5. ASGD
6. RMSprop
7. Rprop
8. SGD
输入您选择的ID (q to quit, enter for default):0
Chooce value Adam
正在设置scheduler
scheduler 有以下选择(Default: NoneScheduler):
0. NoneScheduler
1. ReduceLROnPlateau
2. StepLR
3. MultiStepLR
输入您选择的ID (q to quit, enter for default):0
Chooce value NoneScheduler
正在设置model
正在设置embedding_layer
embedding_layer 有以下选择(Default: StaticEmbeddingLayer):
0. StaticEmbeddingLayer
1. BertEmbeddingLayer
输入您选择的ID (q to quit, enter for default):0
Chooce value StaticEmbeddingLayer
正在设置classifier
classifier 有以下选择(Default: CNNClassifier):
0. CNNClassifier
1. LinearClassifier
2. RNNClassifier
3. RCNNClassifier
4. DRNNClassifier
5. DPCNNClassifier
输入您选择的ID (q to quit, enter for default):0
Chooce value CNNClassifier
正在设置data_loader
正在设置criterion
criterion 有以下选择(Default: CrossEntropyLoss):
0. CrossEntropyLoss
1. FocalLoss
输入您选择的ID (q to quit, enter for default):0
Chooce value CrossEntropyLoss
输入保存的文件名(Default: config.json): train_cnn.json
已经将您的配置写入到 train_cnn.json,你可以在该文件中查看、修改参数以便后续使用
Bye!

Затем запустите:

textclf --config-file train_cnn.json train

Мы можем приступить к обучению нашего настроенногоtextcnnМодель.

Конечно, после обучения мы также можем пройтиDLTesterConfigНастройте для проверки эффектов модели. И, если вы хотите использовать предварительно обученный статическийembeddingНапример, word2vec и перчатка должны изменить только файл конфигурации.

ВышеупомянутоеTextCNNтренировочный процесс. Если вы хотите попробовать больше моделей, таких как Берт, просто установитеDLTrainerConfigкогдаEmbeddingLayerУстановить какBertEmbeddingLayer, и вручную установить предобучение в сгенерированном конфигурационном файлеBertПуть к модели. Я не буду здесь вдаваться в подробности.

Связанная документация для этого раздела:

Подробные описания параметров для обучения моделей глубокого обучения

Подробные описания параметров для тестирования моделей глубокого обучения

документация textclf

Эпилог

ВышеупомянутоеTextClfКраткое введение. Если у вас есть задача, связанная с классификацией текста, попробуйте ее.TextClfБар! еслиTextClfЧтобы помочь вам, вы можете перейти к TextClfдомашняя страница гитхабаНажмите, чтобы пометить или разветвить! Если кто-то использует его, то я потрачу больше времени в будущем, чтобы добавить некоторые другие функции в TextClf, чтобы сделать его лучше.

Наконец, из-за ограниченных личных способностей и энергии TextClf должен иметь некоторые недостатки.Если у вас есть какие-либо предложения или рекомендации по этому проекту, вы можете связаться со мной напрямую!

Ссылаться на

DeepText/NeuralClassifier

pytext