Як створити хороший список зупинок


9

Я шукаю підказки про те, як вилікувати список зупинок. Хтось знає / чи може хтось порекомендувати хороший метод вилучення списків зупинок із самого набору даних для попередньої обробки та фільтрації?

Дані:

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

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

полягає в тому, що я дійсно борюся з попередньою обробкою (тобто скиданням спаму). Я вже спробував список списку стоп-файлів з Інтернету (NLTK тощо), але це не дуже допомагає моїм потребам щодо цього набору даних.

Дякуємо за Ваші ідеї та обговорення!


1
Модуль Python NLTK надає дані про зупинки, і якщо це не допомогло вам краще надати більше інформації про ваш набір даних. Чому це не було корисно у вашому випадку?
Касра Маншаї

@kasramsh: Коли я фільтрував ці SW, у мене склалося враження, що це не фільтрує суттєво спам. Я думаю, що причина полягає в тому, що цей список формується на природних текстах (не впевнений), і тому вони не використовуються для пошукових слів та запитів на сайт. Як і під час кластеризації (на основі подібності рядка пошуку), у мене склалося враження, що спам сильно впливає на рівень ентропії і тим самим змішує кінцевий результат: - /.
PlagTag

1
Я думаю, що @PlagTag не розуміє, що таке stop words. Стоп-wrods список найбільш поширених слів в якому - небудь мові, наприклад I, the, aі так далі. Ви просто вилучите ці слова зі свого тексту перед тим, як почати тренувати свій алгоритм, який намагатиметься визначити, який текст є спамом чи ні. Це не допомогло вам визначити, який текст є спамом чи ні, він може покращити ваш алгоритм навчання.
itdxer

@itdxer, дякую за ваш коментар. Я використовував тут термін стопсворд в більш широкому розрізі (як я думав, це може бути нормально для цієї мети). Дякую, що
вияснили

Відповіді:


5

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


THX багато, я спробую це і повідомити тут!
PlagTag

насправді високий показник ІДФ поодинці зробив би трюк
CpILL

2

Це залежить від вашої заявки.

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

Наприклад, у корпусі з текстами, що містять фігури та табличний матеріал, слова "фіг", "фігура", "вкладка" або "таблиця" є хорошими додатковими зупинками. В результаті ваші теми стають більш чіткими.


1

Використання TFIDF (зворотна частота документообігу терміна) вирішить вашу мету. Отримайте бал TFIDF за кожне слово у вашому документі та відсортуйте слова за їх балами, за якими ви можете вибрати важливі слова у своїх даних.


1

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

Ця стратегія є ефективною, оскільки враховує вплив токенів при складанні списку стоп-слів.


0

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

Я також не думаю, що використовувати тільки TD-IDF справді правильно. У рядках низької якості можуть бути дуже рідкісні (потенційно сміття) слова.

Замість того, щоб намагатися вгадати, які саме функції корисні: я б почав із створення набору даних, випадковим чином вибравши деякі дані та позначивши їх вручну (як goodчи bad, або за шкалою від 0,0 до 1,0). Потім кодуйте щось, що витягує багато функцій (довжина, кількість слів (лексем), оцінка спаму, чи містить URL-адреси чи бот-символи, виявлену мову, чи має він знак запитання, чи має належну велику літери). Також не забудьте включити нелінгвістичні функції, які у вас можуть бути, як, наприклад, країна геоIP користувача, який здійснив запит, незалежно від того, чи ввійшов користувач, скільки років користувачеві. Тож у цей момент у вас з'явиться масивна таблиця / CSV та менший з одним додатковим стовпцем для доданої вами мітки.

Потім навчіть якийсь пакет машинного навчання з тими міченими прикладами, щоб створити модель, достатньо точну для вас. Тоді нехай ця модель працює на решті даних.

Якщо ви не хочете занадто сильно кодувати, ви можете навіть просто перенести ці функції у форму CSV та надати їх інтерфейсу електронних таблиць API Google Prediction .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.