Как стать автором
Обновить

Могут ли компьютеры изобретать? Создаем аналог ТРИЗ на нейронных сетях архитектуры Трансформер

Время на прочтение19 мин
Количество просмотров8.2K

Современные языковые модели достигли впечатляющих результатов в некоторых задачах, которые раньше были под силу только человеческому разуму. Так, например, некоторые модели могут без затруднений искать ответы на вопросы, сформулированные на естественном языке в огромных массивах текстовой информации, при этом они не "подсматривают" во внешние источники, а хранят все знания в своей памяти (например, некоторые модели архитектуры T5). Можно пойти дальше и задаться целью создать языковую модель для решения специфичной изобретательской задачи, которая может стоять перед техническим экспертом. В рамках данной публикации попробуем ответить на вопрос могут ли современные нейронные сети генерировать решения изобретательских задач по описанию текущего состояния технической системы и проблемы, которую необходимо устранить в рамках системы.

Концептуальная схема вопроса
Концептуальная схема вопроса

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

Введение

Начало XXI века принесло с собой одну новую особенность общественного устройства – переход к экономике, основанной на знаниях, отличительной чертой которой является интенсивное развитие секторов, связанных с нематериальной деятельностью. В мире возникает принципиальное новая система создания общественного богатства, в основе которого – исследования и инновации. В развитых регионах от 70 до 85% прироста валового внутреннего продукта приходится на продукцию, созданную с использованием новых знаний. Иными словами такую экономику называют экономикой знаний. По мнению некоторых исследователей, переход к экономике знаний будет сопровождаться вступлением человечества в эпоху четвертой промышленной революции. Эпоха четвертой промышленной революции будет ознаменована внедрением интеллектуального анализа больших данных, концепции интернета вещей, суперкомпьютерных вычислений. В конечном счете предполагается, что это приведет к тому, что автономные вычислительные устройства будут обмениваться данными друг с другом и взаимодействовать с окружающим миром, используя ту информацию, которую удалось получить в процессе интеллектуального анализа. В целом можно сказать, что дальнейший рост инновационных экономик будет сильно связан с принципиально новыми возможностями, которые принесет четвертая промышленная революция. Если будущее развитие человечества будет связано с интеллектуальным анализом данных и постоянным поиском инновации, то возникает вопрос: почему бы не доверить техническое совершенствование одних машин другим машинам?

Человечество в течении нескольких десятилетий пытается придумать методы изобретательского мышления, в надежде формализовать и/или ускорить изобретательский процесс. Было разработано несколько методик творчества, пожалуй, среди них можно выделить наиболее известные — метод мозгового штурма, латеральное мышление, метод фокальных объектов, ТРИЗ (теория решения изобретательских задач). Большинство данных методов по уровню научной проработки находятся рядом с популярной психологией, и не предлагают ничего нового кроме различных модификаций комбинаторного перебора возможных вариантов решения. Тем не менее среди этих методов наиболее выделяется ТРИЗ, как наиболее формализованный и наукообразный метод. Остановимся немного поподробнее на нем.

Автором ТРИЗ является Г.С. Альтшуллер, который начал работу над ней в 1946 году, а первая публикация появилась в 1956 году. За это время автор ТРИЗ проделал большую работу по анализу тысяч изобретений. Он обобщил работы тысяч изобретателей, и в результате на свет появился свод методов для решения задач и усовершенствования технических систем. Данная методология ставит перед собой цель формализовать и усовершенствовать изобретательский процесс, сделать его более предсказуемым и ускоренным. Определенных успехов этот метод действительно добился, в 70-х и 80-х годах он начал активно применяться в СССР, а в 90-х годах многие известные фирмы, такие как Samsung, Hewlett Packard, LG и многие другие, начали применять его в своей инновационной деятельности. После чего появился запрос на цифровизацию использования данной методологии, начали появляться группы разработчиков ПО, которые создали программные пакеты, использующие ТРИЗ. Наиболее коммерчески успешный из них назывался «True Machine». Однако начиная с конца 2000-х годов интерес со стороны крупных инновационных компаний к ТРИЗ и программных продуктам на ее основе постепенно начал угасать. В качестве критики ТРИЗ выступают доводы о слабой научности методологии и ограниченности подхода. Далее поговорим об актуальности задачи генерации решения технических задач с позиции использования методов автоматической обработки больших объемов данных, а именно машинного обучения.

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

