Немного о неопределенности и нечеткости в онтологиях

Abstract

В данном небольшом очерке я попытаюсь немного приоткрыть завесу тайны над проблемой неопределенных и неточных знаний в онтологиях вообще и в OWL в частности. Он никак не может претендовать на полноценную статью, но все же может быть полезен тем, кто удивляется, почему в стандарте OWL по-прежнему нет никакой нечеткой логики (более того, она даже не обсуждается в контексте OWL 2) и тому подобного. Вообще по данной теме можно говорить много и спорить до хрипоты, но для начала я попытаюсь обрисовать ситуацию в самом общем плане.

Перед тем как начать или извинения автора

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

Введение

Самая главная проблема, связанная с неточностью и неопределенностью в онтологиях — это то, что 90% людей, бурно утверждающих, что им нужны средства построения неточных онтологий, не понимают, зачем именно они нужны и как эти средства будут использоваться. Из оставшихся 10% 90% не представляют себе семантику неточных знаний и то, что она бывает очень разной. При этом даже последний 1% не может договориться о наилучшей математической теории и общей семантической базе для неточных знаний. Ну и наконец, мало кто из теоретически грамотных людей берется это реализовывать. Вопрос: почему?

Чтобы ответить на него, попробуем понять, что такое эта пресловутая неопределенность (нечеткость, неточность и т.д.). Очевидно, что большая часть каких-либо высказываний в реальном мире делается с определенной степенью точности. Например, «Анне 25 лет» не означает, что Анне исполнилось 25 в настоящую секунду, а «это дорогой ресторан» и вовсе требует контекста для определения что значит «дорогой». При этом многие неточно определенные знания — это такая же часть предметной области, как и определенные. Например, сведения о том, что не менее 80% студентов — молодые люди, имеет точно такое же право на присутствие в онтологии, как и, например, то, что студенты и профессоры — это непересекающиеся (disjoint) классы. Однако для представления вторых у нас есть аксиомы в OWL. Для представления первых нет фактически никаких стандартных средств.

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

Классификация «неидеальных» знаний

Итак, на практике приходится иметь дело как минимум со следующими видами знаний (ниже я попробую пояснить различия):

  • Неопределенные высказывания. Пример: «дождь пойдет с вероятностью 80-90%».
  • Нечеткие высказывания. Пример: «Анна — молодая женщина». Или: «найдите мне недорогие рестораны неподалеку«.
  • Двусмысленные высказывания. Пример: «Мне нравится Вашингтон«.
  • Субъективные высказывания. Пример: «Я не верю, что пингвины могут летать».

Перед тем, как перейти к их рассмотрению, а именно, разнице между ними и как их представлять в онтологиях, давайте определимся с терминологией.

Итак, под неидеальными знаниями (imperfect knowledge) я буду понимать знания, относящиеся к одной из вышеперечисленных категорий. При этом знания первого типа я буду называть неопределенными (uncertain), а второй — нечеткими (vague или fuzzy). Остальным типам я уделю меньше внимания, так как в моей практике их практически всегда удается свести к одной из первых двух категорий.

Неопределенность или нечеткость?

На первый взгляд может показаться, что термины «неопределенность» и «нечеткость» являются синонимами. Однако если повнимательнее присмотреться к примерам выше, то возможно, где-то на уровне интуиции разница и проявится. Я же попытаюсь определить ее более формально.

Под неопределенностью мы будем понимать ситуацию, при которой высказывание (или логическая формула) может быть либо истинной, либо ложной, однако данный факт нам неизвестен. Рассмотрим пример высказывания «Павел успеет на свой рейс в Амстердам завтра в 16:40». Абсолютный факт заключается в том, что либо я успеваю на этот самолет завтра, либо нет. Это пока неизвестно, но зато точно известно, что я не могу частично или в какой-то степени успеть на этот рейс. Другой пример: нельзя быть немножко беременной.

