Квантеда, сколько масштаб может обрабатывать texttat_simil
Я использую Quanteda в течение последних нескольких месяцев и действительно наслаждаюсь использованием пакета. У меня один вопрос: сколько строк dfm может обработать функция texttat_simil до того, как время создания матрицы подобия станет слишком длинным.
У меня есть поисковый корпус, содержащий 15 миллионов документов. Каждый документ представляет собой короткое предложение, содержащее от 5 до 10 слов (документы иногда содержат также 3-4 цифры). Я токенизировал этот корпус поиска, используя биграммы персонажей, и создал из него dfm.
У меня также есть другой корпус, который я называю корпусом матча. Он имеет пару сотен документов одинаковой длины, имеет тот же токенизацию, и для него также создан dfm. Цель состоит в том, чтобы найти самый близкий соответствующий документ из корпуса поиска для каждого из документов корпуса соответствия.
Комбинированный dfm создается путем связывания соответствия dfm с поиском dfm. Количество уникальных токенов для комбинированного dfm составляет около 1580. Затем я запускаю texttat_simil для этого комбинированного dfm, используя метод "косинус", "документы" в качестве поля и выбор, являющийся лишь одним из документов соответствия, для проверки на данный момент. Тем не менее, когда я запускаю texttat_simil, это занимает более 5 минут.
Является ли такой объем слишком большим для такого подхода с использованием квантовой?
Ура, Соф
1 ответ
В quanteda v1.3.13 мы перепрограммировали функцию для вычисления косинусных сходств, чтобы она была более эффективной для памяти и для хранения. Однако, похоже, что вы все еще пытаетесь получить матрицу расстояний между документами (исключая диагональ), которая будет (15000000^2)/2 - 150000000 = 1.124998e+14 ячеек. Если вы можете заставить это работать вообще, я очень впечатлен вашей машиной!
Однако для вашего целевого набора документов 1850 вы можете сузить его, используя selection
аргумент.
Также ищите экспериментальные textstat_proxy()
функция в v1.3.13, которую мы создали для такого рода проблем. Вы можете указать минимальное расстояние, ниже которого расстояние не будет записано, и оно возвращает матрицу расстояний, используя объект разреженной матрицы. Это все еще экспериментально, потому что разреженные значения не являются нулями, но будут рассматриваться как нули при любых операциях с разреженной матрицей. (Это нарушает некоторые свойства расстояния - см. Обсуждение здесь.)