Na suavização Kneser-Ney, como são tratadas as palavras invisíveis?

15

Pelo que vi, a fórmula de suavização Kneser-Ney (de segunda ordem) é, de uma maneira ou de outra, dada como

PKN2(wn|wn1)=max{C(wn1,wn)D,0}wC(wn1,w)+λ(wn1)×Pcont(wn)

com o fator de normalização fornecido comoλ(wn1)

λ(wn1)=DwC(wn1,w)×N1+(wn1)

e a probabilidade de continuação de uma palavraPcont(wn)wn

Pcont(wn)=N1+(wn)wN1+(w)

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.N1+(w)ww

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, Pcont(/)=PKN0(/)=1V . O documento então usa isso - citando Chen e Goodman - para justificar a fórmula acima como PKN1(w)=Pcont(w) .

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á .w=unknownPcont(unknown)=0somethingC(wn1,unknown)=0

Além disso, o termo inteiro pode ser zero se uma sequência de palavras desconhecidas - digamos, um trigrama de palavras OOD - for encontrada.wC(wn1,w)

o que estou perdendo?

beira do sol
fonte
Também estou lutando com o KN. Penso que a probabilidade de um bigram invisível P (w1w2) poderia recuar para a probabilidade de continuação do último unigrama w2. Quando você fica com um unigrama invisível, não tinha nada. o que fazer a seguir? Eu não sei.
momobo 19/09/14
Estou tentando implementar o KN eu mesmo no momento e estou com esse mesmo problema. Vocês dois conseguiram encontrar uma solução?
jbaiter
Voltei à suavização de Good-Turing para unigramas invisíveis (ajustando uma função de potência às frequências e frequências de frequências) ... com resultados variados.
sol

Respostas:

6

Dan Jurafsky publicou um capítulo sobre modelos N-Gram que fala um pouco sobre esse problema:

No final da recursão, os unigramas são interpolados com a distribuição uniforme:

PKN(w)=max(cKN(w)d,0)wcKN(w)+λ(ϵ)1|V|

Se queremos incluir uma palavra desconhecida <UNK> , ela é incluída apenas como uma entrada regular de vocabulário com contagem zero e, portanto, sua probabilidade será:

λ(ϵ)|V|

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:ϵlimx0xλ(ϵ)d

λ(wi1)=dc(wi1)|{w:c(wi1,w)>0}|

a palavra desconhecida recebe apenas uma fração do desconto, ou seja:

λ(ϵ)|V|=d|V|

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|

abroekhof
fonte
2
Boa resposta, mas como você, não estou 100% confiante. Eu implementei uma versão do script perl research.microsoft.com/en-us/um/redmond/groups/srg/papers/… em python - mas percebi que só funciona como está se você tiver um vocabulário fechado (problema com 0 problemas ) - ou seja, todos os unigramas de teste também estão em treinamento. Como sugerido por Jan lagunita.stanford.edu/c4x/Engineering/CS-224N/asset/slp4.pdf I substituído primeira instância de cada palavra com <UNK> durante a pré-processamento. No entanto, ao particionar, existem alguns unigramas de teste que não estão em treinamento, como "bobagem". Então eu usei d / | V | aqui. Obrigado!
Josh Morel #
1

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>.

Randy
fonte
0

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.

λ(ϵ)λ(ϵ)

λ(ϵ)=1wmax(CKN(w)d,0)wCKN(w)
Remember that here CKN(w) is obtained from the bigram model.

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.

Daniel Villegas
fonte
Answers are suppose to be for actual answers.
Michael R. Chernick