Фон
Я работаю над справедливым вычислительным интенсивным проектом для вычислительной лингвистики проекта, но проблема, в которой у меня есть достаточно общее, и, следовательно, я ожидаю, что решение будет интересным для других Что ж.
Требования
Ключевым аспектом этой конкретной программы «Я должен написать», является то, что он должен:
Шаги 1 и 2 не трудно сделать эффективно: просто используйте генераторы и иметь конвейер анализа данных. Большая проблема - это работа 3 (и по подключению 4)
скобки: Технические детали
В случае, если фактическая процедура для строительных векторов влияет на решение:
для каждой строки в корпусе, одна или несколько векторов должны иметь Его базисные веса обновлены.
Если вы думаете о них с точки зрения списков Python, каждую строку, при обработке, обновляются один или несколько списков (создание их при необходимости) путем увеличения значений этих списков в одном или нескольких показателях (которые могут отличаться на основе индекса).
Векторы не зависят друг от друга, и не зависит от того, какой порядок прочитан строки корпусов.
Попытка решения
Есть три экстреманта, когда речь идет о том, как это сделать:
Все эти варианты довольно неразрешимы. 1 Просто использует всю системную память, и она панирует и замедляется в ползу. 2 - это слишком медленно, поскольку операции IO не являются быстрыми. 3, возможно, даже медленнее 2 по тем же причинам.
Цели
Хорошее решение будет включать в себя:
Проблема в том, что я не совсем уверен, как поступить об этом. Кажется, что несколько разнозвенно беспокоится о системных атрибутах, таких как RAM, но я не вижу, как эта проблема может быть оптимально решена, не принимая это во внимание. В результате я не знаю, как начать начать эту вещь.
Вопрос
Кто-нибудь знает, как пойти о решении такой проблемы? Я питон просто не правильный язык для такого рода вещи? Или есть ли простое решение, чтобы максимизировать, насколько многое сделано из памяти (в пределах разума), сводясь к минимуму, сколько раз данных необходимо прочитать с диска или записать его?
Большое спасибо за ваше внимание. Я с нетерпением жду, чтобы увидеть, что яркие умы StackOverflow может бросить свой путь.
Дополнительные детали
Вид машины Эта проблема работает, обычно имеет 20+ ядер и ~ 70 г ОЗУ. Проблема может быть распределена (a la MapRuce) в том, что отдельные векторы для одного объекта могут быть созданы из сегментов корпуса, а затем добавлены для получения вектора, который был бы построен из всего корпуса.
Часть вопроса включает определение ограничения на то, сколько можно построить в памяти до того, как необходимо возникнуть дисков. Python предлагает любой механизм, чтобы определить, сколько оперативной памяти доступен?