Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Захватывающая аркада-лабиринт по мотивам культовой игры восьмидесятых. Управляйте желтым человечком, ешьте кексы и постарайтесь не попадаться на глаза призракам.

Пикман

Аркады, На ловкость, 2D

Играть

Топ прошлой недели

  • Oskanov Oskanov 9 постов
  • Animalrescueed Animalrescueed 44 поста
  • Antropogenez Antropogenez 18 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
3
troitskii
troitskii

Что такое векторизация текста в NLP и какая она бывает: One-hot encoding, Bag of words, TF-IDF, Word2Vec, BERT и другие⁠⁠

1 год назад

Привет, Пикабу! Меня зовут Александр Троицкий, я автор канала AI для чайников, и в этой статье я расскажу про разные способы векторизации текстов.

Всем привет! Вдохновившись прикольной и понятной статьей на английском языке, и не найдя сходу чего-то похожего в русскоязычном сегменте интернета, решил написать о том, как обрабатывается текст перед тем, как на нем начинают применять разные модели ИИ. Эту статью я напишу нетехническим языком, потому что сам не технарь и не математик. Надеюсь, что она поможет узнать о NLP тем, кто не сталкивается с AI в продуктах на ежедневной основе.

О чем эта статья:

  1. Что такое векторизация текста и как она развивалась

  2. Зачем она нужна и где применяется

  3. Какие бывают методы векторизации и какие у них преимущества и недостатки

Что такое векторизация (и немного истории)

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

Векторизация текста как концепция начала развиваться после Второй Мировой войны и использовалась в основном для поиска информации и перевода текста.

Один из ключевых моментов в развитии технологии векторизации текста — создание модели векторного пространства (vector space model, VSM) в 1970-х годах, которая позволяла представлять текстовые документы как векторы в многомерном пространстве. Эта модель стала основой для многих методов информационного поиска и начала использоваться для анализа и сравнения документов.

С появлением интернета и увеличением доступных текстовых данных в 1990-х и 2000-х годах, интерес к векторизации текста и развитию методов NLP значительно вырос. Это привело к разработке более продвинутых методов, таких как TF-IDF (Term Frequency-Inverse Document Frequency), который позволяет лучше учитывать контекст и семантическое значение слов.

Почти все современные векторайзеры текста были изобретены внутри компании Google - это Word2Vec и BERT. Они умеют преобразовывать слова в цифры, которые отлично описывают значения и контекст использования этих слов.

Где применяются векторайзеры?

Ответ простой - почти везде, где текст встречается с ИИ. У всех текстовых моделей есть так называемые "тело" и "голова". Если говорить очень упрощённо, то тело - это векторизация, а голова - это обучение какой-то модели на результатах тела.

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

Если говорить о бизнес применении, то вот небольшой список из примеров где используется NLP, а значит и векторизация:

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

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

  • Классификация и сортировка документов: Векторизация текста применяется для автоматизации классификации и сортировки больших объемов документов, таких как электронные письма, договоры или резюме.

  • Поисковые системы и SEO: Поисковые алгоритмы используют векторизацию текста для улучшения релевантности и точности результатов поиска.

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

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

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

Разбираемся в том какие бывают методы векторизации текста

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

  1. Лодка села на мель

  2. Девушка села на стул

One-hot encoding

Самый просто и примитивный метод, результатом которого является матрица с единицами и нулями внутри. 1 говорит о том, что какой-то текстовый элемент встречается в предложении (или документе). 0 говорит о том, что элемент не встречается в предложении. Давайте разберемся на примере двух предложений выше:

  1. Сначала нужно получить список всех слов, встречаемых в наших предложениях. В нашем случае это ['Лодка', 'Девушка', 'села', 'на', 'мель', 'стул']

  2. Составляем матрицы для каждого предложения.

Собственно эти матрицы - это и есть векторизованное значение этих предложений. Как вы видите, чтобы описать всего 4 слова, у нас получились довольно большие и разряженные матрицы (разряженные значит, что внутри больше нулей, чем единиц). Каждая такая матрица занимает много места, поэтому для больших текстов этот метод становится неэффективным.

