[PDF] Неконтролируемый семантический анализ | Semantic Scholar
- DOI: 10.3115/1699510.1699512
- Идентификатор корпуса: 5337047
@inproceedings{Poon2009UnsupervisedSP, title={Неконтролируемый семантический анализ}, автор={Хойфунг Пун}, booktitle={Конференция по эмпирическим методам обработки естественного языка}, год = {2009} }
Мы представляем первый неконтролируемый подход к проблеме обучения семантического анализатора, используя марковскую логику. Наша система USP преобразует деревья зависимостей в квазилогические формы, рекурсивно создает из них лямбда-формы и группирует их, чтобы абстрагироваться от синтаксических вариаций одного и того же значения. Семантический анализ MAP предложения получается путем рекурсивного присвоения его частей кластерам лямбда-формы и их составлению. Мы оцениваем наш подход, используя его для извлечения базы знаний из…
Просмотр в ACL
dl.Обоснованный неконтролируемый семантический анализ
- Hoifung Poon
- 2013
Информатика
ACL
Байесовская модель для неконтролируемого семантического анализа
- Иван Титов, А. Клементьев
- 2011
Информатика
ACL
Слабо контролируемое обучение семантических парсеров
- Джаянт Кришнамурти, Том Майкл Митчелл
- 2012
Информатика
EMNLP
Неконтролируемая индукция онтологии из текста
- Hoifung Poon, Pedro M. Domingos
- 2010
Информатика
ACL
Изучение композиционной семантики для семантического анализа открытых областей
- Фонг Ле, Виллем Х. Зуидема
- 2012
Информатика
COLING
Обзор семантического анализа
- Айшвария Камат, Р. Дас
- 2019
Информатика
AKBC
Использование семантических подсказок для изучения синтаксиса
- Тахира Насим, Р. Барзилай
- 2011
Информатика
AAAI
Обследование семантического анализа
- Коннор Хили, DB Wilfrid Laurier
- 2019
Commorting Science
Неконтролируемый семантический анализ, управляемый доверием
- Дэн Голдвассер, Рой Райхарт, Дж. Кларк, Д. Рот
- 2011
Информатика
ACL
Использование семантических подсказок для изучения синтаксиса Цитирование
- Тахира Насим, Р. Барзилай
- 2011
Информатика
Обучение преобразованию предложений в логическую форму: структурированная классификация с вероятностными категориальными грамматиками
- Люк Зеттлемойер, М. Коллинз
- 2005
Информатика
UAI
Обучение семантическому анализу
- Р. Муни
- 2007
Информатика
CICLing
Изучение композиционно-семантического анализатора с использованием существующего синтаксического анализатора
- Жуйфанг Ге, Р. Муни
- 2009
Информатика
ACL
Извлечение семантических сетей из текста с помощью реляционной кластеризации
- Стэнли Кок, Педро М. Домингос
- 2008
Информатика
ECML/PKDD
Генерация типизированных синтаксических анализов зависимостей из синтаксических анализов фразовой структуры
- М. Марнефф, Билл Маккартни, Кристофер Д. Мэннинг
- 2006
Информатика
LREC
DIRT @SBT@обнаружение правил вывода из текста
- Декан Лин, П. Пантель
- 2001
Информатика
KDD ’01
DIRT – обнаружение правил вывода из текста
- Декан Лин, П. Пантель
- 2001
Информатика
Оценка на основе зависимостей Minipar
- Dekang Lin
- 2003
Компьютерная наука
Неконтролируемые методы определения синонимов объектов и отношений в Интернете
- A. Yates, Oren Etzioni
- 2009
Информатика
J. Artif. Интел. Рез.
Онлайн-обучение упрощенным грамматикам CCG для преобразования в логическую форму
- Люк Зеттлемойер, М. Коллинз
- 2007
Информатика
EMNLP
Упрощение разработки пакетов Crossplane
Как мы объясняли в посте с объявлением об альфа-тестировании, основной проблемой, о которой мы слышали от сообщества и наших клиентов, является то, насколько сложно создавать инфраструктуру, что, если быть честным, не сильно удивительно. Сегодня отдельному создателю пакета Crossplane в основном предоставляется возможность редактирования простого текста, что далеко от опыта разработки с помощью IDE, к которому многие из нас привыкли (подумайте о WYSIWYG в сравнении с Google Docs или Microsoft Word).
В этом посте мы расскажем, почему это так, и начнем погружаться в то, что мы сделали, чтобы попытаться облегчить часть этой боли. Прежде всего, мы углубимся в то, как мы предоставляем автору механизм для визуализации проверки/диагностики линтера, пока они создают/редактируют свою составную инфраструктуру.
Фон
Большая часть того, что мы обсудим, будет в контексте кода Visual Studio; однако я хотел бы подчеркнуть, что темы не ограничиваются VS Code. Как мы увидим, многое из того, что мы рассмотрим, можно применить к Atom, Goland, Vim и т. д.
Отлично, помня об этом, давайте приступим.
Сегодня, когда нам нужно создать/отредактировать манифест ресурса Kubernetes, многие из нас начинают с добавления следующих расширений в ваш экземпляр VS Code:
- YAML поддержка языка
- Поддержка Kubernetes
Возможно, в большинстве случаев этого будет достаточно. Благодаря расширению поддержки языка YAML вы получите множество замечательных функций:
- Проверка YAML
- Автодополнение
- Форматирование
- и т. д.
А из расширения Kubernetes вы сможете:
- Просматривать репозитории Helm.
- Файлы Lint YAML для потенциальных проблем/предложений.
- Отредактируйте манифесты ресурсов и примените их к своему кластеру.
- Просмотр различий текущего состояния ресурса с манифестом ресурса в репозитории Git.
- Получить и следить за журналами.
- и т. д.
В общем, оба расширения отлично справляются с проверкой/анализом манифестов ресурсов по соответствующей схеме ресурса. Однако, не по своей вине, оба расширения терпят неудачу при представлении манифеста `Composition`.
Почему? Ну, наверное, самый простой способ ответить на этот вопрос — посмотреть на схему Composition .
Если вы никогда не углублялись в него раньше, тип Composition определяется как CustomResourceDefinition в Kubernetes. Как и в случае любого CRD, вам необходимо определить схему openAPIv3Schema , которая сообщает Kubernetes, какой будет форма вашего нового API. Из этого следует, что чем выразительнее схема API, тем проще будет указывать ошибки при проверке данного файла по вашей схеме.
Например (используя пример CronTab CRD):
Если в вашем CR вы указали:
Когда вы примените этот ресурс к своему кластеру, Kubernetes вернет ошибку, указывающую, что cronSpec должен был иметь тип string, но вы предоставил логическое значение.
Однако, если вместо этого вы измените приведенную выше схему CRD на:
, вы теперь сможете свободно определить cronSpec, если он находится в объекте. Это означает, что все нижеследующие пройдут проверки:
Выше мы подошли к корню нашей проблемы. Возвращаясь к Composition CRD, мы можем видеть здесь, что там, где мы определяем ресурсы, составляющие Composition, то есть шаблоны ресурсов, в base тип определяется как объект.
Теперь, прежде чем мы начнем делать поспешные выводы, т.е. «давайте определим более ограничительную схему для spec.resources[*].base , проблема решена», нам нужно сделать шаг назад. Сила Состав — это возможность составлять любой ресурс , независимо от того, является ли он автономным, когда вы хотите определить более ограниченный API для своих потребителей или состоит из других ресурсов, например. база данных с политикой доступа. Если бы мы определили более ограничительную схему для spec. resources[*].base , это фактически подорвало бы нашу способность в общем «составлять любой ресурс».
Так что же нам делать?
Language Server
Ранее мы кратко обсуждали расширение поддержки языка YAML. Если вы когда-нибудь изучали, что входит в это расширение, вы можете быть удивлены, обнаружив, что большая часть мощности, стоящей за ним, на самом деле исходит от соответствующего yaml-language-server, а не от расширения JS, установленного в самом VS Code.
Итак, что такое «языковой сервер».
Краткая история
От самих Microsoft:
Языковой сервер — это особый вид расширения Visual Studio Code, который расширяет возможности редактирования для многих языков программирования. С помощью языковых серверов вы можете реализовать автозаполнение, проверку ошибок (диагностику), переход к определению и многие другие языковые функции, поддерживаемые в VS Code.
Однако при реализации поддержки языковых функций в VS Code мы обнаружили три общие проблемы:
Во-первых, языковые серверы обычно реализуются на своих собственных языках программирования, и это создает проблемы при их интеграции с VS Code, который имеет среду выполнения Node. js.
Кроме того, языковые функции могут требовать больших ресурсов. Например, чтобы правильно проверить файл, Language Server должен проанализировать большое количество файлов, построить для них абстрактные синтаксические деревья и выполнить статический анализ программы. Эти операции могут привести к значительному использованию ЦП и памяти, и нам необходимо убедиться, что производительность VS Code не пострадает.
Наконец, интеграция многоязыковых инструментов с несколькими редакторами кода может потребовать значительных усилий. С точки зрения языковых инструментов им необходимо адаптироваться к редакторам кода с различными API. С точки зрения редакторов кода, они не могут ожидать какого-либо единого API от языковых инструментов. Это делает реализацию языковой поддержки для M языков в N редакторах кода работой M * N. Чтобы решить эти проблемы, Microsoft определила протокол Language Server, который стандартизирует связь между языковыми инструментами и редактором кода. Таким образом, языковые серверы могут быть реализованы на любом языке и работать в своем собственном процессе, чтобы избежать снижения производительности, поскольку они взаимодействуют с редактором кода через протокол языкового сервера. Кроме того, любые языковые инструменты, совместимые с LSP, можно интегрировать с несколькими редакторами кода, совместимыми с LSP, а любые редакторы кода, совместимые с LSP, могут легко подобрать несколько языковых инструментов, совместимых с LSP. LSP — это выигрыш как для поставщиков языковых инструментов, так и для поставщиков редакторов кода!
Учитывая вышеизложенное, то, что сделали ребята из Red Hat, внедрив языковой сервер для обеспечения всесторонней поддержки YAML, сами позиционируют себя для предоставления мощных языковых функций любому клиенту , который может общаться по протоколу языкового сервера. На самом деле мы упомянули некоторые из этих клиентов в начале раздела «История» — Atom, IntelliJ (а также другие редакторы JetBrains), Vim и многие другие.
Если бы мы могли последовать их примеру и написать языковой сервер для ответа на события от данного клиента, совместимого с LSP, мы могли бы:
- Потенциально решить ряд проблем, с которыми авторы сталкиваются в настоящее время при создании/редактировании ресурсов Crossplane.
- Решите один раз. Написание сервера означает, что его можно использовать с любым совместимым клиентом.
Именно это мы и сделали.
Проверка шаблона ресурса с помощью
xplsДо этого момента мы обсуждали проблему, которую пытаемся решить, и почему это проблема. Мы также кратко обсудили архитектурное решение того, как мы собираемся настроить себя для решения проблемы (используя языковой сервер). Давайте теперь углубимся в то, как мы предоставляли проверочную диагностику клиентам LSP.
Примечание: мы собираемся сосредоточиться в первую очередь на самой проверке и не касаться того, как мы реализовали обработчики языкового сервера для ответа на запросы от клиентов LSP. В мире существует довольно много примеров того, как люди реализовывали обработчики LSP. Так что, если вам интересно углубиться в это, я настоятельно рекомендую ознакомиться с этими примерами.
Примечание. Реализация обработчиков LSP для
xpls
можно найти здесь.
Давайте начнем с того, что мы пытаемся сделать. Начиная с хорошо известного примера, взятого прямо из документации crossplane.io, приведенная ниже композиция описывает ресурсы, из которых состоит XPostgreSQLInstance :
. проверки схемы на всем пути вниз, пока мы не достигнем (если мы использовали одно из расширений, упомянутых ранее):
по адресу spec.resources[0].base (на языке пути YAML).
Здесь у нас есть манифест для v1beta1/RDSInstance из группы database.aws.crossplane.io , т.е. авс упаковка. Если бы у нас был способ использовать CRD для RDSInstance И способ получить только манифест RDSInstance из «Композиции», мы потенциально могли бы использовать те же механизмы, которые API-сервер Kubernetes использует для проверки пользовательских запросов ресурсов перед созданием ресурса. .
Как Kubernetes проверяет запросы пользовательских ресурсов на соответствие CRD
Несколько месяцев назад мой коллега Дэниел Мангам написал в блоге подробное описание того, как Kubernetes проверяет пользовательские ресурсы. Вкратце о том, что он обнаружил, было то, что в apiextensions-apiserver есть функция с именем NewSchemaValidator , которая принимает в качестве аргумента apiextensions.CustomResourceValidation и возвращает:
- Новый validate.SchemaValidator, созданный на основе OpenAPIV3Schema из CustomResourceValidation.
- Преобразованная спец.Схема из OpenAPIV3Schema.
- И ошибка, если она есть.
Фрагмент выглядит следующим образом:
После создания validate.SchemaValidator каждый раз, когда на сервер API поступает новый запрос пользовательского ресурса, неупорядоченное представление передается Метод Validate() , который затем возвращает результаты проверки (ошибки и предупреждения) в форме validate.Result .
Наконец, члены validate.Result выглядят так:
Несмотря на то, что они относятся к типу error , они также относятся к типу errors.Validation 9 0300, член которого Имя фактически владеет Строка пути YAML, где произошла ошибка/предупреждение проверки, например. что-то вроде спец.ресурсы[0].connectionDetails[1].fromConnectionSecretKey . Это, в сочетании с данными, добавленными в поле сообщения , и вы получите сообщение, подобное следующему, если вы отправили число в качестве значения для fromConnectionSecretKey :
Как мы можем изолировать ресурс манифест шаблона в композиции
Учитывая все «тонкие» ссылки на использование пути YAML выше, в идеале, если бы мы могли найти способ проанализировать Композиция файла в YAML AST и впоследствии иметь возможность перемещаться по дереву с использованием нотации пути YAML, у нас будет две части нашей головоломки: использование нотации пути YAML теоретически упрощает поиск той части файла, которую мы хотим для проверки, а также для изоляции части файла, в которой произошла ошибка проверки.
К счастью, существует отличный проект с открытым исходным кодом под названием goccy/go-yaml, который делает именно это. Используя API, предоставляемые go-yaml, мы можем:
- Прочитать каждый файл из файловой системы рабочей области.
- Разобрать файл в AST.
- Сохраните AST для быстрого поиска позже.
Затем, учитывая AST, мы можем отфильтровать Node внутри дерева, используя строку пути YAML, например. используя наш пример выше, учитывая AST, представляющий
. Мы можем сделать что-то подобное, чтобы получить узел, соответствующий манифесту RDSInstance :
Как получить CustomResourceDefinition для нашего шаблона ресурсов
Те, кто ранее создавал пакет Crossplane, знают, что необходимо определить файл crossplane.yaml . Этот файл используется для того, чтобы указать Crossplane, как устанавливать компоненты, из которых состоит ваш пакет. Пример этого, опять же с использованием хорошо известного пакета Getting-start-with-aws , выглядит так:0297 спец. зависит от поля . Мы определили, что этот пакет «зависит» от API-интерфейсов, которые исходят от crossplane/provider-aws , в частности версии `v0.18.2`.
Подробнее об управлении зависимостями мы поговорим в одном из последующих постов этой серии. На данный момент мы используем это объявление для извлечения внешнего CustomResourceDefinition, который соответствует RDSInstance в нашем примере.
Все вместе
В последних нескольких разделах мы рассмотрели критические компоненты, которые мы можем использовать вместе, чтобы информировать автора композиции о любых ошибках в их шаблонах ресурсов. Давайте рассмотрим, как это выглядит, приведя события, полученные языковым сервером:
- Пользователь сохраняет свой файлcomposition. yaml, который содержит композицию xpostgresqlinstances.aws.database.example.org из нашего примера выше.
- xpls , Crossplane Language Server, получает соответствующие textDocument/didSave событие от клиента LSP, которое включает URI пути к измененному файлу.
- Сервер считывает содержимое файла composition.yaml , который был только что сохранен, и этот файл анализируется в его представление AST.
- Тип групповой версии (GVK) составного ресурса
5. Затем узел AST, соответствующий составному ресурсу, передается в SchemaValidator Validate() метод для получения проверки Результат .
Наконец, на шаге 6 для каждой ошибки проверки Результат извлекается Имя и Сообщение :
9036 8Резюме
В этом посте мы рассмотрели, почему в существующих инструментах для проверки композиции существует пробел, что такое языковой сервер и почему он был хорошим выбором для включения наших циклов обратной связи проверки, мы дали обзор того, как Kubernetes проверяет запросы пользовательских ресурсов на соответствие CustomResourceDefinition и, наконец, то, как мы объединили все эти концепции, чтобы приступить к устранению пробелов в рабочем процессе автора при работе с ресурсами Crossplane.