Я работаю над генератором текста цепи Маркова в обучении python большого корпуса 20 ГБ +. Он берет простой текст и разбивает его на пары: два текущих выбранных слова и следующее за ним слово. Это часть списка:
[(('as', 'a'), 'subject'), (('a', 'subject'), 'for'), (('subject', 'for'), 'the'), (('for', 'the'), 'remarks'), (('the', 'remarks'), 'of'), (('remarks', 'of'), 'the'), (('of', 'the'), 'evening'), (('the', 'evening'), 'the'), (('evening', 'the'), 'perpetuation'), (('the', 'perpetuation'), 'of'), (('perpetuation', 'of'), 'our'), (('of', 'our'), 'political')]
Затем я помещаю это в словарь, поэтому, если у меня есть ключ (два слова), который встречается несколько раз, я могу просто поместить значение в виде массива с несколькими значениями:
{('as', 'a'): ['subject', 'nation'], ('a', 'subject'): ['for'], ('subject', 'for'): ['the'], ('for', 'the'): ['remarks', 'executive', 'government', 'laws', 'redress', 'sake', 'constitution'], ('the', 'remarks'): ['of']}
Я делаю это снова для тысяч файлов, добавляемых в этот словарь, через некоторое время он становится слишком большим для оперативной памяти. Есть ли способ сохранить такой словарь на диске? Структура данных:
У меня лучшие идеи, которые у меня были, - это база данных или файл csv, но я читал, что они непрактичны.
Я бы использовал его для создания предложений, которые начинаю с двух слов и нахожу значения, соответствующие этому ключу. Скажем, начни с (I, Went), значения, которые я возвращаю, это [to, back, around], я выбираю одно и добавляю его к предложению, которое теперь будет (I, Went, back). Я продолжаю делать то же самое (Пошел, вернулся) -> [К, Дом, Ибо, Задыхаясь]. Я всегда буду хранить его на диске, поэтому мне не нужно повторно обучать, но мне нужно, чтобы он был быстрым в том смысле, что я даю ему ключ, и он может быстро вернуть список значений, поскольку мне придется это делать в сто раз больше.
Если бы у вас было достаточно памяти, что бы вы делали после тренировки? Вы планируете хранить? Быстро относительно. База данных может показаться хорошим компромиссом. Используйте Python встроенная поддержка для sqlite и посмотрите, достаточно ли он для вас быстр.