Что такое токенизация?

В обработке естественного языка (NLP) токенизация — это процесс разбиения потока текста, обычно предложения или документа, на более мелкие единицы, называемые «токенами». Эти токены обычно представляют собой слова, но могут быть подсловами или символами в зависимости от степени детализации, необходимой для конкретной задачи НЛП. Токенизация — это фундаментальный шаг в NLP, поскольку он закладывает основу для дальнейшего анализа и обработки текстовых данных. Основная цель токенизации — разбить непрерывный поток текста на отдельные единицы, которые компьютеры могут легко обрабатывать и анализировать. Сегментируя текст на токены, модели и алгоритмы НЛП могут понимать отдельные части текста и извлекать из них значимую информацию.

Почему в НЛП требуется токенизация?

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

Основные причины, по которым в NLP требуется токенизация, перечислены ниже:
Сегментация текста
Извлечение признаков
Понимание текста
Создание словаря
Удаление избыточности< br /> Статистический анализ
Обработка неоднозначности
Распознавание именованных сущностей (NER)
Поиск и извлечение информации
Анализ тональности и языковое моделирование

У нас есть разные типы токенизации, мы обсудим все возможные процессы токенизации.

  1. Токенизация слов
  2. Токенизация персонажей
  3. Токенизация предложения
  4. Подслово Токенизация
  5. Морфологическая токенизация

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

Текст ."Генеративный искусственный интеллект – это искусственный интеллект, способный генерировать текст, изображения или другие мультимедийные данные".

Токены слов: ["Генеративный", "искусственный", "интеллект", "является", "искусственный", "интеллект", "способный", "из", "генерирующий", «текст», «», «изображения», «,», «или», «другое», «медиа»»,».]

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

Использование метода split()

Sentence="Generative artificial intelligence is artificial intelligence capable of generating text, images, or other media."
tokens_split=Sentence.split()
tokens_split

Использование метода RegEx

import re
tokens_re = re.findall("[\w']+", Sentence)
tokens_re

Использование библиотеки NLTK

from nltk.tokenize import word_tokenize
token_nltk=word_tokenize(Sentence)
token_nltk

Использование библиотеки spaCy

from spacy.lang.en import English
nlp=English()
doc = nlp(Sentence)
token_list_spacy = []
for token in doc:
    token_list_spacy.append(token.text)
token_list_spacy

Использование библиотеки Keras

from keras.preprocessing.text import text_to_word_sequence
token_keras=text_to_word_sequence(Sentence)
token_keras

Выход :

Output:
['Generative','artificial','intelligence','is','artificial','intelligence',
'capable','of','generating','text,','images,','or','other',
'media.']

Ограничение токенизации Word:

Слова, не входящие в словарь (OOV). Модели НЛП, особенно те, которые полагаются на предварительно обученные встраивания, могут испытывать трудности со словами, отсутствующими в их словарном запасе. Если во время обучения слово не будет видно, модель может представить его как «UNK» (неизвестно), что приведет к потере информации.

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

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

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

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

Именованные объекты и сокращения. Разделение именованных объектов (например, «Нью-Йорк») или аббревиатур (например, «США») на отдельные токены может нарушить их значение и затруднить дальнейшие задачи. .

Вышеупомянутое ограничение открывает дверь к «Токенизации персонажей».

Токенизация символов:техника обработки текста, которая включает разбиение заданного текста на отдельные символы или единицы. Он преодолевает недостатки, которые мы видели ранее в токенизации слов. Токенизаторы символов последовательно обрабатывают слова OOV, сохраняя информацию о словах. Разлагает слово OOV на символы и представляет слово с точки зрения этих символов. Это также ограничивает размер словарного запаса.

Обсуждаем несколько подходов к получению жетонов персонажей, перечисленных ниже:

Использование базового синтаксиса Python

Sentence="Generative artificial intelligence is artificial intelligence capable of generating text, images, or other media."
char_token = list(Sentence)
print(char_token)

Использование метода RegEx

import re
char_tokens_re = re.findall(r'\S|\s', Sentence)
print(char_tokens_re)

Выход :

Output:
['G', 'e', 'n', 'e', 'r', 'a', 't', 'i', 'v', 'e', ' ', 'a', 'r', 't', 'i', 
'f', 'i', 'c', 'i', 'a', 'l', ' ', 'i', 'n', 't', 'e', 'l', 'l', 'i', 'g', 
'e', 'n', 'c', 'e', ' ', 'i', 's', ' ', 'a', 'r', 't', 'i', 'f', 'i', 'c', 
'i', 'a', 'l', ' ', 'i', 'n', 't', 'e', 'l', 'l', 'i', 'g', 'e', 'n', 'c', 
'e', ' ', 'c', 'a', 'p', 'a', 'b', 'l', 'e', ' ', 'o', 'f', ' ', 'g', 'e', 
'n', 'e', 'r', 'a', 't', 'i', 'n', 'g', ' ', 't', 'e', 'x', 't', ',', ' ', 
'i', 'm', 'a', 'g', 'e', 's', ',', ' ', 'o', 'r', ' ', 'o', 't', 'h', 'e',
 'r', ' ', 'm', 'e', 'd', 'i', 'a', '.']

Ограничение токенизации персонажей:

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

Увеличенная длина последовательности. Токенизация на уровне символов приводит к более длинным последовательностям по сравнению с токенизацией на уровне слов. Это может привести к увеличению требований к вычислительным ресурсам и памяти, потенциально делая обучение и логические выводы более медленными и ресурсоемкими.

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

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

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