Кроме того, метод не описывает:

  1. Как часто встречается слово.

  2. Контекст этого слова.

Bag of words

По сути это тот же самый one-hot encoding, но тут матрицы схлопываются и каждое предложение будет представлять из себя одну строку, а не большую матрицу. Таким образом Bag of words имеет те же минусы, что one-hot encoding, но занимает меньше места. Чтобы получить Bag of words можно сложить столбики каждой матрицы из one-hot encoding в одну строку, получится:

TF-IDF

TF-IDF - это уже более сложная штука, чем bag of words или one-hot encoding, но всё еще относится к тому, что можно описать простой экселькой. Состоит этот метод векторизации из двух компонентов: Term Frequency (частотность слова в документе) и Inverse Document Frequency (инверсия частоты документа). В TF-IDF редкие слова и слова, которые встречаются в большинстве документов (в нашем случае предложений), несут мало информации, а значит им дается небольшой вес внутри вектора.

TF-IDF = TF * IDF

TF = количество раз когда слово встретилось в предложении или документе / количество слов (токенов) в предложении или документе

IDF = натуральный логарифм от количества документов деленное на количество документов с каким-то словом.

Давайте разберем пример с нашими двумя предложениями:

И в итоге получаем векторы у каждого предложения. В данном примере метод посчитал слова "Лодка", "мель" значимыми в первом предложении, и слова "Девушка", "стул" значимыми во втором преложении. Словам "села", "на" был присвоен нулевой вес, потому что они встречались в обоих предложениях.

Как я писал ранее, этот метод векторизации всё ещё считается относительно простым. Применять его можно как baseline при решении какой-то NLP задачи, а также для простых задач бинарной классификации. Например, он вполне может подойти для поиска негатива в отзывах. Также у TF-IDF есть настраиваемые параметры длины анализируемой части предложения и вместо слов "Девушка" и "села" можно сразу искать в тексте словосочетание "Девушка села", тогда TF-IDF будет худо-бедно воспринимать контекст. Но все равно базово он воспринимает контекст хуже, чем методы векторизации, о которых мы будем говорить далее.

Word Embeddings (Word2Vec)

Word2Vec - это изобретение компании Google, которое представили широкой публике в 2013 году. Суть его заключается в том, что нейронная сетка переваривает большое количество текста и на основании него создает векторы для каждого слова. Эти векторы - это на самом деле веса обученной нейронной сетки, которая либо берет на вход какое-то слово и пытается предсказать ближайшие окружающие его слова (это называется Skip-Gram), либо наоборот: берет на вход окружающие слова, а на выходе предсказывает загаданное слово.

Если взять веса этой нейронки, привести в двухмерное пространство и разместить на графике разные рандомные слова, то окажется, что "пёс" и "собака" будут стоять рядом. А кошка будет ближе ко льву. То же самое с глаголами.

На выходе у Word2Vec каждое слово имеет какой-то длинный вектор чисел, что-то типа [0.12, -0.54, 0.84, ...*ещё 200 чисел*..., 0.99]. Вектор чисел каждого слова не зависит от контекста этого слова - вектор фиксирован. Именно это недоразумение исправили исследовали Google через 5 лет после обнародования Word2Vec, когда опубликовали...

BERT

На самом деле BERT, как и Word2Vec, это лишь один из методов векторизации текста за счет нейронных сетей. Все вместе эти методы называются трансформерами, и их довольно много.

Суть BERTa та же, что у Word2Vec, однако он намного сложнее и более гибкий относительно контекста, в котором употребляется слово. Нейронная сетка BERTа состоит из множества слоёв, в отличие от классического Word2Vec с одним слоем, поэтому BERT долго и сложно обучается на очень большом количестве данных.

Особенно интересен последний пункт про контекст. Давайте рассмотрим его на примере двух предложений:

  1. Он взял лук и пошел на охоту

  2. Он добавил нарезанный лук в картошку

Несмотря на то, что в обоих предложениях мы употребляем слово "лук", его смысл абсолютно разный и отображает разные предметы. Именно тут BERT поймет разницу между двумя луками, а Word2Vec - нет, и даст один и тот же вектор для двух луков.

