Как нейросети обрабатывают текстовую информацию?



@ramiil

Существуют нейросети, которые способны определять, к какой части речи относится слово, выделять морфемы и определять словоформы.
Насколько я знаю, нейросети обычно имеют двоичный вход, т.е. каждый входной нейрон может принимать значение (0;1).
Вопрос: как представить слово для обработки нейросетью? Передавать ей код символа побитно?

Отмечу, что вопрос не практический(я не занимаюсь разработкой нейросетей для какого-либо серьёзного применения), а учебный, по сему прошу воздержаться от ответов «возьми модуль nn_text_processing, он сам всё сделает». Спасибо


Решения вопроса 0


Ответы на вопрос 6



@sergiks

Слова исходного текста можно представить через «one-hot encoding» – одномерный вектор, где только 1 бит для данного слова – включён. Сколько всего в тексте уникальных слов, такой длины векторы.

пример

[ 1, 0, 0, 0, 0 ] Как
[ 0, 1, 0, 0, 0 ] нейросети
[ 0, 0, 1, 0, 0 ] обрабатывают
[ 0, 0, 0, 1, 0 ] текстовую
[ 0, 0, 0, 0, 1 ] информацию

Далее возможны преобразования слов в многомерные векторы так, что слова со сходными смыслами оказываются рядом. Или вектор от «кошка» к «котёнок» оказывается параллелен и той же длины, что от «собака» к «щенок». Это называется «word embedding». Один из способов их построения называется «Word2Vec».



@Maksim_64

Вы правы каждое слово кодируется. Существует огромное количество методов кодирования для NLP (Natural Language Processing). Основной метод кодирования это представления слова в виде вектора где самая важная часть (что делает NLP возможным) при создании такого вектора слова которые используются в схожих контекстах имеют схожее но не одинаковое векторное представление. Векторная схожесть может быть подсчитана разными способами ну например Евклидово расстояние. В таком случае например вы будете иметь уникальный вектор для каждого слова где вектора с близкими Евклидовыми расстояниями будут означать слова которые используются в схожих контекстах. Что касается формата данных которые получит нейронная сеть, то каждый вектор трансформируется где каждое число трансформируется в число 0 до 1. Существует опять таки несколько техник. самая простая формула (x - min(X)) /(max(X) - min(X)), где x это каждый элемент вектора, ну и соответственно min(X) — минимальный элемент вектора max(X) максимальный элемент вектора. подобная трансформация применяется к каждому элементу каждого вектора. Это примитивный пример, для понимания идеи. Данный вопрос глубокий различные техники кодирования могут быть очень сложны и существуют не мало разных подходов для решения подобных задач. Что касается двоичного входа для нейронных сетей то ответ нет. Нейронные сети могут в том числе получать двоичные значения, но не ограничены этим, также они могут получать дискретные (целые) или числа с плавающей запятой.



@mayton2019

Тут щас в ответах наговорят миллион банальностей общего плана. Конечно нейросеть не работает
со словами. Она их просто не знает. Но она работает с входами и выходами вещественного типа.
Какую дать ИНТЕРПРЕТАЦИЮ входу и выходу — задача разработчика НС. Можем входом считать
букву. Можем фонему или слог. Можем — слово. Или лемматизированное слово. Или целую фразу
или фрагмент AST. Или целый абзац текста. Все зависит от задачи.

В последние 10 лет НС сильно рванули вперед. В особенности в части архитектур. Благо мощности догнали. Например свёрточные сети. Которые узнают картинки. Им надо просто большое число параллельно работающих ядер, которые разбирают на слои одну и ту-же картинку. Скорее всего мощности догнали и сети обработки
естесвтенного языка.

По поводу обработки языка, что у нас есть. У нас есть как минимум ChatGPT. У нас есть Co-Pilot.
Надо почитать что о них пишут сами разработчики. Из каких частей и из каких архитектур они построены.

Там будет элемент ноу-хау. Иначе они-бы так громко не выстрелили.



@AgentSmith

Существуют нейросети, которые способны определять, к какой части речи относится слово, выделять морфемы и определять словоформы.

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



@AlexSku

Значения нейрона 0, 1 были на заре НС, это была модель персептрона, а функцией активации являлась функция sign. На входе нейрона обычные числа (конечно, в каком-то диапазоне).
Для слов сейчас применяют трансформеры.



@Vindicar

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

Но ЕМНИП, это один из ранних подходов. Сейчас есть более продвинутые вещи, я просто о них в не курсе.

Добавить комментарий

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