Базирана на документи препоръчителна система с doc2vec и косинус подобие
Въведение
Тази статия обяснява как да направите система за препоръчване на статии с Python стъпка по стъпка. Системата за препоръчване на статии е една от най-популярните системи за обработка на естествен език и може да се приложи към други усъвършенствани системи като система за категоризиране и филтриране.
Ще обясня с косинусово сходство, мярка за сходство между документи, като най-популярния и прост алгоритъм за препоръка. Той просто изчислява близостта между статиите с „точков продукт“.
И ще използвам Gensim, библиотека с отворен код за моделиране на тематично и векторно пространство за манипулиране на текстови документи, за внедряване. Той предоставя лесни за използване API за трансформация и косинусово подобие.
Индекс
- Подгответе данни
- Предварителна обработка
- Моделиране: doc2vec & косинус подобие
- Изход и отчитане
- Целият код
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, за да визуализирам изхода. Надявам се тази статия да помогне за вашето развитие. Ако имате някакви въпроси или откриете правописни или грешки, моля, оставете коментари. Благодаря ти!