ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ — ЭТО СЛОЖНО

Игры для ботов

Список наборов вещей с помощью НЛП

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

Во время одного из карантинов в 2020 году я создал простую игру на память, в которую мои дети могли играть перед сном. Игра на память проходит так:

  1. Выберите тему (например, продукты)
  2. По очереди называйте предметы, которые подходят к этой теме (например, огурец, помидор). Позже мы добавили правило, что вы можете называть только необработанные вещи, потому что мы получали почти дубликаты (например, булочка с кунжутом, булочка с луком, булочка с корицей, горячая булочка с крестом и т. д.).
  3. Каждая вещь, которую вы называете, скрыта от глаз, так что вы должны помнить, какие вещи уже были названы. Это становится особенно сложно, если вы играете в несколько игр подряд и помните, что слышали название вещи, но не можете вспомнить, была ли это эта игра или предыдущая.
  4. Если вы скажете что-то, что кто-то уже сказал во время этой игры, вы выбываете и больше не можете ходить по очереди.

Дети мотивированы придумывать ответы, чтобы отсрочить время отхода ко сну. Вот код игры:

Да, 10 строк. Это все, что вам нужно. Он работает в блокноте Jupyter.

Вот краткий пример игры в действии:

Player 1: Cucumber
Player 2: Lettuce
Player 1: Banana
Player 2: Celery
Player 1: Apple
Player 2: Cucumber
Computer: Cucumber was on the list! You are OUT!

И тогда игрок 1 выигрывает.

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

Вот код для второй игры:

Как и в первой игре, в начале все делают свой ход, и постепенно выживает все меньше игроков, пока не останется только один игрок (победитель).

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

Автоматизация игры памяти

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

Чтобы наш код мог играть в игру, нам нужно, чтобы наш игрок в компьютерной игре выбирал слова в теме, которые он еще не видел. Вам может быть интересно, что нового в этой задаче. Почему бы просто не использовать встраивание сходства векторов и не получить наборы слов, похожих на какое-то начальное слово? Например, word2vec и fasttext имеют похожие методы работы со словами:

word_vectors.most_similar in gensim
model.get_nearest_neighbors in fasttext

Ответ заключается в том, что аналогичный контекст слова не означает аналогичную тему. При поиске слов в той же теме, что и «Honda», нам не нужно слово «надежный». Скорее, нам нужны такие слова, как «Тойота» и «Тесла». Хотя сематическое сходство находится на пути к тому, чего мы хотим, один только похожий контекст не является достаточно описательным, чтобы создать тему из нашего начального набора тематических слов.

Недавняя работа под названием FUSE с хорошей лицензией MIT доступна здесь, из статьи FUSE: Multi-Faceted Set Expansion by Coherent Clustering of Skip-grams». Хотя они не предоставляют набор данных, мы можем попробовать использовать собственный набор данных из Википедии или аналогичный набор текстовых данных с открытым исходным кодом. Мы начинаем с захвата предварительно обученных моделей для gloVe и BERT, как указано в инструкциях по установке FUSE. Полный код этого приключения доступен здесь:



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

Для моей второй попытки я объединил датастес Гутенберга NLTK, инаугурационный, коричневый и веб-текст в корпус из 186 670 предложений. Код кластеризации FUSE по-прежнему удалял небольшие кластеры, поэтому я удалил код удаления кластера. Результаты были плохими. Например, учитывая исходные слова «яблоко», «апельсин» и «виноград», расширенный набор, который вернулся, был [«музыка», «черный», «музыкальный», «виноградный», «белый», «золотой». ', 'живой', 'знаменитость', 'зеленый', 'красный', 'королевский', 'звездный', 'лучший', 'рок', 'новый', 'коммерческий', 'радио', 'кантри', «телевидение», «национальный»]. Итак, я планировал попробовать еще больший набор данных.

Для моей третьей попытки я собирался тренироваться на гораздо большем наборе данных c4, но потом понял, что могу попробовать другую предварительно обученную библиотеку, на этот раз из лабораторий Intel в Израиле. На самом деле я связался с этим исследованием выше, но сначала попробовал FUSE. Я думаю, это было просто мое везение.

Решение Intel для расширения набора сработало с первой попытки. Существует также серверная версия и пользовательский интерфейс, упакованный с их демонстрацией. Вот некоторые интересные результаты моих первоначальных экспериментов:

  1. Основные слова: "яблоко", "апельсин", "виноград". Расширенный список: «груша», «абрикос», «персик», «фундук», «гранат», «вишня», «клубника», «слива», «лаванда», «миндаль».
  2. Исходные слова:"кролик", "лошадь", "утка". Расширенный список: «заяц», «лиса», «кабан», «оленина», «собака», «куропатка», «эму», «свинья», «голубь», «ястреб».
  3. Исходные слова: "стул", "стол", "стол". Расширенный список:'столы', 'столы', 'стулья', 'стол', 'туалетный столик', 'доски', 'диван', 'стулья', 'столик' ', 'ящики'. Теперь мы видим, что модель не распознает, что формы единственного и множественного числа объекта являются одним и тем же (например, «стол» и «столы»). Модель также пропускала удаление стоп-слов (например, «стол» вместо «стол» и «стул» вместо «стулья»). Это можно исправить с помощью простого шага постобработки.
  4. Исходные слова: "honda", "ford", "mercedes". Расширенный список:'холм', 'долина', 'англо-саксонское слово', 'древнескандинавское', 'укрепленное место', 'брод', 'лощина', 'кельтское слово», «брод», «болот». Мы видим, что это дело провалилось довольно сильно. Слова «хонда» и «мерседес» отсутствовали в лексиконе модели. Это указывало на то, что модель чувствительна к регистру. Поскольку осталось только слово «брод», модель нашла слова с векторами рядом со словом «брод». Если вместо этого мы напишем названия автомобильных марок с большой буквы, то получим лучший результат. Исходные слова: "Honda", "Ford", "Mercedes". Расширенный список: "Toyota", "Nissan", "Ferrari", "BMW", "Porsche", "Renault", "Jaguar", "Mazda", "McLaren", "Mercedes-Benz". '

Обратите внимание, что названия автомобилей не содержали других вещей, связанных с автомобилями, в отличие от результатов word2vec. Отлично!

Заключение

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

Код этой статьи доступен ЗДЕСЬ.

Если вам понравилась эта статья, то взгляните на некоторые из моих самых читаемых прошлых статей, таких как Как оценить проект ИИ и Как нанять консультанта по ИИ. И эй, присоединяйтесь к новостной рассылке!

До скорого!

-Дэниел
linkedin.com/in/dcshapiro
[email protected]