Рубрики
Без рубрики

Создайте индекс вложений из источника данных

В этой статье является частью серии учебников на TXTAI, семантической поисковой платформе AI. В… Tagged с помощью машинного обучения, NLP, Python, Show Dev.

Эта статья является частью серии учебников на TXTAI платформа семантической поисковой платформы AI.

В части 1 мы дали общий обзор TXTAI, технологии поддержки и примеры того, как использовать его для поиска сходства. Часть 2 покрыла индекс вложения с большим набором данных.

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

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

Установить TXTAI и все зависимости. Поскольку эта статья создает векторы Word, нам нужно установить пакет с подобия.

pip install txtai[similarity]

Этот пример собирается отработать подмножество Шнур-19 набор данных. Covid-19 Открытый исследовательский набор данных (CAD-19) – это бесплатный ресурс научных статей, агрегированных коалицией ведущих исследовательских групп, охватывающих COVID-19 и семейство вирусов коронавируса.

Следующая загрузка – это база данных SQLite, сгенерированная из Kaggle ноутбук Отказ Дополнительная информация об этом формате данных, можно найти в Шнур-19 Анализ ноутбук.

wget https://github.com/neuml/txtai/releases/download/v1.1.0/tests.gz
gunzip tests.gz
mv tests articles.sqlite

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

Для этой статьи мы построим собственные пользовательские вложения для демонстрации демонстрации. Доступны ряд предварительно обученных моделей встраивания слова:

import os
import sqlite3
import tempfile

from txtai.pipeline import Tokenizer
from txtai.vectors import WordVectors

print("Streaming tokens to temporary file")

# Stream tokens to temp working file
with tempfile.NamedTemporaryFile(mode="w", suffix=".txt", delete=False) as output:
  # Save file path
  tokens = output.name

  db = sqlite3.connect("articles.sqlite")
  cur = db.cursor()
  cur.execute("SELECT Text from sections")

  for row in cur:
    output.write(" ".join(Tokenizer.tokenize(row[0])) + "\n")

  # Free database resources
  db.close()

# Build word vectors model - 300 dimensions, 3 min occurrences
WordVectors.build(tokens, 300, 3, "cord19-300d")

# Remove temporary tokens file
os.remove(tokens)
# Show files
ls -l
Streaming tokens to temporary file
Building 300 dimension model
Converting vectors to magnitude format
total 78948
-rw-r--r-- 1 root root  8065024 Aug 25 01:44 articles.sqlite
-rw-r--r-- 1 root root 24145920 Jan  9 20:45 cord19-300d.magnitude
-rw-r--r-- 1 root root 48625387 Jan  9 20:45 cord19-300d.txt
drwxr-xr-x 1 root root     4096 Jan  6 18:10 sample_data

Следующие шаги создают индекс вложений, используя слово «Слово» модель только что создана. Эта модель создает индекс BM25 + FastText. BM25 используется для создания средневзвешенного среднего слова вложений в разрезе. Дополнительная информация об этом методе можно найти в этом Средняя статья Отказ

import sqlite3

import regex as re

from txtai.embeddings import Embeddings
from txtai.pipeline import Tokenizer

