Наш пример использования заключался в создании ключевых фраз (биграмм или триграмм) из обзоров вместо создания тем, состоящих из одного слова. Темы из 1 слова не дают целостного представления о том, что говорится о продукте на рынке, но фраза помогает нам лучше понять, в положительном или отрицательном смысле говорится о словах. Я начал с тематического моделирования с использованием n-граммов, а также попытался сгенерировать высокочастотные слова с помощью tf-idf и Rake, что не привело к фразам, которые фактически захватили высокочастотные фразы.
Поэтому я решил создать с нуля вместо использования библиотеки и использовал вложения, как описано в этой статье.
Здесь я подробно рассмотрел весь наш подход. Надеюсь, это поможет тебе.
Архитектура
Предварительная обработка
Я выполнил лишь ограниченную предварительную обработку, т.е.
- удаление всех знаков препинания и символов.
- преобразование всех отзывов в строчные буквы.
Ключевые фразы-кандидаты
Затем я создал список всех возможных ключевых фраз, используя простое сопоставление на основе правил. Я использовал модель spacy en_core_web_lg, чтобы получить теги частей речи для каждого слова. Я извлек фразы, состоящие из нуля или более прилагательных, за которыми следует одно или несколько существительных или имен собственных.
Пример:
Вложения предложений
Теперь, когда у меня был список всех ключевых фраз-кандидатов, мне нужно было выбрать те обзоры, которые обозначают фразы, которые часто используются. Основная трудность здесь заключалась в синонимах. Такие слова, как: хороший, плохой, означают одно и то же, но не будут выбраны как одна и та же ключевая фраза, добавляющая избыточность к выбранным фразам. Я решил это, вычислив косинусное сходство и MMR в векторном пространстве. Я использовал Sent2Vec для преобразования предложений в векторы. Sent2Vec является расширением Word2vec и может удобно представлять английские предложения произвольной длины в виде Z -мерного вектора. Он отражает семантическую близость между предложениями при использовании стандартных мер сходства на соответствующих векторах.
Пример
Я предварительно обучил модель sent2vec на сочетании данных вики-биграмм (wiki_bigrams.bin) и биграмм из нашего корпуса обзоров. Это помогло модели не только изучить формальный стиль языка Википедии, но и неформальный стиль написания обзоров. Все обзоры, объединенные вместе, образуют 1 документ, который затем помещается в то же векторное пространство, что и данные вики-биграмм.
Пример
Затем я сравнил косинусное сходство каждой ключевой фразы кандидата с вектором документа одну за другой. Если косинусное сходство велико, я проверил его косинусное сходство с другими ключевыми фразами, которые уже были выбраны. Если косинусное сходство фразы с вектором документа велико и оно также не близко ни к одной из других выбранных фраз, я оставил его. В противном случае, если это было близко к любой другой фразе, я отбрасывал эту фразу. Этот метод называется MMR.
Если MMR для 2 фраз очень высок, я оставил только первую фразу и отбросил все фразы, которые были похожи на 1-ю фразу.
Пример
Теперь, если вы хотите связать отзывы с ключевыми фразами, вы можете использовать тот же подход, что и раньше. Просто замените вектор обзора вектором ключевой фразы.
- Замените отдельный документ с обзорами приложений данной ключевой фразой.
- Замените список возможных ключевых фраз на список отзывов.
- Примените ту же технику, что и раньше, без MMR - здесь нам нужна избыточность.
Ссылки