Въведение

Вграждането на думи е новооткрит начин за представяне на дума в нискоразмерно пространство. Те осигуряват векторно представяне на думи, които носят всякаква семантика или синтаксис.

В тази история се обсъжда използването на doc2vec вектори и логистична регресия с цел класифициране на документи. Тази история е извлечена от доклад за задача на НЛП, даден от Necva Bölücü.

Четене на входния файл

Даденият набор от данни от сюжети на филми е прочетен с помощта на вградения csv модул. След пропускане на първия ред, който описва колони, първите 2000 филмови жанра се записват като обучителен набор, а останалите филмови жанрове се записват, за да се използват като тестов набор при класифициране на сюжети. Всички входни редове се запазват, за да се създадат вектори по-късно.

Почистване на филмовите сюжети

Всички сюжети на филма се почистват, преди да се обучи модел за създаване на вектори на документи, като се използват следните методи:

  1. Графиките се токенизират с помощта на метода .word_tokenize() на модула nltk.
  2. Стоп думите се премахват от сюжета с помощта на леко персонализиран списък със стоп думи. (Вижте раздела за справки за подробности)
  3. Препинателните знаци и цифрите са премахнати от сюжетите.

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

Обучение на модел

Модел Doc2Vec се инстанцира с помощта на следните параметри:

  • Размер на вектора: 300
  • Епохи: 50
  • Размер на прозореца: 5
  • Минимална честота: 5
  • Алгоритъм за обучение: Разпределена торба с думи

Всяка от тези стойности се определя чрез проба и грешка, за да се получи по-висок резултат за точност.

След инстанцирането моделът се обучава (чрез използване на методите .build_vocab() и .train() на модела), като се използват маркирани документи, създадени от дадените сюжети на филма, и се записват като файл (чрез използване на метода .save() на модел) за бъдеща употреба.

Логистичен регресионен класификатор

Логистичен регресионен класификатор (на модула sklearn) се създава, като се използват следните параметри:

  • решаващ: lbfgs
  • мулти_клас: авто
  • max_iter: 1000
  • tol: 0,5

Тези параметри се променят от стандартните поради предупрежденията от класификатора, с изключение на параметъра tol. Всяка от тези стойности се определя чрез проба и грешка, за да се получи по-висок резултат за точност.

Чрез използване на векторите на графиката на филма, получени от предварително обучен модел и правилните категории на тези графики, класификаторът на логистичната регресия се обучава (чрез използване на метода .fit() на класификатора).

Изчисляване на точността

След операцията по обучение се предвиждат категориите на тестовите вектори (чрез използване на метода .predict() на класификатора) и точността на модела се изчислява съгласно формулата по-долу:

Резултати

С помощта на формулата, спомената в горния раздел, 7 от създадените модели са взети проби и са оценени. Както може да се види от горния график, техните стойности на точност варират. Това е така, защото Doc2Vec използва рандомизация, докато създава вектори на документи. За да се даде по-валиден резултат, средната стойност на получените стойности на точност е изчислена, показана на фигурата по-долу.

Освен тези проби, максималната стойност на точност от 54,46% се получава чрез опит за създаване на модел многократно.

Програмен код

Изходният код за цялото задание, включително тази история и другата, може да се намери в Github:



Препратки

Набор от данни:



Документация на Doc2Vec:



Документация за логистична регресия:



Демонстрация на логистична регресия:



Списък със стоп думи на английски:

Урок за изчистване на текст: