Измерванията за точност и ефективност за класифициране на някои текстови корпуси показват, че наивният класификатор на Бейс е силен съперник...

Това е третата и последна статия от тази поредица за използването на вектори на думи с вектори на документи за NLP задачи. Фокусът тук е класификацията на текста. Ние обобщаваме резултатите и препоръките от тях, когато векторите на думи се комбинират с вектори на документи. Кодът може да бъде изтеглен от github. Нека веднага да започнем с кратко резюме на последните две статии.

  1. Сходство: Word-вектор е представяне на дума като числен вектор с избрана дължина p. Те се извличат чрез прилагане на инструменти като Word2vec, Glove и FastText срещу текстов корпус. Думи с подобно значение обикновено дават числови думи-вектори с косинусово сходство, по-близо до 1, отколкото до 0.
  2. Намаляване на реда: Комбинирането на вектори на думи с вектори на документи, базирани на пакет от думи, дава голямо (обикновено няколко порядъка, равно на m/p, където m е броят на уникалните думи в текстовия корпус и p е дължината на думите-вектори) намаление в модела Z за текстовия корпус. Създадохме scikit тръбопровод (vectorize =› embed words =› classify), за да извлечем Z от X от по-висок ред с помощта на матрицата дума-вектор W . Всеки ред от W е p-мерно цифрово представяне на дума в текстовия корпус.

С това сме готови да оценим въздействието на векторите на думи за класифициране на текст и да квалифицираме резултатите с опции, отворени за нас в етапите на подготовка. Ние се придържаме към няколко основни опции за всяка от трите стъпки.

  1. Токенизация. Ще използваме CountVectorizer и TfIdfVectozer на scikit.
  2. Вектори на думи. Ще оценим Word2Vec/SGNS и FastText. И двете предварително обучени и персонализирани (чрез Gensim)
  3. Класификатори. Ще използваме scikit „Multinomial Naive Bayes“, „Linear Support Vectors“ и „Neural Nets“

1. Симулации

Работим с две хранилища на документи. „Големият набор от данни за преглед на филми“ от Станфорд за класификация на бинарни настроения и „20-новини“ на Reuter от страниците на scikit за мултиклас. За да бъдем прости, ние се придържаме към един комплект за обучение и един набор от тестове. В случай на 20-новини правим стратифицирано разделение с 80% за обучение и 20% за тест. Наборът от данни за преглед на филми в imdb идва с дефинирани комплекти за обучение и тестове. Редове 9 и 10 в кодовия фрагмент по-долу използват клас Tokens (проверете репото на кода github), който има методи за изтегляне на токени от индекса.

Моделът, който трябва да се изпълнява, е екземпляр на тръбопровода — специфична комбинация от векторизатор, трансформатор и класификатор. Редове от 13 до 15 дефинират модела и изпълняват прогнозите. Симулациите се изпълняват чрез шел скрипт по-долу, който преминава през различните опции за стъпките на конвейера.

Класикът mlp всъщност се състои от 9 варианта с 1, 2 или 3 скрити слоя, всеки с 50, 100 или 200 неврона. Резултатите, докладвани тук, са за използване на 2 скрити слоя, всеки със 100 неврона. Другото изпълнение на класификатора mlp основно служи за проверка дали качеството на класификацията не е много чувствително на това ниво на скрити слоеве и неврони.

Някои комбинации обаче не са разрешени и се пропускат при изпълнението на Python. Тези, които са:

  1. Класификаторът на Naive Bayes не позволява отрицателни стойности във векторите на документа. Но когато използваме вектори документ+дума, Z ще има някои негативи. Би трябвало да е възможно всички вектори да се транслират/мащабират еднакво, за да се избегнат негативи, но ние не се притесняваме, тъй като имаме достатъчно симулации, които така или иначе да изпълняваме. Така че основно наивният класификатор на Бейс се използва САМО с чисти вектори на документи тук.
  2. Предварително обучените вектори на думи са достъпни само за нормални думи, а не за такива с корен. Така че пропускаме пусканията с комбинацията от произволни токени и предварително обучени вектори.

2. Резултати

Единствените показатели, които разглеждаме, са F-резултатите за качество на класификацията и процесорното време за ефективност. В случай на многокласова класификация за набора от данни от 20 новини, F-резултатът е средна стойност за всичките 20 класа. Времето за изпълнение за комбинация класификатор+вектори се осреднява за всички изпълнения със същата комбинация.

2.1 Многокласова класификация на набор от данни от 20 новини

Резултатите за набора от данни от 20 новини са обобщени на фигура 1 по-долу.

Има много подробности, натъпкани във фигурата тук, така че нека да обобщим точка по точка.

1. Вектори на документи срещу вектори на документи + думи: Един поглед към 1A и 1B ще ни каже, че качеството на класификацията в 1A е по-добро, може би не много, но въпреки това е вярно и навсякъде. Тоест, ако качеството на класификацията е от първостепенно значение, тогава векторите на документи изглежда имат предимство в този случай.

2. Stopped vs Stemmed: Речникът със stemmed дава по-къси вектори, така че е по-добър за производителност за всички класификатори. Това е особено вярно за класификатора mlp, където броят на входните неврони е равен на размера на векторите на входящия документ. Когато думите се прехвърлят, броят на уникалните думи спадна с около 30% от 39k на 28k, което е голямо намаление в размера на чистите вектори на документи.

  • Вектори на документи. Фигура 1A показва, че когато чистите вектори на документи са основа за класификация, няма съществено въздействие върху получените F-резултати.
  • Вектори на документи + думи. Изглежда обаче, че има известна полза от използването на произволни токени в този случай. Въпреки че подобренията са малки, персонализираните вектори, получени чрез обучение върху токени със стъбло, показват по-добри F-резултати от векторите, обучени върху спрени токени. Това е показано на фигура 1B.

