Баннер мобильный (3) Пройти тест

Векторизация текста в NLP: от слов к числам

Учим языковую модель понимать смысл текста

Разбор

24 декабря 2024

Поделиться

Скопировано
Векторизация текста в NLP: от слов к числам

Содержание

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

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

    Рассказываем о векторизации подробнее вместе с Александром Рыжковым, ментором SF и руководителем команды LightAutoML.

    Зачем в NLP векторизировать текст

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

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

    • классификация текста — модель определяет тональность текста, его тематику, авторство и так далее. Например, отличает позитивный отзыв от негативного, а текст о спорте — от научной работы;
    • машинный перевод — модель переводит текст с одного языка на другой с учетом его особенностей;
    • генерация текста — модель с нуля пишет новый текст, похожий на заданные образцы;
    • вопросно-ответные системы — модель ищет ответ на заданный вопрос, например в текстовых документах;
    • извлечение информации — модель получает на вход неструктурированный текст и выделяет из него какие-то данные, например основные мысли.

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

    Как работает векторизация 

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

    • анализирует содержание каждого текста;
    • присваивает текстам числовые метки, которые отражают тематику.

    Каждая метка — число, которое показывает, насколько текст связан с определенной темой. Например, книги по истории будут иметь высокие значения по метке «история», а книги по программированию — по метке «программирование». 

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

    Основные способы векторизации

    Векторизацию данных можно проводить разными способами, рассмотрим самые известные из них: от простых к сложным.

    Прямое кодирование (One-Hot Encoding)

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

    Для примера возьмем словарь из трех слов: [«кошка», «собака», «птица»]. Тогда слово «кошка» будет представлено вектором [1, 0, 0], слово «собака» — [0, 1, 0], а слово «птица» — [0, 0, 1].

    Несмотря на простоту, этот способ используется редко, и вот почему:

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

    Мешок слов (Bag of Words)

    В этом случае текст представляется в виде «мешка» из разных слов. Порядок этих слов игнорируется — важна только частота, с которой они встречаются. Для каждого текста создается вектор, где каждый элемент описывает количество вхождений определенного слова из словаря. Эта технология тоже считается довольно простой, к тому же учитывает частоту слов. 

    Например, рассмотрим предложения: «Кошка спит на коврике. Кошка любит молоко». Словарь для этих предложений такой: [«кошка», «спит», «на», «коврике», «любит», «молоко»]. А векторное представление текста в виде мешка слов будет выглядеть как [2, 1, 1, 1, 1, 1].

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

    • она не учитывает порядок слов, что может привести к потере информации;
    • в ней не учитывается семантическая близость слов;
    • редкие, но важные для понимания смысла слова могут быть «задавлены» часто встречающимися словами.

    TF-IDF (Term Frequency-Inverse Document Frequency)

    Это усовершенствованная версия «мешка слов». Она учитывает не только частоту слова в конкретном документе (Term Frequency, TF), но и то, насколько редко оно встречается во всем наборе текстов (Inverse Document Frequency, IDF). Это позволяет снизить вес слов, которые встречаются часто, но не несут полезной нагрузки, — например, предлогов и союзов. А вес редких, но значимых слов, наоборот, повышается.

    Например, если слово «кошка» встречается в каждом документе коллекции, его IDF будет низким, а значит, и вес TF-IDF будет ниже, чем у слова «мурлыкать», которое встречается только в нескольких документах.

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

    Эмбеддинги (Word Embeddings)

    Эта технология — самая продвинутая в современном NLP и используется особенно часто. В ней слова представляются в виде векторов низкой размерности. Если слова близки по смыслу, их векторы будут похожи. Чтобы добиться такого результата, эмбеддинги обучают на больших массивах текстов с использованием нейронных сетей. У этого подхода много преимуществ по сравнению с другими:

    • эмбеддинги способны улавливать семантические отношения между словами — векторные представления слов «кот» и «кошка» будут похожими;
    • вектора получаются относительно короткими, особенно по сравнению с прямым кодированием;
    • слова в эмбеддингах можно преобразовывать с помощью векторных операций, например «король» – «мужчина» + «женщина» ≈ «королева».

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

    Эмбеддинги: какие есть техники

    Практически все продвинутые NLP-модели используют для кодирования именно эмбеддинги. Их в том числе применяют в больших языковых моделях (LLM), например в GERT или GPT. С помощью эмбеддингов модель может воспринимать тематику текста и генерировать связные предложения.

    Эмбеддинги можно создавать несколькими способами. Две самые популярные технологии — Word2Vec и GloVe.

    Word2Vec

    Технология Word2Vec сочетает две архитектуры. Каждая из них ориентируется на входящие данные и на их основе «понимает», о чем идет речь. Но направления у архитектур разные:

    • Continuous Bag-of-Words (CBOW) предсказывает нужное слово на основе его контекста, то есть окружающих слов;
    • Skip-gram предсказывает контекст на основе целевого слова.

    Обе архитектуры обучаются на большом текстовом корпусе с использованием нейронной сети. В ходе обучения веса нейронной сети изменяются таким образом, чтобы слова, которые часто встречаются в одном контексте, имели близкие векторы.

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

    GloVe 

    Название расшифровывается как Global Vectors for Word Representation. Способ основан на идее, что связи между словами можно понять по матрице совместной встречаемости слов. Она показывает, как часто два слова встречаются рядом друг с другом в определенном контексте. 

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

    Например, слова «король» и «королева» в текстах часто находятся рядом друг с другом, а слова «король» и «яблоко» — редко. При построении векторов GloVe это учтет. В результате векторы «короля» и «королевы» окажутся ближе друг к другу, чем к вектору «яблоко».

    Как начать работать с векторизацией: инструменты

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

    • Gensim — популярная библиотека для тематического моделирования и работы с эмбеддингами. Позволяет обучать Word2Vec, FastText и другие модели, а также загружать предобученные эмбеддинги;
    • TensorFlow и Keras — фреймворки для глубокого обучения, которые можно использовать для создания и обучения собственных моделей эмбеддингов;
    • PyTorch — еще один популярный фреймворк для глубокого обучения, в котором есть инструменты для работы с эмбеддингами;
    • SpaCy — библиотека для продвинутой обработки естественного языка, где есть функции для работы с векторизацией и эмбеддингами;
    • NLTK — классическая библиотека для NLP, в которой есть инструменты для реализации простых методов, таких как «мешок слов» и TF-IDF. Также содержит множество инструментов для предварительной обработки текста, например лемматизации.
    • Scikit-learn — библиотека для машинного обучения, содержащая реализации TF-IDF и других методов векторизации.

    Что стоит учитывать при работе с векторизацией

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

    • Метод векторизации стоит выбирать исходя из задачи, доступных ресурсов и размера данных. Для простых задач может быть достаточно «мешка слов» или TF-IDF, для более сложных лучше использовать эмбеддинги.
    • Чем больше словарь, тем выше вычислительные затраты, которые нужно потратить на его обработку. Чтобы сократить словарь, можно обрабатывать его перед обучением — удалять стоп-слова вроде предлогов или союзов и лемматизировать текст, то есть приводить слова к начальной форме.
    • Перед векторизацией текст нужно предварительно обработать: токенизировать, то есть разделить на отдельные слова, удалить знаки пунктуации, перевести символы в нижний регистр.
    • Качество векторизации напрямую зависит от качества исходных текстовых данных. Ошибки, опечатки, нестандартные сокращения могут ухудшить результат работы всей модели.
    • При обучении эмбеддингов важно правильно подобрать гиперпараметры — глобальные параметры, которые управляют обучением. Среди них, например, требуемая размерность векторов, размер окна контекста и количество эпох обучения.
    • Для многих языков существуют предобученные эмбеддинги, которые можно использовать вместо обучения собственных. Это может серьезно сэкономить время и ресурсы. Например, для русского языка доступны предобученные модели от RusVectōrēs.

    Что почитать про векторизацию и эмбеддинги

    Если вы хотите узнать о векторизации больше, в этом помогут книги и лекции по теме. Вот какие материалы рекомендует Александр Рыжков:

    • Ian Goodfellow, Yoshua Bengio и Aaron Courville. Deep Learning — фундаментальная книга о глубоком обучении, где рассматривают в том числе эмбеддинги;
    • Daniel Jurafsky и James H. Martin. Speech and Language Processing — классический учебник по обработке естественного языка, где описаны разные методы векторизации;
    • Yoav Goldberg. Neural Network Methods for Natural Language Processing — книга о современном взгляде на NLP с фокусом на нейросети;
    • CS224n: Natural Language Processing with Deep Learning — цикл лекций Стэнфордского университета, доступный на YouTube в записи;
    • Статьи на Towards Data Science и Analytics Vidhya — ресурсах, посвященных науке о данных и машинному обучению.

    Советы от эксперта для начинающих

    Для тех, кто только начинает свой путь в NLP, наш эксперт дал несколько советов. Вот о чем стоит помнить, пока изучаете векторизацию и создание моделей:

    • Не пытайтесь сразу разобраться во всех тонкостях эмбеддингов и нейросетей. Начните с простых методов, таких как «мешок слов» или TF-IDF, чтобы понять основные принципы векторизации.
    • Экспериментируйте: пробуйте разные методы векторизации и разные параметры, чтобы увидеть, как они влияют на результаты работы модели.
    • Используйте предобученные эмбеддинги — это отличный способ сэкономить время и ресурсы, особенно если у вас нет большого объема данных для обучения собственных моделей.
    • Читайте статьи и смотрите лекции. В области NLP постоянно появляются новые исследования и разработки. Следите за новостями, чтобы быть в курсе последних достижений.
    • Практикуйтесь. Лучший способ научиться — это практика. Решайте задачи, участвуйте в соревнованиях и работайте над собственными проектами.

    Коротко о векторизации в NLP

    • Векторизация текста — преобразование текста в набор числовых параметров, которые может воспринять модель машинного обучения. Это ключевой этап в обработке естественного языка.
    • Существует множество методов векторизации: от простых вроде «мешка слов» до сложных, таких как эмбеддинги. Выбор метода зависит от конкретной задачи, доступных ресурсов и объема данных. 
    • Эмбеддинги, в частности Word2Vec и GloVe, позволяют распознавать семантические отношения между словами, поэтому заметно улучшают качество решения задач NLP. 

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии