Обработка естественного языка (NLP) — это междисциплинарный предмет, объединяющий информатику, искусственный интеллект и лингвистику, и их взаимосвязь показана на рис. 1-1. Эта дисциплина изучает, как с помощью таких методов, как машинное обучение, компьютеры могут научиться обрабатывать человеческий язык и даже достичь конечной цели понимания человеческого языка или искусственного интеллекта.
На самом деле термин «обработка естественного языка» не имеет общепринятого определения. Ученые, которые сосредотачиваются на лингвистической структуре, предпочитают выражение «вычислительная лингвистика» (CL), в то время как ученые, которые сосредотачиваются на конечной цели, предпочитают термин «понимание естественного языка» (NLU). Поскольку НЛП звучит более инженерно, я буду использовать этот термин на протяжении всей книги, не вдаваясь в их сходства и различия.
Как и его собственная сложность, обработка естественного языка всегда была сложной темой. Хотя язык — это только одна часть искусственного интеллекта (ИИ также включает в себя компьютерное зрение и т. д.), он совершенно уникален. На этой планете есть много существ с визуальной системой, превосходящей человеческую, но только у людей есть язык такого высокого уровня. Цель обработки естественного языка — позволить компьютерам обрабатывать или «понимать» естественный язык для выполнения значимых задач, таких как бронирование авиабилетов, покупка товаров или синхронный перевод. Чрезвычайно сложно полностью понимать и выражать язык, а идеальное понимание языка эквивалентно внедрению искусственного интеллекта.
В этой главе мы рассмотрим некоторые основные понятия, связанные с миниатюрами обработки естественного языка.
① 著名的图灵测试就是根据机器是否能像人类一样理解语言来判断它是否具备人工智能。
② Smith N. A. Linguistic structure prediction[J]. Synthesis lectures on human language technologies, 2011, 4(2): 1-274.
1.1 Естественный язык и язык программирования
Как объекты, с которыми мы будем иметь дело, естественный язык очень гибок. Мы слишком знакомы со своим языком, так же, как вода прозрачна для рыб, нам трудно оценить сложность языка. Давайте сравним естественный язык с искусственным и посмотрим, насколько сложно компьютерам понять наш язык.
1.1.1 Словарный запас
Словарный запас естественного языка богаче, чем ключевые слова языка программирования. В знакомых нам языках программирования количество ключевых слов, которые можно использовать, ограничено и детерминировано. Например, в языке C всего 32 ключевых слова, а в языке Java — 50. Хотя мы можем свободно брать имена переменных, имена функций и имена классов, эти имена являются только отличительными символами в глазах компилятора, без семантической информации и не влияют на результаты работы программы. Но в естественном языке словарный запас в нашем распоряжении бесконечен, и мало слов с точно таким же значением. Если взять китайский язык в качестве примера, «Список общеупотребительных слов в современном китайском языке (черновик)», выпущенный Рабочей комиссией по государственному языку и иероглифам, содержит в общей сложности 56 008 статей. Кроме того, мы всегда можем создавать новые слова всех типов, а не только существительные.
1.1.2 Структурированный
Естественные языки неструктурированы, тогда как языки программирования структурированы. Так называемая структура означает, что информация имеет четкие структурные отношения, такие как классы и элементы в языках программирования, таблицы и поля в базах данных, и может быть прочитана и записана с помощью четкого механизма. В качестве примера рассмотрим представление одного и того же факта на двух языках.На некоторых объектно-ориентированных языках программирования можно написать так:
class Company(object): def __init__(self, founder, logo) -> None: self.founder = founder self.logo = logo
apple = Company(founder='乔布斯', logo='apple')
Таким образом, программисты могут получить информацию об основателе и логотипе Apple через файлы apple.founder и apple.logo. Таким образом, языки программирования предоставляют иерархические шаблоны для информации через конструкцию класса Company, тогда как в естественных языках такой явной конструкции не существует. Человеческий язык представляет собой линейную строку. Учитывая предложение «Основатель Apple — Стив Джобс, а его логотип — Apple», компьютеру необходимо проанализировать следующие выводы:
● После того, как это китайское предложение будет преобразовано в последовательность слов, оно должно быть «Основателем Apple является Стив Джобс, а его логотипом является Apple»;
Первое «яблоко» относится к Apple Inc., а второе «яблоко» относится к логотипу Apple с выемкой;
● «Вакансии» — это личное имя;
● «это» относится к Apple Inc.;
●отношения между Apple и Джобсом "основатель", а отношения с логотипом Apple с разрывом "логотип".
Эти выводы связаны с задачами обработки естественного языка, такими как сегментация китайских слов, распознавание именованных сущностей, разрешение ссылок и извлечение отношений. Ни одна из этих задач в настоящее время не имеет точности человеческого уровня. Можно видеть, что предложение, которое люди считают очень простым, нелегко понять компьютеру.
1.1.3 Неоднозначность
Естественный язык содержит большое количество двусмысленностей, и эти двусмысленности проявляются как определенные значения в зависимости от контекста. Например, многозначные слова в китайском языке могут быть определены только в определенном контексте, и есть даже употребления, которые преднамеренно используют неопределенную двусмысленность для создания юмористических эффектов. Помимо двух приведенных выше значений слова «яблоко», слово «значение» имеет несколько значений. Возьмем, к примеру, классический анекдот ниже.
Он сказал: «Она забавный человек». Она сказала: «Он забавный человек». Поэтому люди думали, что у них есть желание, и просили его выразить ее. Он рассердился: «Я совсем не это имел в виду (мысль)!» Она тоже рассердилась: «Что ты имеешь в виду под этим (намерением)?» Потом кто-то сказал: «Это смешно (забавно)». «Действительно, это неинтересно (ерунда)». (Оригинальный текст см. в Life News, 1994.11.13. Шестое издание) [Wu Weitian, 1999]①
В этом примере различные значения «смысла» специально аннотированы на английском языке, что показывает, что иметь дело с китайским языком сложнее, чем с английским.
Но в языках программирования нет двусмысленности ②. Если программист случайно напишет неоднозначный код, например, две функции с одинаковой сигнатурой, возникнет ошибка компиляции.
1.1.4 Отказоустойчивость
Даже если язык в книге многократно вычитывается редактором, он все равно не полностью свободен от ошибок. Текст в Интернете более случайный, с опечатками или больными предложениями, неправильными знаками препинания и т. д. повсюду. Однако каким бы неправильным ни было предложение, люди все равно могут догадаться, что оно означает. В языках программирования программисты должны следить за тем, чтобы написание было абсолютно правильным, а синтаксис абсолютно нормальным, иначе они либо получат беспощадные предупреждения от компилятора, либо вызовут потенциальные ошибки.
Фактически, в отличие от нормативной области журналистики, новой темой также стало то, как поступать с нестандартными текстами в социальных сетях.
① 摘自宗成庆《统计自然语言处理》。
② 编程语言被特意设计为无歧义的确定上下文无关文法,并且能在 O(n) 时间内分析完毕,其中 n 为文本长度。
1.1.5 Волатильность
Любой язык постоянно развивается, разница в том, что языки программирования меняются гораздо медленнее и мягче, а естественные языки относительно быстры и шумнее.
Язык программирования изобретается и поддерживается отдельным лицом или организацией. Возьмем, к примеру, C++, его изобретателем является Бьерн Страуструп, и сейчас он поддерживается Комитетом по стандартам C++. От C++ 98 до C++ 03, до C++ 11 и C++ 14 изменение языковых стандартов представляет собой процесс миграции в единицах лет, а новая версия приблизительно совместима со старой версией и имеет лишь несколько устаревших функций.
И естественный язык не изобретается и не стандартизируется отдельным человеком или организацией. Другими словами, любой естественный язык устанавливается всеми людьми. Хотя существуют такие нормы, как мандарин и упрощенные иероглифы, каждый из нас волен создавать и распространять новые слова и употребления, и мы постоянно придаем старым словам новые значения, что приводит к огромной разнице между древним и современным китайцами. Кроме того, китайский язык продолжает поглощать словарный запас из иностранных языков, таких как английский и японский, а также экспортирует чинглиш, такой как niubility. Эти изменения непрерывны и происходят все время, что создает серьезные проблемы для обработки естественного языка. Это также является причиной того, что естественный язык, очевидно, изобретен людьми, но до сих пор называется «естественным».
1.1.6 Простота
Из-за ограничений скорости речи и скорости слушания, скорости письма и скорости чтения человеческий язык часто бывает кратким и способным. Мы часто опускаем большую часть предыстории или здравого смысла, например, говорим друзьям «увидимся в старых местах», не указывая, где находятся «старые места». Для названия учреждения мы часто используем аббревиатуру, такую как «ICBC» и «Местное налоговое бюро», предполагая, что другая сторона знакома с аббревиатурой. Если объект поднимается выше в качестве темы, ниже часто используются местоимения. Нет необходимости повторять предыдущие факты в сплошном выпуске новостей или на странице книги, предполагая, что читатель уже с ней знаком. Эти упущенные здравые смыслы разделяют обе стороны, но не обязательно принадлежат компьютеру, что также создает препятствия для обработки естественного языка.
1.2 Иерархия обработки естественного языка
В зависимости от детализации объектов обработки обработка естественного языка может быть грубо разделена на несколько уровней, как показано на рис. 1-2.
В этом разделе одно за другим представлены определения этих задач обработки естественного языка, чтобы предоставить читателю обзор.
1.2.1 Речь, изображение и текст
Существует три источника ввода системы обработки естественного языка, а именно речь, изображение и текст. Среди них, хотя голос и изображение привлекают все большее внимание, их общий объем информации все еще меньше, чем у текста из-за ограничения объема памяти и скорости передачи. Кроме того, эти две формы обычно преобразуются в текст после распознавания, а затем выполняется следующая обработка, которая называется распознаванием речи (Speech Recognition) и оптическим распознаванием символов (Optical Character Recognition). После преобразования в текст можно выполнять последующие задачи НЛП. Таким образом, обработка текста является главным приоритетом.
1.2.2 Сегментация китайских слов, тегирование частей речи и распознавание именованных сущностей
Все эти три задачи представляют собой анализ слов, поэтому все вместе они называются лексическим анализом. Основными задачами лексического анализа являются разделение текста на значимые слова (сегментация китайских слов), определение категории каждого слова и неглубокого устранения неоднозначности (маркировка частей речи), а также определение некоторых более длинных имен собственных (распознавание именованных сущностей). ). Для китайцев лексический анализ часто является основой для последующих сложных задач. В конвейерной системе, если лексический анализ пойдет не так, он распространится на последующие задачи. К счастью, китайский лексический анализ является относительно зрелым и в основном достиг уровня промышленного использования.
① 指的是前一个系统的输出是后一个系统的输入,并且前一个系统不依赖于后续系统。
В качестве элементарной и находчивой задачи лексический анализ разрабатывается в последующих главах этой книги. Кроме того, поскольку это первая задача НЛП, с которой сталкивается читатель, она приведет ко многим интересным моделям, алгоритмам и идеям. Таким образом, лексический анализ является не только основной задачей обработки естественного языка, но и главы, к которым он относится, также станут основой системы знаний читателя.
1.2.3 Извлечение информации
После лексического анализа текст показал тенденцию к частичной структурированности. По крайней мере, вместо сверхдлинной строки компьютер видит осмысленный список слов, каждое из которых имеет свою часть речи и другие теги.
На основе этих слов и тегов мы можем извлечь часть полезной информации, от простых высокочастотных слов до ключевых слов, извлеченных продвинутыми алгоритмами, от названий компаний до профессиональных терминов, из которых информации на уровне слов уже можно извлечь немало. Мы также можем извлекать ключевые фразы и даже предложения на основе статистической информации между словами, а более крупные тексты более удобны для пользователя.
Стоит отметить, что некоторые статистические данные, используемые алгоритмами извлечения информации, могут быть повторно использованы в других задачах, которые будут подробно описаны в соответствующих главах.
1.2.4 Текстовая классификация и текстовая кластеризация
После разделения текста на ряд слов мы также можем провести ряд анализов на уровне статьи.
Иногда мы хотим знать, является ли предложение положительным или отрицательным, судить, является ли электронное письмо спамом или нет, и хотим организовать множество документов по категориям.Задача НЛП в настоящее время называется текстовой классификацией.
В других случаях мы просто хотим объединить похожие тексты или исключить дубликаты документов, не заботясь о конкретных категориях, — задача, называемая кластеризацией текста.
Эти два типа задач выглядят одинаково, но на самом деле относятся к двум различным школам алгоритмов, которые мы рассмотрим в отдельных главах.
1.2.5 Анализ синтаксиса
Лексический анализ может получить только разрозненную лексическую информацию, а связи между словами компьютер не знает. В некоторых системах ответов на вопросы необходимо получить структуру предложения субъект-сказуемое-объект. Например, в предложении «запросить о пациентах по внутренним болезням, которых посещал доктор Лю», пользователь действительно хочет запросить не «доктор Лю» или «внутренние болезни», а «пациенты». Хотя все эти три слова являются существительными, и даже «Доктор Лю» ближе всего к глаголу «запрос» на диаграмме, только «пациент» является объектом «запроса». С помощью синтаксического анализа можно получить грамматическую информацию, показанную на рис. 1.3.
Мы обнаружили, что на рис. 1.3 действительно есть длинная стрелка, соединяющая «запрос» и «пациент» и аннотирующая отношение глагол-объект между ними. В последующих главах будет подробно представлена вышеприведенная древовидная структура, а также метод реализации синтаксического анализатора.
Не только системы ответов на вопросы или поисковые системы, но и синтаксический анализ часто используются в машинном переводе на основе фраз для изменения порядка слов в переводах. Например, китайское «я ем яблоки», переведенное на японский, звучит как «частное は (I) 林 檎 を (яблоко) 食 べ る (есть)», порядок слов в них разный, но синтаксическая структура та же.
1.2.6 Семантический анализ и анализ текста
По сравнению с синтаксическим анализом семантический анализ фокусируется на семантике, а не на синтаксисе. Он включает устранение неоднозначности смысла слова (определение значения слова в контексте, а не простой части речи), тегирование семантических ролей (отмечание отношений между предикатами в предложении и другими компонентами) и даже анализ семантической зависимости (анализ отношений). между словами в предложении) смысловые отношения).
По мере прохождения заданий их сложность постепенно увеличивается, и они относятся к более сложным темам. Даже самые передовые исследования еще не достигли практического уровня точности. Кроме того, соответствующие исследовательские ресурсы относительно скудны и их трудно достать, поэтому в этой книге они не рассматриваются.
1.2.7 Другие дополнительные задачи
В дополнение к упомянутым выше «инструментальным» задачам существует множество комплексных задач, более тесно связанных с продуктами уровня конечного приложения. Например:
● автоматические вопросы и ответы, которые напрямую отвечают на вопрос на основе информации из базы знаний или текста, например Cortana от Microsoft и Siri от Apple;
● Автоматическое суммирование, которое генерирует короткие резюме для длинного документа;
● Машинный перевод, который переводит предложение с одного языка на другой.
Обратите внимание, что поиск информации (IR) обычно считается отдельной дисциплиной от обработки естественного языка. Хотя они тесно связаны, цель IR — запрашивать информацию, а цель NLP — понимать язык. Кроме того, ИК не обязательно ищет язык, но может искать и картинки, слушать музыку, искать товары и даже искать любую информацию. На самом деле существует множество сценариев, в которых задача поиска может быть выполнена без понимания языка, например LIKE в SQL.
В качестве вводной книги эта книга не будет обсуждать эти сложные задачи, но понимание общей картины обработки естественного языка поможет нам расширить наши горизонты и найти свою позицию и направление.
1.3 Жанр обработки естественного языка
В предыдущем разделе сравнивались сходства и различия между естественным языком и искусственным языком, были показаны трудности обработки естественного языка и представлены некоторые распространенные задачи НЛП. В этом разделе кратко представлены несколько различных подходов к обработке естественного языка.
1.3.1 Экспертная система на основе правил
Правила относятся к детерминированным процессам, созданным вручную экспертами. Такие маленькие, как регулярные выражения, используемые программистами каждый день, и такие же большие, как автопилот самолета ①, все они представляют собой фиксированные системы правил.
В контексте обработки естественного языка относительно успешным случаем является алгоритм стемминга Портера, который был предложен Мартином Портером в 1980 году и широко используется в стемминге английского языка. Алгоритм состоит из нескольких правил, каждое из которых представляет собой серию фиксированных, а затем условных ветвей. Когда слово удовлетворяет условию, выполняется фиксированный процесс и выводится фиксированный результат. Некоторые из правил взяты в качестве примера и перечислены в таблице 1-1.
Экспертные системы требуют от разработчиков глубокого понимания проблемы, с которой они имеют дело, и попытки полностью учесть все возможные ситуации с человеческими усилиями. Его самый большой недостаток в том, что его трудно расширить. Конфликты могут легко возникнуть при увеличении количества правил или при поддержке одной и той же системы несколькими экспертами. Например, в Таблице 1-1 показана простая система, в которой всего 3 правила, фактически конфликтуют Правило 1 и Правило 2. Такие слова, как корм, будут удовлетворять условиям обоих правил, вызывая конфликт. В это время экспертная система обычно полагается на приоритет правил для решения. Например, определено, что правило 1 имеет приоритет над правилом 2, и при выполнении условий правила 1 другие правила игнорируются. Десятки правил допустимы.С увеличением количества правил и количества команд возникает все больше и больше вопросов совместимости, которые необходимо учитывать, а затраты на обслуживание системы становятся все выше и выше, которые нельзя расширять.
Большинство лингвистических явлений намного сложнее, чем английское стемминг, и мы видели довольно много выше. Эти языковые явления не обязательно следуют правилам, но также все время меняются, делая систему правил жесткой, жесткой и нестабильной.
① 区别于汽车的无人驾驶技术,飞机的自动驾驶系统只能处理预定情况,在异常情况下会报警或切换到手动驾驶。
② 下面的例子中,feed 为特殊情况,不是过去式,不执行替换。bled 是 bleed 的过去式,不应执行“去 ed”。sing 不是现在进行时,不应执行“去 ing”。
1.3.2 Статистические методы обучения
Чтобы уменьшить зависимость от экспертов, адаптивные и гибкие языковые проблемы, люди используют статистические методы, позволяющие компьютерам автоматически изучать язык. Так называемая «статистика» относится к статистике, выполненной на корпусе. Так называемый корпус относится к аннотированному человеком структурированному тексту, который мы подробно рассмотрим в следующих подразделах.
Поскольку естественный язык гибок и изменчив, даже эксперты-лингвисты не могут сформулировать полные правила. Даже если есть идеальный набор правил, его трудно постепенно обновлять при непрерывном развитии языка. Поскольку естественный язык нельзя описать на языке программирования, умные люди решили позволить машине изучить эти законы автоматически на примере. Затем машина применяет эти законы к новым неизвестным примерам. В контексте обработки естественного языка «пример» означает «создание корпуса».
Метод статистического обучения на самом деле является другим названием машинного обучения, а машинное обучение — это основной способ реализации искусственного интеллекта в наше время. Важность машинного обучения в обработке естественного языка очень велика, и можно сказать, что обработка естественного языка — это всего лишь приложение машинного обучения. Здесь мы используем «обучение на примере» только для простого понимания, а последующие главы будут посвящены систематическому изучению.
1.3.3 История
Поскольку обработка естественного языка является прикладным уровнем машинного обучения, как и история искусственного интеллекта, обработка естественного языка также прошла путь развития от логических правил до статистических моделей. На рис. 1-4 перечислены несколько важных периодов времени в истории.
1950-е годы были периодом зарождения искусственного интеллекта и обработки естественного языка, и появилось много новаторских работ. Наиболее представительными из них являются достаточные условия для искусственного интеллекта, предложенные математиком Аланом Тьюрингом в статье «Вычислительные машины и интеллект» — тест Тьюринга, и «Синтаксическая структура» лингвиста Хомского — что предложения генерируются в соответствии с некоторой контекстно-независимой универсальной грамматикой. правила. Интересно, что ранние оценки или теории первооткрывателей были слишком оптимистичны. Тьюринг предсказал, что в 2014 году компьютер с 1 ГБ памяти сможет избежать идентификации как машины в течение 5 минут с вероятностью 70%, но на сегодняшний день этот оптимистичный прогноз не осуществился. «Универсальная грамматика» Хомского вызвала споры из-за пренебрежения семантикой и была соответствующим образом пересмотрена в последующих теориях. Будь то искусственный интеллект или обработка естественного языка, впереди еще долгий путь.
До 1980-х годов преобладающим подходом были системы правил, в которых наборы правил, относящиеся к предметной области, писались экспертами от руки. В то время компьютеры и компьютерные языки только были изобретены, а программированием занимались элитные ученые. Они были честолюбивы и считали, что компьютеры можно наделить интеллектом, просто запрограммировав. Типичные работы включают BASEBALL лаборатории искусственного интеллекта Массачусетского технологического института и LUNAR of Sun (приобретенная Oracle в 2009 году), которые посвящены ответам на вопросы о бейсбольных играх в Северной Америке и образцах горных пород, доставленных в ходе исследования Луны Аполлоном. В этот период существует много подобных систем ответов на вопросы, и все они являются экспертными системами, которые в основном полагаются на рукописные правила. Взяв в качестве примера БЕЙСБОЛ, модуль маркировки частей речи оценивает часть речи в счете следующим образом: «Если предложение не содержит других глаголов, то счет является глаголом, в противном случае это существительное». система полагается на правила части речи, чтобы комбинировать именные группы, предложные фразы, а также наречные фразы. Модуль грамматики оценивает пассивные предложения, подлежащие и сказуемые в соответствии с такими правилами, как «если последний глагол является основным глаголом и стоит после to be». Затем система использует словарные правила для преобразования этой информации в пары ключ-значение «имя атрибута = значение атрибута» или «имя атрибута =?», которые используются для представления документов и вопросов в базе знаний. Наконец, для сопоставления вопроса и ответа используется правило типа «если все имена атрибутов, кроме вопросительного знака, совпадают, выведите атрибут, запрошенный вопросом в этом документе». Такие жесткие и строгие правила заставляют систему иметь дело только с фиксированными вопросами и не могут иметь дело с логикой И-ИЛИ, сравнениями и периодами времени. Следовательно, эти системы правил называются «игрушками». Чтобы облегчить выражение такой логики правил, люди также специально изобрели язык Пролог (Программирование в логике) в 1972 году для создания баз знаний и экспертных систем.
После 1980-х годов статистические модели произвели революцию в области искусственного интеллекта и обработки естественного языка — люди начали аннотировать корпуса для разработки и тестирования модулей НЛП: скрытые марковские модели использовались для маркировки частей речи в 1988 году. В 1990 году IBM объявила о первой система статистического машинного перевода, а в 1995 году появился первый надежный синтаксический анализатор (основанный на статистике). В погоне за более высокой точностью люди продолжают маркировать более крупные корпуса (TREC Question Answer Corpus, CoNLL Named Entity Recognition, Semantic Role Labeling и Dependency Syntax Corpus). Развитие больших корпусов и аппаратных средств привлекает людей к применению более сложных моделей. К 2000 году широко использовался ряд моделей машинного обучения, таких как перцептроны и условные случайные поля. Вместо того, чтобы полагаться на жесткие системы правил, люди ожидают, что машины будут автоматически изучать языковые правила. Чтобы повысить точность системы, либо переключитесь на более совершенную модель, либо аннотируйте больше корпусов. Отныне системы НЛП можно надежно расширять, не полагаясь на правила, написанные от руки экспертами. Но у экспертов по-прежнему есть свое место, и разработка шаблонов признаков (представляющих корпус в форме, понятной компьютерам) для статистических моделей, основанных на лингвистических знаниях, стала непосредственным подходом, процессом, известным как «разработка признаков». В 2010 году синтаксический анализатор зависимостей Turbo на основе SVM достиг точности 92,3 % в английском Penn Treebank①, который в то время был самой современной системой. Эта книга посвящена знакомству с некоторыми практическими статистическими моделями и реализациями, которые не являются недостижимыми технологиями, но могут быть реализованы полностью и работать на обычных аппаратных ресурсах.
После 2010 года размер корпуса и аппаратная вычислительная мощность значительно увеличились, что создало условия для возрождения нейронных сетей. Однако с увеличением размеченных данных точность традиционных моделей становилась все менее очевидной, а людям нужны более сложные модели, поэтому в поле зрения исследователей вернулись глубокие нейронные сети. Нейронные сети до сих пор являются типом статистической модели, теория которой основана примерно в 1950-х годах. В 1951 году Марвин Ли Мински разработал первую машину для моделирования нейронной сети. В 1958 году Розенблатт впервые предложил модель нейронной сети, способную имитировать способность человеческого восприятия — знаменитый персептрон. В 1989 году Янн ЛеКун из Bell Labs обучил первую глубокую сверточную нейронную сеть для распознавания рукописных цифр с использованием набора данных Почтовой службы США. Нейронные сети, ограниченные только объемом вычислительной мощности и данных, не получили широкого распространения примерно до 2010 года и были названы новым термином «глубокое обучение», чтобы отличить их от предыдущих неглубоких моделей. Прелесть глубокого обучения заключается в том, что оно больше не полагается на экспертов для формулирования шаблонов функций, а может автоматически изучать абстрактные представления необработанных данных, поэтому оно в основном используется для изучения представлений. В качестве вводной книги мы вводим только некоторые концепции и приложения в последней главе, как мост между традиционными методами и глубоким обучением.
① 准确来讲,是斯坦福标准下忽略标点符号的 Unlabeled Attachment Score,将会在第12 章中详细介绍。
1.3.4 Правила и статистика
Чистые системы правил приходят в упадок, а экспертные системы устарели, за исключением некоторых простых задач. В 1970-х годах, когда Джариник, академик Американской инженерной академии, разрабатывал систему распознавания речи в лаборатории IBM, он однажды заметил: «Каждый раз, когда я увольняю лингвиста, точность моей системы распознавания речи немного улучшается. ① Это широко распространенное быстрое обсуждение немного грубо, но справедливо сказать, что по мере развития машинного обучения роль экспертов в предметной области уменьшается.
В практической инженерии лингвистические знания выполняют две функции: первая — помочь нам разработать более краткие и эффективные шаблоны функций, а вторая — сыграть роль в построении корпуса. На самом деле, работающая система по-прежнему использует некоторые написанные от руки правила в частях препроцессинга и постобработки. Конечно, есть и частные случаи, с которыми удобнее иметь дело по правилам.
Эта книга уважает инженерную практику и знакомит с построением практических систем НЛП на основе статистики и правил.
1.3.5 Традиционные методы и глубокое обучение
Хотя глубокое обучение достигло блестящих результатов в области компьютерного зрения, оно не приложило особых усилий для решения основных задач в области обработки естественного языка. Этот вывод может показаться немного неожиданным, поскольку специалист по науке о данных лучше всего использует данные для объяснения проблем. В таблице 1-2 перечислены современные показатели точности для задач маркировки частей речи в корпусе Wall Street Journal.
① 原话是“Every time I fire a linguist, the performance of the speech recognizer goes up”。
② “作者姓 ( 年份 )”是一种常见的论文引用格式,可通过该信息(必要时加入主题关键词)搜索到论文。
По состоянию на 2015 год все системы, кроме Bi-LSTM-CRF, являются традиционными моделями с наивысшим уровнем точности 97,36%, в то время как модель глубокого обучения Bi-LSTM-CRF составляет 97,55%, то есть улучшение всего на 0,19%. В 2016 году традиционная система NLP4J достигла точности 97,64% за счет использования дополнительных данных и алгоритмов извлечения динамических признаков.
Аналогичная ситуация повторяется в задаче синтаксического анализа, в качестве примера взята точность Pennsylvania Treebank по Стэнфордскому стандарту, как показано в Таблице 1-3.
В 2014 году первый нейросетевой парсер не был таким точным, как традиционная система TurboParser, и после нескольких лет разработки показатель точности наконец достиг 95,7%, что на 3,4% выше, чем у традиционного алгоритма. Это достижение очень важно для академических кругов, но не очевидно для практического использования.
С другой стороны, глубокое обучение включает в себя большое количество матричных операций и требует ускорения от специального вычислительного оборудования (GPU, TPU и т. д.). В настоящее время цена башенного сервера начального уровня составляет около 3000 юаней, а виртуальный сервер стоит всего около 50 юаней в месяц, но только вычислительная видеокарта начального уровня стоит 5000 юаней. С точки зрения экономической эффективности традиционный метод машинного обучения больше подходит для малых и средних предприятий.
Кроме того, переход от традиционных методов к глубокому обучению не может быть осуществлен в одночасье. Эти два отношения являются базовыми и расширенными.Многие базовые знания и базовые концепции будут проще и понятнее с помощью традиционных методов, и они также будут неоднократно использоваться в глубоком обучении (например, в сочетании CRF и нейронной сети). Будь то традиционные модели или нейронные сети, все они подпадают под понятие машинного обучения. Овладение традиционными методами может не только решить инженерные задачи в условиях ограниченных вычислительных ресурсов, но и заложить прочную основу для будущих задач глубокого обучения.
1.4 Машинное обучение
В предыдущих разделах мы столкнулись с некоторыми терминами машинного обучения. Согласно идее рекурсивного обучения, теперь давайте рекурсивно разберемся в основных понятиях машинного обучения.
Хотя эта книга в первую очередь ориентирована на обработку естественного языка и не будет содержать отдельной главы, посвященной машинному обучению, в ней по-прежнему будут представлены алгоритмы машинного обучения, когда это уместно. Машинное обучение является краеугольным камнем обработки естественного языка, и некоторые базовые концепции все еще необходимо освоить заранее. Знание этих терминов также облегчает нам беглое общение с другими людьми.
1.4.1 Что такое машинное обучение
Артур Сэмюэл, пионер в области искусственного интеллекта, определил машинное обучение в 1959 году как метод расширения возможностей компьютеров без прямого программирования.
Проницательные читатели, возможно, задавались вопросом, а могут ли компьютеры выполнять только действия, разработанные людьми? Машинное обучение дает положительный ответ на этот вопрос: машины могут учиться улучшать свои способности без необходимости жесткого кодирования этой способности программистами. Том Митчелл, академик Американской инженерной академии, дал более четкое определение: под машинным обучением понимается способность компьютера улучшать способность задачи за счет эмпирических данных задачи.
Проще говоря, машинное обучение — это алгоритмы, которые заставляют машины обучаться алгоритмам. Это утверждение немного запутано, поэтому лучше сравнить его со знакомой нам базой данных: «метаданные» в базе данных относятся к данным (имя таблицы, поля и т. д.), которые описывают данные, а строка это обычные данные. По аналогии алгоритм машинного обучения можно назвать «мета-алгоритмом», который направляет машину на автоматическое изучение другого алгоритма, используемого для решения практических задач. Чтобы избежать путаницы, люди часто называют изучаемый алгоритм моделью.
1.4.2 Модель
Модель — это математическая абстракция реальной проблемы, состоящая из гипотетической функции и ряда параметров. В качестве простого примера мы хотим предсказать пол, соответствующий китайскому имени. Предполагая, что китайские имена определяются знаком, выдаваемым функцией f x(), отрицательные числа представляют женщин, а неотрицательные числа представляют мужчин.
Определение выбранного нами f x() выглядит следующим образом:
где w и b — параметры функции, а x — аргумент функции. Таким образом, модель относится ко всей функции, включая параметры. Однако модель не включает конкретную независимую переменную x, поскольку независимая переменная вводится пользователем. Независимая переменная x — это вектор признаков, используемый для представления характеристик объекта.
Читатели могут понять уравнение (1.1) как уравнение прямой линии в средней школе, уравнение плоскости в старшей школе или уравнение гиперплоскости в многомерном пространстве. Короче говоря, не беспокойтесь об абстракции задачи, мы полностью реализуем этот случай в коде в главе 5.
1.4.3 Особенности
Признаки относятся к значению преобразования характеристик вещей, например, характеристики коров - 4 ноги и 0 пар крыльев, а характеристики птиц - 2 ноги и 1 пара крыльев. Итак, в проблеме гендерной идентификации, каковы характеристики китайских имен?
Прежде всего, для китайского имени фамилия не имеет ничего общего с полом, действительно важно имя. И компьютер не знает, какая часть — фамилия, а какая — имя. Фамилия является бесполезной функцией и не должна быть извлечена. Кроме того, есть некоторые специальные иероглифы (чжуан, ян, цзянь, сильный), которые обычно используются мужчинами, в то время как другие (ли, ян, лед, снег) обычно используются женщинами, а некоторые (вэнь, хай, бао, Джейд) ) унисекс. Давайте представим имя человека в форме, понятной компьютеру, и будет ли имя содержать эти слова или нет, станет самой простой характеристикой для размышления. В экспертной системе мы явно программируем:
Что, если кого-то зовут «Шэнь Яньбинь» ①? «Ян» звучит по-мужски, а «лед» по-женски, но на самом деле это имя предназначено для мужчин. Создается впечатление, что степень корреляции между каждым словом у мужчин и женщин различна, причем степень корреляции между «гусями» и мужчинами кажется больше, чем между «лед» и женщинами. Этот конфликт, похоже, разрешается «приоритетом», но работа этой машины остается за машиной. В машинном обучении «приоритет» можно рассматривать как вес признаков или параметры модели. Нам просто нужно определить ряд функций и позволить алгоритму автоматически определять их веса на основе данных. Чтобы облегчить компьютерную обработку, мы представляем их как признаки числового типа, процесс, называемый извлечением признаков. Возьмем в качестве примера извлечение признаков «Шэнь Яньбин», как показано в Таблице 1-4.
Количество признаков зависит от задачи, 2 признаков явно недостаточно для определения пола имени, и мы можем увеличить его до 4, как показано в таблице 1-5.
① 作家茅盾原名沈德鸿,字雁冰,以字行于世,因此“沈雁冰”同样为人熟知。
Иногда мы также можем добавить к функции информацию о местоположении, например, «заканчивается ли это снегом». Мы также можем объединить две функции, чтобы получить новые функции, такие как «оканчивается ли оно словом снег и предпоследнее слово дует», чтобы специальное имя «Симэнь Чуйсюэ» можно было обрабатывать по-особому, и оно не будет таким же. как «Сяосюэ», «Лу Сюэци» был сбит с толку.
В инженерии нам не нужно писать функции слово за словом, а нужно определить набор шаблонов для извлечения функций. Например, если имя — это имя, определите шаблон объекта как имя [1] + имя [2]. Пока мы просматриваем некоторые имена, объекты, которые могут быть объединены по имени [1] + имени [2], в основном покрытый. Такие шаблоны для автоматического извлечения объектов называются шаблонами объектов.
Как выбирать функции, как разрабатывать шаблоны функций, это называется проектированием функций. Чем больше признаков, тем больше параметров, чем больше параметров, тем сложнее модель. Сложность модели должна соответствовать набору данных.Согласно идее рекурсивного обучения, понятие набора данных будет представлено в следующем разделе.
1.4.4 Набор данных
Как сделать так, чтобы машина научилась автоматически получать параметры модели? Во-первых, должен быть комплекс упражнений. Есть много проблем, которые невозможно решить прямым написанием алгоритмов (правил) (например, распознавание пола имен, мы не можем сказать, какие имена мужские), поэтому мы подготовили большое количество примеров (имена людей x и их соответствующий пол y) как наборы упражнений, надеясь, что машина автоматически выучит образец китайских имен из набора упражнений. Среди них «примеры» обычно называют образцами.
Этот набор задач называется набором данных в области машинного обучения и корпусом в области обработки естественного языка и будет подробно описан в разделе 1.5. Существует много видов наборов данных, которые различаются в зависимости от задачи. Таблица 1-6 содержит некоторые часто используемые наборы данных.
При использовании набора данных мы должны учитывать не только его размер, качество аннотаций, но и его авторизацию. Большинство наборов данных коммерчески недоступны, а многие наборы данных в непопулярных областях также дефицитны. В настоящее время мы можем рассмотреть возможность маркировки себя.
1.4.5 Контролируемое обучение
Если этот набор задач имеет стандартный ответ y, то алгоритм обучения в настоящее время называется обучением с учителем. Алгоритмы контролируемого обучения позволяют машине сначала задать вопрос, затем сравнить его со стандартным ответом и, наконец, исправить ошибки модели на основе ошибки. В большинстве случаев ошибка однократного обучения недостаточно мала, и требуется повторное обучение и настройка. Алгоритм в настоящее время является итеративным алгоритмом, и каждое обучение называется итерацией. Обучение под наблюдением на японском языке называется «учитель あり», что означает «обучение с учителем». Предоставляя стандартные ответы, человек указывает на ошибки модели, выступая в роли учителя.
Этот процесс итеративного обучения на размеченном наборе данных называется обучением, а набор данных, используемый для обучения, называется обучающим набором. Результатом обучения является последовательность параметров (веса признаков) или модель. Используя модель, мы можем вычислить значение для любого имени, давая мужской вывод, если он неотрицательный, и женский вывод в противном случае. Этот процесс называется прогнозированием.
Подводя итог, процесс контролируемого обучения показан на рис. 1-5.
В примере распознавания пола:
● Неструктурированные данные имеют много названий, похожих на «Шен Яньбин» и «Дин Лин»;
● После ручной аннотации был получен размеченный набор данных, содержащий множество образцов, похожих на «Шэнь Яньбин = мужчина» и «Дин Лин = женщина»;
● Затем получить модель путем обучения алгоритма;
● Наконец, используя эту модель, мы можем предсказать пол любого имени (например, «Лу Сюэци»).
Имена, которые нужно предсказать, не обязательно появляются в наборе данных, но пока количество выборок достаточно, гендерный баланс сбалансирован, шаблоны признаков правильно разработаны и алгоритм реализован правильно, мы все равно можем ожидать высокого результата. показатель точности.
Кроме того, помеченные данные на рис. 1-5 на самом деле являются структурированными данными. Но из-за стоимости ручной аннотации ее иногда называют «золотыми данными», что сильно отличается от результатов, предсказанных моделью с некоторой погрешностью.
Эта книга начнется с главы 3, в которой будут подробно описаны некоторые практические методы контролируемого обучения в НЛП.
1.4.6 Обучение без учителя
Сможет ли машина учиться, если мы просто зададим ей вопрос и не дадим ей указание обратиться к ответу?
Да, обучение в настоящее время называется обучением без присмотра, а наборы задач без стандартных ответов называются неразмеченными наборами данных. Обучение без присмотра по-японски называется «обучение с учителем» なし, что означает «обучение без учителя». Без руководства учителя машина может только сказать, что находит связь между образцами, но не может узнать связь между образцом и ответом.
Неконтролируемое обучение обычно используется для кластеризации и уменьшения размерности, которые не требуют размеченных данных.
Кластеризация уже была представлена в разделе 1.2, поэтому мы не будем ее повторять. В примере распознавания пола, если мы решим сгруппировать ряд имен в 2 кластера, «Чжоу Шужэнь» и «Чжоу Лижэнь», вероятно, окажутся в одном кластере, а «Лу Сюэци» и «Цао Сюэцинь» — в другом. кластер. Это определяется сходством между образцами и степенью детализации кластеров, но мы не знаем, какие кластеры представляют самцов, а какие — самок, и их не всегда можно различить невооруженным глазом.
Снижение размерности относится к процессу преобразования точек выборки из пространства высокой размерности в пространство низкой размерности. Машинное обучение изобилует многомерными данными, например, в примере распознавания пола количество признаков легко превышает 2000, если оно характеризуется широко используемыми китайскими иероглифами. Если выборка имеет n признаков, выборка соответствует точке в n + 1-мерном пространстве, а дополнительное измерение используется для зависимой переменной функции гипотезы. Если мы хотим визуализировать эти точки выборки, мы должны уменьшить их до 2D или 3D пространства. Центральная идея некоторых алгоритмов уменьшения размерности состоит в том, чтобы попытаться не потерять информацию после уменьшения размерности или сделать дисперсию каждого измерения выборки в низкоразмерном пространстве как можно большей. Представьте себе такой крайний случай: несколько стальных труб одинаковой длины вставлены вертикально на ровную поверхность, и вершина этих стальных труб сведена к двумерной плоскости, которая представляет собой отверстие, оставшееся после вытаскивания стальной трубы. Длина стальной трубы одинакова по вертикали, и никакой полезной информации нет, поэтому ее отбрасывают.
Есть несколько неконтролируемых методов, которые также можно использовать для выполнения таких задач, как сегментация китайских слов, тегирование частей речи и синтаксический анализ. Неконтролируемое обучение заманчиво из-за обилия неструктурированных данных, хранящихся в Интернете. Однако во время неконтролируемого обучения обмен информацией между моделью и пользователем не происходит. Отсутствие контролируемого обучения приводит к тому, что модель не может уловить критерии пользователя, а окончательный прогнозируемый результат часто далек от идеального ответа в пользовательском представлении. разум. В настоящее время точность задач обучения НЛП без учителя всегда на десятки-десятки процентных пунктов ниже, чем обучение с учителем, которое не может соответствовать производственным требованиям.
Эта книга подробно расскажет о принципе и реализации алгоритма кластеризации в главе 10.
1.4.7 Другие типы алгоритмов машинного обучения
Если мы обучим несколько моделей, а затем выполним прогнозы на одном и том же экземпляре, мы получим несколько результатов. Если эти результаты в основном согласуются, экземпляр и результаты могут быть объединены в новую обучающую выборку для расширения обучающей выборки. Такой алгоритм① называется полууправляемым обучением. Обучение с полуучителем становится горячей темой исследований, потому что оно может всесторонне использовать как размеченные данные, так и многочисленные неразмеченные данные.
Между вещами в реальном мире часто существуют длинные причинно-следственные связи: нам нужно правильно выполнить ряд взаимосвязанных решений, чтобы получить конечный результат. Такие проблемы часто требуют прогнозов при планировании следующего решения на основе обратной связи с окружающей средой. Этот тип алгоритма называется обучением с подкреплением. Обучение с подкреплением дало впечатляющие результаты в решении задач, связанных с взаимодействием человека и компьютера, таких как автономное вождение, киберспорт и системы ответов на вопросы.
Эта книга предназначена для ознакомительного чтения и не будет углубляться в эти передовые темы. Но понимание существования этих ветвей помогает построить полную совокупность знаний.
① 称作启发式半监督学习,是所有半监督学习方法中最容易理解的一种。
1.5 Корпус
Корпус, как набор данных в области обработки естественного языка, является незаменимым набором упражнений для нас, чтобы научить машины понимать язык. В этом разделе мы рассмотрим общие корпуса в китайской обработке и тему построения корпусов.
1.5.1 Корпус сегментации китайских слов
Корпус сегментации китайских слов относится к набору предложений, правильно сегментированных людьми.
Возьмем, к примеру, знаменитый корпус «Жэньминь жибао» 1998 г. Этот корпус был составлен Институтом компьютерной лингвистики Пекинского университета и Fujitsu Research and Development Center Co., Ltd. с разрешения Информационного центра «Жэньминь жибао» от апреля 1999 г. по 2002 г. В конце апреля была завершена совместная маркировка. Размер корпуса достиг 26 миллионов китайских иероглифов, и корпус был коммерчески доступен в первой половине 1998 г. (около 13 миллионов знаков = около 7,3 миллиона слов).
На 2-м Международном конкурсе сегментации китайских слов в 2005 г. был опубликован корпус примерно за месяц. Примером этого является:
Во-первых, это вмешательство инфляции, а затем вызов дефляции.
Из этого простого аннотированного корпуса, без лингвистических знаний, можно найти вопрос: почему «инфляция» одно слово, а «дефляция» делится на два слова? Это связано с проблемами спецификаций тегов корпуса и внутренней согласованности среди тегировщиков. Мы подробно рассмотрим эти темы в последующих главах, а пока просто создайте впечатление, что нормы корпуса трудно сформулировать, а нормы трудно обеспечить.
На самом деле, хотя общее количество корпусов сегментации китайских слов невелико, существует множество фракций. Мы рассмотрим лицензирование, загрузку и использование этих корпусов в главе 3.
1.5.2 Корпус тегов частей речи
Это относится к корпусу, который сегментирован и каждому слову присвоена часть речи. Короче говоря, если мы хотим научить машины, что делать, мы должны показать им, что делать. По-прежнему взяв в качестве примера корпус «Жэньминь жибао», «Жэньминь жибао» в 1998 году содержало в общей сложности 43 части речи, и этот набор назывался набором тегов частей речи. Пример из этого корпуса:
迈向/v 充满/v 希望/n 的/u 新/a 世纪/n ——/w 一九九八年/t 新年/t 讲话/n (/w 附/v 图片/n 1/m 张/q )/w
Здесь каждое слово, разделенное косой чертой, является тегом части речи, и значение каждой части речи будет подробно рассмотрено в главе 7. В этом предложении стоит отметить, что частью речи слова «надежда» является «существительное» (сущ.). В других предложениях «надеюсь» также может использоваться как глагол.
1.5.3 Корпус распознавания именованных сущностей
Этот корпус вручную аннотируется существительными сущностями и категориями сущностей, которые касаются внутренних производителей текста. Например, корпус «Жэньминь жибао» содержит три именованных объекта: имя человека, название места и название учреждения:
萨哈夫/nr 说/v ,/w 伊拉克/ns 将/d 同/p [联合国/nt 销毁/v 伊拉克/ns 大规模/b 杀伤性/n 武器/n 特别/a 委员会/n] /nt 继续/v 保持/v 合作/v 。/w
Слова, выделенные жирным шрифтом в этом предложении, — это имена людей, мест и учреждений. Квадратные скобки являются составными словами. Мы можем заметить, что иногда составное название учреждения и название места образуют более длинное название учреждения. Это вложенное явление словообразования увеличивает сложность распознавания именованных объектов.
То, что имеет именованный тип объекта, зависит от того, что заботит производителя корпуса. В главе 8 этой книги мы покажем, как аннотировать корпус для распознавания названий истребителей.
1.5.4 Корпус синтаксического анализа
Общепринятым корпусом синтаксического анализа в китайском языке является CTB (китайский банк деревьев, китайский банк деревьев). Создание этого корпуса началось в 1998 г. После вклада Университета Пенсильвании, Университета Колорадо и Университета Брандейса было выпущено несколько улучшенных версий. . . . Взяв в качестве примера CTB версии 8.0, он содержит в общей сложности 3007 статей из новостей, радио и Интернета, в общей сложности 71 369 предложений, 1 620 561 слов и 2 589 848 символов. Каждое предложение подверглось токенизации, маркировке частей речи и синтаксической маркировке. Одно из предложений визуализируется, как показано на рисунке 1-6.
На рисунке 1-6 английские метки над китайскими словами обозначают часть речи, а стрелки указывают на два слова, имеющие грамматические связи.Конкретная связь указана метками на стрелках. Визуализация и использование корпусов синтаксического анализа будут рассмотрены в главе 12.
1.5.5 Корпус классификации текстов
Это относится к корпусу статей, которые были вручную аннотированы в соответствии с категорией, к которой они принадлежат. Очевидно, что по сравнению с четырьмя корпусами, описанными выше, объем данных корпуса текстовой классификации намного больше. Взяв в качестве примера знаменитый корпус классификации текстов Sogou, он содержит 10 категорий: автомобили, финансы, информационные технологии, здоровье, спорт, туризм, образование, вербовка, культура и военные.
Кроме того, столбцы на некоторых новостных веб-сайтах были отредактированы вручную и имеют высокую степень различия между собой, а также могут использоваться в качестве корпусов классификации текстов. Корпус классификации настроений является подмножеством корпуса классификации текстов, и категории ограничены «положительными», «отрицательными» и так далее.
Если категории и шкалы в этих корпусах не соответствуют реальным потребностям, мы также можем маркировать их по требованию. Процесс разметки на самом деле заключается в организации множества документов в разные папки.
1.5.6 Построение корпуса
Построение корпуса относится к процессу построения корпуса, который делится на три этапа: формулирование спецификации, обучение персонала и ручное аннотирование.
Разработка спецификации относится к анализу и разработке набора спецификаций аннотаций экспертами-лингвистами, которые включают определения набора аннотаций, примеры и методы реализации. В области сегментации китайских слов и маркировки частей речи наиболее известными спецификациями являются «Спецификации обработки корпуса современного китайского языка — сегментация слов и маркировка частей речи», выпущенные Институтом вычислительной лингвистики Пекинского университета и «Современная спецификация китайской маркировки частей речи.
Под обучением персонала понимается обучение комментаторов. Из-за ограниченности человеческих ресурсов не обязательно одна и та же группа людей формулирует и внедряет нормы. Крупномасштабные корпуса часто требуют, чтобы несколько человек совместно комментировали, и эти аннотаторы должны иметь последовательное понимание спецификации, иначе это приведет к внутренним конфликтам между аннотаторами и повлияет на качество корпуса.
Для различных типов задач было разработано много программного обеспечения для аннотаций, среди которых более зрелым является brat (инструмент быстрого аннотирования brat)①, который поддерживает такие задачи, как маркировка частей речи, распознавание именованных объектов и анализ синтаксиса. brat представляет собой типичную архитектуру B/S, сервер написан на Python, а клиент работает в браузере. По сравнению с другим программным обеспечением для аннотаций, самой большой изюминкой brat является функция совместной аннотации для нескольких человек. Кроме того, опыт работы с перетаскиванием также многое добавляет.
① 详见 http://brat.nlplab.org/。
1.6 Инструменты с открытым исходным кодом
В настоящее время сообщество с открытым исходным кодом предоставило множество отличных инструментов НЛП, которые предоставляют нам множество вариантов, таких как NLTK (набор инструментов для естественного языка), обычно используемый в обучении, CoreNLP, разработанный Стэнфордским университетом, и LTP (платформа языковых технологий), разработанная Харбинским технологическим институтом в Китае, разработано HanLP (Han Language Processing).
1.6.1 Сравнение основных инструментов НЛП
При выборе набора инструментов необходимо учитывать следующие вопросы: функциональность, точность, эффективность работы, эффективность использования памяти, масштабируемость, коммерческое лицензирование и активность сообщества. В таблице 1-7 сравниваются четыре основных инструментария НЛП с открытым исходным кодом.
Что касается скорости разработки этих инструментов с открытым исходным кодом, согласно тенденции количества звезд на GitHub, HanLP является самым быстрорастущим, как показано на рис. 1-7.
① 关于 HanLP 与 LTP 的具体性能对比,请参考 @zongwu233 的第三方开源评测:https://github.com/zongwu233/ HanLPvsLTP。关于 HanLP 与包括结巴、IK、Stanford、Ansj、word 在内的其他 Java 开源分词器的性能对比,可参考阿里巴巴架构师杨尚川的第三方开源评测:https://github.com/ysc/cws_evaluation。我不保证第三方开源评测的准确与公正,更不采信任何闭源评测。本书将在相关章节中详细介绍如何规范地评估常见 NLP 任务的精度。
② 截至 2019 年 8 月份在 GitHub 上的 Star 数量。
Кроме того, я также изучил принципы других проектов с открытым исходным кодом и извлек уроки из их превосходного дизайна. Но ведь код, написанный мной, самый понятный, поэтому с учетом вышеизложенных соображений в качестве реализации этой книги был окончательно выбран HanLP.
1.6.2 Интерфейс Python
Благодаря чистому дизайну Python вызов HanLP на этом динамическом языке экономит много времени. Рекомендуется попробовать его вне зависимости от того, знаком пользователь с Python или нет.
Интерфейс Python для HanLP предоставляется пакетом pyhanlp, и для его установки требуется всего одна команда:
$ pip install pyhanlp
Этот пакет зависит от Java и JPype. Пользователи Windows сталкиваются со следующими ошибками:
building '_jpype' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual
C++ Build Tools": http://visualstudio.microsoft.com/visual-cpp-build-tools/
Либо установите Visual C++, как будет предложено, либо установите более легкую Miniconda. Miniconda — это дистрибутив языка Python с открытым исходным кодом, обеспечивающий более простое управление пакетами. Во время установки отметьте два флажка, как показано на рис. 1-8.
Затем выполните следующую команду:
$ conda install -c conda-forge jpype1
$ pip install pyhanlp
Если вы столкнулись с проблемами, связанными с Java:
jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.
Установите среду выполнения Java①. Основной проект HanLP разработан на Java, поэтому требуется JDK или JRE. Если возникают другие ошибки, перейдите в раздел обсуждения проекта ②, чтобы сообщить о проблеме.
Если все пойдет хорошо, вы можете проверить результат установки, введя в командной строке следующую команду:
Если у пользователя Linux возникнут проблемы с правами доступа, ему потребуется выполнить sudo hanlp. Потому что при первом запуске pyhanlp автоматически загрузит jar-пакет HanLP (содержащий множество алгоритмов) и пакет данных (содержащий множество моделей) в системный путь pyhanlp.
Через командную строку мы можем легко вызывать общие функции, предоставляемые HanLP, без написания кода.
① 官网(http://www.oracle.com/technetwork/java/javase/downloads/index.html)推荐选择 JDK 8 以上版本。
Используйте команду hanlp segment для входа в интерактивный режим сегментации слов; введите предложение и нажмите Enter, HanLP выведет результат сегментации слов:
$ hanlp segment
商品和服务
商品/n 和/cc 服务/vn
当下雨天地面积水分外严重
当/p 下雨天/n 地面/n 积水/n 分外/d 严重/a王总和小丽结婚了
王总/nr 和/cc 小丽/nr 结婚/vi 了/ule
В Linux вы также можете перенаправить строки в качестве ввода:
$ hanlp segment <<< '欢迎新老师生前来就餐'
欢迎/v 新/a 老/a 师生/n 前来/vi 就餐/vi
УведомлениеWindows не поддерживает
Здесь тегирование частей речи выполняется по умолчанию, мы можем его отключить:
$ hanlp segment --no-tag <<< ' 欢迎新老师生前来就餐'
欢迎 新 老 师生 前来 就餐
Любая платформа поддерживает перенаправление файлового ввода/вывода, например, мы храним роман как input.txt:
$ head input.txt
第一章 隐忧
张小凡看着前方那个中年文士,也就是当今正道的心腹大患“鬼王”,脑海中一片混乱。
这些日子以来,他在深心处不时对自己往日的信仰有小小的疑惑,其实都根源于当日空桑山下茶摊里的一番对话。如今,又见故人,这份心情当真复杂,几乎让他一时间忘了此时此地的处境。
不过就算他忘了,旁边的人可不会忘。
小周伸手擦去了嘴边的鲜血,勉强站了起来,低声对张小凡、田灵儿二人道:“此人道行太高,不可力敌,我来拖住他,你们二人快走!”
说罢,他伸手一招,倒插在岩壁中到现在兀自在轻微振动的“七星剑”,似受他召唤,“铮”的一声破壁而出,飞回到他手上。
鬼王看了看小周,点了点头,脸上依然带着一丝微笑,道:“以你的道行,看来青云门门下年轻弟子一辈里,要以你为首。
想不到青云门除了这个张小凡,居然还有你这样的人才,不错,不错!”
张小凡吓了一跳,却发觉师姐田灵儿与那小周的眼光都瞄了过来,一时脸上有些发热,却不知道该说什么才好。
При перенаправлении романы можно токенизировать всего одной командой:
$ hanlp segment < input.txt > output.txt -a crf --no-tag
Здесь алгоритм сегментации слов задается как CRF через параметр -a. Мы подробно рассмотрим этот алгоритм в главе 6. Теперь давайте проведем перцептивное наблюдение за эффектом сегментации слов CRF:
$ head output.txt
第一 章 隐忧
张小凡 看着 前方 那个 中年 文士 , 也 就是 当今 正道 的 心腹大患 “ 鬼王 ” , 脑海中 一片 混乱。这些 日子 以来 , 他 在 深心 处 不时 对 自己 往日 的 信仰 有 小小 的 疑惑 , 其实 都 根源 于 当日 空桑山 下 茶摊 里 的 一番 对话 。
如今 , 又 见 故人 , 这 份 心情 当真 复杂 , 几乎 让 他 一 时间 忘 了 此时此地 的 处境 。不过 就算 他 忘 了 , 旁边 的 人 可 不会 忘 。
小周 伸手 擦去 了 嘴边 的 鲜血 , 勉强 站 了 起来 , 低声 对 张小凡 、 田灵儿 二 人 道 :
“ 此人 道行 太 高 , 不可力敌 , 我 来 拖住 他 , 你们 二 人 快走 !”
说罢 , 他 伸手 一 招 , 倒 插 在 岩壁 中 到 现在 兀自 在 轻微 振动 的 “ 七星剑 ” , 似 受 他 召唤 , “ 铮 ” 的 一 声 破壁 而 出 , 飞 回到 他 手上 。
鬼王 看 了 看 小周 , 点 了 点头 , 脸上 依然 带 着 一 丝 微笑 , 道 : “ 以 你 的 道行 , 看来 青云门 门下 年轻 弟子 一 辈 里 , 要以 你 为首 。
想不到 青云门 除了 这个 张小凡 , 居然 还有 你 这样 的 人才 , 不错 , 不错 ! ”
张小凡 吓了一跳 , 却 发觉 师姐 田灵儿 与 那 小周 的 眼光 都 瞄 了 过来 , 一时 脸上 有些 发热 , 却 不 知道 该 说 什么 才 好 。
Эффект, кажется, в порядке, такие слова, как «Король-призрак», «Гора Консан», «Меч семи звезд» и «Цинъюньмэнь», правильно сегментированы. Но есть еще вещи, которые не удовлетворяют. Например, почему используются слова «здесь и сейчас» и «шокирован»? Установлены ли эти критерии токенизации авторами токенизатора? Мы обсудим эти вопросы один за другим в последующих главах.
То же самое верно и для функции синтаксического анализа, всего одна команда:
Эти команды также поддерживают многие другие параметры, которые можно просмотреть с помощью параметра --help, чтобы увидеть последнюю справку:
После первоначального опыта работы с HanLP давайте посмотрим, как вызывать общие интерфейсы HanLP в Python. Вот большой, но неполный пример:
Общие функции HanLP можно вызывать через служебный класс HanLP без создания экземпляра. Для более полного ознакомления с другими функциями обратитесь к каталогу demos на GitHub: https://github.com/hankcs/pyhanlp/tree/master/tests/demos.
1.6.3 Java-интерфейс
Пользователи Java могут легко импортировать библиотеку HanLP через Maven, просто добавив следующие зависимости в pom.xml проекта:
Кроме того, вы можете посетить страницу выпусков https://github.com/hankcs/HanLP/releases, чтобы получить номер последней версии.
Затем вы можете позвонить в HanLP одним предложением:
System.out.println(HanLP.segment("你好,欢迎使用HanLP汉语处理包!"));
Часто используемые API по-прежнему инкапсулированы в классе инструментов HanLP. Вы можете узнать об использовании интерфейса на https://github.com/hankcs/HanLP. Конечно, вы также можете постепенно ознакомиться с этими функциями, как объясняется в книге.
Данные и программы HanLP разделены. Чтобы уменьшить размер пакета jar, переносимая версия содержит лишь небольшой объем данных. Для некоторых расширенных функций (токенизация CRF, синтаксический анализ и т. д.) вам необходимо загрузить дополнительные пакеты и указать HanLP местоположение пакетов через файлы конфигурации.
Если читатель установил pyhanlp, пакет данных и файл конфигурации уже установлены. Мы можем получить их пути с помощью следующей команды:
Последняя строка hanlp.properties — это необходимый файл конфигурации, нам просто нужно скопировать его в каталог ресурсов проекта src/main/resources (если такого каталога нет, создайте его вручную). На этом этапе HanLP загрузит данные из /usr/local/lib/python3.6/site-packages/pyhanlp/static, что означает совместное использование одного и того же набора пакетов данных с pyhanlp.
Если читатель не установил pyhanlp или хочет использовать независимые данные, это несложно. Просто посетите домашнюю страницу проекта https://github.com/hankcs/HanLP, загрузите data.zip и распакуйте его в каталог, например D:/hanlp. Затем скачайте и разархивируйте hanlp-1.7.5-release.zip, в полученном hanlp.properties установите в качестве родительского каталога папки данных первую строку root:
root=D:/hanlp
УведомлениеПользователи Windows, обратите внимание, что разделитель пути имеет одинаковую косую черту «/». По умолчанию «\» в Windows конфликтует с escape-символами большинства языков программирования, например, «\n» в «D:\nlp» будет фактически интерпретироваться Java и Python как новая строка, вызывая проблемы.
Наконец, просто переместите hanlp.properties в каталог ресурсов вашего проекта.
Поскольку в этой книге будет подробно рассказано о внутренней реализации HanLP, читателям также рекомендуется разветвить и клонировать исходный код на GitHub. Структура файлов в репозитории следующая:
Ограниченный размером файла репозиторий по-прежнему не содержит полной папки модели, и пользователям необходимо загрузить пакет данных и файл конфигурации. Существует два способа загрузки: автоматический и ручной. Код поддержки Java в этой книге будет загружаться и распаковываться автоматически во время работы, и пользователи также могут загружать и распаковывать его самостоятельно. Создайте каталог ресурсов и поместите в него hanlp.properties, как упоминалось ранее. Затем поместите загруженные данные/модель в соответствующий каталог репозитория. Принципиальная схема пройденного пути выглядит следующим образом:
Затем мы можем запустить код, поставляемый с книгой (сопутствующий код находится в src/test/java/com/hankcs/book). Теперь давайте запустим Hello Word (подробности см. в ch01/HelloWord.java):
HanLP.Config.enableDebug(); // 为了避免你等得无聊,开启调试模式说点什么
System.out.println(HanLP.segment("王国维和服务员"));
Запустив его, вы получите вывод, подобный следующему:
По сравнению с предыдущим примером они имеют следующие два отличия.
● Мы включили режим отладки, который будет выводить на консоль промежуточные результаты запущенного процесса.
● Мы используем версию репозитория GitHub, а словари и модели в этой версии представлены в текстовом виде. Словари в HanLP обычно имеют две формы: текстовую и двоичную, и их взаимосвязь аналогична исходному коду и программе. Когда двоичный файл не существует, HanLP загружает текстовый словарь и автоматически кэширует его как двоичный файл с тем же именем. Двоичные загрузки выполняются намного быстрее, чем текстовые, обычно в 5 раз быстрее. Например, в приведенном выше примере для загрузки текста потребовалось 341 мс, но для загрузки соответствующего двоичного файла при повторном запуске потребовалось всего 64 мс. Благодаря механизму кэширования и внутренне переписанному интерфейсу ввода-вывода HanLP может управлять холодным запуском системы в течение нескольких сотен миллисекунд. Это обеспечивает большое удобство для программистов при повторной отладке.
Давайте взглянем на вывод отладки, который разделен на два процесса: процесс грубого разделения и процесс подразделения. Результатом процесса грубой классификации является [царство/н, миротворчество/вн, официант/ннт], что явно неразумно①, и это предложение не следует понимать таким образом. Итак, в процессе подразделения алгоритм провел распознавание имени и вспомнил слово «Ван Говей». Затем алгоритм почувствовал, что [Wang Guowei /nr и /cc, официант /nnt] работает намного ровнее, поэтому принял его за окончательный результат.
Внутри алгоритма еще много деталей, но у нас уже есть оружие в руках. Базовый скелет, процесс ковки и сценарии использования конкретного оружия будут объясняться шаг за шагом в рекурсивной форме.
1.7 Обзор
В этой главе представлены миниатюры макросов и график разработки для ИИ, МО и НЛП. Машинное обучение — это часть искусственного интеллекта, а обработка естественного языка — это пересечение искусственного интеллекта, лингвистики и информатики. Хоть этот перекресток и небольшой, но очень сложный. Чтобы достичь великой цели понимания естественного языка, люди пробовали системы правил и в конечном итоге разработали статистические системы обучения, основанные на крупномасштабных корпусах.
В следующих главах давайте проследим эту эволюцию от простого к сложному решению первой задачи НЛП — сегментации китайских слов. Мы начнем с системы правил, введем несколько быстрых и неточных алгоритмов, а затем постепенно перейдем к более точным статистическим моделям.
① Причина называть это «неразумным», а не «неправильным», заключается в том, что мы не можем исключить существование независимого королевства в каком-то фантастическом мире с миротворческими силами, членами которых являются не воины, а официанты. Но такая вероятность очень мала и почти невозможна.
Эта статья взята из «Введение в обработку естественного языка».