Под нечеткостью мы будем понимать высказывания (логическую формулу), истинность которой может принимать множество значений в интервале [Ложь, Истина] (или [0, 1]). Другими словами, высказывание может быть истинным в какой-то степени. Это явление часто связано с субъективностью. Например, высказывание «Павел молод» может быть истинным на 0.9 для моего отца и на 0.4 для моего младшего брата.

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

Я отношусь к тем, кто предпочитает рассматривать эти два вида неидеальных знаний по отдельности в связи с вышеозначенными различиями. Как будет показано ниже, это различие имеет огромное значение для семантики неидеальных знаний. Я также скептически отношусь к попыткам использования единой математической теории для формализации обоих видов знаний. Вместо этого, имеет смысл использовать теорию вероятностей (ТВ) для формализации неопределенностей и множественную логику (many-valued logic) для формализации нечеткости. К множественным логикам относится и знаменитая нечеткая логика (Fuzzy Logic или НЛ).

Вероятностная и нечеткая семантика

Теперь вернемся к онтологиям, а точнее к OWL и попытаемся понять, как можно расширить семантику OWL для представления неопределенных и нечетких знаний. Здесь я буду полагаться на то, что у вас есть определенное знакомство с формальными основами OWL, а именно — описательной логикой (Description Logic или DL). Если нет, то я все равно постараюсь сделать материал доступным, но очень рекомендую ознакомиться с DL, которая в настоящее время является наиболее активно используемым формализмом для представления знаний в онтологиях.

Начнем с классической семантики DL (все помнят, что такое семантика в логике?). Синтаксис DL состоит из атомарных классов и конструкторов сложных классов, например, операторов пересечения, объединения, отрицания, ограничений на роли (кванторы существования и универсальности) и т.д. В данном случае синтаксис менее важен. Гораздо важнее, что семантика основывается на теории множеств (наивной теории множеств, если быть точным). Это означает, что интерпретацией каждого класса, атомарного или сложного, всегда является множество. Например, одной из интерпретаций класса «Автомобиль» может являться множество всех объектов реального мира, имеющих 4 колеса.

Теперь, представим, что мы хотим моделировать неидеальные знания о классе A. Первое, что мы можем сделать — это расширить наш синтаксис DL, добавив в него некое число, которое будет сопровождать аксиомы типа «x — элемент A». Теперь аксиома будет выглядеть так: «(x — элемент A, p)», где p призвано численно характеризовать степень неидеальности. Теперь мы можем добавить аксиомы типа «(Павел — элемент класса МолодойЧеловек,0.4)» и «(Павел — элемент класса ПассажирРейсаKL10800,0.99)». Подобные аксиомы можно легко формулировать и сейчас, достаточно воспользоваться аннотациями OWL 1.1, которые будут еще немного расширены в OWL 2. Однако аннотации не имеют семантики, а для наших целей главный вопрос заключается в том, какова семантика этих знаний.

Вот тут-то и проявляется разница между неопределенными и нечеткими знаниями. В первом случае, класс МолодойЧеловек не может интерпретироваться в виде классического множества, поскольку даже при наличии полных знаний, не существует единого ответа на вопрос, принадлежит ли указанный элемент (Павел) этому множеству. Для таких случаев была предложена концепция нечетких множеств, т.е. множеств, степень принадлежности к которым может варьироваться в интервале [0,1]. Т.е. выражаясь формально, интерпретацией класса МолодойЧеловек будет функция принадлежности элемента нечеткому множеству, а интерпретацией p — значение этой функции для указанного элемента (интерпретации объекта «Павел»).

Во-втором же случае, класс ПассажирРейсаKL10800 легко интерпретируется классическим множеством, поскольку любой элемент во Вселенной либо является его членом, либо нет. Число p в данном случае обладает совсем другой семантикой — оно показывает, насколько вероятно, что указанный элемент является членом множества. Таким образом, интерпретация класса ПассажирРейсаKL10800 будет абсолютно идентична его интерпретации в обычной DL. Это по-прежнему просто множество и ничего более. А вот интерпретацией p будет значение какой-то еще функции, которая задает для всех объектов во вселенной вероятность (а не степень!) их принадлежности каждому из классов. Нетрудно видеть, что в качестве этой функции логично использовать знакомые всем функции распределения вероятностей.

Что дальше?

Итак, надеюсь, что я вас (или хотя бы некоторых из вас) убедил, что у «неидеальности» знаний существует несколько граней и первое, что необходимо сделать при разработке любого формализма (в том числе, логики) — это абсолютно точно определить семантику допустимых знаний. Если этого не сделать, то возникают несуразицы, вроде «Анна на одну четверть беременна» или «Телефон за 212.48 долларов — дорогой с вероятностью 60%». Неопределенность и нечеткость знаний и так добавляют слишком много сложностей в OWL, чтобы расшифровывать еще и подобные аксиомы, держа в уме как именно вероятность имитирует степень принадлежности или наоборот.

К счастью, подобная точка зрения принадлежит, разумеется, не мне и наиболее перспективные формализмы пока и являются либо DL + TB, либо DL + НЛ. Далее, если будет интересно, я углублюсь в «свою» область, а именно вероятностную семантику для OWL и расскажу о подходах и методах для представления и логического вывода неопределенных аксиом. Не являясь никоим образом экспертом в нечетких DL, я могу все же попытаться дать краткий обзор и их тоже.

Следует оговориться, что кроме ТВ и НЛ существует масса других математических теорий для манипулирования неидеальными знаниями. Например, модальные и немонотонные логики работают с неполными и субъективными знаниями, неполнота также является предметом рассмотрения в теории грубых множеств (Rough Set Theory), а теория возможностей (Theory of Possibility) и теория свидетельств Демстера-Шефера (Dempster–Shafer Theory of Evidence) являются в какой-то степени альтернативами ТВ. Однако на сегодняшний день расширения семантики DL связаны в основном с ТВ и НЛ, поэтому логично начать с них.

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

Пара слов об авторе

На данный момент я являюсь аспирантом университета Манчестера, занимаясь формальными логиками, позволяющими оперировать с неопределенными знаниями в онтологиях при помощи теории вероятности. У меня есть готовая реализация системы вероятностного логического вывода Pronto, которая является надстройкой над Pellet — одним из основных логических процессоров для OWL. Непосредственно в настоящее время я в основном пытаюсь расширить семантику языка, лежащего в основе Pronto, параллельно занимаясь проблемами быстродействия и масштабируемости вероятностного логического вывода в OWL.


Понравилась статья? Поделитесь с друзьями!


