Acho que as respostas mais detalhadas podem ser encontradas no extenso trabalho de Mehryar Mohri sobre o assunto. Aqui está um link para um de seus slides de palestras sobre o tema: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf
O problema da detecção de linguagem é que a linguagem humana (palavras) possui estrutura. Por exemplo, em inglês, é muito comum a letra 'u' seguir a letra 'q', embora esse não seja o caso em árabe transliterado. n-gramas funcionam capturando essa estrutura. Assim, certas combinações de letras são mais prováveis em alguns idiomas do que em outros. Esta é a base da classificação n-grama.
As palavras-chave, por outro lado, dependem da pesquisa em um grande dicionário e, essencialmente, da correspondência de modelos. Existem duas desvantagens principais aqui: 1) cada idioma precisaria ter um extenso dicionário de palavras em arquivo, o que levaria um tempo relativamente longo para pesquisar e 2) palavras-chave falharão se nenhuma das palavras em o conjunto de treinamento está incluído no conjunto de testes.
Supondo que você esteja usando bigrams (n = 2) e existindo 26 letras em seu alfabeto, existem apenas 26 ^ 2 = 676 possíveis bigrams para esse alfabeto, muitos dos quais nunca ocorrerão. Portanto, o "perfil" (para usar as palavras do detector de idioma) para cada idioma precisa de um banco de dados muito pequeno. Um classificador de saco de palavras, por outro lado, precisaria de um dicionário completo para CADA idioma, a fim de garantir que um idioma pudesse ser detectado com base em qualquer sentença que fosse dada.
Em resumo, cada perfil de idioma pode ser gerado rapidamente com um espaço de recursos relativamente pequeno. Curiosamente, n-gramas funcionam apenas porque as letras não são desenhadas iid em um idioma - isso é explicitamente alavancado.
Nota: a equação geral para o número de n-gramas para as palavras é l ^ n onde l é o número de letras no alfabeto.
A letra N-gramas é usada em vez de palavras por vários motivos:
1) A lista de palavras necessárias para um determinado idioma é bastante grande, talvez 100.000, se você considerar rápido, mais rápido, mais rápido, mais rápido, mais rápido, mais rápido, mais rápido ... como todas as palavras diferentes. Para 80 idiomas, você precisa de cerca de 80x mais palavras, ocupando muito espaço - mais de 50 megabytes.
2) O número de trigramas de letras para um alfabeto de 26 letras é 26 ** 3 ou cerca de 17.000 e, para quadrogramas (N = 4), cerca de 450.000 cobrindo TODOS os idiomas usando esse alfabeto. Números semelhantes, mas um pouco maiores, para N-gramas em alfabetos maiores de 30 a 100 caracteres. Para os idiomas CJK com mais de 4000 letras no script Han, os unigramas (N = 1) são suficientes. Para alguns scripts Unicode, há apenas um idioma por script (grego, armênio), portanto, nenhuma combinação de letras é necessária (os chamados nil-gramas N = 0)
3) Com palavras, você não tem nenhuma informação quando uma palavra que não está no dicionário, enquanto que com a letra N-gramas você costuma ter pelo menos algumas combinações úteis de letras nessa palavra.
O CLD2 usa quadgrams para a maioria dos scripts Unicode (alfabetos), incluindo unigramas em latim, cirílico e árabe, para os scripts CJK, nilgramas para outros scripts e também inclui um número limitado de palavras e pares de palavras completas bastante distintas e bastante comuns para distinguir em grupos difíceis de idiomas estatisticamente semelhantes, como indonésio e malaio. Os bigrams e trigramas de letras talvez sejam úteis para distinguir entre um pequeno número de idiomas (cerca de oito, consulte https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), mas são inúteis para distinguir dezenas de idiomas. Assim, o CLD2 usa quadramas, associando a cada combinação de letras os três principais idiomas mais prováveis usando essa combinação. Isso permite cobrir 80 idiomas com cerca de 1,5 MB de tabelas e 160 idiomas com mais detalhes, com cerca de 5 MB de tabelas.
fonte