Aqui está um artigo inteiro sobre o problema, com um resumo de várias abordagens. É chamado de estimativa de valor distinto na literatura.
Se eu tivesse que fazer isso sozinho, sem ter lido papéis sofisticados, faria isso. Na construção de modelos de linguagem, muitas vezes é preciso estimar a probabilidade de observar uma palavra anteriormente desconhecida, dado um monte de texto. Uma abordagem bastante boa para resolver esse problema, especialmente para os modelos de linguagem, é usar o número de palavras que ocorreram exatamente uma vez, dividido pelo número total de tokens. É chamado de estimativa de Good Turing .
Seja u1 o número de valores que ocorreram exatamente uma vez em uma amostra de m itens.
P[new item next] ~= u1 / m.
Seja u o número de itens únicos em sua amostra de tamanho m.
Se você erroneamente presumir que a taxa de 'novo item seguinte' não diminuiu à medida que você obteve mais dados, usando o Good Turing, você terá
total uniq set of size s ~= u + u1 / m * (s - m)
Isso tem um comportamento desagradável quando o u1 se torna realmente pequeno, mas isso pode não ser um problema para você na prática.