Модель «торба слів»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Модель «торба слів» (англ. bag-of-words) є спрощенням подання, що використовується в обробці природних мов і інформаційному пошуку. У цій моделі текст (наприклад, речення або документ) представляється у вигляді торби (мультимножини) його слів, не беручи до уваги граматику і навіть порядок слів, але зберігаючи множинність. Модель «мішок слів» також використовується для задач комп'ютерного зору[en][1].

Модель «торба слів» зазвичай використовується в методах класифікації документів, де (частота) виникнення кожного слова використовується як ознака для навчання класифікатору[2].

Раннє посилання на термін «торба слів» у мовному контексті можна знайти в статті 1954 року Зелліха Гарріса про структуру розподілу[3].

Приклад реалізації[ред. | ред. код]

Наступні моделі створюють текстовий документ за допомогою торби слів. Ось два простих текстових документа:

(1) Джон любить дивитися фільми. Марія теж любить фільми.

(2) Джон також любить дивитися футбольні матчі.

На основі цих двох текстових документів, для кожного документа будується список таким чином:

«Джон», «любить», «дивитися», «фільми», «Марія», «любить», «фільми», «теж»

«Джон», «також», «любить», «дивитися», «футбольні», «матчі»

Кожен з цих списків стає JSON-об'єктом і присвоюється відповідній змінній JavaScript:

 BoW1  =  { "Джон" : 1 , "любить" : 2 , "дивитися" : 1 , "фільми" : 2 , "Марія" : 1 , "теж" : 1 }; 
 BoW2  =  { "Джон" : 1 , "також" : 1 , "любить" : 1 , "дивитися" : 1 , "матчі" : 1 };

Кожен ключ — це слово, і кожне значення — це число появ цього слова в текстовому документі.

Порядок елементів вільний, так, наприклад {"теж":1,"Марія":1,"фільми":2,"Джон":1,"дивитися":1,"любить":2}, також є BoW1. Це те, що ми очікується від представлення у вигляді JSON об'єкта.

Примітка: якщо інший документ подібний об'єднанню цих двох документів,

 (3) Джон любить дивитися фільми. Марія теж любить фільми. Джон також любить дивитися футбольні матчі.

то його представлення Javascript буде:

BoW3  =  { "Джон" : 2 , "любить" : 3 , "дивитися" : 2 , "фільми" : 2 , "Марія" : 1 , "теж" : 1 , "також" : 1 , "футбол" : 1 , "матчі" : 1 };

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

Застосування[ред. | ред. код]

На практиці модель «торба слів» використовується в основному як інструмент формування ознак. Перетворивши текст на «торбу слів», можна утворювати різні міри, що характеризують текст. Найбільш поширеним типом характеристик, або ознак, розрахованим за моделлю «торба слів», є частота термів, а саме, кількість разів, скільки терм з'являється в тексті. У наведеному вище прикладі ми можемо побудувати наступні два списки для запису частот термів всіх окремих слів (BoW1 і BoW2 впорядковані як у BoW3):

(1) [1, 2, 1, 2, 1, 1, 0, 0, 0]
(2) [1, 1, 1, 0, 0, 0, 1, 1, 1]

Кожен запис у списках відповідає підрахунку відповідного запису у списку (це також представлення гістограми). Наприклад, у першому списку (який представляє документ 1), перші два записи це «1, 2»:

  • Перший запис відповідає слову «Джон», що є першим словом у списку, і його значення «1», оскільки «Джон» з'являється у першому документі 1 раз.
  • Другий запис відповідає слову «любить», що є другим словом у списку, і його значення «2», тому що «любить» з'являється у першому документі 2 рази

Цей список (або вектор) не зберігає порядок слів у початкових реченнях. Це головна особливість моделі «торби слів». Таке представлення має кілька успішних застосунків, таких як фільтрування електронної пошти[1].

Проте, частоти термів не обов'язково є найкращими характеристиками тексту. Поширені слова, такі як «і», «а», «то» майже завжди є термами з найвищою частотою в тексті. Таким чином, наявність високої частоти не обов'язково означає, що відповідне слово є більш важливим. Для вирішення цієї проблеми одним з найпопулярніших способів «нормалізації» частоти термів є вага терму до зворотньої частоти документа, або TF-IDF. Крім того, для спеціальних задач класифікації були розроблені альтернативи методи навчання з учителем, які враховують тип документа[4]. Пізніше, стали використовувати бінарні (наявність/відсутність або 1/0) ваги замість частот для деяких задач (наприклад, така опція є у ПЗ машинного навчання Weka).

