LINUX.ORG.RU

[DB] Как работает Google ngram viewer

 


0

1

Google ngram viewer - это экспериментальный сервис от Гугла, позволяющий следить за тенденциями использования фраз (н-грамм) в книгах на протяжении более века. Мне интересно как реализуется база данных, позволяющая делать такой сервис. Самый простой вариант - создать таблицу в которой каждый столбик соответсвует году (~200 столбиков), а каждая строка - фразе. Не трудно подсчитать, что теоритически количество строк в такой таблице должно бы очень большим: 200К слов плюс (200К)^2 фраз из двух слов плюс (200К)^3 фраз из трех слов и т.п. Даже если предположить, что мы ограничем себя фразами из трех слов и что только 10% из теоретически возможных фраз используются на самом деле, то мы получаем около 10^15 строк, умножая на ~200 столбиков получаем таблицу на 200 петабайт, и это только для английского языка. При всем моем уважении к Гуглу, не думаю что он в хотел бы выделить такое количество памяти под такой незначительный проект. С другой стороны, думается мне, что эти вычесления не делаются на лету, т.к. скорость сервиса очень впечетляет.

Как же реализуются подобные сервисы?

★★

>10^15 строк

Война и мир 477736 слов. Получается около 1 млрд. книг по объему сопоставимых с войной и миром было издано за 100 лет. Верится с трудом.

По теме: скорее всего это сделано также как и в поиске - распределенный индекс. В явном виде БД не хранится

anonymous
()

Так в столбиках хранится же не слова. Фразы лишь в первом столбике, дальше только цифры.
Потом можно использовать какое-нибудь спец. сжатие, где словарь слов = словам из фраз, экономия места при дубляже.

Потом как понял, могу и ошибаться, показывает проценты от всех книг.

Определить память:
- допустим 1 сжатое слово = 2^32 = 4 байта => 4^N * 200К слов
где N - кол-во слов во фразе, допустим до 3х: 800кб + 1600кб + 2400кб = 4.8 мб на слова + сам словарь допустим 5.2 мб (для красоты подсчёта и помню что для проверки орфографии около 4 мб было) = 10 мб на слова
- дальше есть таблица книг с годами их выхода, не знаю сколько в их базе, но допустим 5 миллионов книг (5 миллионов строк), не знаю какое самое длинное название, но на всё книги даже если кинуть 1 Гб то считаю всё равно это мало
- теперь надо связать слова с книгами (ID там и там 32 бита, то есть 8 байт) 5*10^6 строк книг * (10^15 строк вариаций фраз) * 8 байт = дофига петабайт
НО нет книг где использовались бы все слова и фразы, а одно сопоставление займёт всего 8 байт. То есть 1 терабайта хватит для = 125 миллиарда сопоставлений, а это уже огромные данные.

Поэтому вывод, надо минимум 1 Гб, а верхняя планка очень высока, но в тоже самое время зависит от книг

Война и мир 477736 * 8 байт + например фраз в 10 раз было больше 4777360 * 8 = 42 Мб данных и это считается большая, сложная книга...

C_H_A_D_o
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.