Класифікація документів за допомогою згорткової нейронної мережі


11

Я намагаюся використовувати CNN (звивисту нейронну мережу) для класифікації документів. CNN для короткого тексту / речень вивчався у багатьох працях. Однак, схоже, жоден папір не використовував CNN для довгого тексту чи документа.
Моя проблема полягає в тому, що в документі занадто багато функцій. У моєму наборі даних кожен документ містить більше 1000 лексем / слів. Щоб подати кожен приклад до CNN, я перетворюю кожен документ у матрицю, використовуючи word2vec або рукавичку, отримуючи велику матрицю. Для кожної матриці висота - це довжина документа, а ширина - розмір вектора вбудовування слова. У моєму наборі даних більше 9000 прикладів, і це потребує багато часу для тренування мережі (цілий тиждень), що ускладнює точну настройку параметрів.
Ще один метод вилучення особливостей - використовувати один гарячий вектор для кожного слова, але це створить дуже рідкісні матриці. І звичайно, цей метод навіть займає більше часу на тренування, ніж попередній метод.
То чи існує кращий метод вилучення функцій без створення великих вхідних матриць?
І як ми маємо поводитися з різною довжиною документів? Наразі я додаю спеціальні рядки, щоб документ мав однакову довжину, але не думаю, що це вдале рішення.


2
Чи здається, що використання векторизатора TfIdf здається підходящим? Може, у поєднанні з word2vec залишати лише верхній х слів для кожного документа?
Дієго

Ну, я не знаю, що таке Tfldf. Я збираюся перевірити його, щоб побачити, чи працює він. Дякую
lenhhoxung


Я просто перевіряю це, і я думаю, що це мені не допомагає. В основному, цей клас помічників створює матрицю для набору документів. Кожен рядок вектор (двійковий або кількість слів) у матриці відповідає документу, але для CNN нам потрібна матриця для кожного документа.
lenhhoxung

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

Відповіді:


8

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

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

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

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

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


Цікава ідея. Я спробую :)
lenhhoxung

Чи можу я задати питання? Як я можу поводитися з документами, які зі значно різною довжиною (5 речень / док., 500 речень / док) навіть представляю їх у векторах речень? Набивання тут здається дивним ...
сток потоку

1
При обробці мови деякі люди впорядковують послідовності виходячи з її довжини, щоб послідовність із подібною довжиною знаходилася в одній партії. Це може працювати для послідовності тексту.
suthee

4

Ви можете використовувати вбудовування регіону. Замість того, щоб конвертувати окремі "жетони" у вектори, ви можете використовувати стратегію перетворення регіонів тексту у вектори. Цей підхід використовується тут: https://arxiv.org/abs/1504.01255

Якщо ви не обмежені CNN, ви можете використовувати такі ієрархічні моделі уваги, як ця: https://www.cs.cmu.edu/~diyiy/docs/naacl16.pdf, де у вас є трубопровід такого типу: word vectors (combined into) sentence vectors (combined into) final document vector

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

Для обробки документів різної довжини набивання / вирізання - єдине рішення поки що.

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


1
Дякуємо за ваше посилання Вбудованість регіону цікава. Щодо документа зі змінним розміром, як згадується в цій статті arxiv.org/abs/1412.1058 (той же автор), ми можемо використовувати декілька одиниць об’єднання замість прокладки / вирізання.
lenhhoxung
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.