Количество патентной информации по годам
Количество патентной информации по годам

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

Поговорим о том почему данную задачу стоить решать, используя методы машинного обучения. Зададимся вопросом: для каких задач в рамках экспертных систем уместно использовать машинное обучение? Обычно такие задачи обычно удовлетворяют следующим критериям:

  • Задачи, где требуется большой объем ручной работы по настройке длинных списков правил.

  • Задачи, где есть большой объем данных на входе, который необходимо обработать, после чего выдать ответ в виде информации в преобразованном виде.

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

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

Сбор данных

В большинстве задач по обработке естественного языка исходные данные не предоставляются в готовом виде, чаще всего их нужно собрать самостоятельно. Для этого прибегают к различным средствам в зависимости от задачи. В случае с патентной базой на русском языке имеется два популярных открытых источника – база ФИПС (федеральный институт промышленной собственности) и сервис Яндекс.Патенты. Выбор в пользу сервиса Яндекс.Патенты в качестве источника патентной базы. Источника не предоставляет открытого API для доступа к информации, поэтому единственный способ извлечь информацию из него, это написать программу – веб-краулер. Данный сервис использует загрузку динамического содержимого, используя Javascript. Чтобы выкачать информацию сервиса, веб-краулеру нужно имитировать полноценный браузер. Для этого можно использовать технологию Selenium. Веб-краулер прогружает страницу со списком патентов, после чего итеративно проходит по всем ссылкам, каждая из которых ведет на страницу отдельного патента, после чего загружает эти страницы в раздельные папки. После чего переходит на следующую страницу со списком патентов. Так происходит до тех пор, пока на странице со списком есть ссылка на следующую страницу. Код веб-краулера приводится ниже:

import time
from random import random

import requests
from bs4 import BeautifulSoup
from pathlib import Path
from os.path import exists
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium import webdriver
import urllib.parse

URL = "https://yandex.ru/patents?dco=RU&dco=SU&dfr=%s.01.01&dl=ru&dt=0&dto=%s.01.01&dty=2&s=0&sp=%s&spp=50&st=0"
exts = ['.tif', '.TIF', '.jpg', '.JPG', '.gif', '.GIF', '.doc', '.DOC', '.pdf', '.PDF']
pdf_base_link = 'https://patents.s3.yandex.net/'
comp_file_name = "completed.txt"
start_year = 1980
end_year = 1981
page = 0 

options = Options()
options.headless = True

driver = webdriver.Chrome("chromedriver", options=options)


if exists(comp_file_name):
    completed = open(comp_file_name, "r")
    completed_patents = set(completed.read().splitlines())
else:
    completed_patents = set()

driver.get(URL % (start_year, end_year, page))