def stream():
  # Connection to database file
  db = sqlite3.connect("articles.sqlite")
  cur = db.cursor()

  # Select tagged sentences without a NLP label. NLP labels are set for non-informative sentences.
  cur.execute("SELECT Id, Name, Text FROM sections WHERE (labels is null or labels NOT IN ('FRAGMENT', 'QUESTION')) AND tags is not null")

  count = 0
  for row in cur:
    # Unpack row
    uid, name, text = row

    # Only process certain document sections
    if not name or not re.search(r"background|(?
Iterated over 21499 total rows
Iterated over 21499 total rows

Следующее запускает запрос против индекса вложений для терминов «Факторы риска». Он находит 5 лучших совпадений и возвращает соответствующие документы, связанные с каждым матчм.

import pandas as pd

from IPython.display import display, HTML

pd.set_option("display.max_colwidth", None)

db = sqlite3.connect("articles.sqlite")
cur = db.cursor()

results = []
for uid, score in embeddings.search("risk factors", 5):
  cur.execute("SELECT article, text FROM sections WHERE id = ?", [uid])
  uid, text = cur.fetchone()

  cur.execute("SELECT Title, Published, Reference from articles where id = ?", [uid])
  results.append(cur.fetchone() + (text,))

# Free database resources
db.close()

df = pd.DataFrame(results, columns=["Title", "Published", "Reference", "Match"])

display(HTML(df.to_html(index=False)))
Действительно, факторы риска являются секс, ожирение, генетические факторы и механические факторы (3). Управление остеоартритом во время пандемии COVID-19 2020-05-21 00:00:00. https://doi.org/10.1002/cpt.1910
Бедное поведение в семье поведения руководителями также были связаны с этими результатами [1,40 (1,21 – 1,62), 1,69 (1,48 – 1,92), 1,54 (1.44 – 1.64)]. Работы и личные факторы, связанные с психическим благополучием во время ответа COVID-19: обзор здравоохранения и других работников 2020-06-11 00:00:00 http://medrxiv.org/cgi/content/short/2020.06.09.20126722v1?rss=1
Помимо мужского пола, курение является фактором риска для восприимчивости COVID-19 и плохих клинических результатов. Нет доказательств того, что андрогенное регулирование легочных TMPRS2 объясняет результаты секса-дискореанта COVID-19 2020-04-21 00:00:00. https://doi.org/10.1101/2020.04.21.051201
Не было никакой разницы на 28-дневной смертности между пользователями гепарина и неустрелов. Текущее состояние потенциальных терапевтических кандидатов для кризиса COVID-19 2020-04-22 00:00:00 https://doi.org/10.1016/j.bbi.2020.04.046
• Три основных фактора риска COVID-19 были секс (мужчина), возраст (≥60) и тяжелая пневмония. COVID-19: Что было изучено и узнать о новом заболевании коронавируса 2020-03-15 00:00:00. https://doi.org/10.7150/ijbs.45134

Пример выше использует индекс вложений, чтобы найти лучшие 5 лучших совпадений. В дополнение к этому, экземпляр экстрактора (это будет объяснено дальше частично 5), используется для получения дополнительных вопросов по результатам поиска, создавая более богатый ответ запроса.

from txtai.pipeline import Extractor

# Create extractor instance using qa model designed for the CORD-19 dataset
extractor = Extractor(embeddings, "NeuML/bert-small-cord19qa")

db = sqlite3.connect("articles.sqlite")
cur = db.cursor()

results = []
for uid, score in embeddings.search("risk factors", 5):
  cur.execute("SELECT article, text FROM sections WHERE id = ?", [uid])
  uid, text = cur.fetchone()

  # Get list of document text sections to use for the context
  cur.execute("SELECT Name, Text FROM sections WHERE (labels is null or labels NOT IN ('FRAGMENT', 'QUESTION')) AND article = ? ORDER BY Id", [uid])
  texts = []
  for name, txt in cur.fetchall():
    if not name or not re.search(r"background|(?
Никто Управление остеоартритом во время пандемии COVID-19 2020-05-21 00:00:00 https://doi.org/10.1002/cpt.1910 Действительно, факторы риска являются секс, ожирение, генетические факторы и механические факторы (3). Секс, ожирение, генетические факторы и механические факторы
Бедное поведение в семье поведения руководителями также были связаны с этими результатами [1,40 (1,21 – 1,62), 1,69 (1,48 – 1,92), 1,54 (1.44 – 1.64)]. Работы и личные факторы, связанные с психическим благополучием во время ответа COVID-19: обзор здравоохранения и других работников Никто 2020-06-11 00:00:00 http://medrxiv.org/cgi/content/short/2020.06.09.20126722v1?rss=1 Плохое поведение в семье
Помимо мужского пола, курение является фактором риска для восприимчивости COVID-19 и плохих клинических результатов. Нет доказательств того, что андрогенное регулирование легочных TMPRS2 объясняет результаты секса-дискореанта COVID-19 Никто 2020-04-21 00:00:00. https://doi.org/10.1101/2020.04.21.051201 Более высокая заболеваемость и смертность
Не было никакой разницы на 28-дневной смертности между пользователями гепарина и неустрелов. Текущее состояние потенциальных терапевтических кандидатов для кризиса COVID-19 Никто 2020-04-22 00:00:00 https://doi.org/10.1016/j.bbi.2020.04.046 Электрические сильные воспалительные ответы являются благоприятными или вредными
• Три основных фактора риска COVID-19 были секс (мужчина), возраст (≥60) и тяжелая пневмония. COVID-19: Что было изучено и узнать о новом заболевании коронавируса Никто 2020-03-15 00:00:00. https://doi.org/10.7150/ijbs.45134 Секс (мужчина), возраст (≥60) и тяжелая пневмония

В приведенном выше примере индекс вложений используется для поиска Top N результатов для данного запроса. Кроме того, экстрактор-ответ на вопрос используется для получения дополнительных столбцов на основе списка вопросов. В этом случае столбцы «Факторы риска» и «Расположение» были вытащены из текста документа.

Оригинал: “https://dev.to/neuml/build-an-embeddings-index-from-a-data-source-52pf”