Вимірювання ентропії / інформації / моделей 2d бінарної матриці


53

Я хочу виміряти ентропію / щільність інформації / подібність малюнка двовимірної двійкової матриці. Дозвольте показати кілька зображень для уточнення:

Цей дисплей повинен мати досить високу ентропію:

А)

введіть тут опис зображення

Це має мати середню ентропію:

Б)

введіть тут опис зображення

Нарешті, ці зображення повинні мати ентропію майже нуля:

C)

введіть тут опис зображення

Г)

введіть тут опис зображення

Е)

введіть тут опис зображення

Чи є якийсь індекс, який фіксує ентропію, респ. "подібність шаблону" цих дисплеїв?

Звичайно, кожен алгоритм (наприклад, алгоритми стиснення; або алгоритм обертання, запропонований ttnphns ) чутливий до інших особливостей дисплея. Я шукаю алгоритм, який намагається захопити такі властивості:

  • Ротаційна та осьова симетрія
  • Обсяг кластеризації
  • Повторення

Можливо, складніше, алгоритм може бути чутливим до властивостей психологічного " принципу Гештальта ", зокрема:

  • Закон близькості: закон близькості
  • Закон симетрії: Симетричні зображення сприймаються колективно, навіть незважаючи на відстань:симетрія

Дисплеям з цими властивостями слід призначити "низьке значення ентропії"; дисплеї з досить випадковими / неструктурованими точками повинні отримувати "високе значення ентропії".

Я усвідомлюю, що, швидше за все, жоден алгоритм не охопить усі ці функції; тому пропозиції щодо алгоритмів, які стосуються лише деяких або навіть лише однієї функції, також дуже вітаються.

Зокрема, я шукаю конкретні, існуючі алгоритми або конкретні, реалізовані ідеї (і нагороду отримаю за цими критеріями).


Класне питання! Чи можу я запитати, що мотивує потребу в єдиному заході? Ваші три властивості (симетрія, кластеризація та повторення) на їхньому обличчі здаються достатньо незалежними, щоб вимагати окремих заходів.
Енді Ш

Поки я дещо скептик, що можна знайти універсальне альго, яке реалізує гештальт. Останній в основному заснований на розпізнаванні існуючих прототипів. Можливо, у вашого розуму це є, але ваш комп'ютер цього не може.
ttnphns

Я згоден обом. Насправді я не шукав єдиного алгоритму - хоча мої попередні формулювання дійсно пропонували це. Я оновив питання, щоб явно дозволити алгоритми для окремих властивостей. Можливо, хтось також має ідеї, як поєднати вихід декількох альгів (наприклад, "завжди приймайте найменше значення ентропії набору альгів")
Felix S

1
Баунті закінчився . Дякуємо всім учасникам та чудовим ідеям! Ця щедрість породила купу цікавих підходів. Кілька відповідей містять багато мозкової роботи, а іноді шкода, що щедрості неможливо розділити. Нарешті, я вирішив присвоїти винагороду @whuber, оскільки його рішення було алгоритмом, який мені здавався найбільш вичерпним щодо функцій, які він захоплює, і як це легко реалізувати. Я також ціную, що це було застосовано до моїх конкретних прикладів. Найбільше вражала його здатність присвоювати числа в точному порядку мого "інтуїтивного ранжування". Дякую, F
Фелікс S

Відповіді:


35

Існує проста процедура, яка фіксує всю інтуїцію, включаючи психологічні та геометричні елементи. Він спирається на використання просторової близькості , яка є основою нашого сприйняття і забезпечує внутрішній спосіб фіксувати те, що лише недосконало вимірюється симетріями.

Для цього нам потрібно виміряти "складність" цих масивів на різних локальних масштабах. Хоча ми маємо велику гнучкість для вибору цих шкал і вибору сенсу, в якому вимірюємо "близькість", досить просто та досить ефективно використовувати невеликі квадратичні квартали та дивитися середні значення (або, що рівнозначно, суми) всередині них. З цією метою послідовність масивів може бути отримана з будь- якого масиву по , утворюючи рухомі суми сусідства, використовуючи на сусідства, потім на тощо, до на (хоча до того часу зазвичай є занадто мало значень, щоб забезпечити щось надійне).mnk=2233min(n,m)min(n,m)

