За последние пару недель количество исследований и исследовательских работ по борьбе с этим злым вирусом короны covid-19 постоянно увеличивается. Организация этого огромного количества данных сейчас имеет первостепенное значение, это то, чего пытается достичь эта работа (код kaggle, код github, оптимизированный для работы в google colab, данные) как часть Kaggle соревнование , который пытается найти разумные решения для организации огромного количества увеличивающихся исследовательских знаний.

Наш подход

  1. доработать архитектуру BERT с помощью пакета трансформеры
  2. Затем встраивая исследовательские статьи и запрос и сравнивая их с помощью косинусного сходства, эффективно создавая поисковую систему, мы использовали бы пакет преобразователи предложений.

Это руководство является продолжением нашего последнего учебника (код, данные), где мы использовали уже обученную модель BERT и использовали ее для создания нашей поисковой системы, разница в том, что сегодня у нас все нормально - настройте нашу модель BERT на сами исследовательские работы, так что приступим !!

A. Почему BERT

BERT зарекомендовал себя как переход к архитектуре для языкового моделирования, до использования Transformers в литературе использовались рекуррентные модели, основанные на кодировке-декодировании seq2seq (подробнее читайте в нашем блоге series)

однако использование LSTM ограничивает способность архитектуры работать с длинными предложениями, поэтому в своей статье Внимание - это все, что вам нужно были представлены Transformers, которые построены на основе моделей внимания, в частности, self -внимание, которые представляют собой нейронные сети, созданные для понимания того, как обращать внимание на определенные слова во входных предложениях, преобразователи также встроены в структуру кодировщика-декодера (подробнее см. в замечательном блоге Джаммара http: //jalammar.github. io / иллюстрированный трансформер / )

Оказывается, нам не нужен весь Transformer для принятия тонко настраиваемой языковой модели для задач NLP, мы можем работать только с декодером, как в OpenAI, однако, поскольку он использует декодер, model обучает только прямую модель, не глядя ни в предыдущую, ни в будущую (следовательно, двунаправленную), поэтому был представлен BERT, где мы используем только Transformer Encoder.

Б. FineTuned BERT

Чтобы достичь глубокого понимания языка, BERT обучен на огромных наборах данных, однако мы можем дополнительно обучить BERT нашему собственному набору данных (который является исследовательскими статьями covid19), этот шаг называется FineTuning, поскольку вы точно настраиваете BERT для соответствия наши собственные данные

1- сначала мы передадим исследовательские работы (обработанный набор данных, найденный здесь) в виде огромного файла, где каждый абзац находится в отдельной строке.

2- тогда мы использовали бы пакет Трансформеры для точной настройки BERT.

так что давайте углубимся в детали

1- обработка данных, мы разработали некоторые методы обработки для создания файла csv, где каждая строка представляет собой абзац внутри документа, наша поисковая система попытается найти абзац, наиболее похожий на запрос, вы можете загрузить данные из здесь (подробнее о том, как подключить данные с google drive к google colab здесь )

import pandas as pd
from tqdm import tqdm
#read csv
df_sentences = pd.read_csv("/content/drive/My Drive/BertSentenceSimilarity/Data/covid_sentences.csv")
df_sentences = df_sentences.set_index("Unnamed: 0")
#load column to list
df_sentences = df_sentences["paper_id"].to_dict()
df_sentences_list = list(df_sentences.keys())
df_sentences_list = [str(d) for d in tqdm(df_sentences_list)]
#process data to file
file_content = "\n".join(df_sentences_list)
with open("input_text.txt","w") as f:
    f.write(file_content)

2- Теперь мы будем использовать пакет Трансформеры для FineTune BERT.

!pip install transformers
!git clone https://github.com/huggingface/transformers.git

Затем запустите тонкую настройку

!python "/content/transformers/examples/run_language_modeling.py" \
--output_dir="/content/drive/My Drive/BertSentenceSimilarity/BERTfine" \
--model_type=bert \
--model_name_or_path=google/bert_uncased_L-2_H-128_A-2 \
--do_train \
--block_size=512 \
--train_data_file="/content/input_text.txt" \
--mlm

C. Создание поисковой системы

Теперь, когда мы создали собственный FineTuned BERT, давайте применим встраивание к нашим данным (используя пакет предложения-преобразователи).

!pip install -U sentence-transformers

затем загрузите вашу модель FineTuned BERT

#https://github.com/UKPLab/sentence-transformers/blob/master/examples/application_semantic_search.py
from sentence_transformers import SentenceTransformer
from sentence_transformers import models, losses
import scipy.spatial
import pickle as pkl
word_embedding_model = models.BERT("/content/drive/My Drive/BertSentenceSimilarity/BERTfine")
# Apply mean pooling to get one fixed sized sentence vector
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension(),
pooling_mode_mean_tokens=True,pooling_mode_cls_token=False,pooling_mode_max_tokens=False)
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])

