KDnuggets

  • Блог/Новини
  • Думки
  • Підручники
  • Найкращі історії
  • Компанії
  • Курси
  • Набори даних
  • Освіта
  • Події (онлайн)
  • Робота
  • Програмне забезпечення
  • Вебінари

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

загальний

Нещодавно ми розглянули основу для вирішення завдань з текстових даних. Ми згадали цей фреймворк настільки загальним, щоб він міг бути корисним і застосовним до будь-якого завдання з видобутку тексту та/або обробки природної мови.

Кроки на високому рівні для фреймворку були такими:

  1. Збір або збір даних
  2. Попередня обробка даних
  3. Дослідження та візуалізація даних
  4. Побудова моделі
  5. Оцінка моделі

Хоча така структура за своєю природою була б ітеративною, ми спочатку продемонстрували її візуально як досить лінійний процес. Це оновлення має поставити його справжню природу в перспективі (з очевидним кивком процесу KDD):


Переглянута (але все ще проста) структура текстових даних.

Очевидно, що будь-яка структура, орієнтована на попередню обробку текстових даних, повинна бути синонімом етапу № 2. Розширюючи цей крок, ми, зокрема, мали сказати наступне про те, що цей крок, ймовірно, передбачає:

У більш загальному плані ми зацікавлені взяти якийсь заздалегідь визначений текст і виконати на ньому певний базовий аналіз та перетворення, щоб залишитися з артефактами, які будуть набагато кориснішими для подальшого, більш значущого аналітичного завдання. Це подальше завдання буде нашою основною роботою з видобутку тексту або обробки природної мови.

Отже, як згадувалося вище, здається, що є 3 основні компоненти попередньої обробки тексту:

  • токенізація
  • нормалізація
  • заміщення

Розкладаючи основи для наближення до попередньої обробки, ми повинні пам’ятати про ці концепції високого рівня.

Фреймворк попередньої обробки тексту


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


Фреймворк попередньої обробки текстових даних.

1 - Токенізація

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

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

Звичайно, це речення легко ідентифікувати з деякими основними правилами сегментації:

Швидкий бурий лис стрибає через ледачого собаку.

Але як щодо цього:

Доктор Форд не запитав у полковника Горчиці ім’я собаки містера Сміта.

"У чому вся суєта?" - спитав містер Пітерс.

І це лише речення. А як щодо слів? Легко, правда? Правильно?

Ця денна студентка не живе в приміщенні кампусу, і вона не хоче відвідувати Гаваї.

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

Розгляд: коли ми сегментуємо шматки тексту на речення, чи слід нам зберігати роздільники, що закінчують речення? Чи цікаво нам згадати, де закінчувались речення?


2 - Нормалізація

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

Нормалізація тексту може означати виконання ряду завдань, але для нашого середовища ми підійдемо до нормалізації у три окремі кроки: (1) виведення, (2) лематизація та (3) все інше.

Стеммінг - це процес усунення афіксів (суфіксів, префіксів, інфіксів, циркумфіксів) зі слова, щоб отримати основу слова.
біг → біг

Лемматизація

Лематизація пов’язана зі сформулюванням, відрізняючись тим, що лематизація здатна захоплювати канонічні форми на основі леми слова.

Наприклад, вживання слова "краще" не поверне форму цитування (інше слово для леми); однак лемматизація призведе до наступного:
краще → добре

Повинно бути легко зрозуміти, чому впровадження стеммеру було б менш складним подвигом обох.

Все інше

Розумний загальний, так? Стеммінг та лематизація є основними частинами зусиль з попередньої обробки тексту, і як такі, до них потрібно ставитись з повагою, яку вони заслуговують. Це не проста маніпуляція з текстом; вони покладаються на детальне та точне розуміння граматичних правил та норм.

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

  • встановити всі символи в нижній регістр
  • видалити числа (або перетворити числа в текстові подання)
  • видалити розділові знаки (як правило, частина токенізації, але все ще варто пам’ятати на цьому етапі, навіть як підтвердження)
  • зняти пробіли (також зазвичай є частиною токенізації)
  • видалити за замовчуванням - - стоп-слова (загальні англійські слова зупинки)

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

Швидкий бурий лис стрибає через ледачого собаку.

  • видалити задані (специфічні для завдання) стоп-слова
  • вилучити рідкісні терміни (хоча це не завжди потрібно або корисно!)

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


3 - Видалення шуму

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

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

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

Але це не завжди так. Якщо корпус, яким ви випадково користуєтесь, галасливий, вам доведеться з ним боротися. Нагадаємо, що про завдання аналітики часто говорять як про 80% підготовки даних!

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

  • видалити колонтитули текстових файлів
  • видалити розмітку HTML, XML тощо та метадані
  • витягувати цінні дані з інших форматів, таких як JSON, або з баз даних
  • якщо ви боїтеся регулярних виразів, це потенційно може бути частиною попередньої обробки тексту, в якій реалізуються ваші найгірші страхи

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

У нашому наступному дописі ми виконаємо практичне практичне завдання з попередньої обробки тексту, і наявність специфічного шуму стане очевидним. і буде вирішено.