Предсказание слов - найдите наиболее частого предшественника и преемника - PullRequest
2 голосов
/ 07 января 2012

Учитывая слово, я хочу получить список наиболее частых предшественников и преемников этого слова на английском языке. Я разработал код, который выполняет анализ биграмм в любом корпусе (я использовал корпус электронной почты Enron) и могу предсказать наиболее частое следующее возможное слово, но я хочу другое решение, потому что а) я хочу проверить работоспособность / точность моего прогноза b) Решения, основанные на корпусе или наборе данных, терпят неудачу для невидимого слова

Например, учитывая слово «отлично», я хочу получить слова, которые с наибольшей вероятностью встречаются до «отлично» и после «отлично»

Мой вопрос: существует ли для этой цели какой-либо конкретный сервис или API?

Ответы [ 3 ]

3 голосов
/ 07 января 2012

Любое решение этой проблемы обязательно должно быть основанным на корпусе методом; вам просто нужен больший корпус. Я не знаю ни одного веб-сервиса или библиотеки, которая бы делала это для вас, но есть способы получить более крупный корпус:

  • Google опубликовал огромный корпус n -грамм, собранных из английской части сети. Он доступен через Linguistic Data Consortium (LDC), но я считаю, что вы должны быть членом LDC, чтобы получить его. (Многие университеты.)
  • Если вы не являетесь участником НРС, попробуйте загрузить дамп базы данных Википедии (получить enwiki) и обучить этому своего предиктора.
  • Если вы используете Python, посмотрите хороший набор корпусов (и инструментов), поставляемых с NLTK .

Что касается проблемы с невидимыми словами, есть способы ее решения, например, заменяя все слова, которые встречаются реже, чем какой-либо порог, специальным токеном, таким как <unseen> перед тренировкой. Это сделает вашу оценку немного сложнее.

2 голосов
/ 09 января 2012

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

2 голосов
/ 09 января 2012

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

Если вы перечислите все отдельные пары слов и посчитаете их, то вы можете ответить на свой вопрос с помощью простой математики в этом списке.

Конечно, вам нужно много обработать, чтобы сформировать список. Хотя верно, что если общее количество отдельных слов равно 30000, то существует миллиард возможных пар, я сомневаюсь, что на практике их так много. Таким образом, вы можете создать программу с огромной хеш-таблицей в памяти (или на диске) и просто сосчитать их все. Если вам не нужны незначительные пары, вы можете написать программу, которая периодически вычищает менее важные из них во время сканирования. Также вы можете сегментировать список слов и генерировать пары из ста слов в стихах, затем в следующей сотне и т. Д. И вычислять в проходах.

Мой оригинальный ответ здесь, я оставляю его, потому что это мой собственный связанный вопрос:

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

Я нашел страницу загрузки для файлов Google Ngram, но они не так хороши, они полны ошибок сканирования. «Я стал», слова соединяются и т. д. Надеемся, что с тех пор Google усовершенствовал свою технологию сканирования.

Идея just-download-wikipedia-unpack = it-and-strip-the-xml для меня неудача, у меня нет быстрого компьютера (хех, у меня есть выбор между нетбуком Atom и Android-устройство). Представьте, сколько времени мне понадобится, чтобы распаковать 3 гигабайта файла bz2, став чем? 100 xml, затем обработайте его красивым супом и фильтрами, которые он допускает сбой на полпути через каждый файл и должен быть перезапущен.

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

Кстати, наборы данных ngram здесь http://books.google.com/ngrams/datasets

Этот сайт может иметь то, что вы хотите http://www.wordfrequency.info/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...