Если изучить изнанку функции 🦍
Что делает машинка, когда вы заказываете у нее консенсусное дерево? Принимает на входе матрицу с 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
⚡ 6 апреля 2024 г. для студентов гуманитарного факультета НИУ ВШЭ стартует новый факультатив под названием «Количественные методы в гуманитарных науках: критическое введение».
✨ Среди авторов этого курса — руководитель образовательной программы «Цифровые методы в гуманитарных науках» Борис Орехов и преподаватель этой программы Ольга Алиева.
🤔 Уровень теоретического осмысления “цифрового поворота” далеко не всегда успевает за технологическим прогрессом. Из-за этого даже в серьезной литературе можно встретить довольно наивное представление о том, что главная заслуга количественных методов — это повышение “объективности” и “точности”.
💡 Существующие учебники и онлайн-курсы, заявленные как обзор цифровых методов для гуманитариев, обычно представляют собой практические пособия по программированию и избегают теоретических вопросов. Наш курс поможет критически взглянуть на инструментарий DH в современных гуманитарных науках.
‼️ Курс будет полезен не только студентам бакалавриата, на которых он рассчитан, но и более широкой аудитории студентов и исследователей, которые пытаются разобраться в новейшем цифровом инструментарии. В частности, факультатив станет хорошим введением в проблематику для тех, кто рассматривает для себя возможность поступления на магистерскую программу «Цифровые методы в гуманитарных науках».
🔗 Всю информацию о курсе, видео лекций и полезные ссылки мы будем собирать на сайте https://criticaldh.ru/
Первая лекция курса состоится уже 6 апреля🔽 #criticaldh
🤔 Уровень теоретического осмысления “цифрового поворота” далеко не всегда успевает за технологическим прогрессом. Из-за этого даже в серьезной литературе можно встретить довольно наивное представление о том, что главная заслуга количественных методов — это повышение “объективности” и “точности”.
Первая лекция курса состоится уже 6 апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8🔥4✍3
RAntiquity
⚡ 6 апреля 2024 г. для студентов гуманитарного факультета НИУ ВШЭ стартует новый факультатив под названием «Количественные методы в гуманитарных науках: критическое введение». ✨ Среди авторов этого курса — руководитель образовательной программы «Цифровые…
⚡ Неужели Вселенная состоит из потоков данных и действительно ценность каждого определяется вкладом в обработку данных? Зачем цифровые гуманитарии собирают данные о прошлом, настоящем и будущем? И как эти данные смогут помочь понять мир вокруг нас?
⭐ Обо всем этом в первой лекции курса “Количественные методы в гуманитарных науках” расскажет Андрей Володин — кандидат исторических наук, доцент кафедры исторической информатики исторического факультета МГУ, руководитель Института цифровых гуманитарных исследований СФУ.
🗓 Лекция состоится 6 апреля 2024 г. онлайн на платформе Zoom в 13:00 по Москве (ссылка). #criticaldh
⭐ Обо всем этом в первой лекции курса “Количественные методы в гуманитарных науках” расскажет Андрей Володин — кандидат исторических наук, доцент кафедры исторической информатики исторического факультета МГУ, руководитель Института цифровых гуманитарных исследований СФУ.
🗓 Лекция состоится 6 апреля 2024 г. онлайн на платформе Zoom в 13:00 по Москве (ссылка). #criticaldh
🔥10❤3👍3
Продолжаю разбираться с филогенетическими методами.
Представьте, что у вас есть такая нехитрая сеть, как на рис. 1. Расстояние между двумя узлами определяется как длина кратчайшего пути между ними. Поэтому несложно посчитать матрицу расстояний на основе сети. Я это сделала на листочке, а результат сохранила в R, он на второй картинке. Можете перепроверить 😊
Но верно и обратное! От матрицы расстояний можно перейти к длине ребер. Для нашей простой матрицы длина горизонтальных ребер, например, считается по формуле:
Аналогичным образом считается длина вертикальных ребер. Формула сработает максимум для четырех таксонов, для более сложных структур понадобится метод наименьших квадратов, но пока смотрим простой пример.
Чтобы не мучиться с ручными подсчетами, берем функцию neighborNet из пакета phangorn (за наводку спасибо agricolamz).
Если аргументу edge.label оставить значение по умолчанию, то на картинке увидите номер сплита (на рис. 3 красным). У каждого сплита есть свой вес (рассчитанный методом наименьших квадратов). Его можно достать из объекта nnet:
Это можно понять так: чтобы попасть из пунка b в пункт d, нужно сложить веса для сплитов 4, 5 и 1:
Это вернет нам 0.09. Сверяемся с матрицей расстояний — все верно! #филогенетика
Представьте, что у вас есть такая нехитрая сеть, как на рис. 1. Расстояние между двумя узлами определяется как длина кратчайшего пути между ними. Поэтому несложно посчитать матрицу расстояний на основе сети. Я это сделала на листочке, а результат сохранила в R, он на второй картинке. Можете перепроверить 😊
mx <- matrix(data = c(0, 0.07, 0.12, 0.12, 0.07, 0, 0.13, 0.09, 0.12, 0.13, 0, 0.06, 0.12, 0.09, 0.06, 0), nrow = 4)
colnames(mx) <- c("a", "b", "c", "d")
rownames(mx) <- colnames(mx)
dm <- as.dist(mx)
Но верно и обратное! От матрицы расстояний можно перейти к длине ребер. Для нашей простой матрицы длина горизонтальных ребер, например, считается по формуле:
1/2 (max(D[a,d]+D[b,c], D[a,c]+D[b,d])-D[a,b] – D[d,c])
1/2 (max(0.12+0.13, 0.12+0.09) – 0.07 – 0.06) = 0.06
Аналогичным образом считается длина вертикальных ребер. Формула сработает максимум для четырех таксонов, для более сложных структур понадобится метод наименьших квадратов, но пока смотрим простой пример.
Чтобы не мучиться с ручными подсчетами, берем функцию neighborNet из пакета phangorn (за наводку спасибо agricolamz).
library(phangorn)
nnet <- neighborNet(dm)
plot(nnet, show.edge.label = T, edge.label = nnet$edge.length, edge.color = "grey", col.edge.label = "navy")
Если аргументу edge.label оставить значение по умолчанию, то на картинке увидите номер сплита (на рис. 3 красным). У каждого сплита есть свой вес (рассчитанный методом наименьших квадратов). Его можно достать из объекта nnet:
w = attr(nnet$splits, "weights")
Это можно понять так: чтобы попасть из пунка b в пункт d, нужно сложить веса для сплитов 4, 5 и 1:
w[4] + w[5] + w[1]
Это вернет нам 0.09. Сверяемся с матрицей расстояний — все верно! #филогенетика
👍5❤1🤯1
RAntiquity
Продолжаю разбираться с филогенетическими методами. Представьте, что у вас есть такая нехитрая сеть, как на рис. 1. Расстояние между двумя узлами определяется как длина кратчайшего пути между ними. Поэтому несложно посчитать матрицу расстояний на основе…
Не думаю, что этот пост сделает меня популярнее в кругу творческой молодежи, но, потратив несколько дней на чтение технической документации, должна сказать. Снова об алгоритме NeighborNet.
В целом, это нечто среднее между идеальной иерархией дерева (в жизни такое редко встречается) и безнадежным лабиринтом сети. Если вам непонятно, что такое безнадежный лабиринт (вдруг вам не приходилось вести долгую безрезультатную переписку по корпоративной почте?), то попробуйте запустить такой код:
Вы увидитепаутинку круговую сеть для 12 таксонов. Выглядит мило, в но жизни с этим лучше не сталкиваться. В такой сети представлены все возможные разбиения, и у всех разбиений равный вес.
NeighborNet работает в два шага:
- Сначала строит круговую раскладку для таксонов таким образом, чтобы минимизировать расстояния между парами кластеров, каждый из которых включает в себя 1 или 2 таксона.
- Потом считает веса для сплитов. На этом этапе некоторые ребра удаляются, а другие вытягиваются сообразно весам. Чем длиннее ребро, тем больше вес сплита.
Сплит — это разбиение совокупности таксонов на два непустых множества. Если вернуться к объекту nnet из вчерашнего кода, можно посмотреть, какие сплиты возможны для 4 таксонов из вчерашнего примера:
Первые четыре сплита довольно заурядны: мы просто откусываем по одному углу от нашего прямоугольника. Пятый сплит делит прямоугольник поперек, а шестой — вдоль.
Дальше алгоритм для каждого сплита считает, какие пары таксонов оказались с разных сторон сплита. Получается матрица вроде той, что представлена на картинке. В ней ряды соответствуют парам таксонов, ab, bc и т.д., а столбцы — сплитам. Единица означает, что пара оказалась «разбита» в этом сплите. Чем больше единиц в сплите, тем больше его совокупный вес. #филогенетика
В целом, это нечто среднее между идеальной иерархией дерева (в жизни такое редко встречается) и безнадежным лабиринтом сети. Если вам непонятно, что такое безнадежный лабиринт (вдруг вам не приходилось вести долгую безрезультатную переписку по корпоративной почте?), то попробуйте запустить такой код:
library(phangorn)
plot(as.networx(allCircularSplits(12)))
Вы увидите
NeighborNet работает в два шага:
- Сначала строит круговую раскладку для таксонов таким образом, чтобы минимизировать расстояния между парами кластеров, каждый из которых включает в себя 1 или 2 таксона.
- Потом считает веса для сплитов. На этом этапе некоторые ребра удаляются, а другие вытягиваются сообразно весам. Чем длиннее ребро, тем больше вес сплита.
Сплит — это разбиение совокупности таксонов на два непустых множества. Если вернуться к объекту nnet из вчерашнего кода, можно посмотреть, какие сплиты возможны для 4 таксонов из вчерашнего примера:
as.matrix(nnet$splits)
Первые четыре сплита довольно заурядны: мы просто откусываем по одному углу от нашего прямоугольника. Пятый сплит делит прямоугольник поперек, а шестой — вдоль.
Дальше алгоритм для каждого сплита считает, какие пары таксонов оказались с разных сторон сплита. Получается матрица вроде той, что представлена на картинке. В ней ряды соответствуют парам таксонов, ab, bc и т.д., а столбцы — сплитам. Единица означает, что пара оказалась «разбита» в этом сплите. Чем больше единиц в сплите, тем больше его совокупный вес. #филогенетика
🔥6🤯3👍2
RAntiquity
Не думаю, что этот пост сделает меня популярнее в кругу творческой молодежи, но, потратив несколько дней на чтение технической документации, должна сказать. Снова об алгоритме NeighborNet. В целом, это нечто среднее между идеальной иерархией дерева (в жизни…
Дальше самое интересное. Даны матрица сплитов А как на картинке выше и исходная матрица расстояний D, ее мы тоже в прошлый раз видели.
Необходимо рассчитать длину ребра таким образом, чтобы кратчайшие пути между таксонами были максимально приближены к исходной матрице расстояний.
То есть нам надо найти такой вектор b, при умножении на который матрица A даст вектор филетических расстояний (phyletic distances) p, максимально похожий на исходную матрицу расстояний D. Иными словами, нам надо решить уравнение p = Ab таким образом, чтобы sum (D-p)^2 было минимальным.
Это делается по формуле на картинке. Немного упрощая, под капотом функция считает так (dm из вчерашнего кода):
Если распечатать beta, то мы увидим знакомые по вчерашней картинке значения длины ребер: 0.03, 0.02, 0.03, 0.01, 0.06, 0.02.
Теперь перепроверим: произведение A и b должно дать нам (примерно) исходную матрицу расстояний D.
Ура! Все получилось. Наибольшее значение beta (0.6) соответствует пятому сплиту, который делил наш прямоугольник поперек.
Как уже говорилось, для 4-х таксонов соответствие может быть полным. Это легко проверить, достав атрибут RSS (Residual Sum of Squares, остаточная сумма квадратов) из объекта nnet, который мы создали.
#филогенетика
Необходимо рассчитать длину ребра таким образом, чтобы кратчайшие пути между таксонами были максимально приближены к исходной матрице расстояний.
То есть нам надо найти такой вектор b, при умножении на который матрица A даст вектор филетических расстояний (phyletic distances) p, максимально похожий на исходную матрицу расстояний D. Иными словами, нам надо решить уравнение p = Ab таким образом, чтобы sum (D-p)^2 было минимальным.
Это делается по формуле на картинке. Немного упрощая, под капотом функция считает так (dm из вчерашнего кода):
y <- dm[lower.tri(dm)] #нижний треугольник матрицы расстояний D
# матрица сплитов А как на картинке
A = matrix(data = c(1,1,1,0,0,0, 1,0,0,1,1,0, 0,1,0,1,0,1, 0,0,1,0,1,1, 0,1,1,1,1,0, 1,0,1,1,0,1), nrow = 6)
# метод наименьших квадратов
# A умножаем на A транспонированную
Dmat <- crossprod(A) # Dmat == t(A) %*% A
# A умножаем на у
dvec <- crossprod(A, y)
# решаем систему уравнений
beta <- solve(Dmat, dvec, tol = -1)
Если распечатать beta, то мы увидим знакомые по вчерашней картинке значения длины ребер: 0.03, 0.02, 0.03, 0.01, 0.06, 0.02.
Теперь перепроверим: произведение A и b должно дать нам (примерно) исходную матрицу расстояний D.
dplyr::near(as.vector(A %*% beta), y)
Ура! Все получилось. Наибольшее значение beta (0.6) соответствует пятому сплиту, который делил наш прямоугольник поперек.
Как уже говорилось, для 4-х таксонов соответствие может быть полным. Это легко проверить, достав атрибут RSS (Residual Sum of Squares, остаточная сумма квадратов) из объекта nnet, который мы создали.
round(attr(nnet$splits, "RSS"), 3)
#филогенетика
🔥7👍2
Forwarded from Цифровой филолог (Даня Скоринкин)
Modeling Narrative Revelation (Andrew Piper, Hao Xu, Eric D. Kolaczyk, 2023)
Любопытная работа из области компьютерной нарратологии с попыткой подсчитать скорость “раскрытия информации” (revelation) в художественных и нехудожественных текстах.
🕰 Авторы статьи начинают с очевидного наблюдения: время в книжном нарративе может сжиматься и удлинняться по воле автора. Вот в одной строчке прошел век, а вот на следующих десяти страницах — минута. Писатель может ускорять и замедлять развитие событий, а еще их детализацию и скорость понимания читателем всех обстоятельств происходящего. Скажем, в детективе гораздо больше всего становится понятно читателю в самом конце, а время в этом самом конце обычно быстро-быстро прокручивается вспять, хотя до этого еле-еле текло по ходу расследования…
📈Все это делает нелинейной и скорость narrative revelation — раскрытия информации читателю. Авторы статьи сделали попытку смоделировать этот самый revelation. Для измерения того, насколько каждый следующий фрагмент текста “нов” (и соответственно сколько новой “информации” он раскрывает читателю) они использовали расстояние Кульбака — Лейблера. Это такая мера близости двух вероятностных распределений, восходящая к старой доброй шенноновской энтропии. Два распределения берутся из двух последовательных фрагментов текста (текущий и предыдущий) длиной в 1000 слов каждый, вероятности — частотности слов. И так попарно перебираем весь текст с шагом в 1000 слов, смотрим, где происходят резкие изменения… Как видите, не rocket science, но авторы статьи считают, что это позволяет ответить на вопрос (цитата):
📚 Исследование проводили на корпусе из 2700 современных (2001–2021) английских книг 12 разныж жанров (датасет CONLIT). Впрочем, “жанры” эти как обычно напоминают Борхесову классификацию:
- Biography
- Bestseller
- History
- Memoir
- Middle school
- Assorted non-fiction
- Mystery
- New York Times reviewed
- Prizelists
- Romance
- Science-Fiction
- Young Adult
мда ¯\_(ツ)_/¯…но по крайней мере всё это удобно делится на Fiction и Non-fiction🙂
🍰Что в итоге удалось найти?
Во-первых, что среднее “раскрытие информации” (revelation) гораздо выше в non-fiction, чем в fiction. С одной стороны, это “тривиальный” результат: от non-fiction никто не ждет интриг, саспенса и загадок, а наоборот ждут максимальной информативноcти с первых страниц. С другой — какой-никакой sanity check, что метод м.б. работает.
Во-вторых, что в fiction гораздо больше новой информации раскрывают книги “престижные” (получатели премий), а бестселлеры — меньше. Авторы интерпретируют это таким образом, что “престижные” книги более сложны и готовы вываливать на читателя больше информации. Но можно и предположить, что у них меньше потребности скрывать и держать интригу, удерживая читателя дешевыми трюками и саспенсом.
В-третьих, книги для детей и молодежи отличаются не только низким средним раскрытием информации, но и самой линейной динамикой “раскрытия информации” по ходу действия: в отличие от других жанров, в них не происходит резкого роста “раскрытия” ближе к концу.
🤔 Конечно, способ моделирования/операционализации “revelation”-а в статье довольно механистический и вызывает много вопросов. Но сам заход на Modeling Narrative Revelation кажется достойным внимания. Думаю, на эту тему будут новые заходы с новым инструментарием 🔬👩🔬🧑🔬
Ссылка на статью
Любопытная работа из области компьютерной нарратологии с попыткой подсчитать скорость “раскрытия информации” (revelation) в художественных и нехудожественных текстах.
🕰 Авторы статьи начинают с очевидного наблюдения: время в книжном нарративе может сжиматься и удлинняться по воле автора. Вот в одной строчке прошел век, а вот на следующих десяти страницах — минута. Писатель может ускорять и замедлять развитие событий, а еще их детализацию и скорость понимания читателем всех обстоятельств происходящего. Скажем, в детективе гораздо больше всего становится понятно читателю в самом конце, а время в этом самом конце обычно быстро-быстро прокручивается вспять, хотя до этого еле-еле текло по ходу расследования…
📈Все это делает нелинейной и скорость narrative revelation — раскрытия информации читателю. Авторы статьи сделали попытку смоделировать этот самый revelation. Для измерения того, насколько каждый следующий фрагмент текста “нов” (и соответственно сколько новой “информации” он раскрывает читателю) они использовали расстояние Кульбака — Лейблера. Это такая мера близости двух вероятностных распределений, восходящая к старой доброй шенноновской энтропии. Два распределения берутся из двух последовательных фрагментов текста (текущий и предыдущий) длиной в 1000 слов каждый, вероятности — частотности слов. И так попарно перебираем весь текст с шагом в 1000 слов, смотрим, где происходят резкие изменения… Как видите, не rocket science, но авторы статьи считают, что это позволяет ответить на вопрос (цитата):
Given what has come immediately before, how surprising is any new passage?
📚 Исследование проводили на корпусе из 2700 современных (2001–2021) английских книг 12 разныж жанров (датасет CONLIT). Впрочем, “жанры” эти как обычно напоминают Борхесову классификацию:
- Biography
- Bestseller
- History
- Memoir
- Middle school
- Assorted non-fiction
- Mystery
- New York Times reviewed
- Prizelists
- Romance
- Science-Fiction
- Young Adult
мда ¯\_(ツ)_/¯…но по крайней мере всё это удобно делится на Fiction и Non-fiction🙂
🍰Что в итоге удалось найти?
Во-первых, что среднее “раскрытие информации” (revelation) гораздо выше в non-fiction, чем в fiction. С одной стороны, это “тривиальный” результат: от non-fiction никто не ждет интриг, саспенса и загадок, а наоборот ждут максимальной информативноcти с первых страниц. С другой — какой-никакой sanity check, что метод м.б. работает.
Во-вторых, что в fiction гораздо больше новой информации раскрывают книги “престижные” (получатели премий), а бестселлеры — меньше. Авторы интерпретируют это таким образом, что “престижные” книги более сложны и готовы вываливать на читателя больше информации. Но можно и предположить, что у них меньше потребности скрывать и держать интригу, удерживая читателя дешевыми трюками и саспенсом.
В-третьих, книги для детей и молодежи отличаются не только низким средним раскрытием информации, но и самой линейной динамикой “раскрытия информации” по ходу действия: в отличие от других жанров, в них не происходит резкого роста “раскрытия” ближе к концу.
🤔 Конечно, способ моделирования/операционализации “revelation”-а в статье довольно механистический и вызывает много вопросов. Но сам заход на Modeling Narrative Revelation кажется достойным внимания. Думаю, на эту тему будут новые заходы с новым инструментарием 🔬👩🔬🧑🔬
Ссылка на статью
👍6
Кое-кто может усомниться, что филогенетические методы, о которых я в последнее время рассказываю (консенсусные сети, консенсусные деревья и neighborNet) сколько-нибудь полезны при изучении текстов. Мы же не думаем, что Аристотель произошел от Платона таким же образом, как homo sapiens от homo erectus (хотя некоторые доксографы, кажется, очень близки к такому пониманию).
Не совсем так. Как утверждают умные люди, филограмма, полученная дистанционными методами, не отражает эволюционный процесс, а показывает степень дивергенции таксонов. (Запишите, чтобы не забыть).
Это значит, что модель NeighborNet не делает никаких допущений о происхождении, однако в каком-то смысле она вполне способна показывать то, что называют «конфликтующими сигналами». В биологии это рекомбинация, гибридизация и разные там генные конверсии, ну а у нас — жанровые и диалектные особенности, отношения подражания, заимствования и все то, что способно влиять на результат классификации текстов, помимо авторства.
Вот что у меня получилось на тренировочном древнегреческом корпусе. Это продолжение большого эксперимента, о котором писали коллеги из «Системного блока». Алгоритму NeighborNet скормлена матрица расстояния, полученная на основе 400 mfw и косинусного сходства (т.н. Вюрцбургской дельты).
Пока просто картинка, чуть позже подробнее расскажу, как это интерпретировать. #филогенетика
Не совсем так. Как утверждают умные люди, филограмма, полученная дистанционными методами, не отражает эволюционный процесс, а показывает степень дивергенции таксонов. (Запишите, чтобы не забыть).
Это значит, что модель NeighborNet не делает никаких допущений о происхождении, однако в каком-то смысле она вполне способна показывать то, что называют «конфликтующими сигналами». В биологии это рекомбинация, гибридизация и разные там генные конверсии, ну а у нас — жанровые и диалектные особенности, отношения подражания, заимствования и все то, что способно влиять на результат классификации текстов, помимо авторства.
Вот что у меня получилось на тренировочном древнегреческом корпусе. Это продолжение большого эксперимента, о котором писали коллеги из «Системного блока». Алгоритму NeighborNet скормлена матрица расстояния, полученная на основе 400 mfw и косинусного сходства (т.н. Вюрцбургской дельты).
Пока просто картинка, чуть позже подробнее расскажу, как это интерпретировать. #филогенетика
❤7🔥3👏1
(Например, вы смотрели в 1993 г. британское телевидение и случайно увидели, может же такое быть с вероятностью 1e-31?)
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5😴1
RAntiquity
But the technique and Morton's most embarrassing failure came in 1993 when he was challenged on live British television to attribute texts that he had never seen. The result was disastrous: despite his impressive statistics and his fancy computer graphics, Morton could not distinguish between the writings of a convicted felon and the Chief Justice of England (отсюда)
🤔2😁1
В комментариях к предыдущему посту Соня раскопала интереснейшую историю взлета и падения Эндрю Мортона, к которой добавлю лишь несколько слов.
Судебная экспертиза действительно была для него одним из важнейших направлений работы. Тот же Гарольд Лав пишет, что Мортон изучал показания, данными якобы самими заключенными, и продемонстрировал (используя свои сомнительные методы), что многие из них были сфабрикованы полицией.
О своем опыте работы в этой сфере сам Мортон рассказывает в Literary Detection 1978 г., причем начинает ни много ни мало с самого Бертильона, его успехов и того, как он сопротивлялся методу дактилоскопии.
Похоже, что собственные поиски Мортона в значительной мере вдохновлялись подобными примерами именно из области криминалистики.
Г. Лав упрекает его в том, что он получал фантастические результаты, перемножая вероятности там, где их надо было складывать. Но, кажется, основная трудность не в том, складывать или умножать.
Для Мортона физическая обособленность автора — гарантия его литературной обособленности. Если человек обособлен и уникален, то как-нибудь — с помощью бертильонажа, дактилоскопии или сканирования сетчатки — мы эту уникальность можем зафиксировать.
Но кто сказал, что наши языковые личности уникальны? Чтение курсовых, родительских чатов и даже научных журналов убеждает меня в обратном. Язык публичен, как куски кода на SO, и все мы собираем свои высказывания из обрывков уже доступных скриптов.
upd. автор умер, но мы продолжаем его измерять 💀
На фото: текущие скрипты и личный маскот (сделанный детьми по мотивам моей любимой компьютерной игры)
Судебная экспертиза действительно была для него одним из важнейших направлений работы. Тот же Гарольд Лав пишет, что Мортон изучал показания, данными якобы самими заключенными, и продемонстрировал (используя свои сомнительные методы), что многие из них были сфабрикованы полицией.
О своем опыте работы в этой сфере сам Мортон рассказывает в Literary Detection 1978 г., причем начинает ни много ни мало с самого Бертильона, его успехов и того, как он сопротивлялся методу дактилоскопии.
When he died in 1914 his place in history was secure but his personal feelings were of failure.
Похоже, что собственные поиски Мортона в значительной мере вдохновлялись подобными примерами именно из области криминалистики.
Г. Лав упрекает его в том, что он получал фантастические результаты, перемножая вероятности там, где их надо было складывать. Но, кажется, основная трудность не в том, складывать или умножать.
Для Мортона физическая обособленность автора — гарантия его литературной обособленности. Если человек обособлен и уникален, то как-нибудь — с помощью бертильонажа, дактилоскопии или сканирования сетчатки — мы эту уникальность можем зафиксировать.
Но кто сказал, что наши языковые личности уникальны? Чтение курсовых, родительских чатов и даже научных журналов убеждает меня в обратном. Язык публичен, как куски кода на SO, и все мы собираем свои высказывания из обрывков уже доступных скриптов.
upd. автор умер, но мы продолжаем его измерять 💀
На фото: текущие скрипты и личный маскот (сделанный детьми по мотивам моей любимой компьютерной игры)
🔥5❤🔥1👍1🥰1
Продолжая историю преподобного Мортона, упомяну о его (написанной в соавторстве) книге It’s Greek to the Computer (1971 г.). Несколько глав там посвящены Платону.
Авторы приходят к удивительным выводам: первые 300 предложений «Тимея», весь «Критий», две книги «Законов» (5 и 6) и седьмое письмо отличаются от платоновского стиля и написаны или отредактированы, скорее всего племянником Платона Спевсиппом.
Этот вывод был основан на нескольких тестах, среди них καί-тест и δέ-тест, оценивающие долю предложений с этими частицами в начале. От Спевсиппа у нас есть всего одно (спорного авторства) письмо Филиппу — на этом были основаны все сравнения.
Книга не лишена интересных наблюдений (в частности, о характере платоновской имитации стиля Лисия), но платоноведы ее подчеркнуто проигнорировали: на google scholar’е всего 27 цитирований за 53 года, главным образом в обзорных статьях по истории количественных методов.
А письмо Спевсиппа надо будет пересчитать, да. О результатах доложу.
Авторы приходят к удивительным выводам: первые 300 предложений «Тимея», весь «Критий», две книги «Законов» (5 и 6) и седьмое письмо отличаются от платоновского стиля и написаны или отредактированы, скорее всего племянником Платона Спевсиппом.
Этот вывод был основан на нескольких тестах, среди них καί-тест и δέ-тест, оценивающие долю предложений с этими частицами в начале. От Спевсиппа у нас есть всего одно (спорного авторства) письмо Филиппу — на этом были основаны все сравнения.
Книга не лишена интересных наблюдений (в частности, о характере платоновской имитации стиля Лисия), но платоноведы ее подчеркнуто проигнорировали: на google scholar’е всего 27 цитирований за 53 года, главным образом в обзорных статьях по истории количественных методов.
А письмо Спевсиппа надо будет пересчитать, да. О результатах доложу.
🔥8❤4🙏4👍1
RAntiquity
Кое-кто может усомниться, что филогенетические методы, о которых я в последнее время рассказываю (консенсусные сети, консенсусные деревья и neighborNet) сколько-нибудь полезны при изучении текстов. Мы же не думаем, что Аристотель произошел от Платона таким…
В статье “Untangling Our Past: Languages, Trees, Splits and Networks” создатели алгоритма NeighborNet объясняют, как правильно интерпретировать такой граф на примере дерева германских языков.
Конфликтующие сигналы передаются за счет “ретикулярной структуры” (квадратиков, проще говоря). Там, где конфликта нет, мы видим дерево.
Каждый сплит представлен несколькими параллельными линиями, и если эти параллели удалить, то граф распадется на два. Чем длиннее ребро, тем “весомее” сплит.
На графе видно, что креольский язык сранан-тонго обладает сходством и с английским, и с нидерландским (граф можно разрезать по зеленым линиям двояко).
Более слабый конфликтующий сигнал прослеживается между немецким, нидерландским и фламандским, с одной стороны, и пенсильванским немецким, с другой (синий разрез).
Теперь можно вернуться к картинке с древнегреческими авторами и посмотреть внимательнее, какие группы там выделяются и где больше “конфликтов”.
(Но мне надо готовиться к паре, так что это чуть позже). #филогенетика
Конфликтующие сигналы передаются за счет “ретикулярной структуры” (квадратиков, проще говоря). Там, где конфликта нет, мы видим дерево.
Каждый сплит представлен несколькими параллельными линиями, и если эти параллели удалить, то граф распадется на два. Чем длиннее ребро, тем “весомее” сплит.
На графе видно, что креольский язык сранан-тонго обладает сходством и с английским, и с нидерландским (граф можно разрезать по зеленым линиям двояко).
Более слабый конфликтующий сигнал прослеживается между немецким, нидерландским и фламандским, с одной стороны, и пенсильванским немецким, с другой (синий разрез).
Теперь можно вернуться к картинке с древнегреческими авторами и посмотреть внимательнее, какие группы там выделяются и где больше “конфликтов”.
(Но мне надо готовиться к паре, так что это чуть позже). #филогенетика
❤5🔥5👍3
Forwarded from DH Center ITMO University
Программа конференции 📎
15–17 апреля мы проводим конференцию «Гуманитарные проблемы актуальных наук: цифровая дисциплина и проект»
До нашей встречи в Петербурге и в онлайне — чуть больше недели, и мы рады поделиться с вами программой этих трёх дней.
На конференции будут не только классические форматы в духе докладов, дискуссий и круглых столов, но и серия специальных мероприятий, которые мы подготовили с нашими коллегами: секция о сохранении цифрового наследия вместе с ПАНДАНом, встречи о чтении гипертекстов и тексте в интерфейсе вместе с Пушкиным <цифровым>, лекции и воркшопы от приглашённых спикеров и, конечно, вечеринки открытия и закрытия.
⚡️ Полная программа — на сайте. Актуальное расписание и параллельные секции — в этом документе.
Там же вы найдёте ссылки для регистрации в качестве слушателей. Важно — если вы планируете прийти на конференцию на все три дня — зарегистрироваться нужно на каждый из них.
До встречи в середине апреля!
15–17 апреля мы проводим конференцию «Гуманитарные проблемы актуальных наук: цифровая дисциплина и проект»
До нашей встречи в Петербурге и в онлайне — чуть больше недели, и мы рады поделиться с вами программой этих трёх дней.
На конференции будут не только классические форматы в духе докладов, дискуссий и круглых столов, но и серия специальных мероприятий, которые мы подготовили с нашими коллегами: секция о сохранении цифрового наследия вместе с ПАНДАНом, встречи о чтении гипертекстов и тексте в интерфейсе вместе с Пушкиным <цифровым>, лекции и воркшопы от приглашённых спикеров и, конечно, вечеринки открытия и закрытия.
Там же вы найдёте ссылки для регистрации в качестве слушателей. Важно — если вы планируете прийти на конференцию на все три дня — зарегистрироваться нужно на каждый из них.
До встречи в середине апреля!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2🔥1