Категоризация слов и значений категорий - PullRequest
12 голосов
/ 04 июня 2009

Сегодня в классе нам поставили задачу алгоритма, как «если вы найдете решение, вам не нужно заниматься этим предметом». ТАК конечно, мы все думали, что попробуем.

В основном нам была предоставлена ​​БД из 100 слов и 10 категорий. Нет совпадения между словами или категориями. Так что это в основном список из 100 слов и 10 категорий.

Мы должны «поместить» слова в правильную категорию, то есть мы должны «выяснить», как поместить слова в правильную категорию. Таким образом, мы должны «понять» слово, а затем поместить его в наиболее подходящую категорию.

т.е. одно из слов «рыбалка» категории «спорт» -> так что это будет в эту категорию. Между словами и категориями существует некоторое совпадение, поэтому некоторые слова могут входить в несколько категорий.

Если мы выясним это, мы должны увеличить размер выборки, и победит человек с «лучшим» соответствием%.

У кого-нибудь есть идеи, как начать что-то подобное? Или какие-нибудь ресурсы? Желательно в C #?

Даже ключевое слово DB или что-то может быть полезным? Кто-нибудь знает какие-нибудь бесплатные?

Ответы [ 21 ]

1 голос
/ 04 июня 2009

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

Может быть, что-то можно сделать с базой данных тезауруса и найти минимальные расстояния между словами "слово" и словами "категория"?

0 голосов
/ 04 июня 2009

Ну, вы не можете использовать Google, но вы можете использовать Yahoo, Ask, Bing, Ding, Dong, Kong ... Я бы сделал несколько проходов. Сначала запросите 100 слов по 2-3 поисковым системам, возьмите первые y полученных статей (y - порог для экспериментов. Думаю, 5 - хорошее начало) и отсканируйте текст. В частности, я буду искать 10 категорий. Если категория появляется более чем x раз (x снова является некоторым порогом, с которым вам нужно поэкспериментировать), то это совпадение. Основываясь на этом пороговом значении x (т. Е. Сколько раз категория появляется в тексте) и как может из верхних y страниц, на которых она появляется, вы можете назначить вес для пары слово-категория. для большей точности вы можете сделать еще один проход с этими поисковыми системами, не относящимися к Google, с парой слово-категория (с отношением AND) и применить количество полученных страниц к весу этой пары. Они просто предполагают, что пара слов-категорий с наибольшим весом является правильной (при условии, что у вас даже будет более одного варианта). Вы также можете назначить несколько слов нескольким категориям, если веса достаточно близки (возможно, порог z). Исходя из этого, вы можете ввести любое количество слов и любое количество категорий. И Вы выиграете свой вызов. Я также думаю, что этот метод хорош для оценки веса потенциальных рекламных слов в рекламе. но это уже другая тема ....

Удачи

Harel

0 голосов
/ 04 июня 2009

Поскольку вам не нужно заниматься предметом, когда вы решаете эту «загадку», я думаю, что это не должно быть легко. Тем не менее, я бы сделал что-то вроде этого (очень упрощенно)

Создайте нейронную сеть, в которую вы вносите некоторые данные (книгу (е), книги (е)) => нет необходимости в Google

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

0 голосов
/ 04 июня 2009

Очистите Delicious.com и искать каждое слово, глядя на общее количество тегов и т. Д.

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

Знания в тегах.

0 голосов
/ 04 июня 2009

Моей первой мыслью было бы использовать внешние данные. Напишите программу, которая выполняет поиск в Google по каждому слову и получает «категорию», которая появляется первой / самой высокой в ​​результатах поиска:)

Хотя это можно считать обманом.

0 голосов
/ 04 июня 2009

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

В Appart от Google существуют другие «энциклопедические» наборы данных, из которых вы можете создавать, некоторые из них размещены в виде общедоступных наборов данных на Amazon Web Services , например полный снимок англоязычной Википедии.

Будьте креативны. Помимо Google есть и другие данные.

0 голосов
/ 04 июня 2009

Моя попытка состоит в том, чтобы использовать набор инструментов CRM114 , чтобы обеспечить способ анализа большого объема текста. Затем вы можете использовать сопоставления из него, чтобы дать предположение.

0 голосов
/ 04 июня 2009

Мой наивный подход:

  1. Создайте огромный текстовый файл, например this ( прочитайте статью для вдохновения )
  2. Для каждого слова отсканируйте текст и, когда вы подходите этому слову, подсчитайте «категории», которые появляются в позициях N (максимум, радио) слева и справа от него.
  3. Слово, вероятно, относится к категории с наибольшим счетчиком.
0 голосов
/ 10 июня 2009

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

0 голосов
/ 20 апреля 2013

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

Это будет достаточно легко решить проблему из 100 слов. Для более масштабной проблемы вы могли бы объединить это с образованным предположением, чтобы ускорить процесс. Здесь, как уже упоминали многие люди, вам понадобятся внешние источники. Метод Google, вероятно, будет работать лучше, так как Google уже проделал огромную работу над ним, но, за исключением того, что вы можете, например, извлечь данные из своей учетной записи Facebook с помощью API Facebook и попытаться выяснить, какие слова статистически более вероятны появляться с ранее классифицированными словами.

В любом случае, этого нельзя сделать без какого-либо внешнего вмешательства, которое в какой-то момент пришло от человека. Если вы не хотите быть нахальным и, например, определите категории по некоторому сериализованному значению, содержащемуся в тексте ascii для имени: P

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