while True:
    links = list()
    while len(links) < 20:
        time.sleep(1 + random())
        links = driver.find_elements(by=By.TAG_NAME, value='a')

    hrefs = []
    for link in links:
        hrefs.append(link.get_property("href"))
    i = 0
    for href in hrefs:
        patent_name = href.replace('https://yandex.ru/patents/doc/', '')
        if patent_name in completed_patents:
            print("Skip: ", patent_name)
            continue

        if 'patents/doc' in href:
            completed_patents.add(patent_name)
            print("Start processing: ", patent_name, ' Now completed on page: ', i)
            i += 1
            if Path(patent_name).exists():
                continue
            Path(patent_name).mkdir(parents=True, exist_ok=True)
            driver.get(href)
            time.sleep(1 + random())
            html = driver.page_source
            soup = BeautifulSoup(html)
            with open(patent_name + "/patent.html", "w") as file:
                file.write(html)
            if '<b>PDF</b>' in html:
                try:
                    req = requests.get(pdf_base_link + patent_name + ".pdf", allow_redirects=True)
                    open(patent_name + "/patent.pdf", 'wb').write(req.content)
                except requests.exceptions.ConnectionError:
                    print("error of download pdf")
            for img in soup.find_all("img"):
                if 'ref=patents' in img['src']:
                    url = img['src']
                    query = urllib.parse.urlparse(img['src']).query
                    params = urllib.parse.parse_qs(query)
                    name_file = params['id'][0]
                    n_param = params['n'][0]
                    url = url.replace('n='+n_param, 'n=13')
                    try:
                        req = requests.get(url, allow_redirects=True)
                        open(patent_name + '/' + name_file, 'wb').write(req.content)
                    except requests.exceptions.ConnectionError:
                        print("error of download image")
            driver.back()
            time.sleep(1 + random())

    next_ = driver.find_elements(by=By.CSS_SELECTOR, value='div.leaf-button.leaf-button__next.leaf-button--last')
    while len(next_) == 0:
        time.sleep(1)
        next_ = driver.find_elements(by=By.CSS_SELECTOR, value='div.leaf-button.leaf-button__next.leaf-button--last')

    next_elem = driver.find_elements(by=By.CSS_SELECTOR, value='div.leaf-button.leaf-button__next.leaf-button--last')[0]
    page += 1
    print("Completed page ", page, " Next page")
    time.sleep(5)
    next_elem.click()
    time.sleep(5) 

Используя данный веб-краулер удалось собрать приблизительно 300 тысяч патентов датируемые с 1980 по 2020 год, однако не все они пригодны для обучения лингвистической модели, в силу ошибок при оптическом распознавании символов в исходных документах. Далее приводится описание процесса очистки документов.

Очистка исходных данных

Чтобы обучить языковую модель было решено выделить из патентов 6 типов текстовых полей – «отрасль промышленности изобретения», «цель изобретения», «недостатки существующего уровня техники», «описание текущего состояния техники», «суть решения технической задачи» и «формула изобретения». Описание полей в таблице:

Название текстового поля

Краткое описание

Отрасль промышленности изобретения

Описывает к какой области науки и техники относится данное решение

Недостатки существующего уровня техники

Описывает недостатки существующей технической системы - прототипа, эту систему автор патента модернизирует своим техническим решением

Цель изобретения

Содержит несколько слов о целях, которые ставил перед собой автор патента

Описание текущего состояния техники

Описание существующей технической системы

Суть решения технической задачи

Содержит сжатое изложение изобретательского решения

Формула изобретения

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

Данный выбор был обусловлен тем, что этих текстовых полей достаточно для описания технической задачи и ее решения. В целом описание большинства патентов подчиняется определенному шаблону, в рамках которого эти предложения присутствуют. При этом идентифицировать определенный тип поля можно по ключевым фразам. Например, для выделения из общего текста патента предложения связанного с целью изобретения можно воспользоваться ключевыми фразами «Задача изобретения», «Задача решения» и т.д. Путем тестирования алгоритма на подборках патентов были подобраны 80 ключевых фраз, которые позволили добиться приемлемого качества выделения текстовых данных

Для того чтобы использовать патент в обучении модели, текстовые поля, выделенные из него должны быть не пустыми. Однако исходя из анализа текстовых полей, становится понятно, что «недостатки существующего уровня техники» и «цель изобретения» содержат схожие по смыслу предложения, поэтому в случае отсутствия одного из них другое может заменить его. Поэтому для корректно предобработанного патента достаточно одного из них. Также обстоят дела с полями «суть решения задачи» и «формула изобретения». После этого были отфильтрованы изобретения, которые не удовлетворяли данным условиям. В результате получился датасет в формате csv содержащий 1.2 ГБ текстовых данных или 274387 предобработанных патентов, удовлетворяющих этим условиям (ссылка на датасет). Распределение патентов из датасета по годам изображено на столбчатой диаграмме на рисунке — наибольшее число патентов получилось в период с конца 90-ых начало 00-ых, наименьшее с конца 80-ых до начала 90-ых (в эти года многие патенты писались не по шаблону). По мнению некоторых исследователей, минимальное количество обучающих примеров для создания модели генерации текста должно приблизительно равняться 100000 примеров, можно сделать вывод, что этого количество должно быть достаточно, чтобы обучить модель seq2seq.

 Столбчатая диаграмма отражающая количество патентов по годам