Изначальный BERT обучался на большом датасете из примерно 3 млрд слов (англоязычная Википедия и Toronto Book Corpus). Впоследствии большая часть дата саенс сообщества либо использует уже готовый BERT, либо переобучает последние слои этой нейронки, чтобы она лучше учитывала контекст какой-то конкретной ситуации, для этого не требуется очень много вычислительных мощностей или данных.

Заключение

Мы ответили на основные вопросы о том, что такое векторизация, как и где она применяется и чем различаются её основные методы. Если вам интересно знать про ИИ и машинное обучение больше, чем рядовой человек, но меньше, чем data scientist, то подписывайтесь на мой канал в Телеграм. Я пишу редко, но по делу: AI для чайников. Подписывайтесь!

Показать полностью 10
[моё] IT Искусственный интеллект Программирование Word2vec Длиннопост
0
MAPNHKA
MAPNHKA

Как мы делали искусственный интеллект на комментариях к видео канала Вдудь и удивлялись Word2Vec.⁠⁠

7 лет назад

О том, как мы делали сайт для Вдудя я писала в предыдущем посте: https://pikabu.ru/story/kak_myi_delali_sayt_dlya_vdudya_5676... . Но этого нам показалось мало)

Итак, по долгу службы у нас уже были комментарии к видео канала Вдудь (для сайта о котором я писала ранее). Оставалось придумать что с ними можно сделать еще. Так уж получилось, что обработкой естественного языка мы занимались давно и со времени последних экспериментов прошли годы. И вот за эти годы появилось нечто, которое хотелось пощупать - Word2Vec.

Конечно, можно было бы построить честного чат бота на каких-нибудь LSTM сетях, имитирующего средне-статистического комментатора к видео Вдудя, но нам это было не так интересно, как поэкспериментировать с Word2vec. За этим незамысловатым названием стоит довольно удачная попытка автоматически извлекать"смысл" слов из набора текстов и дать возможность этим смыслом алгебраически оперировать.

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

Лондон+Россия-Англия и модель не моргнув глазом выдает: "Москва"! И правда, Москва по отношению к России - это то же, что Лондон по отношению к Англии. Чудеса! Другой пример уже наш: что будет если из профессии программиста убрать магию?...... место для ответа.......

Спросим Word2Vec: программист-магия = ИНЖЕНЕР! Попробуйте поспорить! А теперь представьте себе, что этот вывод модель сделала изучив только комментарии к видео канала Вдудь и БОЛЬШЕ НИЧЕГО. Никаких словарей, онтологий, тезаурусов и т.д. Только 700к+ коротких комментариев, написанных в спешке, политизированных, неприличных, саркастических, восторженных и т.д. Разумеется никто в этих комментариях специально не отвечал на поставленный вопрос и главное явных обсуждений программистов в этих комментариях не было. То есть наша модель сумела схватить "смысл" слов программист и магия и даже смогла найти слово, которое лучше всего подходит если мы займемся "вычитанием" смыслов. Неплохо, да?

Технически построение модели осуществить было довольно просто:

1. Извлечь комментарии к видео с канала Вдудь. В этом прекрасно помогает Youtube api, мы использовали обертку для Java maven: com.google.apis:google-api-services-youtube:v3-rev193-1.21.0, полученные комментарии заботливо положили в файлик.

2. В теории Word2vec можно обучать на текстах никак их не преобразовывая, но мы все же решили отстемить (привести к начальным формам слов), поскольку выборка была небольшая и хотелось на выходе Word2Vec получать сразу то, что нужно. Для этого использовали яндексовский mystem. Внимание! Не используйте mystem для конкуренции с яндексом (это выжимка из их лицензии, подробнее читайте на сайте mystema :)

3. Для построения модели использовали deeplearning4j в которой Word2Vec есть из коробки и который очень просто использовать.

4. Перед построением немного фильтрации - слишком короткие комментарии убираем, слишком длинные тоже, убираем неактуальные части речи - союзы, частицы, предлоги, спасибо mystem.

