Классификация текста является одной из наиболее распространенных задач при обработке естественного языка. От идентификации спама в приложениях почтовых ящиков до идентификации намерений запросов в поисковых системах,
А затем к анализу настроений в обзорах продуктов, это на самом деле общие потребности в классификации текста вокруг нас.
Чтобы помочь вам лучше справляться с часто встречающимися сценариями классификации текста, я недавно разработал набор инструментов.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 должен иметь некоторые недостатки.Если у вас есть какие-либо предложения или рекомендации по этому проекту, вы можете связаться со мной напрямую!