Модель N-грам[ред. | ред. код]

Модель «торба слів»  — це не впорядковане представлення документу — важлива лише кількість слів. Наприклад, у наведеному вище прикладі «Джон любить дивитися фільми. Мері теж любить фільми», представлення торби слів не вкаже не те, що дієслово «любить» завжди йде за ім'ям людини в цьому тексті. Як альтернатива, n-грамована модель може зберігати цю просторову інформацію. Застосовуючи той самий приклад, модель bigram буде аналізувати текст на наступні одиниці і зберігатиме термін частоти кожної одиниці, як раніше.

[ 
    "Джон любить", 
    "любить дивитися", 
    "дивитися фільми", 
    "Марія любить", 
    "любить фільми", 
    "фільми теж", 
]

Концептуально ми можемо розглядати модель торби слів як окремий випадок моделі n-грам з n = 1. Для n > 1 модель називається w-shingling[en] (де w еквівалентна n, що позначає кількість згрупованих слів). Див. Мовну модель[en] для більш детального обговорення.

Реалізація на Python[ред. | ред. код]

sentence_1 = ["Джон любить дивитися фільми. Марія любить фільми теж."]
    tokenizer = Tokenizer()
    tokenizer.fit_on_texts(sentence_1)
    sequences_1 = tokenizer.texts_to_sequences (sentence_1)
    word_index_1 = tokenizer.word_index
    BoW_1 = {}
    for key in word_index_1:
        BoW_1 [key] = sequences_1[0].count(word_index_1[key])
    print(BoW_1)
    print(f"Торба слів речення 1 :\n{BoW_1}")
    print(f'Ми знайшли {len (word_index_1)} унікальних токенів.')

Геш-трюк[ред. | ред. код]

Загальною альтернативою використання словників є геш-трюк[en], де слова відображаються безпосередньо на індекси з геш-функцією[5]. Таким чином, для зберігання словника не потрібна пам'ять. Геш-колізії зазвичай вирішуються через звільнення пам'яті для збільшення кількості геш-корзин. На практиці, гешування спрощує реалізацію моделей торби слів і покращує масштабованість.

Приклад використання: фільтрація спаму[ред. | ред. код]

У баєсівській фільтрації спаму повідомлення електронної пошти моделюється як невпорядкований набір слів, вибраних з одного з двох розподілів ймовірностей: один представляє спам і один представляє реальні електронні листи. Уявіть, що є дві справжні торби, повні слів. Одна торба наповнена словами, знайденими в спам-повідомленнях, а інша — словами, знайденими в звичайних повідомленнях електронної пошти. Хоча будь-яке слово, ймовірно, буде зустрічатись в обох торбах, проте торба «спам» буде містити слова, пов'язані зі спамом, такі як «акції», «віагра» і «купувати» значно частіше, а інша торба міститиме більше слів, пов'язаних з друзями або робочим місцем користувача.

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

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. а б Sivic, Josef (April 2009). Efficient visual search of videos cast as text retrieval. IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 31, NO. 4. IEEE. с. 591–605. 
  2. McTear et al 2016, p. 167.
  3. Harris, Zellig (1954). Distributional Structure. Word (en) 10 (2/3): 146–62. «І цей запас комбінацій елементів стає чинником того, як пізніше вибираються, бо мова — це не просто мішок слів, а інструмент, який має особливі властивості, які були створені під час його використання» 
  4. Youngjoong Ko (2012). A study of term weighting schemes using class information for text classification. SIGIR'12. ACM. 
  5. Weinberger, K. Q.; Dasgupta A.; Langford J.; Smola A.; Attenberg, J. (2009). Feature hashing for large scale multitask learning,. Proceedings of the 26th Annual International Conference on Machine Learning: 1113–1120. Bibcode:2009arXiv0902.2206W. arXiv:0902.2206. 

Літератури[ред. | ред. код]

  • McTear, Michael (et al) (2016). The Conversational Interface. Springer International Publishing.