Eu sou novo no HMM e ainda estou aprendendo. Atualmente, estou usando o HMM para marcar parte do discurso. Para implementar o algoritmo viterbi, preciso de probabilidades de transição ( ) e de probabilidades de emissão ( ).
Estou gerando valores para essas probabilidades usando o método de aprendizado supervisionado, onde dou uma frase e sua marcação. Calculo probabilidades de emissão como:
onde é o número de vezes que a tag ocorre no conjunto de treinamento e é o número de vezes em que a palavra observada mapeada para a tag .
Porém, ao usar esse b_i (o) treinado para marcação, podem ser observadas variáveis na sentença especificada que nunca apareceram ao encontrar o valor para . Nesse caso, como você estima um valor para para essa instância?
Respostas:
Para esse tipo de pergunta, é possível usar o Laplace Smoothing . Em geral, a Laplace Smoothing pode ser escrita como:
AquiL é a probabilidade.
Portanto, neste caso, os valores de probabilidade de emissão ( ) podem ser reescritos como:bi(o)
onde é o número de tags disponíveis após o treinamento do sistema.n
fonte
n
ser o número de palavras únicas, não o número de tags? Essa é a única maneira pela qual a probabilidadeEsta é uma pergunta relativamente antiga, mas adicionarei meus 5 centavos para as pessoas que (como eu) se depararam com ela em busca de algo relacionado.
Uma abordagem alternativa para lidar com probabilidades de emissão zero é "fechar o vocabulário". Uma idéia é definir palavras "raras" no conjunto de treinamento - aquelas que aparecem menos do que o número predefinido de vezes e substituí-las por "classes de palavras" antes do treinamento do modelo. Ao aplicar um modelo a uma nova sequência de palavras, todas as palavras que não foram vistas em um conjunto de treinamento também são convertidas em "classes de palavras" (considerando-as efetivamente como "raras"). Garante que, para um modelo, não haverá palavras invisíveis.
As regras para produzir "classes de palavras" a partir de palavras devem ser selecionadas manualmente (o que é uma desvantagem). Por exemplo, em (provavelmente) primeiro artigo em que essa abordagem foi utilizada (Bikel, DM, Schwartz, R. & Weischedel, RM Machine Learning (1999) 34: 211 .; https://link.springer.com/article/ 10.1023 / A: 1007558221122 ; http://curtis.ml.cmu.edu/w/courses/index.php/Bikel_et_al_MLJ_1999 ) e exemplos de classes são:
Um exemplo de sentença marcada pré-processada de um conjunto de treinamento (das palestras de Michael Collins):
"Os lucros / NA dispararam / NA na / NA Boeing / SC Co./CC, / NA facilmente / cobertura de NA / previsões de NA / NA em / NA Wall / SL Street / CL Street / CL, / NA como / NA seus / NA CEO / NA Alan / SP Mulally / CP anunciado / Primeiro NA / Trimestre de NA / Resultados de NA / NA ./NA "
é transformado (com algum conjunto hipotético de tags e "palavras raras") em (palavras substituídas, como mostrado em negrito )
" firstword / NA disparou / NA em / NA initCap / SC Co./CC, / NA facilmente / NA minúsculas / previsões de NA / NA on / NA initCap / SL Street / CL, / NA como / NA his / NA CEO / NA Alan / SP initCap / CP anunciado / primeiro NA / trimestre de NA / resultados de NA / NA ./NA "
Ainda é possível que no conjunto de treinamento nem todos os pares de "tag -> palavra / classe de palavras" sejam vistos, o que torna impossível que uma determinada palavra ou classe de palavras seja identificada com essas tags. Mas isso não impede que essas palavras sejam marcadas com outras tags - ao contrário de quando há uma palavra que não foi vista em um conjunto de treinamento.
fonte