Щоб побачити, як це працює, давайте зробимо обчислення масивів у питанні, яке я буду називати через , зверху вниз. Ось графіки рухомих сум для ( звичайно, - початковий масив), застосований до .a1a5k=1,2,3,4k=1a1

Фігура 1

За годинниковою стрілкою ліворуч дорівнює , , та . Масиви - на , потім на , на і на відповідно. Всі вони виглядають як би "випадковими". Давайте вимірюємо цю випадковість за їх ентропією бази-2. Для послідовність цих ентропій становить . Назвемо це "профілем" .k124355442233a1(0.97,0.99,0.92,1.5)a1

Тут, навпаки, суми :a4

Малюнок 2

Для мало варіацій, звідки низька ентропія. Профіль - . Його значення послідовно нижчі, ніж значення для , що підтверджує інтуїтивне відчуття, що в присутній сильний "візерунок" .k=2,3,4(1.00,0,0.99,0)a1a4

Для інтерпретації цих профілів нам потрібна система відліку. Ідеально випадковий масив двійкових значень матиме приблизно половину його значень, рівних а інша половина дорівнює , для ентропії . Ковзаючі суми в межах по околиць буде , як правило, мають біноміальний розподіл, даючи їм передбачувані ентропію (принаймні , для великих масивів) , які можуть бути апроксимувати :011kk1+log2(k)

Сюжет ентропії

Ці результати підтверджуються моделюванням масивами до . Однак вони розбиваються на малі масиви (наприклад, масиви на тут) завдяки кореляції між сусідніми вікнами (коли розмір вікна буде приблизно половиною розмірів масиву) і через невелику кількість даних. Ось довідковий профіль випадкових на масивів, що генеруються за допомогою моделювання разом із графіками деяких фактичних профілів:m=n=1005555

Профілі сюжетів

У цьому сюжеті опорний профіль є суцільним синім кольором. Профілі масиву відповідають : червоний, : золото, : зелений, : світло-синій. (У тому числі затьмарює зображення, оскільки воно наближене до профілю .) Загалом профілі відповідають впорядкованості у питанні: вони стають нижчими на більшість значень із збільшенням очевидного впорядкування. Виняток становить : до кінця для його рухомі суми, як правило, є серед найнижчих ентропій. Це виявляє дивовижну закономірність: кожні на мікрорайону в сa1a2a3a4a5a4ka1k=422a1 має рівно або чорних квадрата, ніколи більше ні менше. Це набагато менш "випадково", ніж можна подумати. (Частково це пов’язано з втратою інформації, яка супроводжує підсумовування значень у кожному районі, процедурою, яка конденсує можливі конфігурації сусідства на лише різних можливих сум. Якщо ми хотіли б врахувати конкретно для кластеризації та орієнтації всередині кожного мікрорайону, тоді замість використання рухомих сум ми використовуємо рухомі конкатенації. Тобто кожен по сусідству має122k2k2+1kk2k2можливі різні конфігурації; виділяючи їх усі, ми можемо отримати більш тонку міру ентропії. Я підозрюю, що такий захід підвищить профіль порівняно з іншими зображеннями.)a1

Ця методика створення профілю ентропій у контрольованому діапазоні шкал шляхом підсумовування (або об'єднання або об'єднання іншим способом) у межах рухомих районів була використана при аналізі зображень. Це двомірне узагальнення загальновідомої ідеї аналізу тексту спочатку як ряд букв, потім як серія диграфів (двобуквенні послідовності), потім як триграфи та ін. Також воно має певні відношення до фракталу аналіз (який досліджує властивості зображення в більш тонких і тонких масштабах). Якщо ми будемо дотримуватися певної обережності щодо використання рухомої суми або конкатенації блоку (щоб не було перекриттів між вікнами), можна отримати прості математичні зв’язки серед послідовних ентропій; проте,

Можливі різні розширення. Наприклад, для обертально-інваріантного профілю використовуйте кругові квартали, а не квадратні. Звичайно, все узагальнюється за межами двійкових масивів. При досить великих масивах можна навіть обчислити локально різні профілі ентропії для виявлення нестаціонарності.

Якщо потрібно одне число, замість цілого профілю виберіть шкалу, в якій представляє інтерес просторова випадковість (або її відсутність). У цих прикладах ця шкала найкраще відповідала б рухомому району на або на , оскільки для їх малювання вони покладаються на групи, що охоплюють три-п’ять клітинок (а околиці на просто в середньому відміняють всі зміни в масив і так марно). В останньому масштабі ентропії для через становлять , , , і334455a1a51.500.81000 ; очікувана ентропія в цій шкалі (для рівномірно випадкового масиву) становить . Це виправдовує сенс, що "повинен мати досить високу ентропію". Щоб розрізнити , та , які пов'язані з ентропією за цією шкалою, подивіться на наступну більш точну роздільну здатність ( на райони): їх ентропії відповідно , , (тоді як очікується, що випадкова сітка мають значення ). Цими заходами оригінальне запитання задає масиви в правильному порядку.1.34a1a3a4a50331.390.990.921.77


Вибачте, я не міг зрозуміти, як ви створили свої рухливі суми. Будь ласка, поясніть більш детально, як обчислити рухому суму.
ttnphns

1
@ttnphns Ось популярна ілюстрована довідкова сторінка з цієї теми.
whuber

4
Я відтворив результати цієї чудової відповіді від @whuber, використовуючи NumPy та matplotlib в Python, доступні тут: github.com/cosmoharrigan/matrix-entropy
Cosmo

(+1) Ось дуже загальний принцип: З будь-яким мультисетом існує природно пов'язана ентропія розподілу ймовірностей, що визначається множинами його окремих елементів , а саме , де являє собою безліч різних елементів в . Прикладами є мультисети, утворені кварталами розміру різної форми в об'єктах різного розміру. (Я тільки що відправив в 1D додаток довжина- подстрок .)Mμ(e)ep(e):=μ(e)eSμ(e)  (eS)SMkk
рез

@whuber Відмінна відповідь. Хоча це має інтуїтивний сенс, чи є стаття чи підручник, можна посилатись на оригінальне виведення цього (я припускаю, що якщо це ваш оригінальний твір, ви його офіційно опублікували в журналі)?
субхаком

10

По-перше, моя пропозиція суто інтуїтивна: я нічого не знаю в полі розпізнавання візерунків. По-друге, можна зробити альтернативні десятки пропозицій, як моя.

Я починаю з ідеї, що регулярна конфігурація (тобто з низькою ентропією) повинна бути якось симетричною, ізоморфною для того чи іншого його транформантів. Наприклад, в обертаннях.

Ви можете повернути (перевернути на 90 градусів, ніж на 180 градусів тощо) свою матрицю, поки конфігурація не збігається з оригінальною . Він завжди буде узгоджуватися при 4 обертах (360 градусів), але іноді може збігатися раніше (як матриця Е на малюнку).

При кожному обертанні підраховуйте кількість комірок з не однаковими значеннями між початковою конфігурацією та оберненою. Наприклад, якщо порівнювати оригінальну матрицю A з її обертанням на 90 градусів, ви виявите 10 комірок, де в одній матриці є пляма, а в іншій - порожнє. Потім порівняйте оригінальну матрицю з її обертанням на 180 градусів: буде знайдено 11 таких комірок. 10 комірок - це невідповідність вихідної матриці А та її обертання на 270 градусів. 10 + 11 + 10 = 31 є спільною "ентропії" матриці A .

Для матриці B "ентропія" дорівнює 20, а для матриці E - лише 12. Для матриць C і D "ентропія" дорівнює 0, тому що обертання припиняються після 90 градусів: ізоморфізм вже досягнутий.

введіть тут опис зображення


Дякуємо за вашу пропозицію! Хоча я міг придумати декілька "легких" дисплеїв, які не є інваріантними для перетворення обертання, це приємний і простий (і розширюваний!) Підхід. Я маю думати, які види трансформації я хотів би мати. І мені подобається ваш підхід підрахунку очок у кожній трансформації.
Felix S

Дякую за вдячність Але підхід - це лише початкова заглушка, загальна ідея, і ви правильно сказали, що це розширюється.
ttnphns

Мені подобається ваш підхід. Однак, щоб отримати більш загальну відповідь, можливо, варто взяти трохи більшу групу симетрії - ідентичність, 3 обертання та 4 відбиття (тобто , en.wikipedia.org/wiki/Di ). Потім підраховують різниці ( ) між усіма парами (тобто ) і як міру випадковості , де - кількість чорних каменів. Для чисто випадкових фігур слід отримати , тоді як для дуже симетричних . Хороша річ у тому, що формула відповідає різній кількості каменів на дошці та має симетрію BW. D4d87r=k187252n(25n))nr1r0r
Piotr Migdal

Вибачте за надмірне ускладнення. Досить порівняти оригінальні візерунки з його симетріями, відмінними від ідентичності. Тоді в коефіцієнті нормалізації замість . 7778
Пьотр Мігдал

5

Інформація зазвичай визначається як . Існує деяка приємна теорія, яка пояснює, що - це кількість бітів, яку потрібно за допомогою . Якщо ви хочете дізнатися більше про це, читайте про арифметичне кодування .h(x)=logp(x)log2p(x)xp

То як це може вирішити вашу проблему? Легко. Знайдіть деякий який відображає ваші дані, і використовуйте де - новий зразок як міра здивування або інформації про зустрічі з ним.plogp(x)x

Найважче - знайти якусь модель для та створити ваші дані. Можливо, ви можете придумати алгоритм, який генерує матриці, які ви вважаєте "ймовірними".p

Деякі ідеї для підгонки .p

  1. Якщо ви переглядаєте лише матриці 5x5, вам потрібно лише біт для зберігання всіх можливих матриць, тож ви можете просто перерахувати їх і призначити кожному певну ймовірність.225
  2. Використовуйте обмежений апарат Boltzmann для відповідності вашим даним (тоді вам доведеться використовувати безкоштовну енергію як заміну інформації, але це нормально),
  3. Використовуйте zip як заміну для і не переймайтеся всією історією ймовірностей зверху. Це навіть формально добре, оскільки ви використовуєте zip як наближення до складності Колмогорова, і це зробили теоретики інформації, що також призводить до нормалізованої відстані стиснення ,logp(x)
  4. Можливо, використовуйте графічну модель, щоб включити просторові попередні переконання та використовувати змінні Бернуллі локально.
  5. Для кодування поступальної інваріантності можна використовувати енергетичну модель за допомогою згорткової мережі .

Деякі з наведених вище ідей досить важкі і походять від машинного навчання. Якщо ви хочете отримати додаткову пораду, просто скористайтеся коментарями.


Очевидно, що ентропія Колмогорова - це найкращий підхід у філософському сенсі, якщо ви думаєте про "простоту абстрактного візерунка" і не намагаєтесь передбачити, наскільки просто це призведе до людського розуму. Він просто констатує ентропію як "тривалість найкоротшої програми, яка може створити цю схему". Звичайно, вам все одно потрібно вказати комп'ютерну мову, але ви все одно можете покластися на абстрактну машину Тьюрінга, щоб відтворити трюк.
Хав'єр Родрігес Лагуна

Мова програмування насправді не важлива. Додаткова частина програми, що компілює мову з мови A на мову B, буде постійно збільшувати біт (компілятор), і, таким чином, можна нехтувати.
bayerj

4

Моя наступна пропозиція радше зрозуміла, ніж виклала, тому я не можу її довести, але можу принаймні запропонувати обґрунтування. Процедура оцінки "ентропії" конфігурації плям включає:

  1. Оцифруйте плями.
  2. Виконайте порівняння конфігурації із самим собою, перетвореною ортогональним прокрустальним аналізом .
  3. Результати порівнянь (коефіцієнт тотожності) графіку та оцінка нерівності ділянки.

Оцифруйте плями , тобто візьміть їх координати. Наприклад, нижче наведена ваша конфігурація D з нумерованими плямами (порядок нумерації може бути довільним) та їх координатами. введіть тут опис зображення

spot x   y
1   1   1
2   3   1
3   5   1
4   2   2
5   4   2
6   1   3
7   3   3
8   5   3
9   2   4
10  4   4
11  1   5
12  3   5
13  5   5

Зробіть перестановки та виконайте аналіз Прокруста. Пермутуйте плями (рядки в даних) випадковим чином і виконайте порівняння початкових (не перестановлених) даних Прокруста з пермутованими; записують коефіцієнт тотожності (міра подібності двох конфігурацій, виводиться за допомогою аналізу). Повторна перестановка - Прокруст - збереження коефіцієнта, багато разів (наприклад, 1000 разів і більше).

Чого ми можемо чекати від коефіцієнтів тотожності (IDc), отриманих після вищезазначеної операції, на регулярній структурі?Розглянемо для прикладу вищевказану конфігурацію D. Якщо порівнювати початкові координати, встановлені з самим собою, отримаємо, звичайно, IDc = 1. Але якщо ми перестановимо деякі плями, IDc між початковим набором та перестановленим буде деяким значенням нижче 1. Давайте перестановимо, як, наприклад, одну пару плям із позначкою 1 і 4. IDc = .964. Тепер замість цього перестановка плям 3 та 5. Цікаво, що IDc знову буде .964 Це ж значення, чому? Плями 3 і 5 симетричні до 1 і 4, так що обертання на 90 градусів накладатиме їх. Порівняння прокрустів нечутливе до обертання чи рефлексу, і, таким чином, перестановка в межах пари 1-4 є для нього "тим же", що і перестановка в парі 5-3. Щоб додати більше прикладу, якщо перестановити лише плями 4 та 7, IDc знову буде .964! Здається, що для Прокруста перестановка в парі 4-7 - це "те саме" як зазначені вище два в тому сенсі, що це дає однаковий ступінь схожості (як вимірюється IDc). Очевидно, це все тому, що конфігурація D регулярна.Для регулярної конфігурації ми очікуємо отримання досить дискретних значень IDc в нашому експерименті перестановки / порівняння; тоді як для неправильної конфігурації ми очікуємо, що значення будуть, як правило, безперервними.

Накресліть записані значення IDc. Наприклад, сортуйте значення та складіть графік ліній. Я зробив експеримент - 5000 перестановок - з кожною з ваших конфігурацій A, B (обидві досить нерегулярні), D, E (обидві регулярні), і ось сюжетна лінія:

введіть тут опис зображення

Зверніть увагу, наскільки сильнішими є лінії D і E (особливо D). Це через дискретність значень. Значення для A і B набагато більш безперервні. Ви можете вибрати собі якусь статистику, яка оцінює ступінь дискретності / безперервності, замість того, щоб складати графік. Здається, це не більш безперервно, ніж B (для вас, конфігурація A дещо менш регулярна, але мій графік лінії, схоже, не демонструє цього) або, якщо ні, можливо, показує трохи інший шаблон значень IDc. Який ще візерунок? Це поки що не виходить за рамки моєї відповіді. Велике питання, чи дійсно A менш регулярний, ніж B: це може бути для вашого ока, але не обов'язково для аналізу Прокруста або іншого ока.

До речі, весь експеримент з перестановкою / прокрутом я зробив дуже швидко. Я використовував власний макрос аналізу Procrustes для SPSS (знайдений на моїй веб-сторінці) і додав рядки коду, щоб зробити перестановки.


3

Взаємна інформація, розглядаючи кожен вимір як випадкову змінну, тому кожна матриця як набір пар чисел повинна допомагати у всіх випадках, за винятком C, де я не впевнений у результаті.

Дивіться дискусію навколо Фіг.8 (починаючи з p24) про аналіз ефективності регресії в посібнику TMVA або відповідному арксівському записі .

Різні показники для різних розподілів


У мене є проблеми з відкриттям пов'язаного документа.
ttnphns

Додано альтернативне посилання. Але перший працює для мене (тільки перевірений).
adavid

3

Замість того, щоб дивитись на глобальні властивості візерунка (як симетрії), можна поглянути на локальні, наприклад, кількість сусідів у кожного каменю (= чорне коло). Позначимо загальну кількість каменів на .s

Якщо каміння, куди кидають навмання, розподіл сусідів де - щільність каменів. Кількість місць залежить від того, чи камінь знаходиться в внутрішніх приміщеннях ( ), на краю ( ) або на куті .

Prand,p(k neighbors|n places)=(nk)pk(1p)nk,
p=s/25nn=8n=5(n=3)

Ясно видно, що розподіл сусідів у C) , D) та E) далеко не випадковий. Наприклад, для D) всі внутрішні камені мають рівно сусідів (протилежно випадковому розподілу, який дає в замість виміряних ).4(0%,2%,9%,20%,27%,24%,13%,4%,0%)(0%,0%,0%,0%,100%,0%,0%,0%,0%)