Столбчатая диаграмма отражающая количество патентов по годам

Обучение языковой модели

Т.к. seq2seq языковые модели не предназначены для табличных данных, то возникает вопрос как подавать на вход модели данные. Самое простое решение — это разделить их каким-либо специальным токеном, обычно для этих нужд используют токен [SEP]. На вход модели подается текстовая последовательность, конкатенированные текстовые поля «отрасль промышленности изобретения», «цель изобретения», «недостатки существующего уровня техники», «описание текущего состояния техники», разделенные токеном. На выходе модели ожидаются текстовые данные соответствующие конкатенированным полям «суть решения технической задачи» и «формула изобретения» также разделенные токеном [SEP].

В качестве языковой модели была выбрана seq2seq модель T5 на базе архитектуры трансформер. Исследователи, создавшие ее, утверждают, что архитектура подходит для любых задач генерации последовательность из последовательности будь то машинный перевод, суммаризация, получение ответов на вопросы без контекста. Задача генерации решения технических задач тоже подходит в это описание. Как и многие другие модели на базе архитектуры трансформер, для решения конкретной прикладной задачи в начале используют предобученные модели изучившие общие правила построение языка, после чего производят дообучение на новых данных.
Для решения данной задачи была выбрана предобученная версия модели T5 для русского языка «sberabank-ai/ruT5-base» из библиотеки HuggingFace. Данная модель содержит 222 миллиона параметров и была предварительно обучена на 300 ГБ русскоязычных текстов. Было выбрано подмножество данных из датасета размером 160000 примеров.

Столбчатая диаграмма отражающая количество слов в патентах
Столбчатая диаграмма отражающая количество слов в патентах

Так как архитектура типа трансформер требует ограничить максимальную длину текстовой последовательности, для T5 максимальное значение длины равняется 512 токенам. Для данной задачи — это ограничение не является критичным, поскольку большинство описаний технических задач укладываются в это ограничение. Это видно на столбчатой диаграмме на рисунке, отражающей соответствие между количеством патентов и количеством токенов в них.

Для токенизации используется Byte-Pair Encoding токенайзер, основная идея которого заключается в разбиение не встречающихся в Embedding-слое слов на несколько токенов, например, слово «вакуумный» может быть разбито на токены «ваку» и «умный». Таким образом преодолевается ограничение на количество слов, которые может кодировать модель. Помимо этого, перед запуском обучения, в модель и токенизатор были добавлены 15000 самых часто используемых в патентах слов. Исходная модель работает с 32100 токенов. Таким образом количество токенов в Embedding-слое после модификации составило 47100. Код для обучения модели представлен ниже:

import torch 
from transformers import T5ForConditionalGeneration, T5Tokenizer
raw_model = 'sberbank-ai/ruT5-base' 
model = T5ForConditionalGeneration.from_pretrained(raw_model).cuda();
optimizer = torch.optim.Adam(model.parameters(), lr=1e-5)
tokenizer = T5Tokenizer.from_pretrained(raw_model)
pair = list(df.itertuples(index=False))
tokens_to_add = get_most_used_tokens(k=15000)
tokenizer.add_tokens(list(tokens_to_add))
model.resize_token_embeddings(len(tokenizer))

from tqdm.auto import trange
import random
import numpy as np

batch_size = 2  
report_steps = 2000 
epochs = 3  

