Отнести краткий текст к одной из двух категорий в соответствии с предыдущими заданиями (голосованиями)

Идет поток коротких текстов. Каждый из них имеет размер твита, или давайте просто предположим, что все они твиты.

Пользователь может голосовать за любой твит. Итак, каждый твит имеет одно из следующих трех состояний:

актуально (за)

по умолчанию (нейтрально, т.е. без голосования)

неактуально (отрицательный голос)

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

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

Я читал о Частота термина — обратная частота документа и нашел это очень простое и базовое решение:

Напоминаем: высокий вес в tf–idf достигается высокой частотой слова и низкой суммарной частотой слова во всей коллекции.

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

Если (оценка твита > 0), то этот твит вызовет уведомление.

Оценка твита = сумма оценок всех отдельных слов этого твита.

оценка слов = частота слов * обратная общая частота

частота слов во всех предыдущих голосованиях = (всего положительных голосов за это слово - общее отрицательных голосов за это слово) / всего голосов за это слово

Обратная общая частота = логарифм (общее количество голосов за все слова / общее количество голосов за это слово)

Достаточно ли этого метода? Я открыт для любых лучших методов и любого готового API или алгоритма.


person Hichem Acher    schedule 10.04.2015    source источник


Ответы (2)


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

person yvespeirsman    schedule 10.04.2015
comment
Большое спасибо за ваш отзыв. Я собираюсь прочитать о scikit-learn, тем временем, поскольку вы являетесь экспертом в этой области, не могли бы вы сказать мне, что вы думаете о методе tf-idf, как я предложил? - person Hichem Acher; 11.04.2015
comment
Ваши предположения о tf-idf в основном верны, но есть некоторые проблемы с методом, который вы описываете. Например, нормализация по частоте документа должна работать лучше, чем ваша обратная общая частота (если я правильно понимаю). Однако ваше решение довольно близко к наивному байесовскому подходу, который вы найдете в документации, на которую я ссылался выше. Конвейер scikit-learn из CountVectorizer, TfidfTransformer, MultinomialNB должен довольно быстро дать вам работающую систему, поэтому я бы придерживался этого. - person yvespeirsman; 11.04.2015
comment
Я хочу запустить эту функцию классификации в Google App Engine. Однако я обнаружил, что запустить scikit-learn в GAE невозможно: stackoverflow.com/questions/22763165/ Можете ли вы предложить какой-либо другой инструмент, который отлично работает с Google App Engine? - person Hichem Acher; 15.04.2015

Я бы посмотрел на Наивного Байеса, однако я бы также посмотрел на алгоритм K-ближайших соседей при выполнении простой классификации - он содержится в библиотеке Sci-kit Learn и хорошо задокументирован.

RE: «запуск SKLearn на GAE невозможен» — вам нужно либо использовать Google Predict API, либо запустить VPS, который будет служить рабочим для обработки ваших задач классификации; это, очевидно, должно было бы жить в другой системе.

Однако я бы сказал, что если вы надеетесь выполнить простую классификацию только для достаточно небольшого набора данных, вы могли бы реализовать классификатор в JavaScript, например

`http://jsfiddle.net/bkanber/hevFK/light/`

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

В конечном счете, GAE — это не та платформа, которую я бы использовал при создании чего-либо, для чего могут потребоваться все методы машинного обучения, кроме самых основных. Я бы посмотрел на Heroku или VPS в таком месте, как Digital Ocean, AWS и др.

person torrange    schedule 21.09.2015