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

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

Отмечу, что вопрос не практический(я не занимаюсь разработкой нейросетей для какого-либо серьёзного применения), а учебный, по сему прошу воздержаться от ответов "возьми модуль nn_text_processing, он сам всё сделает". Спасибо
  • Вопрос задан
  • 593 просмотра
Пригласить эксперта
Ответы на вопрос 6
Слова исходного текста можно представить через "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
@Maksim_64
Data Analyst
Вы правы каждое слово кодируется. Существует огромное количество методов кодирования для NLP (Natural Language Processing). Основной метод кодирования это представления слова в виде вектора где самая важная часть (что делает NLP возможным) при создании такого вектора слова которые используются в схожих контекстах имеют схожее но не одинаковое векторное представление. Векторная схожесть может быть подсчитана разными способами ну например Евклидово расстояние. В таком случае например вы будете иметь уникальный вектор для каждого слова где вектора с близкими Евклидовыми расстояниями будут означать слова которые используются в схожих контекстах. Что касается формата данных которые получит нейронная сеть, то каждый вектор трансформируется где каждое число трансформируется в число 0 до 1. Существует опять таки несколько техник. самая простая формула (x - min(X)) /(max(X) - min(X)), где x это каждый элемент вектора, ну и соответственно min(X) - минимальный элемент вектора max(X) максимальный элемент вектора. подобная трансформация применяется к каждому элементу каждого вектора. Это примитивный пример, для понимания идеи. Данный вопрос глубокий различные техники кодирования могут быть очень сложны и существуют не мало разных подходов для решения подобных задач. Что касается двоичного входа для нейронных сетей то ответ нет. Нейронные сети могут в том числе получать двоичные значения, но не ограничены этим, также они могут получать дискретные (целые) или числа с плавающей запятой.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Тут щас в ответах наговорят миллион банальностей общего плана. Конечно нейросеть не работает
со словами. Она их просто не знает. Но она работает с входами и выходами вещественного типа.
Какую дать ИНТЕРПРЕТАЦИЮ входу и выходу - задача разработчика НС. Можем входом считать
букву. Можем фонему или слог. Можем - слово. Или лемматизированное слово. Или целую фразу
или фрагмент AST. Или целый абзац текста. Все зависит от задачи.

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

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

Там будет элемент ноу-хау. Иначе они-бы так громко не выстрелили.
Ответ написан
Комментировать
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Существуют нейросети, которые способны определять, к какой части речи относится слово, выделять морфемы и определять словоформы.

Эта задача давно уже решена и для неё не нужны нейросети. Это как из пушки стрелять по воробьям
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Значения нейрона 0, 1 были на заре НС, это была модель персептрона, а функцией активации являлась функция sign. На входе нейрона обычные числа (конечно, в каком-то диапазоне).
Для слов сейчас применяют трансформеры.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Один из подходов, если я не путаю, это seq2seq модель, она же рекуррентный энкодер.
На базе текстов, подобных тем, которые планируется обрабатывать, строится автоэнкодер. Как обычно в автоэнкодерах, его первая половина учится "сжимать" входные данные (в нашем случае кодированный текст), а вторая половина учится их "распаковывать" обратно. При этом "несжатые" данные - это последовательность входов, а "сжатые" - статический вектор контекста, который некоторым (не обязательно известным нам) способом кодирует "смысл". Контроль успешности кодирования проверяется последующей "распаковкой" - на выходе автоэнкодера должна получиться та же самая последовательность, которая была на входе.
Когда научились "сжимать" текст в вектор, этот вектор можно обрабатывать другими методами машинного обучения. Например, решать задачи классификации, регрессии и т.п.
Тогда при обработке неизвестного текста он кодируется (например, производится лемматизация - устраняются грамматические числа, падежи и т.п.), прогоняется через первую половину автоэнкодера, а полученный вектор контекста подаётся на вход сети, которая и заточена под решение нашей задачи.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы