Реализовать классификацию текста на основе PaddlePaddle.

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

0. Предисловие

Написанный на фронте, ИИ был очень популярен в последние 2 года, и люди из всех слоев общества хотят учиться. В этой статье в основном представлено введение в классификацию английских текстов с использованием нейронных сетей. Это университетское задание автор.Все открыты для изучения. ,обсудить.

Адрес склада:GitHub.com/ состоит из него…Пожалуйста, дайте маленькую звезду, если вам это нравится ~

1. Шаги по внедрению ИИ

Следующее, что я хочу сделать, это ИИ Багувен, как реализовать ИИ. Если есть какое-либо оскорбление, пожалуйста, потерпите меня ~ Пожалуйста, сообщите мне, если есть какие-либо несоответствия.

1.1 Определите, что нужно сделать

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

Тогда мы уверены, что масштаб того, что мы будем делать в этот раз, это кошки, собаки и другие.

1.2 Выберите рамку

Выбери из головокружительного множества оправ ту, что тебе подходит, я выбралPaddlePaddle.

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

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

1.4 Практическая работа — создание обучающего набора данных

Здесь он разделен по своим условиям набора данных, вы можете чувствовать себя свободно, но рекомендуется иметь не менее 5к картинок~

1.5 Практический - остальное

1) Выберите сетевую модель: в соответствии с различными потребностями выберите разные модели для обучения. На этот раз я работаю с изображениями, поэтому я просто выбрал модель изображения, CNN (гигант может настроить ее самостоятельно).

2) Настройте алгоритм, обучите результаты и посмотрите на три шага потери, широко известные как настройка параметров.

Научно-популярный тюнер исходит из этого.

3) После наших кропотливых усилий (настройка) (референс) мы наконец-то получили результат.

4) Наконец, запустите тест для проверки.

5) Если вам все еще нужно развернуть, вы должны иметь определенные навыки программирования~

1.6 Представьте эту статью

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

Это связано с веб-сайтом иностранного СМИ, поэтому пользователи говорят более непринужденно, а иностранцы также могут отправлять сокращенные слова, поэтому для повышения точности я все же делаю небольшую обработку.

2. Введение документа

метод обработки текста create_data_start.py

create_data_utils.py Утилиты обработки текста

файл модели model.py 1

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

основной файл модели net.py

Основным из них является CNN, предыдущая версия была bilstm, теперь ее заменил CNN. Он в основном полагается на большие разреженные матрицы для обучения.

read_config.py читает файл конфигурации

файл предварительной обработки данных pre_create_data.py

К основным операциям относятся

1. Сегментация слов, потому что я обнаружил, что некоторые слова в наборе данных слишком неэффективны. Поэтому для таких слов я использовал библиотеку wordninja, чтобы снова выполнить сегментацию слов, и эффект был лучше, чем в предыдущем файле.

2. Исправление слов, потому что они есть в тексте, из-за устного описания, например, u == you, такие слова очень неэффективны для обучения данных, поэтому я использую workcheck для их исправления, идея заключается в регулярной замене. Среди них wordcheck.txt — это набор данных, содержащий 12 строк строк «Друзья». (На самом деле эффект коррекции еще не очень очевиден, но он намного лучше, чем раньше)

Файл чтения набора данных text_reader.py

обучающий файл trian.py

utils.py Это инструментальный файл предыдущей версии.

файл проверки точности модели valid_model_acc.py

valid.py предсказывает вывод и получает точный файл

wordcheck.py файл алгоритма исправления слов

3. Основной алгоритм

3.1 Алгоритм CNN

Код:

import paddle.fluid as fluid

def cnn_net(data,label,dict_dim,emb_dim=128,hid_dim=128,hid_dim2=96,class_dim=10,
            win_size=3,is_infer=False):
    """
    Conv net
    """
    # embedding layer
    emb = fluid.layers.embedding(input=data, size=[dict_dim, emb_dim])
    # convolution layer
    conv_3 = fluid.nets.sequence_conv_pool(
        input=emb,
        num_filters=hid_dim,
        filter_size=win_size,
        act="tanh",
        pool_type="max")
    # full connect layer
    fc_1 = fluid.layers.fc(input=[conv_3], size=hid_dim2)
    # dropout layer
    dropout_1 = fluid.layers.dropout(x=fc_1,dropout_prob=0.5,name="dropout")
    # softmax layer
    prediction = fluid.layers.fc(input=[dropout_1], size=class_dim, act="softmax")
    return prediction

4. Этапы работы

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