3. Преброяване на честотата срещу Tf-Idf:Tf-Idf векторизацията позволява диференциално претегляне на думите въз основа на това колко често се срещат в корпуса. За схеми за търсене, базирани на ключови думи, това помага да се подобри уместността на резултатите от търсенето.

  • Вектори на документи. Докато naive bayes не беше впечатлен от tf-idf, класификаторите linearsvc и mlp дават по-добри F-резултати с tf-idf векторизация. Това е показано на фигура 1A.
  • Вектори на документи+думи. Фигура 1B показва, че има добро подобрение на F-резултатите, когато се използва tf-idf векторизация. Както с предварително обучени вектори на думи, така и с персонализирани вектори на думи. Единственото изключение изглежда е, когато предварително обучени word2vec вектори се използват заедно с класификатор mlp. Но увеличаването на броя на скритите слоеве до 3 (от 2) и невроните до 200 (от 100) tf-idf векторизацията отново дава по-добър резултат.

4. Предварително обучени вектори срещу потребителски вектори:Това се отнася само за фигура 1B. Персонализираните вектори на думи изглежда имат предимство.

  • Word2Vec: Персонализираните вектори ясно дават по-добри F-резултати, особено с tf-idf векторизация
  • FastText: Предварително обучените вектори изглеждат малко по-добри

5. Резултати от синхронизирането: Фигура 1C показва средното процесорно време за изпълнението на fit & predict.

  • Разбираемо е много по-голямото време за изпълнение на mlp класификатора, когато се използват чисти вектори на документи. Има много (39 000, ако са спрени и 28 000, ако са спрени) входни неврони, с които да работите. Това е една от причините за появата на вграждане на думи, както обсъдихме в по-ранните публикации.
  • С по-малък, но плътен Z, класификаторът linearsvc отнема повече време, за да се сближи.
  • Класификаторът Naive Bayes е най-бързият от всички.

2.2 Двоична класификация на филмовите рецензии

Фигура 2 по-долу показва двоична класификация на резултатите, получени за набора от данни за преглед на филм.

Наблюденията тук не се различават качествено от горните, така че няма да им отделяме много време. Общото качество на класификацията тук е по-добро, като F-резултатите са на север от 0,8 (в сравнение с около 0,6 за корпуса от 20 новини). Но това е само естеството на този набор от данни.

  1. Вектори на документи срещу вектори на документи+думи:Поглеждайки към 2A и 2B, можем да кажем, че векторите на документи+думи изглежда имат предимство по отношение на качеството на класификация като цяло (с изключение на един случай, когато linearsvc се използва с tf-idf). Обратният беше случаят с набора от данни от 20 новини.
  2. Спрян срещу Stemmed: Спряните токени изглежда се представят по-добре в повечето случаи. Обратното беше вярно с набора от данни от 20 новини. Stemming води до 34% намаление на размера на речника от 44k на 29k. Приложихме един и същ стимер и за двата набора от данни, но може би беше твърде агресивен за естеството на текста в този корпус.
  3. Честота спрямо Tf-Idf:Tf-Idf векторите се представиха по-добре в повечето случаи, точно както в набора от данни от 20 новини.
  4. Предварително обучени вектори срещу персонализирани вектори:Персонализираните вектори с думи дават по-добри F-резултати от предварително обучените вектори във всички случаи. Един вид потвърждава нашата оценка от набора от данни от 20 новини, където не беше толкова ясно.
  5. Резултати във времето: Naive Bayes все още е най-добрият от групата.

3. И така, какви са големите неща за вкъщи?

За съжаление не можем да направим категорични заключения въз основа на нашето донякъде плитко тестване само на два набора от данни. Освен това, както отбелязахме по-горе, имаше известна разлика в качеството на класификацията за един и същ тръбопровод в наборите от данни. Но на високо ниво може би можем да заключим следното – приемете ги със зърно сол!

1. Когато се съмнявате - опростете. Явно това заслужаваше да стигне до заглавието на публикацията. Направете следното и няма да сгрешите твърде много и ще свършите работата си за миг. Използвайте:

  • Наивен класификатор на Бейс
  • Tf-idf вектори на документи
  • Стебнете, ако искате.

2. Разберете корпуса. Конкретният конвейер (схема за токенизация =› схема за векторизация =› алгоритъм за вграждане на думи =› класификатор), който работи добре за един корпус, може да не е най-добрият за друг корпус. Дори ако общият тръбопровод може да работи, детайлите (специфичен ствол, брой скрити слоеве, неврони и т.н.) ще трябва да бъдат настроени, за да получите същата производителност на различен корпус.

3. Вграждането на думи е страхотно. За намаляване на размерите и същевременно намаляване на времето за работа, със сигурност. Те работят доста добре, но има още работа за вършене. Ако трябва да използвате невронни мрежи за класификация на документи, трябва да опитате тези.

4. Използвайте персонализирани вектори. Използването на персонализирани вектори на думи, генерирани от наличния корпус, вероятно ще доведе до по-качествени резултати за класификация