Машинное обучение (ML) — это область, в которой постоянно происходят инновации. Практикам машинного обучения приходится постоянно просматривать документы, чтобы ссылаться на новые новые архитектуры, которые могут быть использованы в их проектах. Вот ссылка, чтобы показать, как эффективно читать статьи.
С таким количеством статей, которые нужно прочитать, как мы узнаем, какие статьи похожи, и как мы можем избежать чтения похожих статей? Есть ли способ сгруппировать эти документы вместе на основе их резюме?
В этом проекте я использую API результатов поиска из ArXiv (репозиторий научных статей с открытым доступом) для создания оптимизированного веб-приложения для объединения документов с похожими резюме. Подробности можно найти в этом репозитории здесь.
Оглавление
1. Цель применения
2. Модель-трансформер
3. Персональный вынос
(1) Цель применения
Целью проекта было придумать новый способ взаимодействия пользователей с результатами поиска. Вместо того, чтобы возвращать «список», пользователи смогут собирать больше информации о своем поисковом запросе. (например, количество опубликованных статей и годовая динамика статей).
В приведенном ниже примере пользователь может указать количество результатов поиска, которые он хочет иметь, и количество отображаемых ссылок кластера.
(2) Сводный текст кластеризации
Подход, принятый к кластеризации, заключался в том, чтобы создать предложение, встраивающее резюме. Вложение предложения — это представление сводки в векторном пространстве. Затем мы оценили сводку на основе сходства и вернули таблицу с весами каждой пары сводок.
import pandas as pd import numpy as np from sentence_transformers import SentenceTransformer, util class SentenceEncoder: """Sentence Encoder class""" def __init__(self) -> None: """Instantiates Sentence Encoder""" self.model = SentenceTransformer("all-MiniLM-L6-v2") def encode_sentences(self, df: pd.DataFrame, col="summary") -> np.ndarray: """Encodes sentences with embeddings Args: df (pd.DataFrame): Dataframe from API col (str, optional): Identifies the summary column. Defaults to "summary". Returns: np.ndarray: Encoding """ sentences = df[col].to_list() embeddings = self.model.encode(sentences, batch_size=32) return embeddings def pairwise_cosine_similarity( self, embeddings: np.ndarray, titles: pd.Series ) -> pd.DataFrame: """Cosine Similarity matrix calculation Args: embeddings (np.ndarray): encoding titles (pd.Series): titles Returns: pd.DataFrame: pairwise summary of cosine data matrix """ cosine_scores = util.cos_sim(embeddings, embeddings) title_mapping = dict(zip(range(len(titles)), titles)) cosine_dataframe = pd.DataFrame(cosine_scores) cosine_dataframe = cosine_dataframe.reset_index(drop=True) cosine_dataframe = cosine_dataframe.where( ~np.tril(np.ones(cosine_dataframe.shape)).astype(np.bool) ) cosine_dataframe = cosine_dataframe.stack().reset_index() cosine_dataframe.columns = ["From", "To", "Weights"] cosine_dataframe = cosine_dataframe.replace(title_mapping) return cosine_dataframe
Затем возвращенный кадр данных был загружен в визуализацию сетевого графика Networkx, отображающую необходимое пользователю количество пар.
(3) Личные выводы
- В то время как были некоторые накладные расходы на задержку из-за конвейера данных (вызов сетевого API → XML → кадр данных → визуализация). Большая часть задержки была связана с вычислением встраивания предложений с помощью модели преобразования.
- Несмотря на то, что для кодирования предложения и расчета сходства была выбрана очищенная модель SBERT, для запуска модели на моем ноутбуке потребовалось некоторое время. Увеличение количества результатов поиска привело бы к еще большей задержке.
- Неожиданным моментом обучения UI/UX для меня было установить базовый используемый параметр поиска, который также позволял настраивать пользователя. Затем пользователь может сбалансировать требуемую область поиска с затраченным на поиск временем.
Наконец, все больше и больше внедрение науки о данных в отрасли ориентировано на специалиста по данным с полным стеком. Следуйте за мной, пока я продолжаю исследовать пересечения науки о данных и промышленности!