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

Как и все другие нейронные сети, модели глубокого обучения не принимают в качестве входных данных необработанный текст: они работают только с числовыми векторами. Векторизация текста - это процесс преобразования текста в числовые векторы. Это можно сделать несколькими способами:

  • Сегментируйте текст на слова и преобразуйте каждое слово в вектор.
  • Сегментируйте текст на символы и преобразуйте каждый символ в вектор.
  • Извлеките n-граммы слов или символов и преобразуйте каждую n-грамм в вектор. N-граммы - это перекрывающиеся группы из нескольких последовательных слов или символов.

Различные единицы, на которые вы можете разбить текст (слова, символы или н-граммы), называются токенами, а разбиение текста на такие токены называется токенизация. Все процессы векторизации текста состоят из применения некоторой схемы токенизации и последующего связывания числовых векторов с сгенерированными токенами.

Горячие кодировки

В качестве первой идеи мы могли бы «горячо» закодировать каждое слово в нашем словаре. Рассмотрим предложение «Кот сел на циновку». Словарь (или уникальные слова) в этом предложении: (кошка, мат, он, сидел, то). Чтобы представить каждое слово, мы создаем нулевой вектор с длиной, равной словарю, затем помещаем единицу в индекс, соответствующий слову.

Чтобы понять эту идею, подробно рассмотрим следующий игрушечный пример. Этот пример кода игрушки не различает «The» от «the» и не учитывает знаки препинания. Вот почему мы называем это игрушкой.

Первое, что следует заметить в этом коде, - это то, что мы создаем пустой словарь (token_index) в # 5. В этот словарь мы будем записывать наши токены. Давайте углубимся в код построчно.

Поскольку у нас есть два предложения в данных, метод split() дает следующее. Обратите внимание, что мы не удаляем знаки препинания. В реальном примере мы также должны убрать из образцов знаки препинания и специальные символы.

['The', 'cat', 'sat', 'on', 'the', 'mat.']
['The', 'dog', 'ate', 'my', 'homework.']

Второй цикл for распечатывает все слова в предложениях. Обратите внимание, что в двух предложениях 11 слов.

The 
cat 
sat 
on 
the 
mat. 
The 
dog 
ate 
my 
homework.

Теперь заключительные части.

У нас есть следующий словарь.

Обратите внимание, что и «The», и «the» выход, потому что мы не контролировали использование заглавных букв. В любом случае это конец процесса токенизации.

Теперь мы закончили токенизацию, нам нужно «векторизовать» токены. Необходимо подготовить место для векторов. Для этого делаем переменную results, размер которой равен (2, 10, 11). 2 - это просто количество предложений в данных.

10 - это максимальное количество слов в предложении, которое нужно обработать. Мы можем изменить это число по своему желанию, поэтому мы поиграем с этим числом позже.

11 - это количество токенов + 1. Причина добавления 1 в том, что мы просто не хотим использовать индекс 0.

А теперь потренируйтесь!

производит

Упражняться

Выход

Упражняться

Выход

Упражняться

Выход

Упражняться!!!

Выход

использованная литература

[1] TensorFlow.

[2] Франсуа Шоле, Глубокое обучение с помощью Python, Manning Publications, 2017.

[3] Орелиен Жерон, Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow: концепции, инструменты и методы для создания интеллектуальных систем, 2-е издание, O'Reilly Media Inc., 2019 .