Как создать хороший список стоп-слов

9

Я ищу несколько советов о том, как составить список стоп-слов. Кто-то знает / кто-то может порекомендовать хороший метод для извлечения списков стоп-слов из самого набора данных для предварительной обработки и фильтрации?

Данные:

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

Моя проблема:

в том, что я действительно борюсь с предварительной обработкой (то есть отбрасываю спам). Я уже попробовал какой-то список стоп-слов из Интернета (NLTK и т. Д.), Но это не очень помогает моим потребностям в отношении этого набора данных.

Спасибо за ваши идеи и обсуждение людей!

PlagTag
источник
1
Модуль Python NLTK предоставляет данные о стоп-словах, и, если это не помогло вам, предоставьте больше информации о вашем наборе данных. Почему это не помогло в вашем случае?
Kasra Manshaei
@kasramsh: Когда я отфильтровал эти SW, у меня сложилось впечатление, что это не сильно отфильтровывает спам. Я думаю, причина в том, что эти списки генерируются на естественных текстах (не уверен) и поэтому не могут использоваться для поисковых слов и запросов сайта. Как и в случае кластеризации (на основе сходства строк поиска) у меня сложилось впечатление, что спам оказывает сильное влияние на уровне энтропии и, следовательно, смешивает конечный результат: - /.
PlagTag
1
Я думаю, что @PlagTag не понимаю, что это такое stop words. Стоп-wrods список наиболее распространенных слов в каком - либо языке, например I, the, aи так далее. Вы просто удалите эти слова из вашего текста перед тем, как начать тренировать свой алгоритм, который попытается определить, какой текст является спамом или нет. Это не помогло вам определить, какой текст является спамом или нет, оно может улучшить ваш алгоритм обучения.
itdxer
@itdxer, спасибо за ваш комментарий. Я использовал термин «стоп-слова» здесь в более широком смысле (как я думал, это может быть хорошо для этой цели). Спасибо за
разъяснение

Ответы:

5

Один из подходов - использовать счет tf-idf . Слова, встречающиеся в большинстве запросов, мало помогут отличить хорошие поисковые запросы от плохих. Но те, которые встречаются очень часто (с высокой частотой или частотой) только в нескольких запросах (высокая IDF или частота обратных документов), скорее всего, будут важнее отличать хорошие запросы от плохих.

Шагун Содхани
источник
спасибо, я попробую этот и сообщу здесь!
PlagTag
на самом деле высокий балл ИДФ мог бы
сработать
2

Это зависит от вашего приложения.

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

Например, в корпусе с текстами, содержащими рисунки и табличные материалы, слова «рис», «рисунок», «табуляция» или «таблица» являются хорошими дополнительными стоп-словами. В результате ваши темы становятся более четкими.


источник
1

Использование TFIDF (термин «частота, обратная частоте документа») решит вашу задачу. Получите оценку TFIDF для каждого слова в вашем документе и отсортируйте слова по их оценкам, по которым вы можете выбрать важные слова в ваших данных.

Тилак Адибоина
источник
1

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

Эта стратегия эффективна, поскольку учитывает влияние токенов при создании списка стоп-слов.

dshefman
источник
0

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

Я также не думаю, что использование только TD-IDF действительно правильно. В некачественных строках могут быть очень редкие (потенциально мусорные) слова.

Вместо того, чтобы пытаться угадать, какие именно функции полезны: я бы начал с создания набора данных путем случайного выбора некоторых данных и маркировки их вручную (как goodили bad, или в масштабе от 0,0 до 1,0). Затем создайте код, который извлекает множество функций (длина, количество слов (токенов), оценка спама, содержит ли он URL-адреса или символы Botish, обнаруженный язык, есть ли у него вопросительный знак, имеет ли он правильную прописную букву). Также не забудьте включить неязыковые функции, которые у вас могут быть, например, страну, где указан geoIP пользователя, который выполнил запрос, был ли пользователь вошел в систему, сколько лет учетной записи пользователя. Таким образом, в этот момент у вас будет массивная таблица / CSV и меньшая таблица с одним дополнительным столбцом для добавленной вами метки.

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

Если вы не хотите слишком много кодировать, вы можете просто вставить эти функции в форму CSV и передать их в интерфейс электронных таблиц Google Prediction API .

Адам Биттлингмайер
источник