Отже, щоб кількісно визначити, чи закономірність є випадковою, вам потрібно порівняти її розподіл сусідів та порівняти її із випадковою . Наприклад, ви можете порівняти їх засоби та відхилення.Pmeasured(k|n)Prand,p(k|n)

Крім того, можна виміряти їх відстані у просторах функцій, наприклад: де - вимірюване відношення балів до сусідні пробіли і - передбачувана випадкова закономірність, тобто , і .

n={3,5,8}k=0n[Pmeasured(k|n)Pmeasured(n)Prand,p(k|n)Prand,p(n)]2,
Pmeasured(n)nPrand,p(n)Prand,p(3)=4/25Prand,p(5)=12/25Prand,p(8)=9/25

2

Існує дійсно простий спосіб концептуалізувати інформаційний вміст, який повертається до ідеї Шеннона (правда, одновимірної), використовуючи ймовірності та ймовірності переходу, щоб знайти щонайменше зайве подання текстового рядка. Для зображення (у цьому конкретному випадку бінарного зображення, визначеного на квадратній матриці), ми можемо однозначно реконструювати на основі знань похідних x та y (-1,0, + 1). Ми можемо визначити ймовірність переходу 3x3 та функцію глобальної щільності ймовірностей, також 3x3. Інформація про Шеннона отримується з класичної формули логарифмічного підсумовування, застосованої на 3х3. Це міра інформації Шеннона другого порядку і добре фіксує просторову структуру у форматі 3x3 pdf.

Цей підхід є більш інтуїтивним, коли застосовується до зображень масштабування сірого з більш ніж двома (бінарними) рівнями, детальніше див. Https://arxiv.org/abs/1609.01117 .


1

Читаючи це, приходять в голову дві речі. Перший полягає в тому, що багато властивостей гештальта передбачити досить складно, і багато кандидатів на рівні доктора наук намагаються розібратися з моделями того, як відбувається групування. Мій інстинкт полягає в тому, що найпростіші правила, які ви могли б подумати, закінчуються зустрічними прикладами.

Якщо ви можете відкинути опис гештальт-групувань на даний момент, я вважаю, що корисною абстракцією є думка про ваш вклад як про окремий випадок зображення. У комп’ютерному зорі існує чимало алгоритмів, які мають на меті призначити підпис зображенню на основі набору функцій, які є інваріантними за шкалою та інваріантними. Я думаю, що найбільш відомими є функції SIFT:

http://en.wikipedia.org/wiki/Scale-invariant_feature_transform

В основному ваш вихід буде новим вектором, який дає ваги для цих функцій. Ви можете використовувати цей вектор і застосувати до нього евристику (можливо, знайти норму) і сподіватися, що він описує те, що ви шукаєте. Крім того, ви можете навчити класифікатора приймати вектор функції як вхідний і просто сказати йому, яке ваше враження про його "ентропію". Переваги цього полягають у тому, що він використовуватиме відповідні функції SIFT (які, безумовно, зайві для вашої проблеми) та побудує якесь відображення, що може бути цілком доречним. Мінус полягає в тому, що вам потрібно зробити багато цього маркування самостійно, і те, що ви отримаєте, може бути складніше інтерпретувати, залежно від класифікатора, який ви використовуєте.

Я сподіваюся, що це корисно! Тут також може бути доречним багато традиційних алгоритмів комп'ютерного зору - швидкий перегляд вікіпедії на цьому порталі може дати вам додаткове розуміння.


0

Ваші приклади нагадують мені таблиці істинності булевої алгебри та цифрових схем. У цій царині карти Карно (http://en.wikipedia.org/wiki/Karnaugh_map) можна використовувати як інструмент для забезпечення мінімальної булевої функції для вираження всієї сітки. Альтернативно, використання булевих ідентифікацій алгебри може допомогти зменшити функцію до мінімальної форми. Підрахунок кількості термінів у мінімізованій булевій функції може використовуватися як міра ентропії. Це дає вертикальну та горизонтальну симетрію разом із стисканням сусідніх сусідів, але не має діагональної симетрії.

За допомогою булевої алгебри обидві осі позначені від AE, починаючи з лівого верхнього кута. Таким чином, в прикладі C буде відображено булева функція (! A &! E). Для інших прикладів осі потрібно маркувати окремо (тобто AE, FJ).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.