model.train()
losses = []
for epoch in range(epochs):
    print('EPOCH', epoch)
    random.shuffle(pair)
    for i in trange(0, int(len(pair) / batch_size)):
       	batch = pair[i * batch_size: (i + 1) * batch_size]
        # tokenize input and target
        x = tokenizer([re.sub(r'[^A-zА-я\[\]\s\-]', ' ', p[0]) for p in batch], return_tensors='pt', padding=True).to(model.device)
        y = tokenizer([re.sub(r'[^A-zА-я\[\]\s\-]', ' ', p[1]) for p in batch], return_tensors='pt', padding=True).to(model.device)
        y.input_ids[y.input_ids == 0] = -100
        loss = model(
            input_ids=x.input_ids,
            attention_mask=x.attention_mask,
            labels=y.input_ids,
            decoder_attention_mask=y.attention_mask,
            return_dict=True, 
        ).loss
        # step gradient descent 
        loss.backward()
        optimizer.step()
        optimizer.zero_grad()
        # print loss function
        losses.append(loss.item())
        if i % report_steps == 0:
            print('step', i, 'loss', np.mean(losses[-report_steps:]))

Модель обучалась в течение 20 часов, в течении 4 эпох, на GPU Nvidia V100. График зависимости функции потерь и перплексии от номера итерации представлены на рисунках, для первой, второй и третей эпох. Финальное значение кросс-энтропии на обучающей выборке – 2.84, перплексии – 17.11. Валидации в процессе обучения не проводилась, однако в следующем разделе можно видеть по перплексии на тестовой выборке, что переобучения модели не возникло. Обученную модель можно скачать по ссылке.

График изменения кросс-энтропии и перплексии в первой эпохе
График изменения кросс-энтропии и перплексии в первой эпохе
График изменения кросс-энтропии и перплексии во второй эпохе
График изменения кросс-энтропии и перплексии во второй эпохе
График изменения кросс-энтропии и перплексии в третьей эпохе
График изменения кросс-энтропии и перплексии в третьей эпохе

Оценка результатов обучения с помощью формальных метрик

Для оценки качества языковой модели был собран и предобработан датасет из 600 патентов зарегистрированные в период с 2000 по 2020 годы, которые не участвовали в обучении модели.

Глубина лучевого поиска

Штрафа за
длину текста

Штрафа за
повторение

Минимальная длина текста

Максимальная длина текста

7

1.0

2.0

100

512

На этом датасете был произведен замер 5 метрик — BLEU, ROUGE-1, ROUGE-L, ROUGE-LSUM (модификации метрики ROUGE), перплексия. Результат представлен в таблице.

Перплексия

BLEU-4

ROUGE-1

ROUGE-L

ROUGE-LSUM

19,5

8,71

55,6

54,5

54,6

Анализируя эти результаты можно сказать, что модель неплохо работает на тех данных, которые не присутствовали в обучающей выборке. Например, метрика ROUGE-1 говорит о том, что более половины слов присутствующих в сгенерированных моделью ответах также присутствуют в ответах человека. Значение перплексии приблизительно такое же как у англоязычной модели GPT-2 на текстах WikiText2. Невысокий показатель метрики BLEU показывает, что ответы человека и компьютера не сильно похожи между собой по набору и последовательности слов, однако трудно судить о применимости данной метрики в задачах генерации ответов на вопросы, т.к. в ответах на вопрос в большей степени важны некоторые ключевые фразы, отражающие суть мысли, чем полное копирование структуры ответа.

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

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

Пример №1. Задача, связанная с осветительной техникой. При проектировании станции Луна-16 инженеры столкнулись с тем, что лампа не выдерживала механических перегрузок. Слабым местом было соединение цоколя лампы со стеклянной колбой. Тогда было решено отказаться от стеклянной колбы. В атмосфере Луны практически нет кислорода, вследствие чего нить вольфрама не перегорала. Сформулируем для нейронной сети похожую задачи и посмотрим на результат.