Токенизация подслов:это метод обработки текста, используемый в обработке естественного языка (NLP) для разбиения слов на более мелкие единицы, обычно единицы подслов или токены подслов. Этот подход особенно полезен для работы с языками со сложной морфологией и для таких задач, как машинный перевод, генерация текста и анализ настроений. Токенизация подслов особенно ценна при работе со словами, не входящими в словарь, или при работе с ограниченным словарным запасом.

"Токенизация подслов основана на идее, что слова можно разложить на более мелкие значимые единицы".

Одним из самых популярных алгоритмов для токенизации подслов является Byte-Pair Encoding (BPE), который постепенно объединяет наиболее часто встречающиеся пары символов или n-граммы символов в корпусе для создавать токены подслов. Это позволяет модели изучать представления как для обычных слов, так и для редких слов, комбинируя существующие токены подслов.

давайте обсудим Byte-Pair Encoding (BPE)подробнее об алгоритмах

Byte Pair Encoding (BPE) – это метод токенизации подслов, используемый для сегментации слов на подслова в зависимости от их частоты в заданном текстовом корпусе. Основная идея BPE заключается в итеративном объединении наиболее распространенных пар символов или строк для создания словаря единиц подслов.

Шаг 1. Инициализация словаря
Допустим, у нас есть небольшой текстовый корпус, содержащий следующие слова:
[“low”, “lower”, “newest”, “ шире", "самый широкий"]

Начнем с инициализации словаря отдельными символами:

Словарь: {'l', 'o', 'w', 'e', ​​'r', 'n', 'w', 's', 'i', 'd', 't'}

Шаг 2. Объединение часто встречающихся пар
В каждой итерации мы находим в корпусе наиболее часто встречающиеся пары символов или последовательности символов, которые можно объединить. Затем мы добавляем объединенную единицу в словарь.

В нашем примере рассмотрим пару «e» и «s», так как они встречаются чаще всего:

Объединенная единица: ‘es’
Обновите словарь:

Словарь: {'l', 'o', 'w', 'es', 'r', 'n', 'w', 'i', 'd', 't'}

Шаг 3. Повторите слияние
Мы многократно повторяем процесс слияния. Найдем следующую по частоте пару:

Объединенная единица: «es» (на этот раз «es» — наиболее часто встречающаяся пара)

Обновите словарный запас:

Словарь: {'l', 'o', 'w', 'es', 'r', 'n', 'w', 'i', 'd', 't'}

Продолжая этот процесс, мы обнаруживаем, что «w» и «es» являются наиболее часто встречающейся парой:

Объединенная единица: «мы»

Обновите словарный запас:

Словарь: {'l', 'o', 'w', 'es', 'r', 'n', 'wes', 'i', 'd', 't'}

Шаг 4. Заключительный словарный запас

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

Окончательный словарный запас: {'l', 'o', 'w', 'es', 'r', 'n', 'wes', 'i', 'd', 't'}

Теперь мы можем токенизировать слова, используя этот словарь. Например, слово «новейший» будет обозначено как:

Маркировка «самого нового»: [’n’, ‘ew’, ‘es’, ‘t’]
Токенизация «самого низкого»: [‘l’, ‘ow’, ‘est’]

Словарь подслов затем можно использовать для различных задач НЛП, что позволяет моделям эффективно обрабатывать невидимые или редкие слова.

Ограничение токенизации подслов:

Увеличенный размер словарного запаса. Токенизация подслов может привести к увеличению словарного запаса по сравнению с токенизацией на уровне слов, поскольку словарь должен включать в себя единицы подслов, а также полные слова. Это может повлиять на требования к памяти и вычислениям.

Время обработки. Токенизация текста в подслова может занимать больше времени по сравнению с простой разбивкой слов из-за необходимости анализировать шаблоны на уровне символов и генерировать подслова.

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

Использование метода split()

Sentence = "Generative artificial intelligence is artificial intelligence capable of generating text, images, or other media. Generative AI models learn the patterns and structure of their input training data and then generate new data that has similar characteristics."
Sentences_token=Sentence.split('. ')
Sentences_token

Использование метода RegEx

import re
Sentences_token_Re = re.compile('[.!?] ').split(Sentence)
Sentences_token_Re

Использование библиотеки NLTK

from nltk.tokenize import sent_tokenize
Sentences_token_nltk=sent_tokenize(Sentence)
Sentences_token_nltk

Использование библиотеки spaCy

from spacy.lang.en import English
nlp = English()
sbd = nlp.create_pipe('sentencizer')
nlp.add_pipe(sbd)
doc = nlp(Sentence)
sents_list = []
for sent in doc.sents:
    sents_list.append(sent.text)
sents_list

Выход :

Output:
['Generative artificial intelligence is artificial intelligence capable of generating text, images, or other media.',
 'Generative AI models learn the patterns and structure of their input training data and then generate new data that has similar characteristics.']

Ограничение токенизации предложения:

Многоточие и точки. Многоточие (…) или другие экземпляры последовательных точек могут использоваться для обозначения пауз или незаконченных мыслей в предложении. Токенизация предложений может неправильно разделить их на отдельные предложения.

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

Морфологическая маркировка – это метод обработки текста, который фокусируется на разбиении слов на мельчайшие значимые единицы, называемые морфемами. «морфема» — это наименьшая языковая единица, несущая смысловую или грамматическую функцию.

для например. Слово: «несчастье»
Морфемы: «не-» (префикс), «счастливый» (корень), «-ness» (суффикс)

Ограничение морфологической токенизации:

Морфологические анализаторы часто полагаются на лингвистические ресурсы или словари, и если слово или морфема отсутствует в этих ресурсах, они могут быть неправильно токенизированы или вообще не распознаны.

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

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

  1. Видите этот значок 👏? Отправьте моей статье несколько аплодисментов
  2. Свяжитесь со мной через linkedin, github и medium👈 и Купите мне кофе, если вам нравится этот блог .