Затем примените встраивание и сохраните результат во временный файл pkl.

corpus = df_sentences_list
corpus_embeddings = model.encode(corpus,show_progress_bar=True)
with open("/content/drive/My Drive/BertSentenceSimilarity/Pickles/corpus_finetuned_embeddings.pkl" , "wb") as f:
    pkl.dump(corpus_embeddings,f)

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

# Query sentences:
queries = ['What has been published about medical care?',
'Knowledge of the frequency, manifestations, and course of extrapulmonary manifestations of COVID-19, including, but not limited to, possible cardiomyopathy and cardiac arrest',
'Use of AI in real-time health care delivery to evaluate interventions, risk factors, and outcomes in a way that could not be done manually',
'Resources to support skilled nursing facilities and long term care facilities.',
'Mobilization of surge medical staff to address shortages in overwhelmed communities .',
'Age-adjusted mortality data for Acute Respiratory Distress Syndrome (ARDS) with/without other organ failure – particularly for viral etiologies .']
query_embeddings = model.encode(queries,show_progress_bar=True)

затем применяем косинусное подобие

# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarity
closest_n = 5 
print("\nTop 5 most similar sentences in corpus:")
# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarity
closest_n = 5
print("\nTop 5 most similar sentences in corpus:")
for query, query_embedding in zip(queries, query_embeddings):
    distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0]

    results = zip(range(len(distances)), distances)
    results = sorted(results, key=lambda x: x[1])

    for idx, distance in results[0:closest_n]:
        print("Score:   ", "(Score: %.4f)" % (1-distance) , "\n" )
        print("Paragraph:   ", corpus[idx].strip(), "\n" )
        row_dict = df.loc[df.index== corpus[idx]].to_dict()
        print("paper_id:  " , row_dict["paper_id"][corpus[idx]] , "\n")
        print("Title:  " , row_dict["title"][corpus[idx]] , "\n")
        print("Abstract:  " , row_dict["abstract"][corpus[idx]] , "\n")
        print("Abstract_Summary:  " , row_dict["abstract_summary"][corpus[idx]] , "\n")

D. Результаты

(по сравнению с предварительно обученным BERT из нашего последнего учебника)

пример 1:

==========================Query==========================
=== What has been published about medical care? =========
=========================================================
==========================OLD (pretrained)=======================
Score:    (Score: 0.8296)
Paragraph:    how may state authorities require persons to undergo medical treatment
Title:    Chapter 10 Legal Aspects of Biosecurity-------------------
---------------Score:    (Score: 0.8220) 
Paragraph:    to identify how one health has been used recently in the medical literature
Title:    One Health and Zoonoses: The Evolution of One<br>Health and Incorporation of Zoonoses
==========================NEW (finetuned)=========================
---------------Score:    (Score: 0.8779)
Paragraph:    what is already known about this topic what are the new findings   paper_id:   f084dcc7e442ab282deb97670e1843e347cf1fd5   
Title:    Ebola Holding Units at government hospitals in<br>Sierra Leone: evidence for a flexible and effective<br>model for safe isolation, early treatment<br>initiation, hospital safety and health system functioning
---------------Score:    (Score: 0.8735)
Paragraph:    to identify how one health has been used recently in the medical literature
Title:    One Health and Zoonoses: The Evolution of One<br>Health and Incorporation of Zoonoses

пример 2:

==========================Query==============================
=== Knowledge of the frequency, manifestations, and course of extrapulmonary manifestations of COVID-19, including, but not limited to, possible cardiomyopathy and cardiac arrest =====
=========================================================
==========================OLD (pretrained)=======================
--------------Score:    (Score: 0.8139) 
Paragraph:    clinical signs in hcm are explained by leftsided chf complications of arterial thromboembolism ate lv outflow tract obstruction or arrhythmias capable of
Title:    Chapter 150 Cardiomyopathy