Вводимые в модель данные – «Изобретение относится к осветительной технике [SEP] Цель изобретения повышение прочности колбы в условиях пониженного давления в открытом космосе, так как внутреннее давление является более высоким, чем снаружи [SEP] Известна лампа накаливания, колба которой заполнена инертным газом [SEP] Недостатком является низкая прочность колбы в условиях пониженного давления в открытом космосе».

Вывод текстовой модели – «достигается тем, что лампа накаливания колба содержит по меньшей мере один элемент, выполненный в виде усеченного конуса со сквозным отверстием на боковой поверхности для крепления к нему газом …». Здесь и далее в примерах приводится часть ответа модели, которая несет в себе смысл, при этом орфография модели сохранена. В целом это правильный ответ на эту задачу. Для лампы накаливания в космосе не нужно быть герметично запаянной, поскольку в земной атмосфере нить накаливания перегорает из-за наличия кислорода, а за пределами атмосферы кислорода нет. По всей видимости модель выучила паттерн для решения задачи, связанной с перепадом давления и разрушением конструкций из-за этого перепада. Решением задачи является избавиться от этого перепада давления, путем создания сквозного отверстия в конструкции. На рисунке изображена визуализация показателей внимания между входной и выходной последовательностями в финальном слое одной из голов внимания для токенов связанных с решением задачи. Видно, что токены выходной последовательности «сквозным отверстием», имеют высокий показатель внимания с токеном «давление», что может указывать на то, что модель выучила паттерн для решения подобных задач.

Показатели внимания между входной и выходной последовательностью для токенов связанных с решением задачи
Показатели внимания между входной и выходной последовательностью для токенов связанных с решением задачи

Пример №2. Задача, связанная с машиностроением, формулировка задачи взята из реального патента. Сравним решение модели с решением автора патента. Вводимые данные в языковую модель – «Модель относится к машиностроению и может использоваться для защиты топливных и пневматических трубопроводов транспортных средств от механических повреждений модель относится к машиностроению и может использоваться для защиты топливных и пневматических трубок, а также жгутов проводов для транспортных средств от механических повреждений [SEP] целью изобретения является увеличение защиты топливных трубок от механических повреждений [SEP] Известна фиксация сильфона, имеющего форму гофрированной трубки, закрывающей соединение впускной и выпускной трубок для масла топливного фильтра автомобиля известном оборудовании с использованием современных материалов и технологий, известна полезная модель Жгут проводов моторного отсека автомобиля, выполненный гибким и содержащий ответвления с контактными колодками [SEP] Недостатком данных конструкций является крепление гофрированной оболочки».

Вывод модели – «Скважинная сильфона для защиты топливных трубок от механических повреждений, состоящая из двух частей, соединенных между собой под углом к продольной оси оболочки отличающаяся тем что она дополнительно снабжена уплотняющими элементами, при этом один из них имеет форму гофрированной трубки, а другой выполнен с возможностью перемещения вдоль оси оболочки». Это решение совпадает с решением автора, который предлагает использовать уплотнительные кольца между сильфоной и топливной трубкой, далее дословно приводится решение автора патента – «узел соединения защитной оболочки трубок системы транспортного средства содержит уплотнительные кольца (3), расположенные между защитной оболочкой (2), выполненной гофрированной, и самой трубкой (1)». Визуализация показателей внимания в данном случае не дала возможность проинтерпретировать результаты, выдаваемые моделью. Возможно в обучающей выборке был очень похожий патент, поэтому модель выдала столь похожий результат с решением человека.

Иллюстрация автора из патента
Иллюстрация автора из патента

Пример №3. Данный пример из области порошковой металлургии, как и в прошлом примере формулировка задачи взята из патента. Вводимые в модель данные – «Изобретение относится к области порошковой металлургии, а именно к составам спеченных антифрикционных материалов, которые могут быть использованы в машиностроении [SEP] Задача изобретения — повышение износостойкости в условиях повышенных температур и снижение себестоимости материала,"[SEP]Известен спеченный антифрикционный материал на основе кобальта, содержащий, палладий, карбид титана, твердая смазка, кобальт-остальное».

