Pytext в действии — насколько быстро можно построить классификатор текста

искусственный интеллект

1 Подготовка набора данных

数据集
Набор данных состоит из двух файлов:train.tsvиtest.tsv, контент — это эмоциональные текстовые данные, собранные из Интернета, просто сращенные пробелами после сегментации слов. Учебный набор и тестовый набор содержат по 10 000 единиц данных каждый.

2 Создание текстового классификатора

Платформа Pytext включает компоненты Task, Trainer, Model, DataHandler и Exporter, которые соответствуют переключению задач, обучению модели, структуре модели, обработке данных и экспорту модели, Все они наследуются от класса с именем Component.

(Изображение из:py text - текст py. читайте документ s-hosted.com/en/latest/ oh…

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

Содержимое docnn.json выглядит следующим образом:

{
  "task": {
    "DocClassificationTask": {
      "data_handler": {
        "train_path": "train.tsv",
        "eval_path": "test.tsv",
        "test_path": "test.tsv"
      }
    }
  }
}
  • Шаг 1 Обучите модель:
pytext train < docnn.json 

Через 3-4 минуты завершается обучение эпохе 10. Без использования вектора слов и непосредственно с использованием настроек по умолчанию эффект прогнозирования в тестовом наборе выглядит следующим образом:
image.png

  • Шаг 2 Экспортируйте модель
CONFIG=docnn.json 
pytext export --output-path model.c2 < "$CONFIG"

На рабочем столе мы видим экспортированную модельmodel.c2

  • Шаг 3 Предсказание модели Ссылаясь на пример распознавания намерений, я написал следующий тестовый код
# !/usr/bin/env python3
# -*- coding:utf-8 _*-
"""
@Author:yanqiang
@File: demo.py
@Time: 2018/12/21 19:06
@Software: PyCharm
@Description:
"""
import sys
import pytext
import jieba

config_file = sys.argv[1]
model_file = sys.argv[2]
text = sys.argv[3]
text = " ".join([word for word in jieba.cut(text)])
config = pytext.load_config(config_file)
predictor = pytext.create_predictor(config, model_file)
# Pass the inputs to PyText's prediction API
result = predictor({"raw_text": text})

# Results is a list of output blob names and their scores.
# The blob names are different for joint models vs doc models
# Since this tutorial is for both, let's check which one we should look at.
doc_label_scores_prefix = (
    'scores:' if any(r.startswith('scores:') for r in result)
    else 'doc_scores:'
)

# For now let's just output the top document label!
best_doc_label = max(
    (label for label in result if label.startswith(doc_label_scores_prefix)),
    key=lambda label: result[label][0],
    # Strip the doc label prefix here
)[len(doc_label_scores_prefix):]
print("输入句子的情感为:%s" % best_doc_label)

Посмотрим на эффект:

python main.py "$CONFIG" model.c2 "超级喜欢蒙牛这个味 道"
python main.py "$CONFIG" model.c2 "这是什么商品啊!太 差了吧?"

3 Резюме

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