Същият номер, но с думи
Изображението стана матрица (урок 21) и оттам — признаци (урок 23). Текстът трябва да мине по същия път: преди алгоритъмът да реши дали съобщението е спам, дали отзивът е ядосан или за какво е статията, думите трябва да станат числа.
Днес правим най-простия и най-стария такъв превод. Той е достатъчно добър за спам филтър и достатъчно прост, за да го напишем на C# в следващия час.
Речник и честоти
Първата стъпка е да разбием текста на думи: махаме препинателните знаци, правим всички букви малки (иначе „Утре“ и „утре“ са две различни думи) и режем по интервалите. После броим.
„Утре имаме контролно, а утре е и мачът.“
утре → утре имаме контролно а утре е и мачът
утре: 2 имаме: 1 контролно: 1 а: 1 е: 1 и: 1 мачът: 1Речник
Списъкът от всички различни думи, които се срещат в текстовете, с които работим. Всяка дума получава позиция — номер в списъка.
Честота на думата
Колко пъти думата се среща в един текст. Таблицата „дума → честота“ е първото число, което имаме за текста.
Торба с думи
Сега подреждаме честотите по позициите в речника. Получава се ред от числа с дължина колкото речника — вектор, както при изображението.
Торба с думи (bag of words)
Представяне на текст като вектор, в който на всяка дума от речника съответства едно число — колко пъти се среща в текста. Казва се „торба“, защото думите са изсипани вътре без ред.
Речникът трябва да е общ за всички текстове, иначе векторите не могат да се сравняват. Ако дума от речника липсва в текста, на нейното място стои 0. За истински текстове речникът има десетки хиляди думи и почти всички стойности са нули.
Стоп-думи
Ако сравним два текста по честоти, най-честите думи ще са „и“, „в“, „на“, „е“, „се“, „да“ — във всеки български текст. Те не казват нищо за темата, но са навсякъде и заглушават думите, които имат значение.
Стоп-думи
Много чести думи без собствено значение — съюзи, предлози, частици, спомагателни глаголи, — които се махат преди броенето.
Сравнение на два текста
Общи думи
Най-простата мярка: колко думи от речника имат честота над 0 и в двата текста. Много общи думи — вероятно обща тема. Работи, но дългият текст има повече думи и „печели“ всяко сравнение.
Посока на вектора
По-добрата мярка гледа не броя, а пропорциите. Два вектора са „в една посока“, когато едни и същи думи са им силни и едни и същи — слаби, независимо от общия брой думи. Мярката се нарича косинусова близост (cosine similarity): 1 означава еднаква посока (една и съща тема), 0 — нито една обща дума. За какво е „косинус“ ще видите в 12. клас; засега е достатъчно да мислите за ъгъла между два вектора.
А = (1, 1, 1, 0, 1) Б = (1, 0, 1, 1, 1)
общи думи: утре, парти, клас → 3 от 5
посока: близка, но не еднаква — различават се във „финал“ и „контролно“Какво се губи
Торбата е торба: редът на думите изчезва. Тези две изречения имат напълно еднакви вектори:
„Кучето ухапа човека.“ → кучето: 1, ухапа: 1, човека: 1
„Човека ухапа кучето.“ → кучето: 1, ухапа: 1, човека: 1- Редът се губи — кой кого, преди или след, причина или следствие.
- Формите на думите се броят отделно: „финал“, „финала“ и „финалът“ са три различни позиции в речника.
- Синонимите са чужди един на друг: „кола“ и „автомобил“ нямат нищо общо в торбата.
- Отрицанието се превръща в една дума повече, без да обръща смисъла.
Въпреки всичко торбата с думи е достатъчна за учудващо много задачи — спам, тема, груб тон — защото за тях е важно кои думи има, не как са подредени. За останалото има по-добри представяния, в които близките по смисъл думи получават близки числа; те са тема за 12. клас.
Какво трябва да запомниш
- Текстът се разбива на думи: малки букви, без препинателни знаци, по интервали.
- Речникът е общият списък от различни думи; честотата е колко пъти думата се среща в текста.
- Торбата с думи е вектор с по едно число за всяка дума от речника — 0, ако я няма.
- Стоп-думите (и, в, на, е…) се махат, защото са навсякъде и не носят тема — освен ако не търсим точно тях.
- Два текста се сравняват по общи думи или по посока на векторите (косинусова близост).
- Торбата губи реда, формите на думите, синонимите и отрицанието — но стига за спам и тема.