То, что начиналось с простого вопроса, оказалось интересным упражнением и моим первым практическим введением в машинное обучение (ML). Вопрос был в следующем:

Как вы сравниваете два предложения, чтобы определить, похожи ли они или имеют одинаковое значение?

Когда я впервые проводил исследования, я был ошеломлен тем, что возможное решение включало машинное обучение, и мне пришлось изучить все тонкости целой отрасли. Но, как оказалось, вам действительно нужно очень мало знать о машинном обучении, чтобы решить приведенную выше формулировку проблемы - имейте в виду, что это может быть не самый элегантный подход, но он дает понять.

В качестве учебника я рекомендую прочитать этот блог, поскольку он интересен и дал мне хорошую основу для некоторых основ и терминологии машинного обучения.

Этот пост будет введением на основе примеров. Итак, мы начнем с кода и продолжим свой путь оттуда.

Во-первых, нам нужны данные, и для этого примера мы заполним файл .csv несколькими операторами. В реальном приложении для создания надежной модели потребуются миллионы точек данных.

Вышеупомянутый рабочий процесс показывает простой рабочий процесс машинного обучения для создания модели. Вы всегда будете начинать с некоторых данных, а затем вносите в них некоторую корректировку с помощью процесса, называемого ETL (Extract-Transform-Load). Простыми примерами процессов ETL могут быть удаление нулевых значений, удаление странных символов или преобразование всех слов в один и тот же регистр. Вы также услышите, что ETL - это то место, где выполняется большая часть работы, поскольку важно иметь чистые данные в вашей модели, как говорится, мусор на входе, мусор на выходе. В этом случае я не буду выполнять ETL для данных, чтобы пример был как можно более простым.

Теперь немного кода! Вы можете изучить мое репо здесь, откуда взят весь код, показанный в этой статье. Сначала вам потребуется установить следующее:

pip3.7 install -U gensim
pip3.7 install tokenizer
pip3.7 install nltk
pip3.7 install pandas
pip3.7 install scikit-learn

Вам понадобится файл с именем «statement.csv». Вот образец файла:

question1
What is the step by step guide to invest in share market in india?
What is the story of Kohinoor (Koh-i-Noor) Diamond?
How can I increase the speed of my internet connection while using a VPN?
Why am I mentally very lonely? How can I solve it?
Which one dissolve in water quikly sugar, salt, methane and carbon di oxide?
Astrology: I am a Capricorn Sun Cap moon and cap rising...what does that say about me?
Should I buy tiago?
How can I be a good geologist?
.....

Эти утверждения взяты из kaggle, где вы можете найти массу бесплатных наборов данных для практики. Данные, которые мы будем использовать, были предоставлены Quora как часть примера того, как они решали повторяющиеся пары вопросов. Я загрузил данные, удалил все столбцы, кроме question1, чтобы мы могли использовать их здесь. В репо вы найдете statement_long.csv, который представляет собой весь набор данных, и statement_short.csv, который содержит ~ 2500 строк.

Как только вы запустите указанный выше файл, у вас будет новый файл с именем «compare_d2v.model», который мы теперь будем использовать для выполнения нашего сравнения.

Затем, запустив приведенный выше сценарий «compare.py», вы должны увидеть в консоли следующее:

1.0 
0.88972884
0.16031599

Эти числа представляют косинусное сходство между двумя наборами слов на основе предоставленной модели compare_d2v.model. Чем ближе число к 1,0, тем больше похожи два утверждения.

Теперь несколько слов об используемых здесь инструментах, так как они заслуживают всяческих похвал и заслуживают изучения.

Doc2vec действительно является центром всего. Doc2vec - это алгоритм, основанный на word2vec (модель для создания встраивания слов), и предоставляется нам здесь библиотекой python Gensim поддерживает. И если вам интересно, this - это опубликованная статья о том, как работает алгоритм, с менее техническим объяснением здесь.

Как видите, сам алгоритм довольно сложен, поэтому машинное обучение поначалу может показаться пугающим, но это не полная картина. Выберите любого поставщика облачных услуг, и вы найдете предварительно обученные модели и множество инструментов и библиотек, которые помогут вам начать работу с собственными наборами данных и идеями. Как я уже упоминал ранее, вы заметите, что большая часть ваших усилий будет фактически направлена ​​на ETL и рабочие процессы данных, а не на саму модель машинного обучения.