Нейросети и философия языка |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-01-14 12:00 Почему теории Витгенштейна остаются основой всего современного NLP
Векторное представление слов — пожалуй, одна из самых красивых и романтичных идей в истории искусственного интеллекта. Философия языка — это раздел философии, исследующий связь между языком и реальностью и как сделать сделать речь осмысленной и понятной. А векторное представление слов — очень специфический метод в современной обработке естественного языка (Natural Language Processing, NLP). В некотором смысле он представляет собой эмпирическое доказательство теорий Людвига Витгенштейна, одного из самых актуальных философов прошлого века. Для Витгенштейна использование слов — это ход в социальной языковой игре, в которую играют члены сообщества, понимающие друг друга. Значение слова зависит только от его полезности в контексте, оно не соотносится один к одному с объектом из реального мира. Для большого класса случаев, в которых мы используем слово «значение», его можно определить как значение слова есть его использование в языке.Конечно, понять точное значение слова очень сложно. Следует учесть множество аспектов:
Все эти аспекты, в конце концов, сводятся к одному: знать, как использовать слово. Концепция значения и почему упорядоченный набор символов имеет определённую коннотацию в языке — это не только философский вопрос, но и, вероятно, самая большая проблема, с которой приходится сталкиваться специалистам по ИИ, работающим с NLP. Русскоязычному человеку вполне очевидно, что «собака» — это «животное», и она больше похожа на «кошку», чем на «дельфина», но эта задача далеко не проста для систематического решения. Немного подкорректировав теории Витгенштейна, можно сказать, что собаки похожи на кошек, потому что они часто появляются в одних и тех же контекстах: скорее можно найти собак и кошек, связанных со словами «дом» и «сад», чем со словами «море» и «океан». Именно эта интуиция заложена в основу Word2Vec, одной из самых известных и успешных реализаций векторного представления слов. Сегодня машины далеки от действительного понимания длинных текстов и отрывков, но векторное представление слов — бесспорно, единственный метод, который позволил сделать самый большой шаг в этом направлении за последнее десятилетие. От BoW к Word2Vec Во многих компьютерных задачах первая проблема — представить данные в числовой форме; слова и предложения, вероятно, сложнее всего представить в таком виде. В нашей настройке из словаря выбирается D слов, а каждому слову может быть присвоен числовой индекс i. CBOW означает Continuous Bag of Words, и её задача — угадать слово с учётом контекста в качестве входных данных. Входы и выходы представлены как D-мерные векторы, которые проецируются в N-мерном пространстве с общими весами. Мы ищем только веса для проецирования. По сути, векторное представление слов — это матрицы D?N, где каждая строка представляет слово словаря. Все слова контекста проецируются в одну позицию, а их векторные представления усредняются; поэтому порядок слов не влияет на результат. Skip-gram делает то же самое, но наоборот: пытается предсказать контекстные слова C, принимая в качестве входных данных целевое слово. Задача прогнозирования нескольких контекстных слов может быть переформулирована в набор независимых задач бинарной классификации, и теперь цель состоит в том, чтобы предсказать наличие (или отсутствие) контекстных слов. Как правило, Skip-gram требует больше времени для обучения и часто даёт немного лучшие результаты, но, как обычно, у разных приложений разные требования, и трудно заранее предсказать, какие из них покажут лучший результат. Несмотря на простоту концепции, обучение архитектур такого рода — настоящий кошмар из-за количества данных и вычислительной мощности, необходимой для оптимизации весов. К счастью, в интернете можно найти некоторые предварительно обученные векторные представления слов, и можно изучать векторное пространство — самое интересное — всего несколькими строчками кода на Python. Возможные улучшения: GloVe и fastText Поверх классического Word2Vec в последние годы предложено множество возможных улучшений. Два наиболее интересных и часто используемых — это GloVe (Стэнфордский университет) и fastText (разработанный Facebook). Они пытаются выявить и преодолеть ограничения оригинального алгоритма. Рассмотрим два слова i и j, которые представляют особый интерес. Для конкретности предположим, что нас интересует понятие термодинамического состояния, для которого можно взять Такое соотношение вероятностей становится отправной точкой для изучения векторного представления слов. Мы хотим иметь возможность вычислять векторы, которые в сочетании с конкретной функцией F поддерживают это соотношение постоянным в пространстве векторного представления. Рисунок 2. Наиболее общая формула для векторного представления слов в модели GloVe Функцию F и зависимость от слова k можно упростить, заменив экспонентами и фиксированными смещениями, что даёт в результате функцию минимизации ошибок по методу наименьших квадратов J: Рисунок 3. Итоговая функция вычисления векторного представления слов в модели GloVe Функция f — это функция подсчёта, которая пытается не утяжелять очень частые и редкие совпадения, в то время как bi и bj представляют собой смещения для восстановления симметрии функции. В последних абзацах статьи показано, что обучение этой модели в итоге не сильно отличается от обучения классической модели Skip-gram, хотя в эмпирических тестах GloVe превосходит обе реализации Word2Vec. С другой стороны, fastText исправляет совершенно другой недостаток Word2Vec: если обучение модели начинается с прямого кодирования одного D-мерного вектора, то игнорируется внутренняя структура слов. Вместо прямого кодирования кодирования слов, изучающих словесные представления, fastText предлагает изучать N-граммы символов и представлять слова как сумму векторов N-грамм. Например, при N=3 слово «flower» кодируется как 6 различных 3-грамм [<fl, flo, low, Debt, wer, er>] плюс специальная последовательность <flower>. Обратите внимание, как угловые скобки используются для обозначения начала и конца слова. Таким образом, слово представлено его индексом в словаре слов и набором N-грамм, которые оно содержит, сопоставленных целым числам с помощью функции хэширования. Это простое улучшение позволяет разделить N-граммовые представления между словами и вычислить векторные представления слов, которых не было в корпусе обучения. Эксперименты и возможные применения Как мы уже говорили, для использования этих векторные представления нужно всего несколько строк кода на Python. Я провёл несколько экспериментов с 50-мерной моделью GloVe, обученной на 6 миллиардах слов из предложений Википедии, а также с 300-мерной моделью fastText, обученной на Common Crawl (что дало 600 миллиардов токенов). В этом параграфе указаны ссылки на результаты обоих экспериментов только для того, чтобы доказать концепции и дать общее понимание темы. Прежде всего, я хотел проверить некоторые основные сходства слов, простейшую, но важную особенность их векторного представления. Как и ожидалось, наиболее схожими словами со словом «собака» оказались «кошка» (0.92), «собаки» (0.85), «лошадь» (0.79), «щенок» (0.78) и «домашнее животное» (0.77). Обратите внимание, что форма множественного числа имеет почти то же значение, что и единственное число. Опять же, для нас довольно тривиально так говорить, но для машины это совершенно не факт. Теперь еда: самые похожие слова для «пиццы» это «сэндвич» (0.87), «сэндвичи» (0.86), «закуска» (0.81), «выпечка» (0.79), «фри» (0.79) и «бургеры» (0.78). Имеет смысл, результаты удовлетворительные, и модель ведёт себя довольно хорошо. Следующий шаг — выполнить в векторном пространстве некоторые базовые вычисления и проверить, насколько правильно модель усвоила некоторые важные свойства. И действительно, в результате вычисления векторов Для использования этих предварительно обученных векторных представлений хорошие практические ресурсы можно найти здесь и здесь. Gensim — простая и полная библиотека на Python с некоторыми готовыми к использованию алгебраическими функциями и функциями подобия. Эти предварительно обученные векторные представления можно использовать различными (и полезными) способами, например для улучшения производительности анализаторов настроения или языковых моделей. Какова бы ни была задача, использование N-мерных векторов значительно улучшит эффективность модели по сравнению с прямым кодированием. Конечно, обучение на векторных представлениях в специфической области ещё больше улучшит результат, но для этого могут потребоваться, пожалуй, чрезмерные усилия и время. Источник: habr.com Комментарии: |
|