Какво е изчислението на Ngram?

Правя проект от книги за запознанства и основната ми идея е да го направя с "ngram". Влязох тук http://books.google.com/ngrams и намерих ngrams, които имат най-много недвусмислени графики (непостоянна стойност през годините). След това написах код на python, който "чете" книги - взема книгата, няколко ngrams и след това изчислява честотата на ngrams върху текста. Например, ngram "ex" в текста "изтребете всички човешки същества с експлозивни grandes" ще бъде 0,05263157894736842, защото има 2 "ex" в този текст и има 38 възможни комбинации от 2 букви, така че реших, че ngram ще бъде 2/38.

Така че направих това изчисление за много книги с 1 грам (ABC) и получих горе-долу еднакви числа с всички книги. И тогава се върнах към ngram на Google и очевидно числата, които получих, и числото, което те получиха, бяха напълно различни. Например, 1 грам "a" беше около 0,078, b беше 0,0135 и така едно, но ngram на Google беше [a=1,54] и [b=0,0066]...

Стигнах до извода, че съм сгрешил това изчисление. Сега ви питам какво е РЕАЛНОТО изчисление на ngram. Наистина трябва да разбера това, така че, моля, ако знаете как работи това нещо, моля, уведомете ме.

Благодаря много :)

Редактиране след отговор: наистина получих по-високи стойности от Google, защото моята стойност е вероятност (0 към 1), така че ако искам да преобразувам тези стойности в %, трябва да умножа по 100 и има смисъл, защото има повече "a" (8%) като буква в английския език, отколкото "a" като дума.


person Doron    schedule 26.05.2013    source източник
comment
Изчислявате символни n-грам статистики. Google използва дума n-grams.   -  person Fred Foo    schedule 27.05.2013


Отговори (2)


Сигурни ли сте за стойността, която отчитате от Google? Честотите варират от 0 до 1, а вие цитирате 1,54 като техен резултат. Бих проверил това, ако бях на твое място.

http://en.wikipedia.org/wiki/Letter_frequency

Това казва, че буквата a има честота 0,08167.

Трябва също така да осъзнаете, че тази честота се основава на конкретна извадка. Вие приемате, че честотата на появата на буквата се доближава до истинската стойност, когато размерът на извадката стане достатъчно голям.

Обикновено се сещам за думи, когато чуя n-gram. 1-грам е една дума (напр. "ябълка"); триграма е три думи (напр. „Ние, хората“).

person duffymo    schedule 26.05.2013
comment
- Сигурен ли си, че 1-грам е една дума? -Благодаря, ще прочета за честотата на буквите, но все още мисля за n-грама като най-добрия вариант, защото имам графики на Google за честота спрямо години и това наистина би ми помогнало с датирането на книгите. Проблемът е, че не разбирам изчислението им и следователно не получавам същите числа... -Искам да използвам и 2 грама, 3 грама или 4 грама (с това имам предвид комбинации от 2, 3 и 4 букви), но също така видях разлика между моите стойности и стойностите на Google с 2 грама. - person Doron; 27.05.2013
comment
Не искам да използвам постоянна стойност, защото искам да датирам книгите, така че искам да знам разликата през годините в честотата на N-грама - person Doron; 27.05.2013
comment
Да, сигурен съм, че n-грамите се отнасят както за думи, така и за букви. - person duffymo; 27.05.2013
comment
N-грамите могат да бъдат изчислени както на ниво знаци, така и на ниво дума; кой е подходящ зависи от задачата. - person Fred Foo; 27.05.2013

Добре, направих малко проучване и @duffymo всъщност беше прав. Няма значение дали е дума или буква, Ngram Engine на Google ще го търси под формата на една фраза. Например, ако напиша "a", то ще търси "a" (с интервали) като една дума.

Направих някои промени в кода си и сега получавам същите резултати като Google.

Благодаря!

person Doron    schedule 29.05.2013