5. Размерность итогового вектора выбрали 150, использовали негативное сэмплирование и скипграммы. Запускаем обучение!

Обучение производилось на GeForce GTX 980M и заняло несколько часов. Модель мы подключили к простенькому телеграм боту, чтобы можно было легко экспериментировать http://t.me/NeuroDudj_bot . Бот выдает не одно слово, а несколько наиболее близких к формуле на входе. Если хотите поразмять мозги - попробуйте к каждому слову, выдаваемому ботом на формулу придумать объяснение, то есть догадаться, что модель "имела ввиду". Для слов, которые модель не знает бот выдает забавные фразы, обозначающие отсутствие ответа. Интересные формулы и ответы на них присылайте в комментарии.

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

Мне кажется иногда нейросеть "умнее", чем мы думаем)

Показать полностью 1
[моё] Нейронные сети Программирование Вдудь Длиннопост Word2vec Telegram Чатботы Чат-бот
16
0
trazi

Компы учатся мыслить абстрактно⁠⁠

8 лет назад

Заголовок несколько громковат, но у меня возникло именно такое впечатление=) Один из современных прорывов в работе компьютеров с семантикой слов и текста это модель word2vec и её производные вроде doc2vec. Модель была предложена всего несколько лет назад ребятами из Гугла. Как следует из названия, слово или набор слов представляется в виде вектора (word to vector), а из школьного курса математики известно, что векторы можно складывать, вычитать и так далее. Соответственно, учительница арифметики идёт лесом со своими советами, что нельзя складывать метры с килограммами! Теперь можно складывать и вычитать слова!


Модель задаёт векторы слов в 300-мерном пространстве, но не надо пугаться. Если вектор на двумерной плоскости записывается двумя числами:

Цифры 2 и 3 это координаты по осям X и Y


То вектор в 300-мерном пространстве это просто 300 чисел через запятую) Слова сортируются по векторному пространству в зависимости от контекста в процессе учёбы модели по большому количеству текста. И получается сортировка по смыслу/сути/понятию. Соответственно, операции со словами выглядят как операции с смысловыми признаками. Например, при сложении слов “король” и “женщина” подразумевается нечто, обладающее признаками “королевский” и “женский” и модель ответит “королева”! Вычитание “женщины” из “королевы” даст короля. Это достаточно простые примеры, но на лицо работа именно с абстрактными значениями слов.


Модель меня заинтересовала и я написал бота для мессенджера “телеграм”, чтобы удобнее было с ней играться и понять её особенности и возможности. Бот получает от пользователя четыре слова, затем из первого вычитает второе, а третье и четвёртое воспринимает как ответы пользователя на разность и говорит насколько они близки к реальной векторной разности по шкале от -1 до +1. Затем отправляет в чат десять слов, которые по мнению модели наиболее близки к разности. Предыдущие примеры выглядят так (пикабу почему-то сжал картинку, кликабельно):

Это были простые примеры и, на мой взгляд, модель с ними справилась нормально. Модель способна и на операции с ещё более абстрактными понятиями, но до Скайнета, конечно, далеко. Где-то лажает, где-то нет. Например, вычитая “душу” из “человека” среди ответов модели третье место занимает “шимпанзе” =) На сумму “газа” и “дыхания” модель уверенно отвечает “воздух”, складывая “чувство” и “секс” получает “любовь”.


Вычитая любое слово из самого себя получается нулевой вектор, который никуда не направлен и, значит, и не имеет смысловых признаков. Иными словами - белиберда =)

Какими-то понятиями модель оперирует легко, какими-то нет. Например, получить “любовь” сложением двух слов оказалось довольно просто (уравнение X + Y = любовь), а вот вычитая что-то из “бога” оказалось трудно получить человека (Бог - X = человек)


Уот так уот) Кто хочет поиграться с моделью - пишите боту в “телеграме” по ссылке выше)


А модель doc2vec позволяет складывать и вычитать не только слова, а целые предложения и тексты (их смыслы), но это уже другая история =)

Показать полностью 3
Машинное обучение IT Word2vec Моё Длиннопост
8
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии