Подтвердить что ты не робот

Идеи для проекта обработки естественного языка?

Мне нужно сделать окончательный проект для моего класса вычислительной лингвистики. Мы все время используем OCaml, но я также знаком с Java. Мы изучали морфологию, FSM, собирали деревья синтаксического анализа, синтаксический анализ CYK, попытки, автоматы сжимания, регулярные выражения, теорию формального языка, некоторую семантику и т.д.

Вот некоторые идеи, которые я придумал. У вас есть что-то, что, по вашему мнению, было бы круто?

  • A script, который сканирует потоки Facebook для неприятных * комментариев и молча скрывает их с помощью JS (это будет выполняться с согласия пользователя, очевидно)

  • Анализ части письма с использованием семантики, синтаксиса, использования пунктуации и других показателей, чтобы попытаться "отпечатать" автора. Его можно использовать, чтобы определить, написаны ли два произведения одним автором. Или, кто-то мог бы добавить кучу писем, которые он сделал со временем, и понять, как изменился его стиль.

  • Бот-чат (менее интересный/оригинальный)

Мне может быть разрешено использовать ранее существовавшие библиотеки для этого. Существуют ли какие-либо существуют для OCaml? Без библиотеки/инструментария эти три идеи, вероятно, недопустимы, если я не ограничу его до очень специфического домена.

Идеи нижнего уровня:

  • Операции на конечных автоматах - минимизация, составление преобразователей, доказательство того, что FSM находится в минимально возможном состоянии. Меня очень интересует теория графов, поэтому любое совпадение с FSM может быть хорошим местом для изучения. (Что еще я могу сделать с FSM?)

  • Что-то классное с регулярным выражением?

  • Что-то классное с CYK?

Есть ли у кого-нибудь интересные идеи?

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

4b9b3361

Ответ 1

  • Отказоустойчивая фильтрация языка. Я думаю, что это уменьшит процесс, очень похожий на спам-фильтрацию электронной почты. То есть, считая частоту набора более или менее "отвратительных" слов. Не похоже, что вы получите возможность делать что-нибудь особенно умное, если только вы не используете другие источники информации (например, структура социальных связей, разделяемых между отправителем и получателем, возможно). С другой стороны, онлайн-издевательства - очень серьезная вещь, и вы можете делать ставку на Facebook/Myspace, а другие сайты социальных сетей много заботятся о том, чтобы справиться с этим.

  • Стилистический анализ. Проделана некоторая работа над этим в различных формах, часто под анализом авторского имени. Шломо Аргамон много работает в этой области, и вы, вероятно, могли бы найти гораздо больше из ссылок в своих документах. Одним из лучших способов профилировать автора является изучение распределения их использования набора стоп-слов (или функциональных слов), таких как "и", "но", "если" и т.д. Я думаю, что там гораздо больше возможности сделать что-то новое и интересное в этой области - анализ авторских прав на данные в Интернете - сложная проблема, но также гораздо больше возможностей для отказа.

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

Остальные действительно слишком расплывчаты, чтобы комментировать, извините.

В OCaml нет никаких библиотек NLP, которые я знаю, это просто не очень популярный язык программирования. Тем не менее, я знаю библиотеку машинного обучения в Ocaml, называемую MEGAM, написанную Hal Daume, которая является очень хорошим исследователем NLP, который использовался для задач НЛП. У меня возникает ощущение, что выяснение MEGAM и использование его для выполнения некоторых задач NLP может быть слишком большим, чтобы выполнить проект.

Некоторые другие идеи:

  • Анализ настроений - очень модная область исследований. Вы могли бы сделать эту задачу легкой или трудной, как вам нравится, от оценки документа как положительного/отрицательного до выделения конкретных тем и создания оценки настроений для каждого из них.
  • Разрешение Coreference/Anaphora - сложная задача, но очень важная. Некоторые подходы используют представление графа (каждое упоминание - это node с ребрами между ними, если они со-ссылаются), чтобы применять такие вещи, как транзитивность.
  • Классификация документов - Вы можете попробовать и изучить систему в наборе данных StackOverflow предложить теги для данного вопроса. Это довольно хорошо известная проблема с некоторыми установленными методами, но интересный набор данных и имеет очевидное и полезное приложение для реального мира. Вы также можете увидеть, можете ли вы найти конкретные функции вопроса (выбор слова, длина, форматирование, пунктуация и т.д.), Которые заставляют их быть высоко оцененными.
  • Haiku Generation - вид глупых, но я всегда думал, что это интересная идея. Подсчет слогов может быть выполнен с помощью Словаря объявления CMU. Должно быть очень весело, если не особенно полезно.