Вывод модели – «Результат достигается тем что спеченный антифрикционный материал на основе кобальта содержащий SiO Al O CaO MgO TiO дополнительно содержит при следующем соотношении компонентов [SEP] Спеченный Антифрикционный материал, отличающийся тем что компоненты находятся в следующем соотношении масс SiO - Al O - СаО - МgO - ТiO – Остальное, отличающееся тем что в качестве связующего используется оксид цинка». Стоит отметить, одним из этапов предобработки данных для обучения модели являлось удаление любых символов кроме буквенных и пробелов, поэтому числовые индексы у химических формул отсутствуют, их место занимают пробелы, однако поискав в справочной информации можно найти вещество со схожей формулой CaO-SiO2-Al2O3-MgO-TiO2, которое является доменной шлаковой системой, возникающей при производстве сплавов, а значит имеет невысокую стоимость производства, достаточно высокую температуру плавления — около 1200 градусов Цельсия. Вопрос насколько данный материал подходит на роль антифрикционного остается открытым, но требования по функционированию в условиях высокой температуры и низкой стоимости данный материал выполняет. Показатели внимания в последнем слое нейронной сети 4-ой головы внимания для токенов, связанных с химической формулой показаны на рисунке, видно, что они имеют высокую связь с токенами входной последовательности «к составам спеченных антифрикционных». В 5-ой голове внимания также есть связь между токенами химической формулы и токенами «себестоимость материалов».

Показатели внимания 4-ой головы последнего слоя нейронной сети
Показатели внимания 4-ой головы последнего слоя нейронной сети
Показатели внимания 5-ой головы последнего слоя нейронной сети
Показатели внимания 5-ой головы последнего слоя нейронной сети

Таким образом можно сделать вывод, что нейронная сеть действительно смогла выучить паттерны для решения некоторых технических задач, однако в данном разделе приведены примеры хороших выводов языковой модели. В процессе пользовательского тестирования было введено около 20 задач, из них только 3 были решены таким образом, что можно говорить о практической ценности данных решений. Таким образом можно сказать, что языковая модель выдает ответы, имеющие смысл приблизительно в 15% случаев.

Реализация веб-приложения для работы с языковой моделью

Для того чтобы пользователям было удобно работать с моделями машинного обучения обычно делают веб-интерфейс для доступа к ним из веб-браузера. Для того чтобы работать с полученной языковой моделью было написано простое веб-приложение приложение. Оно имеет клиент-серверную архитектуру. На стороне сервера используется Python фреймворк Flask, на стороне клиента используется фреймворк Bootstrap и язык Javascript. Ссылка на github с кодом https://github.com/GurSergey/ai-inventor.

Интерфейс пользователя веб-приложения
Интерфейс пользователя веб-приложения

Заключение

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

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

В завершении хотелось бы сказать о проблемах современных методов генерации ответов на творческие задачи. Пожалуй, основная проблема современных архитектур языковых моделей в приложении к генерации ответов на творческие задачи заключена в том, что они не умеют «анализировать» множество смысловых контекстов, которые касаются тематики выбранного вопроса. Именно таким образом устроено человеческое мышление — решая сложную задачу, человек использует весь накопленный багаж знаний, который позволяет ему комбинировать несколько связных понятий, что в итоге позволяет порождать принципиально новые идеи. В свою очередь языковые модели стараются лишь подражать человеческим ответам на вопросы, однако такой подход хорошо работает лишь в том случае, если модель в процессе обучения видела подобные вопросы и ответы. Вероятно, дальнейшие успехи в области языковых моделей для экспертных систем будут связаны с появлением принципиально новых подходов, которые позволят учитывать больший смысловой контекст, чем в текущих решениях.

Теги:
Хабы:
Всего голосов 20: ↑14 и ↓6+9
Комментарии56

Публикации