Начало работы с Pytext — боевая модель Intent-Slot

Python

1 Введение в задачу классификации намерений

В диалоговой системе сначала выполняются домен, распознавание намерений и извлечение слотов пользовательского ввода. После развития глубокого обучения метод распознавания намерений в основном использует алгоритмы глубокого обучения и использует CNN для классификации намерений.Классификация предметной области аналогична классификации намерений. Предсказание слота можно рассматривать как задачу предсказания последовательности меток. Например, в предложении «Я хочу послушать Jay Chou's Chrysanthemum Stage» метка может быть определена как «O O O B-singer M-singer E-singer O B-song M-song E-song». Предсказание последовательности меток в основном использует модели CRF, RNN, LSTM, LSTM+crf. Ссылка на сайт:Ууху. Call.com/question/22…

2 слот заполнения

Заполнение слота можно понимать как проблему маркировки последовательности, мы обучаем пример {(x^((n)),y^((n)) ):n=1,...,N}, а затем мы хотим распознать обучение функции f:x→y, которая может сопоставить входную последовательность x и соответствующую последовательность меток y. При заполнении слотов входная последовательность и последовательность тегов имеют одинаковую длину, поэтому выравнивание является точным.

表1:ATIS语料样本及其意图和槽位注释

3 Набор данных АТИС

ATISНабор данных содержит 4978 обучающих данных и 893 тестовых данных, текстовое содержание представляет собой диалог обслуживания клиентов, и существует 26 категорий намерений. Каждый токен в высказывании запроса выравнивается со слотом, который заполняет метку IOB, то есть предложение и слоты на изображении выше выравниваются один к одному. ##4 Pytext бой Этот раздел в основном относится к официальной документацииTrain Intent-Slot model on ATIS Dataset, Некоторые места немного отличаются.

4.1 Установка

В настоящее время Pytext поддерживает только системы Linux и Mac.Для установки введите следующий оператор в командной строке:

pip install pytext-nlp

4.2 Подготовка документов

Glove 100维词向量

4.3 Предварительная обработка данных

python3 demo/atis_joint_model/data_processor.py --download-folder atis/ --output-directory demo/atis_joint_model/

数据预处理

4.4 Обучение модели

pytext train < demo/atis_joint_model/atis_joint_config.json

Обучение занимает около 30 минут без использования графического процессора.

模型训练

Когда модель обучена, мы передаемatis_joint_config.jsonвидите, файлы результатов и модели сохраняются вtmp目录下

4.6 Экспорт модели

При сохранении модели PyTorch просто используйте pickle для сериализации. Это означает, что простые изменения кода (например, обновления встраивания слов) могут привести к обратной несовместимости с развернутыми моделями. Для решения этой проблемы модель можно экспортировать в формат Caffe2 с помощью встроенной интеграции ONNX. Экспортированные модели Caffe2 ведут себя одинаково независимо от изменений в PyText или коде разработки.

Введите следующие две строки в командной строке соответственно

CONFIG=demo/atis_joint_model/atis_joint_config.json
 pytext export --output-path exported_model.c2 < "$CONFIG"

4.5 Оценка модели

мы можем использоватьpytext testпроверить работоспособность модели на тестовом наборе

pytext test < "$CONFIG"

评估结果

4.6 Применение модели

Мы можем развернуть обученную модель как веб-приложение и создать новый файлflask_app.py

import sys
import flask
import pytext

config_file = sys.argv[1]
model_file = sys.argv[2]

config = pytext.load_config(config_file)
predictor = pytext.create_predictor(config, model_file)

app = flask.Flask(__name__)

@app.route('/get_flight_info', methods=['GET', 'POST'])
def get_flight_info():
    text = flask.request.data.decode()

    # 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):]

    return flask.jsonify({"question": f"Are you asking about {best_doc_label}?"})

app.run(host='0.0.0.0', port='8080', debug=True)

воплощать в жизнь

python flask_app.py "$CONFIG" exported_model.c2

Затем откройте другой Терминал, давайте проверим сервис: Тест 1

curl http://localhost:8080/get_flight_info -H "Content-Type: text/plain" -d  "I am looking for flights from San Francisco to Minneapolis"

{
  "question": "Are you asking about flight?"
}

Тест 2

curl http://localhost:8080/get_flight_info -H "Content-Type: text/plain" -d  "How much does a trip to NY cost?"

{
  "question": "Are you asking about airfare?"
}

Тест 3

curl http://localhost:8080/get_flight_info -H "Content-Type: text/plain" -d  "Which airport should I go to?"

{
  "question": "Are you asking about airport?"
}

Мы видим, что модель распознает все три намерения.

5 Резюме

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