Застосовуйте вбудовування слів до всього документа, щоб отримати вектор функції


38

Як я можу використовувати вбудовуване слово для зіставлення документа на функціональний вектор, придатний для використання під контролем навчання?

Слово вкладення відображає кожне слово до вектору , де деякі не дуже велика кількість (наприклад, 500). Популярні вбудовані слова включають word2vec та Glove .шvRгг

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

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

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

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

  • Я міг би використовувати слово вбудовування для кластеризації лексики всіх слів у фіксованому наборі кластерів, скажімо, 1000 кластерів, де я використовую косинусну схожість на вектори як міру подібності слів. Тоді, замість мішка слів, я міг би мати мішок кластерів: особливість вектора, яку я постачаю класифікатору, може бути 1000-вектором, де й компонент рахує кількість слів у документі, є частиною кластера .iii

  • Враховуючи слово , ці вкладення слів дозволяють обчислити набір із 20 найбільш схожих слів та їх бал подібності . Я міг би адаптувати функцію вектора мішків слів, використовуючи це. Коли я бачу слово , на додаток до збільшення елемента, що відповідає слову на , я також міг би збільшити елемент, відповідний слову на , збільшити елемент, відповідний слову на , і так далі.w 1 , , w 20 s 1 , , s 20 w w 1 w 1 s 1 w 2 s 2шш1,,ш20с1,,с20шш1ш1с1ш2с2

Чи є якийсь специфічний підхід, який, ймовірно, добре працює для класифікації документів?


Я не шукаю параграф2vec чи doc2vec; їм потрібна підготовка до великого корпусу даних, а у мене немає великого корпусу даних. Натомість я хочу використовувати вже вбудоване слово.


1
Ви визначились із конкретним методом подання документів із заздалегідь підготовленими вкладками? Можливо, це могло б трохи допомогти?
турдус-мерула

1
@ user115202, акуратно! Це не зовсім вирішує проблему, яку я мав, але це розумна ідея, яка звучить, варто знати - дякую, що вказали на неї! Я ніколи не знайшов дуже гарного рішення цієї проблеми, яке було б значно краще, ніж просто використання сумки слів. Можливо, це просто не те, у що вкладені слова. Спасибі!
DW

Ця проблема також пов'язана з вашою проблемою, ймовірно, трохи більше, ніж раніше: Представлення навчання для дуже коротких текстів за допомогою зваженого вбудовування слів .
turdus-merula


1
Чому б не використовувати RNN? Документи змінної довжини не є проблемою для RNN. wildml.com/2015/09/…
калу

Відповіді:


23

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

Виходячи з результатів в одній недавній роботі, здається, що використання min та max працює досить добре. Це не оптимально, але це просто і приблизно так само добре або краще, як інші прості методи. Зокрема, якщо векторами для слів у документі є v 1 , v 2 , , v nR d , то ви обчислюєте min ( v 1 , , v n ) та max ( v 1 , , v n )нv1,v2,,vнRгхв(v1,,vн)макс(v1,,vн). Тут ми беремо мінімум координат, тобто мінімум є вектором таким, що u i = min ( v 1 i , ... , v n i ) і аналогічно для max. Характерний вектор - це конкатенація цих двох векторів, тому ми отримуємо особливість вектора в R 2 d . Я не знаю, чи це краще чи гірше, ніж представлення сумки слів, але для коротких документів я підозрюю, що він може працювати краще, ніж пакет із слів, і це дозволяє використовувати заздалегідь навчені слова.ууi=хв(vi1,,viн)R2г

TL; DR: Дивно, але конкатенація min і max працює досить добре.

Довідка:

Репрезентативне навчання для дуже коротких текстів із застосуванням зваженого вбудованого слова. Седрік Де Бум, Стівен Ван Кенні, Томас Деместер, Барт Дхоедт. Листи розпізнавання шаблонів; arxiv: 1607.00570. реферат , pdf . Див. Особливо таблиці 1 і 2.

Подяки: Дякуємо @ user115202 за те, що я звернув увагу на цей документ.


4
для короткого тексту avg / min / max може працювати добре, але що робити, якщо довгий текст, наприклад, статті новин?
авокадо

1
Для тих, хто читає цей документ і настільки ж розгублений, як і я: документ не зосереджується на підході, згаданому @DW, вони лише коротко згадуються у розділі "5.1. Базові лінії" як базовий підхід. Основна частина статті зосереджена на власній техніці, яка передбачає підготовку класифікатора за допомогою вбудовування, що набагато складніше, ніж підхід, окреслений тут!
Мігвелл

16

Ви можете використовувати doc2vec, подібний до word2vec, і використовувати заздалегідь підготовлену модель з великого корпусу. Потім використовуйте щось на зразок .infer_vector()gensim, щоб побудувати вектор документа. Навчання doc2vec не потрібно надходити з навчального набору.

Інший метод полягає у використанні RNN, CNN або мережі прямої передачі для класифікації. Це ефективно поєднує вектори слова в вектор документа.

Ви також можете комбінувати рідкісні функції (слова) з щільними (векторними словами) функції, щоб доповнювати один одного. Таким чином, ваша матриця ознак буде об'єднанням матриці розрідженого пакета слів із середнім значенням векторів слів. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

Ще одним цікавим методом є використання аналогічного алгоритму до word2vec, але замість прогнозування цільового слова можна передбачити ціль мітки. Це безпосередньо налаштовує слово вектори до завдання класифікації. http://arxiv.org/pdf/1607.01759v2.pdf

Щоб отримати додаткові спеціальні методи, ви можете спробувати зважити слова по-різному, залежно від синтаксису. Наприклад, ви можете зважувати дієслова сильніше, ніж визначальні.


6

Якщо ви працюєте з текстом англійською мовою і хочете розпочати попередньо навчені слова, тоді перегляньте це: https://code.google.com/archive/p/word2vec/

Це оригінальна версія C слова word2vec. Поряд з цим випуском вони також випустили модель, що навчається на 100 мільярдів слів, взятих із статей Google News (див. Підрозділ під назвою: "Попередньо підготовлені вектори та фрази").

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

Оскільки у вас є невеликий корпус, я пропоную вам ініціалізувати матрицю вбудовування слів за допомогою попередньо підготовлених вкладок, згаданих вище. Потім тренуйтесь до абзацу в коді doc2vec. Якщо вам подобається python, ви можете перевірити його версію gensim, яку дуже легко змінити.

Також перевірте цей документ, де детально описано внутрішню роботу word2vec / doc2vec: http://arxiv.org/abs/1411.2738 . Це зробить розуміння коду gensim дуже простим.


1
Дякуємо за пропозиції. Я не прошу вбудовувати слово; Я вже знаю, як домогтися попередньо навченого вбудовування слова (у своєму запитанні я згадав word2vec). Моє запитання - як побудувати функції векторів із заздалегідь навченого вбудовування слова. Я вдячний посиланням на doc2vec, але мій корпус досить малий, тому я підозрюю / боюся, що спроба навчити коди doc2vec буде надмірно ефективною та неефективною (навіть якщо я ініціалізую матрицю із заздалегідь підготовленими вкладками).
DW
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.