Простая реализация Doc2Vec

искусственный интеллект глубокое обучение

"Это седьмой день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

резюме

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

Но если мы хотим представить весь документ, нам нужно использовать вектор документа.

Когда мы цитируем документ, мы цитируем набор слов, которые имеют какое-то значение для читателя.

  • Документ может быть предложением или группой предложений.
  • Документ может состоять из обзоров продуктов, твитов или разговоров о фильмах, длина которых может варьироваться от нескольких до тысяч слов.
  • Документ можно использовать в проекте машинного обучения (глубокого обучения) как образец текстовых данных, представляющий алгоритм, который может обучаться.

Мы можем представить документ, используя различные методы:

  • Проще всего вычислить среднее значение всех векторов слов-компонентов документа и использовать средний вектор для представления документа.
  • Другой — Doc2Vec.

Doc2Vecили позвонилParagraph2vecпредставляет собой неконтролируемый алгоритм, который может получитьВекторное представление предложений/параграфов/документов, является расширением word2vec.

Векторы Doc2Vec можно найти, рассчитав расстояние между векторамиПредложения/Абзацы/ДокументыСходство между ними можно использовать для кластеризации текста; для помеченных данных обучение с учителем также можно использовать для классификации текста, например: классическая классификация задач анализа тональности отрицательный.

Основы Dov2Vec

Метод обучения векторов предложений очень похож на метод для векторов слов.

Основная идея Word2Vec заключается в том, что по каждому слову WiПредсказание контекста Wi, что можно понимать как контекстную пару слов для создания слова Wiвлияет, то таким же образом можно обучать и Doc2Vec. на приговор С.

i want to drink water

Если вы хотите предсказать слова в предложенииwant. Тогда не только признаки могут быть сгенерированы на основе других слов, но также могут быть сгенерированы признаки на основе других слов и предложений S для предсказания.

Приложения Doc2Vec

  • Сходство документов: сходство текстов можно сравнить с помощью векторов документов.
  • Рекомендации по документам: Рекомендуйте похожие документы на основе уже прочитанных пользователями документов.
  • Предсказание документа: создайте модель предсказания на основе контролируемого обучения вектора документа для предсказания тем документа.

упражняться

использоватьgensimБиблиотека для преобразования заголовков новостей в векторы Doc2Vec

Описание официальной документации gensim - вектор Doc2Vec

импортировать библиотеку зависимостей

import pandas as pd
from gensim import utils
from gensim.models.doc2vec import TaggedDocument
from gensim.models import Doc2Vec
from gensim.parsing.preprocessing import preprocess_string,remove_stopwords
import random
import warnings
warnings.filterwarnings("ignore")

загрузить документ

## 载入文档

sample_news_dir = "./data/sample_news_data.csv"
df = pd.read_csv(sample_news_dir)

Определить класс предварительной обработки

Определите класс обработки документов для удаления стоп-слов из документов.

  • preprocess_stringФункция применяет заданный фильтр к входным данным
  • remove_stopwordsФункция для удаления стоп-слов из заданного документа

Поскольку Doc2Vec требует, чтобы каждый образецTaggedDocumentэкземпляр, поэтому создайте список экземпляров для каждого документа

# 定义预处理类
class DocumentDataset(object):
    def __init__(self,data:pd.DataFrame,column):
        document = data[column].apply(self.preprocess)
        self.documents = [TaggedDocument(text,[index]) for index,text in document.iteritems()]

    def preprocess(self,document):
        return preprocess_string(remove_stopwords(document))

    def __iter__(self):
        for document in self.documents:
            yield document

    def tagged_documents(self,shuffle=None):
        if shuffle:
            random.shuffle(self.documents)
        return self.documents

вызывающий класс

documents_datasets = DocumentDataset(df,"news")

Создайте модель Doc2Vec

Подобно Word2Vec, класс Doc2Vec содержит: min_count, window, vector_size, sample, отрицательный и рабочий параметры. в

  • min_count: Игнорировать все слова с частотой меньше указанной частоты
  • windows: установить максимальное расстояние между текущим словом и прогнозируемым словом в данном предложении
  • vector_ size: установить размер каждого вектора
  • sample: определяет порог, который позволяет нам настроить регулярную субдискретизацию высокочастотных слов, допустимый диапазон (0, le -5)
  • negative: Если > 0, будет использоваться отрицательная выборка, указывающая, сколько пропускаемых слов должно быть нарисовано (обычно от 5 до 20). Если установлено значение 0, отрицательная выборка не используется.
  • workers: количество одновременных потоков для обучения модели (многоядерные машины могут обучаться быстрее).

Чтобы построить словарь из последовательности предложений, Doc2Vec предоставляетbuild_vocabметод, как вы можете видеть здесь, объект должен бытьTaggedDocumentэкземпляр

docVecModel = Doc2Vec(min_count=1,
                      window=5,
                      vector_size=100,
                      sample=1e-4,
                      negative=5,
                      workers=2)

docVecModel.build_vocab(documents_dataset.tagged_documents())

Обучите и спасите Doc2Vec

docVecModel.trian(documents_dataset.tagged_documents(shuffle=True),
                  total_examples=docVecModel.corpus_count,
                  epochs=30)
docVecModel.save("./docVecModel.d2v")

Посмотреть Doc2Vec

docVecModel[123]