Pelo que vi, a fórmula de suavização Kneser-Ney (de segunda ordem) é, de uma maneira ou de outra, dada como
com o fator de normalização fornecido como
e a probabilidade de continuação de uma palavra
onde é o número de contextos em que w foi visto ou, mais simples, o número de palavras distintas \ bullet que precedem a palavra dada w . Pelo que entendi, a fórmula pode ser aplicada recursivamente.
Agora, isso lida bem com palavras conhecidas em contextos desconhecidos para diferentes comprimentos de n-grama, mas o que não explica é o que fazer quando houver palavras fora do dicionário. Tentei seguir este exemplo, que afirma que, na etapa de recursão para unigramas, . O documento então usa isso - citando Chen e Goodman - para justificar a fórmula acima como .
Mas não vejo como isso funciona na presença de uma palavra desconhecida . Nesses casos, , pois, obviamente, a palavra desconhecida não continua em relação ao conjunto de treinamento. Da mesma forma, a contagem de n gramas será .
Além disso, o termo inteiro pode ser zero se uma sequência de palavras desconhecidas - digamos, um trigrama de palavras OOD - for encontrada.
o que estou perdendo?
fonte
Respostas:
Dan Jurafsky publicou um capítulo sobre modelos N-Gram que fala um pouco sobre esse problema:
Eu tentei descobrir o que isso significa, mas não tenho certeza se apenas significa lim x → 0 x . Se for esse o caso, e você assume que, conforme a contagem vai para zero, talvez λ ( ϵ ) vá para d , de acordo com:ϵ limx→0x λ(ϵ) d
a palavra desconhecida recebe apenas uma fração do desconto, ou seja:
Não estou confiante em relação a esta resposta, mas queria divulgá-la, caso isso provoque mais alguns pensamentos.
Atualização: Procurando um pouco mais, parece que normalmente é usado para denotar a sequência vazia (""), mas ainda não está claro como isso afeta o cálculo de λ . dϵ λ ainda é o meu melhor palpited|V|
fonte
Existem várias maneiras de treinar um modelo com
<UNK>
embora Jurafsky sugira escolher aquelas palavras que ocorrem muito poucas vezes no treinamento e simplesmente alterá-las para<UNK>
.Depois, simplesmente treine as probabilidades como faria normalmente.
Veja este vídeo a partir das 3:40 -
https://class.coursera.org/nlp/lecture/19
Outra abordagem é simplesmente considerar uma palavra como
<UNK>
a primeira vez que é vista em treinamento, embora, pela minha experiência, essa abordagem atribua muito da massa de probabilidade<UNK>
.fonte
Apenas alguns pensamentos, estou longe de ser um especialista no assunto, então não pretendo fornecer uma resposta para a pergunta, mas analisá-la.
Another option would be to estimate the
<unk>
probability with the methods mentioned by Randy and treating it as a regular token.I think this step is made to ensure that the formulas are consistent. Notice that the termλ(ϵ)|V| does not depend on the context and assigns fixed values to the probabilities of every token. If you want to predict the next word you can prescind this term, on the other hand if you want to compare the Kneser - Ney probability assigned to each token under two or more different contexts you might want to use it.
fonte