Ответ 2

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

Что касается выбора языка, я думаю, вы должны выбрать тот, с которым вам удобнее. Я не знаком с библиотеками, но я видел много вещей NLP, выполненных на Python и Java.

Ответ 3

Используйте API-интерфейс twitter, чтобы вытащить все твиты из социального разговора и объединить\обобщить\опубликовать контент в виде эссе\статьи\blog\и т.д., который кто-то может прочитать в одном фрагменте. Корреляция концепций и идей, расширение ссылок, улучшение грамматики. Вид вроде bettween.com, но сумасшедший с НЛП.

Ответ 4

1 - Что было бы здорово для меня, когда вы просматриваете академические документы, и мне нужно знать, какая часть работы:  полностью оригинал  - чисто копировать/вставлять  - это чистый парафраз  - что прямо противоположно предыдущей ссылке. В идеале, он проверял бы ссылки внутри статьи + всю предыдущую работу авторов (и может проверить цитирование, чтобы искать ссылки, которые потенциально были опущены - невольно). Это было бы действительно полезно.

2- Я хотел бы, чтобы инструмент проверял все вопросы в SO, ища одинаковые вопросы с кучей ответов и генерируя ответ, который может быть адекватным.

Ответ 5

1а. script, который сканирует facebook... Как вы планируете определять "неприятные". это звучит довольно сложно.

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

svdlibc: http://tedlab.mit.edu/~dr/svdlibc/

1b. fsm. Я не уверен, что вы подразумеваете под "доказательством минимальности преобразователя". это довольно стандартная операция и входит в практически любой инструментарий, с которым вы можете столкнуться. если вас интересует fsms, посмотрите на

AT & T toolkit: http://www2.research.att.com/~fsmtools/fsm/

или Инструментарий OpenFST: http://www.openfst.org/

fsms становятся все популярнее как принципиальный, единый метод распознавания речи. моя аспирантура посвящена этой теме, и это действительно очень интересно.

как насчет создания синтаксического анализатора или chunker на основе hmm или простого декодера viterbi? если вы соберете достойный набор для обучения (сначала вам нужно пометить его самостоятельно), вы можете приблизиться к простой версии вашего тегатора "противных комментариев" и использовать его, возможно, с каким-то классификатором для "цензора" или удаления неприятные комментарии.

Ответ 6

Могу ли я предложить вам изучить язык программирования Prolog. Это декларативный язык логического программирования с естественной обработкой языка, являющийся одним из его ранние цели. Примерно на полпути вниз эта страница Wiki является примером того, как вы можете использовать ее в качестве парсера языка. Вы можете легко генерировать тысячи грамматически правильных предложений и фраз. Это очень мощный инструмент. Я думаю, что использование этого было бы очень интересно.

Ответ 7

Я рекомендую использовать Java, если нет библиотеки, которую вам отчаянно нужно. Я однажды завершил проект NLP на Java и обнаружил, что ему не хватает гибкости, которая часто необходима (система строгого типа, анонимные функции и т.д.). К сожалению, я не знаю OCaml, но в случае, если вы знаете Python, для этого есть много доступных библиотек НЛП, например, очень всесторонний и активно разработанный NLTK.

Ответ 8

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

2) Я предполагаю, что вы изучили подход трансформационной грамматики к деревьям (теория X-баров и т.д.). Существует вся эта другая синтаксическая теория, называемая грамматикой строчной фразы (HPSG), которая не использование "иерархии" для описания синтаксиса, но также использует атрибутные матрицы.

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

Но, как только вы почувствуете структуры объектов HPSG, вы можете искать литературу для людей (лингвистов и вычислительных лингвистов), которые придумали способы использования графических представлений для интересных вещей.

Может быть, вы можете создать преобразовательный преобразователь с преобразованием дерева в HPSG? (Вам нужно будет знать, как такие вещи, как "повышение", "контроль", "пассивизация" и т.д., Будут преобразованы в HPSG "SLASH", "REL" и т.д.).

Ответ 9

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

Что-то, более подходящее для учебного плана, которое вы описали, может заключаться в создании морфологического анализатора для иностранного языка, с которым вы знакомы, или для создания stemmer (версия плохого человека морфологического анализатора), которая отображает морфологически связанные термины в одну и ту же запись в индексе - то, что может использоваться поисковыми системами.

Если вам не нужно придумывать новую технику для вашего класса (т.е. если вы являетесь субградом), то существует большое количество стандартных задач NLP, которые вы могли бы реализовать в OCaml, например анализатор обученный на Penn Treebank, парсер для какого-то другого формализма грамматики, тегатор части речи, или буквально десятки других приложений.