Машинный анализ рассекреченных документов ЦРУ

Машинный анализ рассекреченных документов ЦРУ

перевод: Ruth Wegwarte

Для начала, в чём состоит задача? Передо мной безумные объёмы рассекреченных документов, вытащенных из онлайн-читальни CIA. Я хочу обработать их с помощью NLP (Natural Language Processing) и регулярных выражений. Меня ждёт многошаговый и, возможно, достаточно сложный процесс.

На старте у меня имеется архив из 250001 PDF-файлов, весом где-то под 90 ГБ. Самый первый и длительный по времени шаг - это провести распознание текста (OCR, Optical Character Recognition). Эта операция добавит на оригинальные пдфки слой текста, по которому можно искать. Тут несложно. Пишется скрипт, автоматически вызывающий программу для ORC под названием Tesseract для обработки каждого документа. И он берёт на себя весь вес, отрабатывая в течение нескольких месяцев на 3-х отдельных процессорах. Работа закончилась за несколько дней до написания этих постов.

Ура. Это был Шаг 1.

Шаг 2 - это выдрать из всех pdf-ок текст, созданный ORC-программой, в .txt-документы. В итоге получится ещё один огромный массив файлов, только на сей раз текстовых. Теперь на материалах раскрытых документов можно решать какие угодно поисковые и аналитические задачки. На это ушло два дня, за которые я обдумывала дальнейшие шаги.

Подробнее о том, как и чем можно делать OСR, читайте в этом посте.

На Шаге 3 становится интереснее. Первое, что нужно сделать для NLP - это провести разбиение на лексемы (word tokenisation). Было - как первой картинке, стало - как на второй:

Было
Стало

То есть, разбили связный текст на списки раздельных слов. Теперь ещё нужно определить, к какой части речи каждое относится. Это называется - частеречная разметка (POS, part of speech tagging)

Слова и их метки, соответствующие частям речи

Это делается сколько-то сотен тысяч раз, и на Шаге 4 у нас получается огромный файл...насколько огромный, что он весь не поместился в памяти во время обработки. И в нём много тысяч слов распарсенных и помеченных слов. Теперь можно придумывать, с каким регулярным выражением мы хотим поиграть.

Допустим, мы ищем криптонимы, они же названия-заменители. Это такие условные обозначения, принятые в спецслужбах. Нужно построить регулярное выражение (regex), которое будет находить отдельные слова, являющиеся нужной частью речи. Для этого мы заручимся помощью ранее составленной разметки (POS), но нужны ещё ключики. https://en.wikipedia.org/wiki/CIA_cryptonym#Known_cryptonyms - это список, ранее найденный исследователями рассекреченных документов. То есть мы знаем, что криптонимы вообще есть в наших текстах, и можем рассмотреть их примеры. Давайте для начала запомним, что они все пишутся заглавными буквами (капсом). И ещё полезное: они в основном имеют длину 4-10 символов. Теперь у нас есть, от чего отталкиваться! Поищем в наших размеченных текстах уже известные криптонимы, чтоб потестить, определяются ли они как существительные. Вот пара известных нам исторически:

  • OXCART - A-12, платформа для ведения наблюдения с воздуха из 60-х.
  • TAGBOARD - беспилотный дрон, работающий вместе с OXCART.

Да, вот у них есть метка NNP - nouns, существительные. Значит, нужно искать такой регуляркой:

'[A-Z]{5,10}', 'NNP'

Это значит: 5-10 заглавных букв между одинарными кавычками, а потом всегда идёт , 'NNP', как на скрине выше.

И теперь grep-аем (ищем) в разбитом на лексемы тексте.

Вот всё, что подходит под регулярку. Выглядит не совсем полезно... но погодите! Тут есть какие-то закономерности... Я их вижу на глазок, просто скролля текст. Невинные на первый взгляд слова, возникающие с определённой регулярностью - это именно то, что надо искать... так, что тут у нас?

Не могу себе представить в контексте наблюдательных платформ буквальное значение COTTON ("хлопок"). Возможно, это новый, ранее не известный мне криптоним. Надо узнать у самого ЦРУ.

Ищем подходящий документ...
Нашли!

Если заглянуть в скриншот, на котором мы его заметили, то увидим, что SCOPE и COTTON действительно идут подряд. Итак, SCOPE COTTON - криптоним.

Мы достигли того, что хотели: взяли груду документов и открыли новый (для себя) криптоним без необходимости прочитывать текст самостоятельно. Хорошо быть одновременно умненьким и ленивым.

Скрипты для этой задачи лежат здесь.




Report Page