①: Разделить слова

Поскольку степень идентификации слов в некоторых документах не очень высока, я снова использую структуру wordninja для выполнения сегментации слов. Таким образом, очевидно, что некоторые слова снова сегментированы. Например, 2019 лет был разделен на 2019 лет. Этот эффект намного лучше, чем раньше. Нам легче читать.

②: Правильное написание слов

Поскольку набор данных собирается из публикаций, разговоров и т. д. в зарубежных социальных сетях, существует много сленговых слов и слов, произнесенных иностранцами, которые будут опускать многие слова или заменять исходные местоимения другими словами (произношение). то же самое). Например: u == you, c == say и т. д.

③: метод работы

python pre_create_data.py

④: код

 # 拆分单词
 data = wdja.split(data)
 data1 = []
 for data2 in data:
     # 单词拼写纠正
     data1.append(wordcheck.correct(data2))
 strs = " ".join(list(data1))
 x_train_list.append(strs)
 x_train_file.write(strs + "\n")

4.2 Создание набора данных

①: Процесс генерации

Создать словарь данных -> В соответствии со словами в тестовом наборе и наборе проверки сгенерируйте словарь данных, размер которого определяется в соответствии с количеством слов в содержимом. Имя файла: dict_txt_all.txt.

Создайте тестовый набор и обучающий набор -> имя файла: train_list_end.txt/valid_list_end.txt.

При этом алгоритм стемминга используется для восстановления множественного числа, герундия, совершенного времени и т. д. WordNetLemmatizer используется для удаления стоп-слов.

②: Операция

Сначала запустите: python pre_create_data.py для создания файлов train.txt, valid.txt.

Запустите снова: python create_data_start.py

Выберите 1 режим тренировки.

После создания тренировочного набора выберите 1, чтобы продолжить создание и получить результат.

4.3 Провести обучение

①: Используйте GPU для обучения

Чтобы повысить скорость вычислений, я использую GPU для вычислений и обучения.

код показывает, как показано ниже:

#创建一个执行器
#1:CPU训练速度比较慢,故采用GPU进行训练
#2:为了保证acc,所以请使用GPU。
place = fluid.CUDAPlace(0)

②: Выходная модель

    # 保存预测模型
    save_path = 'infer_model/'

    # 删除旧的模型文件
    shutil.rmtree(save_path, ignore_errors=True)

    # 创建保持模型文件目录
    os.makedirs(save_path)

    # 保存预测模型
    fluid.io.save_inference_model(save_path, feeded_var_names=[words.name], target_vars=[model], executor=exe)

Название модели: infer_model

③: Как использовать

После завершения процесса 1, 2 вы можете запустить этот код

python train.py

4.4 Выполнение прогнозов

①: Выберите GPU для вывода предсказания

②: Выходной файл — result.txt.

Выходной результат содержит соотв.

4.5 Способ установки рамы

①: Посетите веб-сайтвесло paddle.org/paddle/GE TT…

②: Результат вывода

Информация об установке:

pip3 install paddlepaddle-gpu

проверить сообщение:

использоватьpython3Войдите в интерпретатор Python, введитеimport paddle.fluid, затем введитеpaddle.fluid.install_check.run_check(). если он появитсяYour Paddle Fluid is installed succesfully!, что означает, что вы успешно установили.

Описание информации:

Требуется версия Python выше 3.5.0 и версия pip выше 9.0.1. Для получения дополнительной помощи см.Установить с помощью pip под Ubuntu

Примечание:pip install paddlepaddle-gpuКоманда установит PaddlePaddle, который поддерживает CUDA 9.0 cuDNN v7, если ваша версия CUDA или cuDNN отличается от этой, вы можете обратиться кздесьУзнайте о командах установки для других версий CUDA/cuDNN.

4.6 Тестирование кода

окрестности:

видеокарта NVIDIA Tesla V100
Cores 2
ОЗУ 8GB Memory
система Ubuntu
видеопамять 16G
гребная версия Фреймворк: PaddlePaddle 1.4.1 (Python 3.6)

Программное обеспечение: ноутбук Jupyter

адрес:aistudio.baidu.com

Модель: infer_model

Вывод журнала итерации обучения:

