Основы методов искусственного интеллекта. Учебно-методическое пособие
.pdfнейронные сети могут научиться распознавать сложные закономерности в данных. Алгоритмы глубокого обучения часто используются втаких приложениях, как распознавание изображений и речи, обработка естественного языка и робототехника.
4.Эволюционные алгоритмы используют принципы эволюции для поиска наилучшего решения проблемы. Эволюционные алгоритмы — это методы оптимизации, вдохновленные принципами естественного отбора и эволюции в биологии. Они используются для поиска наилучшего решения проблемы, основываясь на идее эволюции и размножения в популяции.
Вэволюционных алгоритмах изначально создается популяция решений-кандидатов, которые представляют собой возможные решения задачи. Эти решения могут быть представлены в виде наборов параметров или правил, которые можно изменить и скомбинировать для достижения лучшего результата. Каждое решение оценивается спомощью функции оценки, которая определяет, насколько хорошо оно решает задачу. Затем применяются операторы эволюции, такие как отбор, кроссинговер и мутация, для создания новой популяции решений на основе текущей. Отбор выбирает лучшие решения из текущей популяции, которые будут переданы в следующее поколение. Кроссинговер сочетает решения из популяции путем комбинирования их параметров или правил. Мутация случайным образом изменяет параметры или правила решений, чтобы внести разнообразие в популяцию. Таким образом, новая популяция решений создается путем комбинации лучших решений из предыдущей популяции и внесения некоторой случайности с помощью мутации. Этот процесс повторяется в течение нескольких поколений, и каждое новое поколение улучшает качество решений на основе принципов естественного отбора. Эволюционные алгоритмы широко используются в различных областях, где требуется оптимизация и поиск наилучших решений. Они могут применяться в генетике для решения задач сопряжения, в инженерии — для настройки параметров систем, в экономике — для оптимизации решений и во многих других областях. Эти алгоритмы предлагают гибкий и эффективный подход к решению сложных оптимизационных проблем.
5.Алгоритмы нечеткой логики используются для работы снеопределенностью и неточностью данных. Они применяют наборы правил, которые присваивают утверждениям степень истинности вместо двоичных значений истина/ложь, используемых в традиционной логике. Алгоритмы нечеткой логики часто используются втаких приложениях, как системы управления, распознавание образов и обработка естественного языка.
6. Байесовские сети — это тип вероятностной графовой модели, которая использует те - орию вероятности для представления и рассуждения о неопределенных знаниях. Байесовская сеть состоит из набора узлов, которые представляют случайные переменные, и набора направленных ребер, которые представляют условные зависимости между переменными. Задавая условные вероятности для каждого узла, сеть Байеса можно использовать для расчета вероятности события при наличии некоторых данных. Байесовские сети часто применяются
втаких областях, как медицина, финансы и инженерное дело.
Вцелом, каждый из этих алгоритмов ИИ имеет свои сильные и слабые стороны и подходит для разных типов проблем и приложений. По мере дальнейшего развития ИИ, вероятно, будут разрабатываться новые алгоритмы и методы для решения все более сложных проблем и приложений.
Вопросыдлясамоконтроля
1.Что такое байесовские сети?
2.Что такое алгоритмы нечеткой логики?
3.Что такое эволюционные алгоритмы?
4.Что такое алгоритмы глубокого обучения?
5.Что такое алгоритмы машинного обучения?
6.Перечислите, какие разновидности алгоритмов машинного обучения вы знаете?
7.Что такое алгоритмы, основанные на правилах?
11
Глава5.ЕСТЕСТВЕННОЯЗЫКОВЫЕСИСТЕМЫ
Системы естественного языка, также известные как системы обработки естественного языка (NLP), — это вид искусственного интеллекта, который занимается обработкой человеческого языка. Эти системы используют комбинацию методов из информатики, лингвистики и машинного обучения для анализа, понимания и генерирования человеческого языка.
Системы обработки естественного языка могут применяться для решения различных задач, включая:
1. Классификацию текста — отнесение фрагмента текста к одной или нескольким заранее определенным категориям. Например, система NLP может быть использована для классификации отзывов клиентов по таким категориям, как положительные, отрицательные или нейтральные.
2.Анализ настроения — определение эмоционального тона текста. Анализ настроения часто используется для определения общественного мнения по определенной теме, продукту или бренду.
3.Распознавание именованных сущностей — определение иклассификация именованных сущностей, таких как люди, организации иместа, в тексте. Распознавание именованных сущностей часто используется для извлечения информации и управления знаниями.
4. Машинный перевод — автоматический перевод текста с одного языка на другой. Ма - шинный перевод часто используется вмеждународном бизнесе идипломатии, атакже при переводе научно-технический статей для публикации в международных базах знаний.
5. Резюме текста — автоматическая генерация краткого содержания длинного текста. Обобщение текста часто используется в новостях и СМИ.
Для выполнения этих задач системы естественного языка используют комбинацию таких методов, как:
1.Токенизация, то есть разбиение текста на отдельные слова или лексемы.
2.Метки частей речи, то есть определение части речи (существительное, глагол, прилагательное и т.д.) каждого слова в тексте.
3.Парсинг, то есть анализ структуры предложения с целью выявления его грамматических компонентов, таких как субъект и объект.
4.Семантический анализ, то есть формирование понимания значения слов ифраз вконтексте.
5.Машинное обучение. При обучении моделей машинного обучения, таких как модели обработки естественного языка (NLP), прогресс в значительной степени достигается благодаря использованию немаркированных данных и методам обучения без учителя. Маркированные данные, то есть данные с явными метками или разметкой в виде пары входных данных и соответствующего выходного значения, обычно используются для задач обучения сучителем. Однако в контексте обучения моделей NLP, особенно в глубоком обучении, значительный прогресс можетбытьдостигнутблагодаряиспользованиюнемаркированныхданных.Однойизосновных техник, которая привнесла значительный прогресс вNLP, является модель обучения без учителя, известная как Transformer, на основе которой построены такие модели, как GPT (Generative Pre-trained Transformer). Модели GPT обучаются на больших немаркированных наборах данных, где модель стремится предсказать следующее слово впредложении или заполнить пропущенные слова в тексте. Это позволяет модели извлекать общие закономерности иструктуры из текстовых данных. Кроме того, дополнительное обучение (fine-tuning) моделей GPT на маркированных данных выполняется с использованием метода маскирования части текста. В этом случае некоторые слова или токены во входном тексте маскируются, имодель обучается предсказыватьихнаосновеконтекста.Этопозволяетмоделиобучатьсянаконкретнойзадаче,используя маркированные данные, при этом сохраняя преимущества общей предварительной обученности на больших немаркированных данных. Таким образом, важно отметить, что в современном машинном обучении для NLP значительный прогресс достигается благодаря использованию немаркированных данных иметодам обучения без учителя, включая моделирование языка на больших наборах текстовых данных и методы дополнительного обучения с маскированием
12
части текста. Маркированные данные все равно играют важную роль при настройке модели на конкретные задачи, но для достижения общего понимания языка и получения хороших представлений текста немаркированные данные являются ключевыми. Немаркированные данные позволяют модели изучать структуру языка, выявлять семантические связи иобщие закономерности без привязки кконкретным задачам. Это позволяет модели обладать широким пониманием языка и делать обобщенные прогнозы для новых, невидимых текстов.
Системы естественного языка находят широкое применение в таких областях, как обслуживание клиентов, здравоохранение, финансы и право. По мере развития технологий ИИ системы естественного языка будут становиться все более сложными, что позволит проводить более точный и тонкий анализ человеческого языка.
Вопросыдлясамоконтроля
1.Что такое системы естественного языка?
2.Для решения каких задач используются системы обработки естественного языка?
3.Что такое классификация текста?
4.Что такое анализ настроения?
5.Для чего используется машинный перевод?
6.Что такое резюме текста?
7.Что такое парсинг?
8.Что такое токенизация?
9.Для чего используют семантический анализ?
Глава6.МЕТОДЫИСКУССТВЕННОГОИНТЕЛЛЕКТА, ПРИМЕНЯЕМЫЕ В РАМКАХ РЕШЕНИЯ ЗАДАЧ
Далее в учебно-методическом пособии будут представлены фрагменты кода для решения различных задач. Код написан на языке программирования Python. Для удобства получения навыков обучающемуся рекомендуется установить дистрибутив языков программирования
Python и R — Anaconda.
Справочно:
Anaconda позволяет удобно работать с Python в редакторе Jupyter Notebook. На рис. 1 представлено начальное диалоговое окно среды разработки Jupyter Notebook, где сразу можно видеть результат выполнения кода и его отдельных фрагментов.
Рис. 1. Стартовое диалоговое окно
13
Для того чтобы создать новый проект, в котором можно выполнять код, необходимо выбрать в правом верхнем углу опцию «New», затем выбрать «Создать новый блокнот с Python 3…» (рис. 2).
Рис. 2. Создание нового проекта
В случае, если все выполнено верно, откроется следующая страница (рис. 3).
Рис. 3. Пример начальной страницы блокнота
С помощью опций, заложенных в Jupyter Notebook, можно создавать новые блокноты, сохранять, переименовывать и пр. (рис. 4).
Рис. 4. Меню вкладки «File»
Для запуска ячейки (выполнения кода в ячейке) можно использовать соответствующую кнопку «Запуск» или сочетание клавиш Ctrl + Enter (рис. 5).
14
Рис. 5. Процесс запуска ячейки
Методы искусственного интеллекта, используемые при решении задач, обычно включают в себя комбинацию таких методов, как алгоритмы поиска, представление знаний, рассуждения и обучение.
Ниже приведены некоторые распространенные методы ИИ, используемые при решении проблем.
1. Алгоритмы поиска.
Эти методы предполагают поиск вбольшом пространстве возможных решений для нахождения оптимального решения проблемы. Примеры поисковых алгоритмов включают: поиск в глубину, поиск в ширину и поиск A*.
Пример реализации алгоритма поиска A* в Python: import heapq
import math
Справочно:
Модуль heapq дает быстрый и простой способ создания любого типа очереди приоритетов для создаваемого приложения.
Модуль math является одним из наиболее важных модулей в Python, поскольку предоставляет пользователю обширный функционал для работы с числами.
# Определите класс Node для представления узлов в дереве поиска class Node:
tic=0): def init(self, state, parent=None, action=None, cost=0, heuris-
self.state = state self.parent = parent self.action = action self.cost = cost self.heuristic = heuristic
#Определите метод lt для использования heapq в алгоритме A* def lt(self, other):
return self.cost + self.heuristic < other.cost + other.heuristic
#Определите алгоритм поиска A*
def astar _ search(start _ state, goal _ state, successors, heuristic):
# Инициализировать очередь приоритетов с начальным узлом
очередь = []
15
start _ node = Node(start _ state, None, None, 0, heuristic(start _ state)) heapq.heappush(queue, start _ node)
#Инициализация исследуемого множества explored = set()
#Зацикливаемся, пока очередь не опустеет или не будет найдено состояние цели
while queue:
# Вытаскиваем из очереди узел с наименьшей f-score (стоимость + эвристика)
current _ node = heapq.heappop(queue)
# Проверьте, является ли текущий узел состоянием цели if current _ node.state == goal _ state:
# Строим путь от начального состояния до состояния цели
путь = []
while current _ node: path.append(current _ node.action)
current _ node = current _ node.parent path.reverse()
return path
#Добавить текущий узел в исследуемый набор explored.add(current _ node.state)
#Генерируем узлы-преемники и добавляем их в очередь
for action, state, cost in successors(current _ node.state): if state not in explored:
# Вычисляем f-score (стоимость + эвристика) для узла-
преемника
h = heuristic(state)
g = current _ node.cost + cost f = g + h
# Добавить узел-преемник в очередь
successor _ node = Node(state, current _ node, action,
g, h)
heapq.heappush(queue, successor _ node)
# Если состояние цели не найдено, возвращается None return None
Эта реализация предполагает, что проблема представлена в виде пространства состояний, где каждое состояние представляет собой конфигурацию проблемы, и что действия, доступные в каждом состоянии, и связанные с ними затраты определяются
16
функцией successors. Эвристическая функция используется для оценки стоимости достижения состояния цели из данного состояния и используется для направления поиска в сторону состояния цели.
Для того чтобы использовать эту реализацию, нужно определить функцию преемников и эвристическую функцию для конкретной задачи.
Например, вот простая реализация функций преемников и эвристики для задачи «8 головоломок»:
# Определите состояние цели для задачи о 8 головоломках goal _ state = (1, 2, 3, 4, 5, 6, 7, 8, 0)
# Определите функцию преемников для задачи с 8 головоломками def successors(state):
i = state.index(0) if i == 0:
return [(‘right’, (state[1], state[0], state[2], state[3], state[4], state[5], state[6], state[7], state[8]), 1),
(‘down’, (state[3], state[1], state[2], state[0], state[4], state[5], state[6], state[7], state[8], state[8]), 1)
2. Представление знаний.
Этот метод предполагает представление знаний, необходимых для решения проблемы, в структурированном виде, который может быть легко обработан компьютером.
Примеры методов представления знаний включают логические представления, семантические сети и онтологии.
Логические представления знаний используют символический подход для представления знаний в форме логических утверждений, используя формальную логику. Они представляют знания в форме знакомых нам математических уравнений. Эти уравнения обычно включают логические операторы, такие как «И», «ИЛИ», «НЕ» и т.д.
Пример использования библиотеки pyke для создания правил базы знаний ввиде логических утверждений:
from pyke import knowledge _ engine
engine = knowledge _ engine.engine( _ _ file _ _ )
engine.reset()
engine.assert _(‘mother _ child(mary, john)’) engine.assert _(‘mother _ child(mary, susan)’)
engine.add _ rule('''
mother _ grandmother(?x, ?z) :- mother _ child(?x, ?y), mother _ child(?y, ?z)
''')
with engine.prove _ goal(‘mother _ grandmother(?x, ?z)’) as results:
17
for result in results:
print(f“{result[‘?x’]} is the mother and {result[‘?z’]} is the grandmother.”)
Пример использования библиотеки prologpy для определения логических отношений:
from prologpy import Prolog
prolog = Prolog()
prolog.assertz(‘parent(john, bob)’) prolog.assertz(‘parent(john, lisa)’) prolog.assertz(‘parent(lisa, sarah)’)
list(prolog.query(‘parent(john, X)’))
# [{‘X’: ‘bob’}, {‘X’: ‘lisa’}]
list(prolog.query(‘parent(X, sarah)’))
# [{‘X’: ‘lisa’}]
Семантические сети используют графический подход для представления знаний в виде схемы, состоящей из узлов и связей между ними. Узлы представляют понятия, а связи — отношения между ними. Семантические сети часто используются в лингвистике для анализа языковых структур. Они также применяются в сферах, где важно представлять отношения между понятиями, например, в области биологии, где могут быть представлены сети метаболических путей.
Пример использования библиотеки nltk для создания семантической сети ипоиска сходства слов:
import nltk nltk.download(‘wordnet’)
from nltk.corpus import wordnet as wn
#Создание семантической сети dog = wn.synset(‘dog.n.01’) cat = wn.synset(‘cat.n.01’)
#Поиск сходства между словами print(dog.path_similarity(cat))
#0.2
#Поиск наиболее похожих слов for synset in wn.synsets(‘dog’):
18
for lemma in synset.lemmas():
print(lemma.name(), synset.path_similarity(dog))
Пример использования библиотеки spacy для создания векторного представления слов и поиска сходства между ними:
import spacy
nlp = spacy.load(‘en _ core _ web _ md’)
#Создание векторного представления слов dog = nlp(‘dog’)
cat = nlp(‘cat’)
#Поиск сходства между словами print(dog.similarity(cat))
#0.83
Онтологии используются для представления знаний в форме структурированной схемы, которая показывает классы объектов, связи между классами и характеристики объектов. Онтологии обычно используют формальные языки, такие как OWL (Web Ontology Language) или
RDF (Resource Description Framework), для представления знаний.
Онтологии часто используются ввеб-приложениях для обеспечения семантического поиска и интеграции данных. Они также применяются вбиологии, медицине и других науках для описания связей между концептами и объектами.
Пример использования библиотеки owlready2 для создания онтологии изапросов к ней:
from owlready2 import *
# Создаем онтологию
onto = Ontology(“http://example.org/onto”)
# Создаем классы class Person(Thing):
pass
class Animal(Thing): pass
# Добавляем свойства
class hasName(DataProperty): domain = [Person, Animal] range = [str]
19
class hasAge(DataProperty): domain = [Person, Animal] range = [int]
# Сохраняем онтологию в файл
onto.save(file = “my _ ontology.owl”, format = “rdfxml”)
Пример запроса к онтологии с помощью SPARQL-запросов:
from owlready2 import *
# Загружаем онтологию из файла
onto = get _ ontology(“my _ ontology.owl”).load()
# Запрос на поиск всех людей, у которых имя «John» и возраст больше 30 лет
results = onto.search _ one(“““ SELECT ?person
WHERE {
?person a onto.Person ; onto.hasName “John” ; onto.hasAge ?age .
FILTER (?age > 30)
}
”””)
# Выводим результаты print(results)
Пример кода на Python для логических представлений:
from pyke import knowledge _ engine, krb _ traceback
engine = knowledge _ engine.engine( _ _ file _ _ )
# Определение фактов и правил engine.defact(“parent”, “Alice”, “Bob”) engine.defact(“parent”, “Bob”, “Charlie”)
engine.rule(“grandparent($x, $z) IF parent($x, $y) AND parent($y, $z)”)
20