--------------Score:    (Score: 0.7966) 
Paragraph:    the term arrhythmogenic cardiomyopathy is a useful expression that refers to recurrent or persistent ventricular or atrial arrhythmias in the setting of a normal echocardiogram the most commonly observed rhythm disturbances are pvcs and ventricular tachycardia vt however atrial rhythm disturbances may be recognized including atrial fibrillation paroxysmal or sustained atrial tachycardia and atrial flutter
Title:    Chapter 150 Cardiomyopathy
==========================NEW (finetuned)=========================
--------------Score:    (Score: 0.8942)
Paragraph:    echocardiography and cardiac catheterization are common cardiac imaging modalities both modalities have drawbacks the limitations of echocardiography include operator dependence limited acoustic shadows a small field of view and poor evaluation of pulmonary veins the limitations of cardiac .......
Title:    Trends in the utilization of computed<br>tomography and cardiac catheterization among children<br>with congenital heart disease
--------------Score:    (Score: 0.8937)
Paragraph:    classic physical examination features of dcm include soft heart sounds from reduced contractility or pleural effusion gallop rhythm with or without a systolic murmur hypokinetic arterial pulses dull left apical impulse and clinical signs of profound chf exceptional cases are seen prior to onset of chf
Title:    Chapter 150 Cardiomyopathy

как мы видим, новый оптимизированный BERT получил опытные знания, специально оптимизированные и адаптированные для исследовательских работ COVID-19.

для получения полных результатов обратитесь к наш блокнот с кодом (kaggle) или код (github оптимизирован для работы в google colab)

E- Комментарии

Мы были действительно впечатлены,

  • простота использования пакета трансформеры, который действительно упростил настройку BERT, просто снабдив его входным текстовым файлом, каждая строка содержит предложение (в нашем случае абзац из исследовательских работ)
  • Библиотека преобразователей предложений, которая позволила чрезвычайно легко применить BERT для встраивания и извлечения сходства.
  • Мы были действительно впечатлены качеством результатов, так как FineTuned BERT оказался даже более адаптированным к нашему собственному набору данных по сравнению с обычным предварительно обученным BERT из нашего последнего руководства.
  • Мы считаем, что, используя сами абзацы, а не только аннотации статей, мы можем вернуть не только наиболее похожие статьи, но и наиболее похожие части внутри статей.
  • Мы надеемся, что этим мы помогаем структурировать мир постоянно увеличивающихся усилий по исследованию литературы в борьбе с этим вирусом короны covid-19.

E- Ссылки

  • Мы используем библиотеку, предоставленную huggingface, которая называется transformers, эта библиотека позволяет действительно легко настроить BERT.
  • Мы используем библиотеку, предоставленную UKPLab, которая называется преобразователи предложений, эта библиотека позволяет действительно легко использовать BERT и другие архитектуры, такие как ALBERT, XLNet, для встраивания предложений, они также предоставляют простой интерфейс для запросов и кластеризации данных.
  • Мы использовали код от максимерен для обработки данных, за что ему большое спасибо.
  • Мы использовали концепцию рисования BERT, обсуждаемую здесь Джей Аламмар, чтобы проиллюстрировать, как работает наша архитектура, мы также сослались на многочисленные иллюстрации и пояснения, которые он сделал, его блоги чрезвычайно информативны и легко понимаются.
  • Мы использовали предварительно обученные модели, обсуждаемые в Conneau et al., 2017, показанные в InferSent-Paper (контролируемое изучение универсальных представлений предложений на основе данных вывода на естественном языке), согласно которым обучение на основе данных вывода на естественном языке (NLI) может создавать универсальные вложения предложений. .
  • Внимание - все, что вам нужно, бумага-трансформер.
  • BERT, BERT код
  • Использованы векторные (графические) элементы из Freepic.

Код для этого руководства можно найти здесь или здесь из github (если вам нужно запустить его в google colab), код создан для беспрепятственной работы в google colab, используйте его бесплатно для использования графического процессора, мы также с помощью API kaggle для загрузки данных непосредственно в Google Colab, поэтому нет необходимости ни запускать код локально, ни загружать набор данных локально.

Мы также предоставляем весь обработанный набор данных и встроенные абзацы (219 МБ), для встраивания которых потребовалось некоторое время (так что вы можете просто использовать его без повторного встраивания), ссылку здесь, которые размещены на диске Google, мы создали код или код github для беспрепятственного подключения к google drive (подробнее о подключении к google drive здесь)

Примечание редакции: Towards Data Science - это издание Medium, в основном основанное на изучении науки о данных и машинного обучения. Мы не являемся специалистами в области здравоохранения или эпидемиологами, и мнения, изложенные в этой статье, не следует интерпретировать как профессиональные советы. Чтобы узнать больше о пандемии коронавируса, нажмите здесь.

Мы искренне уверены, что с помощью этого руководства вы узнали больше о BERT и о том, как настроить его на свой собственный набор данных, мы также надеемся, что этим мы поможем исследовательскому сообществу в его борьбе с коронавирусом (COVID-19).

Надеюсь, с вами все в порядке.