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. При заполнении слотов входная последовательность и последовательность тегов имеют одинаковую длину, поэтому выравнивание является точным.
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 Подготовка документов
- Исходный код и набор данных pytext GitHub.com/Facebook Рес…набор данныхWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO ...
- слово векторНЛП.Стэнфорд.Количество/проектов/км…
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 для различных задач, который определяет структуру модели, ввод, вывод и т. д. Кроме того, некоторые пользователи сети сообщают, что теперь в документе мало пояснений по этой части, и небольшое введение о том, как добавлять модели. , так что мы можем только изучить сначала. В этой статье я просто устанавливаю официальную документацию, чтобы пройти процесс обучения модели, но я надеюсь изучить, как добавить пользовательскую модель и обучить китайский корпус дальше.