Я ищу несколько советов о том, как составить список стоп-слов. Кто-то знает / кто-то может порекомендовать хороший метод для извлечения списков стоп-слов из самого набора данных для предварительной обработки и фильтрации?
Данные:
огромное количество вводимого человеком текста различной длины (поисковые термины и целые предложения (до 200 символов)) в течение нескольких лет. Текст содержит много спама (например, машинный ввод от ботов, отдельные слова, глупые поиски, поиски продуктов ...), и только несколько% из них могут быть полезны. Я понял, что иногда (очень очень редко) люди ищут мою сторону, задавая действительно крутые вопросы. Эти вопросы настолько крутые, что я думаю, что стоит глубже изучить их, чтобы увидеть, как люди со временем ищут и какие темы люди интересовали, используя мой веб-сайт.
Моя проблема:
в том, что я действительно борюсь с предварительной обработкой (то есть отбрасываю спам). Я уже попробовал какой-то список стоп-слов из Интернета (NLTK и т. Д.), Но это не очень помогает моим потребностям в отношении этого набора данных.
Спасибо за ваши идеи и обсуждение людей!
stop words
. Стоп-wrods список наиболее распространенных слов в каком - либо языке, напримерI
,the
,a
и так далее. Вы просто удалите эти слова из вашего текста перед тем, как начать тренировать свой алгоритм, который попытается определить, какой текст является спамом или нет. Это не помогло вам определить, какой текст является спамом или нет, оно может улучшить ваш алгоритм обучения.Ответы:
Один из подходов - использовать счет tf-idf . Слова, встречающиеся в большинстве запросов, мало помогут отличить хорошие поисковые запросы от плохих. Но те, которые встречаются очень часто (с высокой частотой или частотой) только в нескольких запросах (высокая IDF или частота обратных документов), скорее всего, будут важнее отличать хорошие запросы от плохих.
источник
Это зависит от вашего приложения.
Когда вы занимаетесь моделированием темы, попробуйте сначала использовать стандартные слова. Когда есть несколько слов, встречающихся во многих темах (обратите внимание на мою довольно расплывчатую формулировку), они являются хорошими кандидатами на дополнительные стоп-слова.
Например, в корпусе с текстами, содержащими рисунки и табличные материалы, слова «рис», «рисунок», «табуляция» или «таблица» являются хорошими дополнительными стоп-словами. В результате ваши темы становятся более четкими.
источник
Использование TFIDF (термин «частота, обратная частоте документа») решит вашу задачу. Получите оценку TFIDF для каждого слова в вашем документе и отсортируйте слова по их оценкам, по которым вы можете выбрать важные слова в ваших данных.
источник
Подход, который я использовал для создания списка стоп-слов, состоит в том, чтобы построить и обучить модель логистической регрессии (благодаря ее интерпретируемости) на ваших текстовых данных. Возьмите абсолютное значение коэффициентов для каждого токена. Затем сортируйте по убыванию абсолютные значения коэффициентов токенов. Затем создайте список всех токенов с высоким абсолютным значением коэффициента, которые могут привести к переоснащению или которые могут соответствовать другим критериям в качестве стоп-слова. Этот список ваш список стоп-слов. Затем вы можете применить этот список стоп-слов к другому набору документов этого типа (например, к тестовому набору), чтобы увидеть, увеличивает ли их удаление точность, точность или отзыв модели тестового набора.
Эта стратегия эффективна, поскольку учитывает влияние токенов при создании списка стоп-слов.
источник
В какой-то момент стоп-слова могут быть частью решения, но не ключом. В любом случае для любых основных языков существуют хорошие списки стоп-слов, они не должны зависеть от предметной области.
Я также не думаю, что использование только TD-IDF действительно правильно. В некачественных строках могут быть очень редкие (потенциально мусорные) слова.
Вместо того, чтобы пытаться угадать, какие именно функции полезны: я бы начал с создания набора данных путем случайного выбора некоторых данных и маркировки их вручную (как
good
илиbad
, или в масштабе от 0,0 до 1,0). Затем создайте код, который извлекает множество функций (длина, количество слов (токенов), оценка спама, содержит ли он URL-адреса или символы Botish, обнаруженный язык, есть ли у него вопросительный знак, имеет ли он правильную прописную букву). Также не забудьте включить неязыковые функции, которые у вас могут быть, например, страну, где указан geoIP пользователя, который выполнил запрос, был ли пользователь вошел в систему, сколько лет учетной записи пользователя. Таким образом, в этот момент у вас будет массивная таблица / CSV и меньшая таблица с одним дополнительным столбцом для добавленной вами метки.Затем обучите некоторый пакет машинного обучения с помощью этих помеченных примеров, чтобы построить модель, достаточно точную для вас. Затем позвольте этой модели работать с остальными данными.
Если вы не хотите слишком много кодировать, вы можете просто вставить эти функции в форму CSV и передать их в интерфейс электронных таблиц Google Prediction API .
источник