15 Responses to Немного о неопределенности и нечеткости в онтологиях

  1. rabchevsky:

    полностью согласен что понятие нечеткости, неопределнности и т.д. требует более формального разбора.
    заметка ценна тем что разделяет эти вещи.
    Для полноценного понимания мат аппарата нужно конечно много поработать, мне например, чтобы сделать в голове подобное разделение потребовалось прочитать «Искусственный интеллект: стратегии и методы решения сложных проблем» Люгера. и Семантику RDF, там и про теорию моделей есть с нтерпретациями и т.д. (правда мозг окончательно разорвался))).
    PS согласен тема важная и очень сложная.
    Очень отрадно что повилась реализация вероятностного логического вывода в виде надстройки к Pellet.

  2. Ну, «RDF Semantics» в исполнении Pat Hayes — это далеко не лучший способ знакомства с формальной семантикой (поскольку RDF только с большой натяжкой можно назвать логикой, в отличие от OWL). В следующих статьях я буду более подробно описывать вероятностные расширения семантики OWL, поэтому если интересно, то стоит почитать про model-theoretic semantics вообще и про семантику DL в частности.
    Спасибо за отзыв!

  3. Anna:

    и так, по порядку =)
    1) к слову о терминологии в русском языке. встречалось следующее: то что названо «неидеальные» знания, именуют как неопределенные знания. виды знаний — это немного не то (это типа полные-не полные, противоречивые-не противоречивые, явные-скрытые и т.д.). скорее, здесь более уместным будет — виды неопределености знаний/высказываний. и что касается самих видов, то встречалось выделение только трех: 1) неопределенные высказывания/знания называют неполными; 2) нечеткие и 3) двусмысленные — неоднозначными; 4) субъективные — неадекватными.
    2) по поводу мат. теорий. не приходилось ли сталкиваться с понятием «мера информативности», теории Шеннона и Хартли?
    3) о каверзном вопросе про птиц и Твити. предположу ))) Твити — птица с вероятностью 90% — говорит о том, что любой экцемпляр класса Твити с вероятностью 90% принадлежит еще и классу птиц — на лицо пересечение множест. птицы летают с вероятностью 90% — говорит о правдоподобности высказывания «птицы летают», степени доверия к высказыванию. если Твити птица, то в 90% случаев истиной окажется то, что Твити летает, а в 10% случаев правдой окажется то, что Твити страус =)

  4. начало многообещающее!
    Пожалуй, впервые с интересом собираюсь прочитать о неопределенностях в OWL на русском.

    О терминах: Кроме вероятности и степени четкости (я бы сказал полноты) знания я бы еще упомянул
    — точность (precision), например точность измерения (понятие близкое к вероятности),
    — завершенность (временная полнота),
    — принадлежность (в смысле собственности) — бывает надо указать, что дом принадлежит на 25% каждому из членов семьи. Это полное знание о частичной принадлежности (не функция принадлежности).
    — достоверность источника (Анна назвала эту характеристику адекватностью).
    — положительность (в нравственном аспекте) — любую связь (триаду) можно пометить уровнем нравственности (субъективной) от 0 (зло) до 1 (добро).

    И еще целый пук вопросов с временным резонированием — было бы интересно узнать, на каком сейчас уровне эта проблематика в Манчестере.
    Время дает направление логике, поэтому все в будущем размыто, в далеком прошлом тоже размывается. Также есть понятия латентного периода регистрируемого явления (когда факт уже истинен, но достоверно будет установлен в будущем), периода рефрактерности (АКА памяти).
    О возможности — вероятности в будущем — Вы уже упомянули. Аналог точности во времени — время определения. Еще есть проблема движения и скорости, одновременности и принцип неопределённости Гейзенберга :-)

    Да, сразу скажу — я не математик.
    ИМХО Твити обладает способностью к полету (относится к классу ЛетающихВещей) с вероятностью 81%

  5. Анна, спасибо за комментарий!
    1) Да, я предполагал, что в русском «неопределенность» скорее всего будет использоваться в качестве общего термина. Как раз именно этого мне и хотелось избежать :) В английском просто эта проблема привела к колоссальной путанице: одни авторы используют uncertainty как общий термин, а другие — в узком смысле, аналогичном моему. Поэтому когда приходится объяснять разницу между uncertainty и imprecision (vagueness) часто сталкиваешься с непониманием. При этом мне кажется, что не стоит неопределенные знания называть неполными. Дело в том, что «неполнота» изначально заложена во многие формализмы, в том числе и в OWL, вывод в которых основан на принципе open world assumption. Плюс не очень понятно, в чем неполнота, скажем, утверждения, что 90% птиц летают (т.к. в границах некоторой модели мы вполне можем посчитать *всех* птиц). Вот с чем я абсолютно согласен, так это с термином «неоднозначные».
    Короче мне надо подумать как быть. Возможно, я буду использовать термин «вероятностная неопределенность» (ВН) как первый вид неопределенности.
    2) Применительно к KR&R — никогда.
    3) Вы близки к истине :) Только Твити — это не класс, это именованный экземпляр (individual в терминах OWL). Это *конкретный* объект, поэтому подумайте, как при этом должно интерпретироваться «в X% случаев». Что есть «случай»?

  6. Дмитрий, спасибо и Вам!
    — Насчет точности — согласен, это одна из основных причин возникновения неопределенности. В статье я в основном классифицирую виды неопр. на основании того, становятся ли знания полностью определенными, если точность довести до идеала. Иногда да, иногда нет.
    — Достоверность важна, но мы пока рассматриваем простейший случай, когда все знания одинаково достоверны (как принято в OWL). Вопрос с Д. может встать при разрешении конфликтов при немонотонном лог. выводе. Ниже я расскажу, как Pronto разрешает конфликты, используя лексикографический лог. вывод Леманна (Lehmann lexicographic entailment). Конечно было бы интересно принимать во внимание Д. У меня есть мысли на этот счет, надеюсь, руки дойдут…
    — С нравственностью вопрос размытый. Если честно, я никогда не сталкивался с моделированием Н. в логике.
    Насчет времени (temporal reasoning), то применительно к OWL (насколько я знаю) у нас народ этим не занимается. Честно говоря, temporal reasoning — это настолько обширная тема, что мне бы хотелось хотя бы на некоторое время от нее оградиться, а то есть риск сбиться с курса :)
    Насчет Твити: я не спрашивал про вероятность того, что он летает :) Это будет следующим вопросом :) Ваш же ответ правилен наполовину.

  7. Anna:

    1) почему-то думала, что в данном случае Твити — клас объектов, которые именуют себя соответственно. ну да ладно.
    а по поводу случая, первое что пришло в голову — случай — ситуация, когда нужно дать характеристику Твити: с уверенность на 90% можно сказать, что он летает, и с уверенностью на 10% — что нет. это… как бы словами объяснить… вероятность здесь (и 90% и 10 %) — это связь между свидетельством (Твити — птица) и гипотезой (Твити летает).. даже, наверное, мощность связи.
    2) а термин «неадекватность» в той редакции, в которой с ним сталкивалась я, как раз включает в себя не только положение о субъективности, но и точность, правдивость и прочее. я думаю, подразумевается умышленная или нет дезинформация, как людьми, так и приборами.

  8. Стоп-стоп, опять-таки, я пока не спрашиваю, летает ли Твити :) У нас просто есть логическая формула (твити:Птицы,90%) и ее надо как-то интерпретировать. Собственно вопрос в том, будет ли интерпретация *принципиально* отличаться от интерпретации формулы (Птицы:ЛетающиеОбъекты, 90%)? Другими словами, как влияет тот факт, что «твити» — это не множество объектов, а *конкретный* объект.
    Ну ладно, больше подсказывать не буду, надеюсь, как вернусь домой, то напишу вторую часть (через неделю примерно).

  9. Nata_Ke:

    Поправьте меня, знатоки теории множеств.

    В утверждении (Птица:ЛетающийОбъект,90%),
    «Птица» и «ЛетающийОбъект» — классы экземпляров.
    Допустим, известны множества экземпляров «Птиц» и «ЛетающихОбъектов» — т.е. их экстенсионалы.
    Тогда, взяв любую птицу из «Птиц», с вероятностью 90% обнаружим эту птицу в «ЛетающихОбъектах».
    «Случай» здесь — просмотр экстенсионала «ЛетающихОбъектов».

    (Твити::Птица,90%) Есть класс «Птицы», есть его экземпляры — экстенсионал(тоже, выходит, множество) — сохраненные в онтологии/выводимые по каким-то правилам.
    «Твити» попадает в экстенсионал «Птицы» с вероятностью 90% —
    если я каким-то образом получу весь экстенсионал, то в 90 случаях из 100 «Твити» там окажется.
    Т.е. «случай» здесь — просмотр экстенсионала «Птиц».
    Но это такой взгляд, когда никакой разницы нет, экземпляр это оценивается, или класс.

  10. Раскрываю карты, ибо Наталья практически права :)
    Но, вот Вы говорите:
    «если я каким-то образом получу весь экстенсионал, то в 90 случаях из 100 “Твити” там окажется.»
    Экстенсионал (интерпретация) — это множество. Интерпретация Твити (а не сам Твити!) в него либо попадает, либо нет. Это всего *один* опыт, одна проверка. Т.е. нам не хватает одной модели, чтобы посчитать вероятность того, что *конкретный* объект — птица. В то же время, для первой формулы нам вполне хватает одной модели для вычисления вероятности (берем интерпретации Птицы и ЛетОбъекты, считаем область перекрытия и вуаля).
    Другими словами, Ваше утверждение следует слегка подкорректировать так:
    «если я каким-то образом получу *все* интерпретации класса Птицы, то 90% из них будут включать интерпретацию «Твити»».
    А в первом случае будет в точности как Вы сказали:
    «Если я возьму *одну* модель с интерпретациями классов П и ЛО, то мощность их пересечения деленная на мощность П будет 90%».

  11. А с Вашей точки зрения можно ли использовать нечеткую онтологию при осуществлении интеграции обычных онтологий? Скажем — сравниваем, концепты двух онтологий — проводим сравнение текстовых лейблов, структурного положения в иерархии, наборов атрибутов. Далее в результирующую (нечеткую)складываем оба концепта, соединяя их какой-либо связью (суперкласс, синоним, подкласс) с определенным весом.
    Вот правда тоже вопрос, что будет отражать этот вес неопределенной или нечеткость?

    Также меня интересует вопрос о реализации нечеткой онтологии, т.е. некоего готового программного средства для ее разработки. Сам рассматривал несколько вариантов: от задания утверждений RDF об утверждениях до создания некой мета-онтологии, где в виде экземпляров класса «Связи» выступал обычные связи онтологии — но тут приходиться новый API разрабатывать, а это долго. Бегло просмотрел описание Вашего продукта Pronto, как сказано: можно добавлять вероятностные утверждения в онтологию, а после такого изменения будет ли корректно онтология в Protege отображаться или с ней можно будет работать только через Pronto?

  12. Что касается интеграции — да, конечно можно. Более того, ontology alignment — это *классический* пример необходимости работы с неточностью в онтологиях. Например, в одной онтологии есть класс Машина, а в другой Автомобиль. Интегратор вполне может указать, что М и А — это с 90% эквивалентные классы. Иначе приходится использовать различные пороговые значения.
    Насчет того — какой тип неточности: я бы сказал, что в простейшем случае, когда оба класса обладают классической OWL-семантикой, должна быть неопределенность. В частности, мы можем говорить о *статистической* эквивалентности классов, а значит ТВ будет подходящим инструментом. Все усложняется если сами классы, скажем, нечеткие. Но до этого нам пока далеко.
    По поводу отображения в Protege: отображаться она будет, т.к. я использую стандартные средства OWL (аннотации аксиом) для представления вероятностей. Другое дело, что с т.зр. Protege (и вообще любого OWL-приложения) вероятностные аксиомы будут интерпретироваться как обычные. Это происходит потому, что аннотации НЕ обладают семантикой. Так что придется мне таки написать плагин для Protege, надеюсь где-нить к маю…

  13. roshchin:

    привет
    очень инетресная статья — спасибо

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

    например: есть класс, определенный через конъюнкцию других классов. Есть какое то «наблюдение», в котром наблюдаются части того самого определения (либо те же конъюгкты, но не все; либо те же, но есть еще какие то, либо есть пересечение самого определения и наблюдаемых конъюгктов)

  14. Нет, пока не поддерживается, хотя я согласен, что abductive reasoning — штука очень интересная, особенно в контексте неопределенности. Не факт, что у меня в ближайшее время дойдут руки, но обсудить это бы стоило, поэтому если Вы занимаетесь абдукцией, то было бы интересно пообщаться.
    Тем более, что некоторые результаты на тему использования абдуктивности в DL уже есть [1].

    http://www.aaai.org/Papers/KR/2008/KR08-022.pdf

  15. VladimirP:

    Павел, здравствуйте!

    Огромное спасибо за статью. Подскажите, пожалуйста, где еще можно почитать о FL+OWl или PL + OWL?

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Ответить с помощью ВКонтакте: