Модели машинного обучения принимают в качестве входных данных векторы (массивы чисел). При работе с текстом первое, что мы должны сделать, - это разработать стратегию преобразования строк в числа (или «векторизации» текста) перед передачей его модели.
Как и все другие нейронные сети, модели глубокого обучения не принимают в качестве входных данных необработанный текст: они работают только с числовыми векторами. Векторизация текста - это процесс преобразования текста в числовые векторы. Это можно сделать несколькими способами:
- Сегментируйте текст на слова и преобразуйте каждое слово в вектор.
- Сегментируйте текст на символы и преобразуйте каждый символ в вектор.
- Извлеките 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 .