Базирана на документи препоръчителна система с doc2vec и косинус подобие

Въведение

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

Ще обясня с косинусово сходство, мярка за сходство между документи, като най-популярния и прост алгоритъм за препоръка. Той просто изчислява близостта между статиите с „точков продукт“.

И ще използвам Gensim, библиотека с отворен код за моделиране на тематично и векторно пространство за манипулиране на текстови документи, за внедряване. Той предоставя лесни за използване API за трансформация и косинусово подобие.

Индекс

  1. Подгответе данни
  2. Предварителна обработка
  3. Моделиране: doc2vec & косинус подобие
  4. Изход и отчитане
  5. Целият код

1. Подгответе данните

Първо, ще използваме примерен набор от данни от Gensim. Gensim предоставя няколко модула за набор от данни, които вече са токенизирани, както е показано по-долу.

2. Предварителна обработка

Следващата стъпка е предварителната обработка. Тук предварителната обработка е „маркиране“, което създава картографиране на всяко изречение с уникален индекс. Маркираните документи ще се използват като входни данни за модела doc2vec.

3. Моделиране: doc2vec & косинус подобие

Моделирането е основна фаза в препоръчителната система. Тук също е разделен на две фази: създаване на doc2vec модел и изчисляване на косинусово подобие.

Какво е doc2vec

Doc2vec е алгоритъм за трансформиране на документни данни във векторен пространствен модел. Алгоритъмът се основава на word2vec, който представлява дума във векторен пространствен модел и е широко приет за изречения, абзаци и документи.

Doc2vec използва невронна мрежа, за да запази контекста и семантиката на думите, за разлика от традиционния модел на торбичка с думи, който елиминира контекстите и подреждането на думите, за да създаде прост набор от думи за представяне. „Според документ“, doc2vec има 30% подобрения на задачата за класификация на текст.

Doc2vec моделиране

Gensim предоставя много прост API за doc2vec. След като подготвите маркирани документи, можете да създадете doc2vec модел с една линия.

Всеки параметър е обяснен по-долу. *цитирано от документация на gensim.

  • документи: (iterable на списък с TaggedDocument, по избор)
    Входен корпус може да бъде просто списък от елементи, но за по-големи корпуси помислете за iterable, който предава документите директно от диск/мрежа. Ако не предоставите документи, моделът остава неинициализиран — използвайте, ако планирате да го инициализирате по някакъв друг начин.
  • vector_size
    vector_size (int, по избор) — Размерност на векторите на характеристиките.
  • прозорец
    Максималното разстояние между текущата и предвидената дума в изречение.
  • min_count
    Игнорира всички думи с обща честота по-ниска от тази.
  • работници
    Използвайте тези много работни нишки, за да обучите модела (=по-бързо обучение с многоядрени машини).

Реализация на косинус подобие

Следващото е да получите подобни изречения с косинусово подобие. Gensim предоставя метод most_similar() за получаване на подобни изречения чрез класиране.

4. Резултат и отчитане

Последната стъпка е извеждане и отчитане. Крайният резултат трябва да бъде лесно разбираем за всеки, който участва в работата ви. Тук създадох таблица за класиране, за да покажа кои изречения са най-сходни. Използвах библиотеката Pandas, за да направя таблицата по-визуализирана.

Както можете да видите, първата колона „ранг“ показва реда на класиране. Втората колона „common_texts“ е набор от тестови данни, предоставен от gensim. Третото е косинусното подобие. Тази таблица е интуитивно разбираема на пръв поглед.

Целият код

Тук показвам целия код по-долу.

Заключение

В тази статия обясних как да внедря препоръчителна система с python стъпка по стъпка. Първо беше подготовката на набор от данни от Gensim. Второто беше предварителната обработка чрез маркиране на оригинални документи. Трето беше създаването на word2vec модел и изчисляването на косинусово сходство с API на Gensim. Накрая направих таблица с библиотека Pandas, за да визуализирам изхода. Надявам се тази статия да помогне за вашето развитие. Ако имате някакви въпроси или откриете правописни или грешки, моля, оставете коментари. Благодаря ти!