Иногда мне хочется, чтобы прогресс в кодировании был хоть немного более полезным. Если использовать баскетбол — еще одно хобби всей моей жизни — для сравнения: когда я забиваю мяч, это гораздо более тактильно и приятно, чем отсутствие сообщения об ошибке: я чувствую, что импульс, создаваемый моими ногами, проходит через мое тело и переданное кончиками пальцев, — это правильно. Получающийся взмах, когда мяч прорезает сетку, - это всего лишь вишенка на торте (хотя я слышу не очень обычный звук; мой удар еще в стадии разработки).

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

Но из-за всех причин, которые я мог придумать против кодирования, мне кажется, что я недостаточно внимательно искал сторонников этого подхода. В частности, обработка естественного языка — это один из первых случаев, когда красота кодирования проявилась. Дело не в том, что программирование в прошлом не приносило удовольствия; скорее, НЛП дает ощущение полного удовлетворения, как предложение, которое было идеально написано с первого раза, или выстрел, не попадающий ни в что, кроме ворот.

Моя цель в этом блоге — задокументировать мою попытку по-настоящему жить и дышать программированием посредством изучения НЛП и машинного обучения в течение как минимум 30 дней. Цель моего исследовательского проекта — изучить, как происходит обучение в онлайн-сообществах, в частности, посредством языковых изменений. Каждый день или около того будет состоять из краткого обзора того, что я сделал, любых проблем, с которыми я столкнулся, а иногда даже пары выводов из какого-нибудь подкаста/статьи о области ML/AI/NLP. Обратите внимание, что вся работа выполняется с использованием Python 3.10.11 в локальной виртуальной среде в Jupyter Notebooks.

До сих пор: Прочитал весь nltk.org/book, выяснил, как получить доступ к данным Reddit и обработать их с помощью пакета Python PRAW и pushshift torrent dumps, прочитать исследовательские работы, делающие похожие вещи, использовал частотное распределение для измерения сходства между двумя группами (один раз между одним и тем же субреддитом r/ApplyingToCollege, но с разными годами, а затем между r/ApplyingToCollege и r/magicTCG в том же году)

День 1

Краткое описание: Работал над использованием n-грамм для измерения сходства между двумя группами, осталось только преобразовать текстовые данные в предложения.

Основные проблемы:

  • Пытался обойти ручное разбиение текста на предложения, но установка convokit не сработала, потому что pyTorch не устанавливался:
ERROR: Could not install packages due to an OSError: [WinError 5] Access is denied: 
'C:\\Users\\HP\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\torch\\lib\\asmjit.dll'
Check the permissions.
  • Это было исправлено, просто закрыв мою виртуальную среду и введя ту же самую команду установки.
  • Понял, что корпуса в convokit не такие же, как в пакете nltk, а это значит, что мне все равно придется вручную токенизировать предложения.

Некоторые мысли из Интервью Лекса Фридмана с Марком Цукербергом

  • Альтернативный взгляд на всеведущий, единый агент ИИ (например, ChatGPT для самых разных задач): децентрализованные агенты ИИ для конкретных целей.
  • ИИ/НЛП как еще один уровень HCI
    - Вместо того, чтобы напрямую вводить код в текстовый редактор, вы можете вместо этого давать инструкции агенту ИИ, который пишет для вас скелет
    - В большинстве современных дискурсов ИИ всегда изображается как единственный агент зла ​​(а-ля Альтрон в «Мстителях»), но наиболее вероятным злокачественным исходом в ближайшем будущем станет то, что люди будут использовать для зла неавтономные технологии, менее мощные, чем сверхразум.
  • «Суперполезность не требует суперинтеллекта» (или чего-то в этом роде)

День 2

Краткое описание: полностью обработаны, очищены (удалены стоп-слова, знаки препинания и т. д.) и токенизированы текстовые данные, а также уточнен конвейер для создания модели ngram.

Основные проблемы:

  • Не удалось выяснить, будет ли более эффективно обрабатывать/очищать текстовые данные до или после их разбивки на предложения.
  • Обработка конкретного случая разделения символа «\n» (новая строка), поскольку простое разделение его на «\n» внутри списка создаст длинный список из двух элементов вместо двух новых элементов.

Некоторые мысли из Интервью Лекси Фридман с Сэмом Альтманом

  • Я считаю, что ответ на вопрос «как ИИ на самом деле работает?», спрятанный в черном ящике в центре, имеет своего рода дополняющее или даже диаметрально противоположное отношение к тому, что делает нас human
    - Человечность, на мой взгляд, проявляется в самых несовершенных вещах — я думаю, например, о спонтанных, совершенно неквантованных барабанных паттернах легендарного хип-хоп продюсера Джей Диллы.
    — По своей сути искусственный интеллект стремится быть совершенным (возьмем пример выбора оптимального хода на шахматной доске)
    - Далее в подкасте Фридман определяет сознание как «глубокое переживание», определение, с которым лично я согласен
    - Но я подумайте, пока ИИ совершенен, это не будет опытом, потому что испытывать — значит жить и воплощать эти несовершенства

День 3

Резюме: завершена предварительная обработка данных, модель завершена, за исключением нескольких настроек (регулировка минимального отсечения вхождений слов для подсчета в распределениях вероятностей биграмм, а также просто сжатие кода) и построена собственная функция перекрестной энтропии, используя формулу из Августа. и др. 2020 года о языке, специфичном для субреддита», который еще нуждается в проверке.

Основные проблемы:

  • Пытался преобразовать токенизированные текстовые данные в форму, которую можно было бы использовать с конструктором словаря nltk, чтобы ограничение частоты было таким же простым, как заполнение параметра. В итоге просто добавили ограничения по частоте в качестве еще одного шага к предварительной обработке данных.
  • Не удалось понять, как получить доступ к каждой паре слов и счету. Ключом для структуры dict counter.NgramCounter оказался список с одним элементом. После попытки объединить ключ и первое значение (второе слово в биграмме) в один цикл for, я в конце концов понял, что мне нужно использовать вложенные циклы for, которые временно сохраняли бы второе слово в биграмме, прежде чем переходить ко всем циклам for. другие возможные пары по первому слову.

День 4

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

Основные проблемы:

  • Все еще не уверен, что моих тестов для моей функции перекрестной энтропии достаточно. Возможно, все равно придется настроить модель (например, использовать сглаживание), поскольку существует небольшое расхождение между математическими и расчетными ответами, но это может быть просто из-за округления. В любом случае, я считаю, что функция отражает общее представление о том, что происходит, поскольку тесты на совершенно разных данных обучения и тестирования дали довольно высокое значение, и наоборот.
  • Не понимал, как большие наборы данных и/или ограниченная вычислительная мощность могут реально повлиять на время выполнения. Запустил свою модель ngram и функцию перекрестной энтропии на двух целых субреддитах (вероятно, я виноват больше, чем мой компьютер), пошел за продуктами и вернулся к все еще работающей программе. Необходимо научиться более эффективно тестировать с меньшими наборами данных.

Некоторые мысли из Необъяснимого Vox: Можем ли мы разговаривать с животными?

  • Интересный разговор о том, как ИИ используется в биолингвистике
  • Основной способ использования ИИ для понимания языка животных — это использование скрытых/вложенных пространств
    - Разрешено определение по взаимосвязи: даже если вы не понимаете другой язык, если форма/расстояние двух слов похожи на пару ты знаешь, ты можешь сделать вывод, что они имеют схожее значение из их отношений
  • Много дискуссий о том, этично ли иметь возможность общаться с животными через ИИ, не до конца понимая их реакции
    - Важно рассмотреть возможность ускорения развития политики, общих дискуссий и т. д., чтобы опередить рост ИИ.

День 5

Резюме: Доработана и протестирована функция Кульбака-Лейблера, добавлена ​​функция преобразования элементов словаря частотных распределений в ранги, построена и протестирована функция Коэффициент ранговой корреляции Спирмена (SRCC).

Основные проблемы:

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

День 6

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

Основные проблемы:

  • Чтение данных заставило меня настроить мою программу чтения торрент-файлов, в частности функцию write_line для файлов .csv (ранее выводившаяся только в .txt).
  • Извлечение фактических данных из .csv для обработки поначалу казалось очень трудным, поскольку я привык использовать встроенные функции open() для файлов, но я обнаружил, что могу преобразовать свой .csv в фрейм данных, а затем в словарь с использованием Pandas. После этого оставалось лишь ознакомиться с документацией.

День 7

Краткое описание: Завершен простой конвейер предварительной обработки/очистки (необходимо еще специализироваться для ввода показателей сходства), построена, но не протестирована часть конвейера для подготовки данных для построения графиков, создан репозиторий на GitHub.

Основные проблемы:

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

День 8

Резюме: Наконец-то доделал всё до визуализации данных по одной метрике сходства (KL-Divergence).

Основные проблемы:

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