Pass:5, Batch:40, Cost:1.07034, Acc:0.67969
Test:5, Cost:1.30199, ACC:0.58453
Pass:6, Batch:0, Cost:1.01823, Acc:0.73438
Test:6, Cost:1.29810, ACC:0.57989
Pass:6, Batch:40, Cost:1.02507, Acc:0.67969
Test:6, Cost:1.25205, ACC:0.58379
Pass:7, Batch:0, Cost:0.92054, Acc:0.76562
Test:7, Cost:1.24948, ACC:0.58575
Pass:7, Batch:40, Cost:1.03106, Acc:0.74219
Test:7, Cost:1.21637, ACC:0.59475
Pass:8, Batch:0, Cost:1.00770, Acc:0.75000
Test:8, Cost:1.21415, ACC:0.59182
Pass:8, Batch:40, Cost:0.84253, Acc:0.83594
Test:8, Cost:1.19011, ACC:0.60232
Pass:9, Batch:0, Cost:0.87655, Acc:0.77344
Test:9, Cost:1.18894, ACC:0.59915
Pass:9, Batch:40, Cost:0.88950, Acc:0.74219
Test:9, Cost:1.17149, ACC:0.60451
Pass:10, Batch:0, Cost:0.81905, Acc:0.77344
Test:10, Cost:1.16931, ACC:0.60939
Pass:10, Batch:40, Cost:0.70325, Acc:0.84375
Test:10, Cost:1.15738, ACC:0.61428
Pass:11, Batch:0, Cost:0.71462, Acc:0.81250
Test:11, Cost:1.15619, ACC:0.61525
Pass:11, Batch:40, Cost:0.68220, Acc:0.84375
Test:11, Cost:1.14702, ACC:0.61795
Pass:12, Batch:0, Cost:0.43453, Acc:0.96094
Test:12, Cost:1.14599, ACC:0.61428
Pass:12, Batch:40, Cost:0.66188, Acc:0.84375
Test:12, Cost:1.14097, ACC:0.61697
Pass:13, Batch:0, Cost:0.58125, Acc:0.85156
Test:13, Cost:1.14213, ACC:0.61916
Pass:13, Batch:40, Cost:0.64012, Acc:0.85938
Test:13, Cost:1.13701, ACC:0.62721
Pass:14, Batch:0, Cost:0.63643, Acc:0.82031
Test:14, Cost:1.13649, ACC:0.62697
Pass:14, Batch:40, Cost:0.50114, Acc:0.87500
Test:14, Cost:1.13436, ACC:0.62819
Pass:15, Batch:0, Cost:0.49957, Acc:0.90625
Test:15, Cost:1.13572, ACC:0.63014
Pass:15, Batch:40, Cost:0.47065, Acc:0.85938
Test:15, Cost:1.13555, ACC:0.62990
Pass:16, Batch:0, Cost:0.39780, Acc:0.91406
Test:16, Cost:1.13521, ACC:0.62869
Pass:16, Batch:40, Cost:0.37418, Acc:0.94531
Test:16, Cost:1.13725, ACC:0.63038
Pass:17, Batch:0, Cost:0.42288, Acc:0.92969
省略了一些

Выход итерации прогнозирования (часть):

预测结果标签为:3, 名称为:3, 概率为:0.999515
预测结果标签为:8, 名称为:8, 概率为:0.999912
预测结果标签为:3, 名称为:3, 概率为:0.999656
预测结果标签为:5, 名称为:5, 概率为:0.999305
预测结果标签为:3, 名称为:3, 概率为:0.999532
预测结果标签为:9, 名称为:9, 概率为:0.999810
预测结果标签为:9, 名称为:9, 概率为:0.993418
预测结果标签为:9, 名称为:9, 概率为:0.999761
预测结果标签为:8, 名称为:8, 概率为:0.999687
预测结果标签为:1, 名称为:1, 概率为:0.995791
预测结果标签为:8, 名称为:8, 概率为:0.999731
预测结果标签为:5, 名称为:5, 概率为:0.995905
预测结果标签为:5, 名称为:5, 概率为:0.997542
预测结果标签为:9, 名称为:9, 概率为:0.999930
预测结果标签为:2, 名称为:2, 概率为:0.998152
预测结果标签为:9, 名称为:9, 概率为:0.999630
预测结果标签为:5, 名称为:5, 概率为:0.999668
预测结果标签为:5, 名称为:5, 概率为:0.999181
预测结果标签为:8, 名称为:8, 概率为:0.999770
预测结果标签为:9, 名称为:9, 概率为:0.998988
预测结果标签为:9, 名称为:9, 概率为:0.999110
预测结果标签为:3, 名称为:3, 概率为:0.999672
预测结果标签为:3, 名称为:3, 概率为:0.999675
省略了一些
the accurary is :0.981

Окончательная точность составляет 0,981.

5. Резюме

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