Forwarded from Системный Блокъ
Виртуальный визит в Помпеи: как архитектура управляет нашим вниманием
Можно ли проанализировать взаимодействие человека и архитектурной среды? И причём тут ГИС и айтрекинг? Рассказываем, как люди ходят в гости к древним римлянам в VR-очках, чтобы лучше понять культуру и повседневную жизнь античного города.
Кратко: о чем статья?
Исследователи из Швеции предложили новый подход к проблеме визуального воздействия среды на человека. Их метод основан на совмещении географических информационных систем (ГИС, об их использовании историками мы уже рассказывали) и айтрекинга. Они уверены: то, как современный зритель смотрит на древнюю среду, поможет лучше понять культуру и повседневную жизнь древнего города Помпеи.
Участники проекта гуляли по трёхмерной модели помпейского дома в VR-очках. Полученные данные переносились в ГИС, благодаря чему стало ясно, как распределялось зрительное внимание. Например, его точно привлекали скульптурные изображения предков или божеств. А эротические фрески располагались таким образом, чтобы большую часть дня оставаться в тени — эффект визуального воздействия мог зависеть и от положения солнца в то или иное время суток.
Эти данные открывают новые возможности для анализа взаимодействия человека с архитектурной средой и выявляют истинную роль того или иного элемента в общем ансамбле здания — кому и когда он был доступен для обозрения, на какое время выставлялся на показ и когда был спрятан от посторонних глаз.
Подробнее об исследовании и о том, что и откуда можно было увидеть в воссозданном доме — в полной версии статьи.
Время чтения: 8 минут.
🤖 «Системный Блокъ» @sysblok
Можно ли проанализировать взаимодействие человека и архитектурной среды? И причём тут ГИС и айтрекинг? Рассказываем, как люди ходят в гости к древним римлянам в VR-очках, чтобы лучше понять культуру и повседневную жизнь античного города.
Кратко: о чем статья?
Исследователи из Швеции предложили новый подход к проблеме визуального воздействия среды на человека. Их метод основан на совмещении географических информационных систем (ГИС, об их использовании историками мы уже рассказывали) и айтрекинга. Они уверены: то, как современный зритель смотрит на древнюю среду, поможет лучше понять культуру и повседневную жизнь древнего города Помпеи.
Участники проекта гуляли по трёхмерной модели помпейского дома в VR-очках. Полученные данные переносились в ГИС, благодаря чему стало ясно, как распределялось зрительное внимание. Например, его точно привлекали скульптурные изображения предков или божеств. А эротические фрески располагались таким образом, чтобы большую часть дня оставаться в тени — эффект визуального воздействия мог зависеть и от положения солнца в то или иное время суток.
Эти данные открывают новые возможности для анализа взаимодействия человека с архитектурной средой и выявляют истинную роль того или иного элемента в общем ансамбле здания — кому и когда он был доступен для обозрения, на какое время выставлялся на показ и когда был спрятан от посторонних глаз.
Подробнее об исследовании и о том, что и откуда можно было увидеть в воссозданном доме — в полной версии статьи.
Время чтения: 8 минут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Системный Блокъ
Айтрекинг в восприятии архитектурной среды
Как проанализировать восприятие архитектурной среды с помощью айтрекинга, 3D-моделирования и ГИС? Узнаем в новом материале «Системного Блока».
❤8
RAntiquity
Когда что-то говоришь вслух, особенно публично, всегда есть риск сказать глупость. И когда в комментариях к этому посту @aGricolaMZ указал мне на то, что результат Кейзера воспроизводится, только если забыть об объеме выборки, было неловко. С другой стороны, как мы знаем от Сократа, кто молчит, чтобы сойти за умного, тот остается один на один со своим невежеством. Если бы не этот пост, я бы не получила письма от самого Пауля Кейзера, в котором он подтверждает наблюдения ученейшего коллеги и тем самым дает мне урок быть внимательнее в задачках — а когда это невозможно, уметь признавать свою неправоту. Уважаю.
❤15💯6👏4👍2
А мы добавим, что в этом году в шортлисте несколькими именами
По ссылке можно нас (или кого-то еще) поддержать, чтобы мы и дальше вдохновенно радовали вас чем-нибудь таким эдаким.
В общем, вот наши номинации:
Борис Орехов (руководитель программы), Russian-European literary relations of the 18th century – https://dataverse.pushdom.ru/dataset.xhtml?persistentId=doi:10.31860/openlit-2023.4-B003
Диана Есаян (выпускница программы), Direct Speech Extractor – https://github.com/diana-esaian/direct-speech-extractor-ru
Ольга Алиева (преподаватель программы), Computer text analysis with R – https://locusclassicus.github.io/text_analysis_2023/
Борис Орехов, Identifying the style by a qualified reader on a short fragment of generated poetry – https://arxiv.org/abs/2306.02771
Борис Орехов, Calendarium Romanum – https://vk.com/calendariumromanum
ℹ️ Не забудьте поделиться информацией с друзьями: голосовать могут все, вне зависимости от академического статуса и отношения к DH.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DH CLOUD
🎉А вот ежегодная выставка достижения цифрового гуманитарного хозяйства. Можно проголосовать за то, что понравилось, а можно просто полюбоваться. Номинации:
✨Best DH Data Vizualizations
✨Best DH Dataset
✨Best DH Short Publication
✨Best DH Tool
✨Best DH Training…
✨Best DH Data Vizualizations
✨Best DH Dataset
✨Best DH Short Publication
✨Best DH Tool
✨Best DH Training…
❤🔥6🔥4🍾3
Это мартовское утро я провожу, пытаясь добыть текст речи Лисия “Против Эратосфена” из #xml.
В Perseus нужный мне текст хранится под тегом
Если так и оставить, то слова δʼ add. Scaliger тоже извлекутся, а мне они не нужны. Вот так это работает:
Чинится просто:
Можно перезаписать файл:
В Perseus нужный мне текст хранится под тегом
<p> (параграф), но внутри каждого параграфа есть еще сноски по изданию Loeb, которые мне не нужны. Обычно там лежат разночтения. Например, вот такие:
<note resp="Loeb" anchored="true" xml:lang="lat"><foreign xml:lang="grc">δʼ</foreign> add. Scaliger</note>
Если так и оставить, то слова δʼ add. Scaliger тоже извлекутся, а мне они не нужны. Вот так это работает:
library(xml2)
test_xml <- '<top> нужный текст <div type="textpart"> <p> нужный текст <note> ненужный текст </note> нужный текст <note> ненужный текст </note> нужный текст</p></div></top>'
doc <- read_xml(test_xml) xml_text(doc)
Чинится просто:
remove_me <- xml_find_all(doc, "//note")
xml_remove(remove_me) xml_text(doc)
Можно перезаписать файл:
write_xml(doc, file = "new.xml")
❤9
Простой и универсальный способ создать филогенетическое дерево — использовать формат Ньюика, т.е. просто-напросто комбинацию скобок и запятых.
Вот такое, например, нехитрое у меня сегодня дерево активностей выходного дня.
#филогенетика
library(ape)
tr <- read.tree(text ="(Rest,(R,(Greek,Latin)));")
par(mfrow = c(2,2), mar = c(1,2,2,2), family = "Arial Narrow")
plot.phylo(tr, type = "unrooted", main = "unrooted")
plot.phylo(tr, type = "cladogram", main = "cladogram")
plot.phylo(tr, type = "phylogram", main = "phylogram")
plot.phylo(tr, type = "fan", main = "fan")
Вот такое, например, нехитрое у меня сегодня дерево активностей выходного дня.
#филогенетика
❤10
Допустим, у нас есть три дерева. Таких, как на картинке 1. Вот код для воспроизведения:
library(ape)
tr1 <- ape::read.tree(text = "((1,2),(3,4));")
tr2 <- ape::read.tree(text = "((1,3),(2,4));")
tr3 <- ape::read.tree(text = "((1,2),(3,4));")
par(mfrow = c(1, 3), mar = c(5,1,5,1), cex = 1)
plot.phylo(tr1, tip.color = 2 )
plot.phylo(tr2, tip.color = 2 )
plot.phylo(tr3, tip.color = 2 )
Кластеры 1-2, 3-4 встречаются в двух деревьях, остальные лишь в одном. Задача — найти наиболее устойчивые кластеры методом простого большинства. Это можно сделать при помощи консенсусных деревьев.
Сначала считаем консенсус, аргумент p указывает, что кластер должен быть представлен не менее, чем в половине деревьев. Также уточняем, что наши деревья укоренены:
cons <- consensus(list(tr1, tr2, tr3), p = 0.5, rooted = TRUE)
Консенсус тоже можно изобразить; дополнительно для узлов укажем силу консенсуса (2/3 = 0.67):
par(mfrow = c(1,1), mar = c(5,5,5,5))
plot.phylo(cons, tip.color = 2)
nodelabels(round(cons$node.label[3],2), 7, frame = "c", cex = 0.7)
nodelabels(round(cons$node.label[2],2), 6, bg = "yellow")
Это очень простое консенсусное дерево, построенное по методу простого большинства, которое позволяет «обобщить» несколько разных деревьев. Полезно не только эволюционным биологам, но и тем, кто работает с текстами. Чуть позже расскажу, как.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
Forwarded from aGricolaMZ
❤5
RAntiquity
library(ape)
tr1 <- ape::read.tree(text = "((1,2),(3,4));")
tr2 <- ape::read.tree(text = "((1,3),(2,4));")
tr3 <- ape::read.tree(text = "((1,4),(2,3));")
par(mfrow = c(1, 3), mar = c(5,0,5,0), cex = 1)
plot.phylo(tr1, tip.color = 2, type= "unrooted" )
plot.phylo(tr2, tip.color = 2, type= "unrooted" )
plot.phylo(tr3, tip.color = 2, type= "unrooted" )
Консенсусное дерево в таком случае никак не поможет: оно не допускает значений p < 0.5. Проверьте сами: код ниже вернет садовые вилы 🔱
par(mfrow = c(1,1))
cons.tr <- consensus(list(tr1, tr2, tr3), p = 0.5, rooted = F)
plot.phylo(cons)
В таких случаях на помощь приходит консенсусная сеть, строится с использованием пакета
phangorn. На входе отдаем объект класса multiPhylo, это по сути просто три дерева в одном букете.library(phangorn)
library(TreeTools)
mph <- as.multiPhylo(list(tr1, tr2, tr3))
cons.nw <- consensusNet(mph, prob = 0.3, rooted = F)
Объект
cons.nw относится к классу networx. Его можно изобразить как в двух, так и в трех измерениях. Вот так (рис. 2): plot(cons.nw, type = "2D")
Но вообще говоря самое веселое — это сеть в 3D. #филогенетика
library(rgl)
movie3d(spin3d(axis=c(0,1,0), rpm=3), duration=10, dir = ".", type = "gif", webshot = F)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Forwarded from Vox mediaevistae
В следующую среду в 16.30 по московскому времени (20.30 по Красноярску) состоится заседание семинара «Цифровая среда», на котором я расскажу про автоматическую транскрипцию рукописей. Это будет обзорное выступление, на котором я обрисую историю распознавания печатного и рукописного текста, опишу пайплайн распознавания рукописи (способы добычи изображения; его сегментация на зоны (на примере kraken и YOLO рассмотрим два подхода: семантическую сегментацию и обнаружение объектов); сегментация на строки (здесь тоже поговорим про несколько подходов: paths, baselines, bounding boxes); сама транскрипция) и скажу несколько слов про то, как «улучшить» полученную транскрипцию (в частности, про свежие эксперименты с трансформерами).
Дискутантом выступит Глеб Шмидт, который великолепно разбирается и в тематическом моделировании, и в факторном анализе, и в стилометрии, и в HTR.
Чтобы послушать и присоединиться к дискуссии, нужно зарегистрироваться здесь.
Дискутантом выступит Глеб Шмидт, который великолепно разбирается и в тематическом моделировании, и в факторном анализе, и в стилометрии, и в HTR.
Чтобы послушать и присоединиться к дискуссии, нужно зарегистрироваться здесь.
dhri.timepad.ru
«Автоматическая транскрипция рукописей: подходы, инструменты, проблемы». Доклад С.А.Яцык на семинаре „Цифровая среда“ DHRI@SFU…
27 марта 2024 года в 16:30 (msk) / 20:30 (krsk) состоится очередное заседание научно-методического семинара «Цифровая среда» Института цифровых гуманитарных исследований (DHRI) Сибирского федерального университета. На семинаре выступит Светлана Александровна…
🔥11👍4❤1
Дело в том, что результат кластеризации зависит от нескольких параметров:
Иногда добавление или удаление буквально одного слова меняет структуру дерева. Поэтому бывает необходимо сравнить разные деревья. Выше мы уже видели один способ это сделать — консенсусное дерево. Но оно дает уже результат обобщения, а иногда интересно посмотреть на исходные деревья, сопоставить их попарно.
Для этого удобно построить tanglegram, в R это проще всего сделать при помощи пакета
dendextend.
library(stylo)
library(dendextend)
data("galbraith")
data <- as.data.frame.matrix(galbraith)[c(1,2, 9, 10, 16, 17),c(1:30)]
distmx <- dist(scale(data))
d1 <- as.dendrogram(hclust(distmx, method ="average")) %>% set("labels_col", value = c("skyblue", "orange", "grey40"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey40"), k = 3)
d2 <- as.dendrogram(hclust(distmx, method ="ward.D2")) %>% set("labels_col", value = c("skyblue", "orange", "grey40"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey40"), k = 3)
dlist <- dendlist(d1, d2)
par(family = "Arial Bold")
tanglegram(dlist, common_subtrees_color_lines = FALSE, highlight_distinct_edges = TRUE, highlight_branches_lwd=FALSE, margin_inner=10, lwd=2, axes=FALSE, main_left = "Cредняя", main_right = "Уорд", lab.cex = 1.3)
На картинке видно, что одно из сочинений Дж. Роулинг попадает в разные кластеры в зависимости от метода связи, хотя для кластеризации использовалась одна и та же матрица расстояний.
Please open Telegram to view this post
VIEW IN TELEGRAM
😱6👍4
Нажимать на кнопки легко и приятно, но есть нюансы. Во-первых, не получится кастомизировать внешний вид дерева, а, во-вторых, в Stylo реализована достаточно специфическая процедура бутстрепа (повторных выборок).
Вот что пишут разработчики:
Under the FEATURES tab, users can define the minutes of the MFW division and sampling procedure, using the increment, the minimum and maximum parameters. For minimum = 100, maximum = 3000, and increment = 50, stylo will run subsequent analyses for the following frequency bands: 100 MFW, 50–150 MFW, 100–200 MFW, ..., 2900–2950 MFW, 2950–3000 MFW.
Для консенсуса нужно много деревьев, и Stylo будет строить эти деревья в заданном интервале. Это значит, что последние деревья будут построены уже не на основе самой частотной лексики, т.е. скорее всего на них отразится тематика текстов, входящих в корпус.
В некоторых случаях это работает неплохо. Например, для моего тренировочного греческого корпуса хватило 100-500 mfw, и почти все авторы (кроме Аристида) благополучно разошлись по своим домикам на дереве 🏡 (см. рисунок).
Но, возможно, вам понадобятся другие идеи для консенсуса. Разные расстояния. Разные методы кластеризации. Случайные выборки из первых двух сотен слов или еще что-то. Тогда придется самим строить сразу множество деревьев. Как это сделать грамотно, расскажем в следующих выпусках нашего
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1
В этом году темы проектов посвящены исследованию деколонизации музеев, индвидиуального стиля Платона, особенностям советского кинопроката, библиографии детской литературы, наскальной живописи, многобразию лингвистики как науки и сохранению цифровой памяти.
Регистрация по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤1
Если изучить изнанку функции 🦍
Что делает машинка, когда вы заказываете у нее консенсусное дерево? Принимает на входе матрицу с 1 … N столбцами, в которых хранится частотность для слов. Потом отбирает первые сколько-то слов (скажем, сотню или сколько скажете), считает расстояние, строит на основе матрицы расстояний дерево, складывает его в корзинку. Потом берет следующую сотню слов, считает расстояние, строит дерево, складывает в корзинку… Ну вы поняли. Получается букет деревьев.
Звучит как итерация, а такие задачи в R решаются при помощи цикла
Запускаем ее 4 раза при помощи map, получаем список из 4-х деревьев. Тем же🪄
Так можно построить и 100, и 1000 деревьев, попробуйте. О том, что с ними делать дальше — чуть позже. #филогенетика
stylo(), которая вызывает GUI в одноименном пакете, то можно заметить, что за консенсусное дерево там отвечает пакет для работы с филогенетическими данными под названием Ape Что делает машинка, когда вы заказываете у нее консенсусное дерево? Принимает на входе матрицу с 1 … N столбцами, в которых хранится частотность для слов. Потом отбирает первые сколько-то слов (скажем, сотню или сколько скажете), считает расстояние, строит на основе матрицы расстояний дерево, складывает его в корзинку. Потом берет следующую сотню слов, считает расстояние, строит дерево, складывает в корзинку… Ну вы поняли. Получается букет деревьев.
Звучит как итерация, а такие задачи в R решаются при помощи цикла
for или пакета purrr. Функции map() из пакета purrr надо вручить другую функцию, у меня это пользовательская get_tree(). Она берет случайные 100 столбцов в таблице с частотностями galbraith из пакета Stylо, считает евклидово расстояние между документами и строит дерево. library(stylo)
library(ape)
library(purrr)
data("galbraith")
df <- as.data.frame.matrix(galbraith)[c(1,2, 9, 10, 16, 17),]
get_tree <- function(df) {
X <- df[ , sample(3000, replace = T, size = 100)]
distmx <- dist(scale(X))
tr <- as.phylo(hclust(distmx))
tr
}
Запускаем ее 4 раза при помощи map, получаем список из 4-х деревьев. Тем же
map() печатаем сразу четыре дерева одной строчкой кода 🧙set.seed(123)
result <- map(1:4, ~get_tree(df))
# отдельные деревья
par(mfrow = c(2, 2), mar = c(1,1,1,1))
map(1:4, ~print(plot(result[[.]])))
Так можно построить и 100, и 1000 деревьев, попробуйте. О том, что с ними делать дальше — чуть позже. #филогенетика
Please open Telegram to view this post
VIEW IN TELEGRAM
rdrr.io
stylo source: R/stylo.R
R/stylo.R defines the following functions: stylo
❤6
На результат стилометрического исследования древнегреческих текстов может влиять не только жанр и тема (как у нормальных людей), но и особенности кодировки, диалекта и даже неприятная издательская практика писать по-разному несобственные дифтонги (т.е. дифтонги с первым долгим гласным).
Как объяснить машине, что iota adscriptum и iota subscriptum — это одно и то же? И к автору не имеет никакого отношения. Для гласных, которые всегда долгие, можно настроить автозамену. Вот мое решение:
А вот с альфой так поступить не получится, потому что αι не всегда можно заменить на ᾳ. В раздумьях.
#regex
Как объяснить машине, что iota adscriptum и iota subscriptum — это одно и то же? И к автору не имеет никакого отношения. Для гласных, которые всегда долгие, можно настроить автозамену. Вот мое решение:
library(stringr)
ortho_fix <- function(string) { string %>% str_replace_all( c("ῶι"="ῷ", "ωι"="ῳ", "ὧι"="ᾧ", "ὦι"="ᾦ", "ηι"="ῃ", "ῆι"="ῇ", "ἦι"="ᾖ", "ἧι"="ᾗ")) }
test_string <- c("ἑκάστωι ἔργωι καὶ πράγματι", "σὺν πολλῶι χρόνωι", "καὶ τῆι ἐξ ὀλίγου χρόνου εὐδοξίαι")
test_string %>% ortho_fix()
А вот с альфой так поступить не получится, потому что αι не всегда можно заменить на ᾳ. В раздумьях.
#regex
🤝6❤3👍1
RAntiquity
На результат стилометрического исследования древнегреческих текстов может влиять не только жанр и тема (как у нормальных людей), но и особенности кодировки, диалекта и даже неприятная издательская практика писать по-разному несобственные дифтонги (т.е. дифтонги…
За модой следить некогда. Следим за типографскими конвенциями. Этих значит тоже надо добавить в
ortho_fix()🙈5😱2
Forwarded from DH CLOUD
Вестник Digital Humanities: что делают цифровые гуманитарии с большими языковыми моделями и где смотреть (и оценивать!) достижения DH-хозяйства
Несмотря на непрекращающиеся драматические события в разных точках планеты, научная DH-жизнь продолжается. А значит, и мы продолжаем рассказывать о ней в новых выпусках «Вестника Digital Humanities». В мартовском выпуске — отчет о недавней немецкой DH-конференции и LLM-воркшопе на ней, статья о конкуренции гуманитариев с большими языковыми моделями, анонс семинара по цифровому распознаванию рукописей и приглашение проголосовать за DH-awards этого года.
https://mailchi.mp/d654715e70ab/digital-humanities-16506350?e=ed4cb54ab6
Несмотря на непрекращающиеся драматические события в разных точках планеты, научная DH-жизнь продолжается. А значит, и мы продолжаем рассказывать о ней в новых выпусках «Вестника Digital Humanities». В мартовском выпуске — отчет о недавней немецкой DH-конференции и LLM-воркшопе на ней, статья о конкуренции гуманитариев с большими языковыми моделями, анонс семинара по цифровому распознаванию рукописей и приглашение проголосовать за DH-awards этого года.
https://mailchi.mp/d654715e70ab/digital-humanities-16506350?e=ed4cb54ab6
❤5🔥2
Наука (в широком смысле techne) отличается от ненауки рефлексией по поводу инструментов и методов. Землемер вполне способен на практике применять теорему Пифагора, но он никогда не задумается о проблеме соизмеримости, связанной с этой теоремой. Дачник, соорудивший стол из старой дверной створки, — еще не плотник. Обращение к цифровым методам, когда оно диктуется не внутренней потребностью исследователя, а внешними обстроятельствами, неизбежно принимает вид «бриколажа».
К. Леви-Стросс. Неприрученная мысль (1962).
Форсированная цифровизация — это массовое производство бриколеров. А науке, как учил великий Гумбольдт, нужны свобода и досуг.
В наши дни бриколер — это тот, кто творит сам, самостоятельно, используя подручные средства в отличие от средств, используемых специалистом. …Бриколер способен выполнить огромное число разнообразных задач. Но в отличие от инженера ни одну из них он не ставит в зависимость от добывания сырья и инструментов, задуманных и обеспечиваемых в соответствии с проектом: мир его инструментов замкнут, и правило игры всегда состоит в том, чтобы устраиваться с помощью «подручных средств», то есть на каждый момент с ограниченной совокупностью причудливо подобранных инструментов и материалов… Совокупность бриколерских средств определяется не каким-либо проектом (что бы предполагало, как у инженера, существование и наборов инструментов, и проектов разного рода, по меньшей мере в теории); она определяется лишь своим инструментальным использованием, иначе говоря, если употребить язык бриколера, элементы собираются и сохраняются по принципу «это может всегда сгодиться».
К. Леви-Стросс. Неприрученная мысль (1962).
Форсированная цифровизация — это массовое производство бриколеров. А науке, как учил великий Гумбольдт, нужны свобода и досуг.
🔥10❤5