В последнее время широкий спектр человеческих секторов (например, инженерия, образование, здравоохранение, финансы, СМИ и т. д.) проявили большой интерес к машинному обучению. Привлекательность машинного обучения во многом объясняется его способностью принимать решения без вмешательства человека.

Одной из распространенных задач машинного обучения является НЛП, и сегодня мы создадим модель, обученную получать текстовый ввод, а затем предсказывать, на каком языке он написан. Метод определения языка текста или документа известен как определение языка при обработке естественного языка. Было сложно идентифицировать языки с помощью машинного обучения, когда о них было мало данных. В настоящее время существует ряд эффективных моделей машинного обучения для определения языка, поскольку данные очень легко доступны.

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

Что такое определение языка?

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

Случаи использования

  • Одноязычные чат-боты. Когда пользователь начинает говорить на определенном языке, бот должен уметь его распознавать, даже если он не был должным образом обучен для ведения обсуждения на этом языке.
  • Фильтрация спама. Системы фильтрации спама, поддерживающие множество языков, должны определить язык, на котором написаны электронные письма, онлайн-комментарии и другие входные данные, прежде чем использовать настоящие алгоритмы фильтрации спама. Интернет-платформы не могут эффективно удалять контент из определенных стран, регионов или местоположений, предположительно создающий спам, без такой идентификации.
  • Распознавание языка, используемого в электронных письмах и чатах: определение языка определяет язык текста, а также слова и предложения, в которых язык отличается. Поскольку деловые сообщения (чаты, электронные письма и т. д.) могут быть написаны на разных языках, они часто используются.
  • Смешение языков. Некоторые люди привыкли вести диалог на двух языках. Хинглиш, смесь хинди и английской терминологии, используемой в Индии, может быть хорошей иллюстрацией этого. В этих ситуациях модель обнаружения языка будет проверять количество слов в предложении, написанном на одном или нескольких языках, при этом язык с наибольшим количеством слов служит основным языком для взаимодействия, но второстепенный язык также распознается и получает высокую оценку. оценка доверия в нашем рейтинге.

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

Установка и импорт библиотек

Сначала мы импортируем все необходимые библиотеки, но если они у вас еще не установлены, советую установить их, прежде чем переходить к статье.

import re
import warnings
warnings.simplefilter("ignore")
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

Набор данных

Мы будем использовать небольшой набор данных для определения языка от Kaggle. Вы создадите модель NLP для прогнозирования 17 различных языков, используя этот набор данных, который содержит текстовые данные для 17 различных языков.

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

Мы должны построить модель, которая может предсказать данный язык, используя текст в качестве ориентира. Это обеспечивает решение для многих приложений вычислительной лингвистики и искусственного интеллекта. Для машинного перевода такие алгоритмы прогнозирования часто используются в роботах, а также в электронных устройствах, таких как мобильные телефоны и ноутбуки. Кроме того, это помогает в управлении и поиске документов, которые являются многоязычными. Исследователи все еще активны в области НЛП.

Скачать набор данных здесь.

Импорт набора данных

df = pd.read_csv("Language Detection.csv")
df.head()

Этот набор данных содержит 10 337 строк, два столбца и текстовые данные для 17 различных языков. Мы можем быстро рассчитать количество значений для каждого языка.

df["Language"].value_counts()

Отличие независимых от зависимых признаков

Зависимой переменной в данном случае является название языка (y), а независимой переменной — текстовые данные (X), которые теперь мы можем отделить от каждого другой.

X = data["Text"]
y = data["Language"]

Анализ моделей в режиме реального времени позволяет вашей команде отслеживать, контролировать и корректировать модели, уже находящиеся в производстве. Извлеките больше уроков из практики с экспертами Comet.

Выполнение кодирования этикетки

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

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)

Подготовка текста

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

text_list = []
for text in X:
        text = re.sub(r'[!@#$(),n"%^*?:;~`0-9]', ' ', text)
        text = re.sub(r'[[]]', ' ', text)
        text = text.lower()
        text_list.append(text)

В приведенном выше коде мы создали пустой список text_list для добавления предварительно обработанного текста, затем перебираем весь текст (X), удаляем символы и цифры, переводим текст в нижний регистр и, наконец, добавляем его в список text_list .

CountVectorizer

И входные, и выходные функции должны иметь числовую форму. Мы будем использовать модель Bag of Words от CountVectorizer для преобразования текста в числовую форму.

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(text_list).toarray()
X.shape

Вы должны получить (10337, 39419) в качестве вывода.

Сплит "Тренировочный тест"

Наши входные и выходные переменные были предварительно обработаны, поэтому следующим этапом является разделение нашего набора данных на обучающие и тестовые данные. Учебный набор предназначен для обучения модели, а тестовый набор — для оценки тестового набора. Для этой процедуры мы будем использовать тестовый раскол поезда.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)

Размер теста составляет всего 20%.

Обучение и прогнозирование моделей

Процесс создания модели практически завершен. Наивный байесовский алгоритм алгоритм — это то, что мы используем для построения нашей модели. После этого модель обучается на обучающем наборе.

from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
model.fit(x_train, y_train)

Мы использовали тренировочный набор для обучения нашей модели. Прогнозирование результатов для набора тестов — это то, что мы будем делать дальше.

y_prediction = model.predict(x_test)

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

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

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
accuracy = accuracy_score(y_test, y_prediction)
confusion_m = confusion_matrix(y_test, y_prediction)
print("The accuracy is :",accuracy)

Мы получили точность 97%.

Визуализация

Используя тепловую карту моря, давайте построим матрицу путаницы для визуализации.

plt.figure(figsize=(15,10))
sns.heatmap(confusion_m, annot = True)
plt.show()

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

def lang_predict(text):
     x = cv.transform([text]).toarray() 
     lang = model.predict(x)
     lang = le.inverse_transform(lang) 
     print("The langauge is in",lang[0])

cv — это CountVectorizer, который преобразует текст в модель набора слов (vector), переменная lang хранит предсказанный язык, и, наконец, мы можем распечатать предсказанный язык пользователю.

Чтобы проверить это, мы вызовем функцию lang_predict() и передадим ей любой набор текста, а затем позволим ей предсказать язык.

Заключение

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

Вы найдете код в этом репозитории GitHub.

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение нашего еженедельного информационного бюллетеня (Еженедельник глубокого обучения), заглянуть в блог Comet, присоединиться к нам в Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов и событий. и многое другое, что поможет вам быстрее создавать более качественные модели машинного обучения.