Resumos de aula: PLN - 2019


Nota: Arquivo gerado por um programa.

Nome Resumo
Mauro Mascarenhas de Araujo Aula de 24/06: "Modelando a linguagem com N-gramas: Geração de frases e correção ortográfica". Ao iniciar houve uma breve retomada à respeito da definição de N-grama, que é uma sequência contigua de N elementos, normalmente obtida através de um corpus. Também foi revisto a fundamentação probabilística para pressupor uma palavra em uma frase: P(a ufabc é uma) = P(a)*P(ufabc|a)*P(é|a ufabc)*P(uma|a ufabc é), além de revermos o pressuposto de Markov: "A probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es)". Revisou-se também o exemplo com um corpus de 3 frases. Já na parte prática, começou-se com um exemplo da análise de N-gramas nos textos "A semana por Machado de Assis" e "Todas as Obras de Machado de Assis". Uma importante observação é que, ao usar o método "document.read()", todo o texto é convertido em uma string única, que, ao ser analisada, pode gerar bigramas fictícios, uma vez que desconsidera pontuações, devido ao regex utilizado. Ex.: "w1 w2 w3, w4" não só gera os bigramas "w1 w2", "w2 w3" como também acaba gerando o bigrama fictício "w3 w4". Uma das soluções seria ler linha por linha e separá-las por parágrafo ou frase. O próximo exemplo dado foi o de predição da próxima palavra dada uma frase (note que é necessário a análise prévia de um corpus). Também foi apresentada uma variação deste segundo exemplo, onde as stopwords foram retiradas. Sendo assim, a previsão para a próxima palavra da frase "ela é uma pessoa dada" deixou de ser "QUE" e passou a ser "DADA" (observe que a probabilidade também diminui). O próximo exemplo tratou de analisar n-gramas em frases, onde ele recebia como parâmetro a quantidade de elementos contíguos e analisava a probabilidade de ela acontecer no texto. Note que, conforme o N aumenta, a probabilidade diminui. O quarto exemplo foi o de geração de frases (ou de textos "lero-lero"). Para isso foi mostrado que, quanto maior for o N e quanto maior o corpus, melhor será a geração da frase (mais realista). No caso, usou- se o texto "A-Semana-Machado-de-Assis.txt" como corpus e N=5 para obtenção da frase. Também é válido notar que, o critério de parada estabelecido foi a quantidade de palavras (no caso, 30). Foi apresentado o resultado de frases geradas com N variando de 1 a 6 (unigrama a 6-grama): Surpreendentemente, a frase gerada com 6-grama de certa forma, soou como sendo correta e bem natural, dado o estilo de Machado de Assis, é claro. O Teste 5 foi uma variação do teste 4, onde passou a ser incluído pontuação e números. Para que fosse possível tal feito, bastou alterar a expressão regular que fazia o reconhecimento das palavras: passou de "[-'a-zA-ZÀ-ÖØ-öø-ÿ]+" para "([-'a-zA- ZÀ-ÖØ-öø-ÿ]+|[,\\.—?]|[0-9]+)". Com isso, já foi possível apresentar o gerador automático de artigos científicos (o SCIgen). Outra aplicação apresentada foi a correção ortográfica, que também é utilizada em motores de busca, a fim de reduzir o custo computacional (vale mais a pena corrigir o texto de entrada possivelmente errôneo do que realizar a busca duas vezes). Além do mais, foram apresentadas as definições de Spell checking e Spell checker que são "Correção ortográfica" e "é o artefato (a ferramenta de correção)", respectivamente. Existem dois tipos/classes de erros: 1) Erros associados a elementos que não são palavras de um vocabulário: "Unversidade" ? "Universidade" e 2) Erros associados a elementos que são palavras: Erros de tipografia (gralha):“oba” ? “boa” e Erros cognitivos (palavras homófonas) “Conselho” ? “Concelho”, onde os erros da primeira classe são mais fáceis de identificar e corrigir que o segundo, o qual usamos o modelo de canal ruidoso. A seguir foi apresentada a atividade prática, a qual deveríamos responder como detectar se X corresponde a um erro de ortografia: Para isso bastava fazer o uso de um bom dicionário; Corrigir X (trocar X por sua versão correta): Para isso devemos gerar palavras candidatas (que sejam válidas ou com pronuncia / grafia similar) e selecionar a "melhor candidata". Por fim, deveríamos responder o que é o modelo de canal ruidoso, que nada mais é do que tentar encontrar a palavra desejada dada uma palavra onde as letras foram trocadas, de certa forma, de forma similar ao processamento de sinais, onde supõe-se que o sinal original foi corrompido ao passar por um canal ruidoso, então deve-se tentar obter a forma original. Voltando à teoria, a ideia é tentar encontrar ? tal que ?=argmax(P(w|x)), onde x é a palavra com erro e ? é a palavra que maximiza P(w|x). Pela regra de Bayes simplificada, ?=argmax(P(x|w)*P(w)). Como exemplo, usou-se a palavra "acress", onde os candidatos eram "actress", "across", "access", etc. Mas, a palavra com maior probabilidade era "across" (que maximizava ?). Para estes cálculos, é comum ser usado uma matriz de confusão (quantidade de vezes que uma letra pode ser substituída por outra). Voltando ao exemplo do erro anterior, nota-se que na frase “stellar and versatile acress whose combination of sass and glamour has defined her...”, o correto seria "actress". Portanto, deve-se também analisar o contexto, juntando a técnica de dicionário com N-gramas, a fim de gerar um conjunto de candidados para selecionar os melhores. Por fim, também considerou-se que os layouts do teclado também são importantes causas de certos erros de digitação. Considerações finais: 1) Spell Checkers também devem considerar abreviações e vocabulário informal. 2) As corporações que mais investem na área são a Microsoft, seguida da IBM e Google.
Jair Edipo Jeronimo No início da aula, revisamos alguns conceitos como: N-gramas, o modelo de Markov e os seus cálculos de probabilidade de palavras em uma frase. Após a revisão, vimos a aplicação dos cálculos utilizando a linguagem Python analisando bi-gramas em frases, onde o corpus utilizado eram textos do Machado de Assis e dado uma frase, temos a probabilidade de ela aparecer no texto. Com isso, foi possível observar que, quanto mais palavras colocamos na frase, mais difícil de encontrá-la no texto, ou seja, a sua probabilidade diminui. Outro problema observado é que a forma com que o processamento é feito pode impactar diretamente nas probabilidades, um exemplo disso é o fato de ser usado a função .read() do Python e não considerarmos os sinais de pontuação, assim palavras que estão no início ou no final da frase não são consideradas nessas posições, o que pode alterar os resultados das probabilidades. Uma forma de evitar esse problema é realizar a leitura do texto de parágrafo em parágrafo, assim as palavras que estão no início ou no final de uma frase terão sua posição levada em consideração. A segunda aplicação vista foi a associação da possível próxima palavra de uma frase, onde vimos que podemos utilizar as probabilidades calculadas para tentar adivinhar qual será a próxima palavra, baseando-se na frase passada como parâmetro e identificando pelo corpus qual palavra possui a maior probabilidade de ser a próxima. A terceira forma de aplicação vista, realizava uma análise de N-gramas em frases, além disso, o valor do N (tamanho da tupla) era passado como parâmetro. Dessa forma, as probabilidades eram calculadas de acordo com o tamanho da tupla a ser formada. É interessante notar que quanto maior o tamanho da tupla, mais difícil é de encontrá-la no texto, assim se ela for encontrada sua probabilidade pode até ser maior, porém como é difícil encontrá-la, aumenta as chances de sua probabilidade ser nula. No quarto tipo de aplicação visto, observamos uma forma de gerar frases a partir do corpus, baseando-se nas probabilidades, entretanto, na prática as frases podem acabar sem ter muito sentido, principalmente se avaliarmos apenas Uni-gramas ou Bi-gramas. Neste caso, um número maior de N-grama pode melhorar a eficiência do resultado. Depois vimos essa mesma aplicação, porém levando em consideração os sinais de pontuação. Essa questão de geração de frases ou textos se tornou polêmica, uma vez que, existem sites como o SCIgen que, a partir de artigos publicados e apenas utilizando o processamento de linguagem natural, consegue gerar artigos científicos completos. Outro tema abordado em aula, foi a questão da correção ortográfica (Spell checking) e como ela pode ser realizada. A correção ortográfica é importante em diversos casos, como por exemplo para realizar buscas de maneira correta. Entretanto, a tarefa difícil não é só identificar o erro da entrada recebida, mas também entender qual seria a forma de corrigi-lo. Existem duas classes de erros: os que não são associados a palavras do vocabulário, isto é, a palavra informada não existe, o que torna fácil de identificar que aquela entrada deve ser corrigida, e os erros em que a palavra gerada está associado a uma palavra existente, ou seja, a troca ou ausência de caracteres faz com que a palavra se transforme em outra, dessa forma apenas o contexto possui influência sobre o erro, o que torna difícil a sua correção. Desse modo, para a detecção de erros temos que analisar o contexto e ter uma base grade base de palavras. Já para sua correção, temos de gerar possíveis palavras candidatas que sejam validas para substituí-la ou com pronunciação ou ortografia similar para encontrar a melhor substituição. Uma forma de tratar erros, que é muito utilizada em processamento de sinais, é utilizar o modelo de canal ruidoso, o qual assume que se um sinal passa por um canal ruidoso ele se corrompe e deve ser recuperado. Para PLN esse modelo foi proposto em 1990, onde é utilizado uma inferência de Bayes e ao detectar um erro, a forma de encontrar a palavra que gerou a palavra com erro é analisar dentro do vocabulário qual palavra que possui maior probabilidade de ter gerado o erro. Além disso, utilizando a segunda regra de Bayes, podemos transformar a equação, assim a melhor palavra a ser substituída vai depender da sua própria frequência (ou da frequência do N-grama) e da probabilidade de o erro ter sido corrigido por ela. Em aula, vimos um exemplo de quais seriam os passos para corrigir um erro, a partir da palavra “acress”, onde primeiro foi selecionado as palavras candidatas, depois foi calculada a distância com relação a inserção, eliminação, substituição ou transposição de caracteres, onde cada uma possui um peso diferente. Após isso, é calculado a partir de um corpos, as probabilidades de cada palavra candidata baseado na inferência de Bayes e assim poder estimar qual a melhor substituição a ser feita. Além disso, outro grande influenciador para causar erros é o tipo de teclado utilizado, vimos alguns layouts diferentes em aula. Por fim, vimos também que os Spell Checkers podem tratar outros erros como identificação de abreviações e vocabulário informal, além de que, também podem levar em consideração questões como interação com os usuários, o fato de utilizarem dispositivos com teclados reduzidos, etc.
Michelle Kaori Hamada Tema: “Modelando a linguagem com N-gramas: - Aplicação 1: Geração de frases; - Aplicação 2: Correção ortográfica.”. Nela revimos conceitos como de N-grama (uma sequência contígua de N elementos e que são normalmente obtidas e analisadas a partir de um corpus), sobre a probabilidade de palavras em uma frase utilizando as cadeias de Andrei Markov (probabilidade de uma palavra depende apenas da probabilidade das última(s) palavra(s)). Para então iniciarmos as aplicações, no teste 1 analisarmos bi-gramas em frases, ou seja, qual a probabilidade de encontrarmos determinadas frases nos corpus. Vimos dois casos: um em apenas um livro do machado de Assis e o outro em todas as suas obras. Nele é feito a leitura do arquivo, analisando primeiro as uni- gramas e então os bi-gramas, e de acordo com as frases determinadas é feito o cálculo das probabilidades. Já no teste 2 em que é realizado a associação da próxima palavra de uma frase aplicou-se o n-grams dois que de acordo com a frase entrada ele trás a próxima palavra de maior probabilidade para aquela frase. Neste vimos que a retirada de stopwords tem importância significativa nas análises. No teste 3, analisamos n-gramas em frases utilizando os pressupostos de Markov com os modelos de probabilidades, nele entramos com o txt e a quantidade de n-gramas. De acordo com a quantidade de n-gramas é calculado a probabilidade da determinada frase aparecer. O teste 4 de geração de frases a entrada é realizado com n conjunto de palavras e então a resposta dada é de acordo com a probabilidade da tupla com a uni-grama, nesta aplicação existe uma total dependência ao corpus utilizado. Enquanto que no teste 5 a geração das frases foi realizada considerando sinais de pontuação e números, a diferença desse algoritmo para o do teste anterior é a expressão regular. O próximo tema abordado foi correção ortográfica, capítulo 5 do livro Speech and Language Processing de Dan Jurafsky and James H. Martin. Exemplos de correções realizadas são aquelas que são feitas de forma manual com papel e caneta, existe também a do google quando digitamos a pesquisa errado e ele nos trás os resultados para a pesquisa “correta”, ferramentas de correção ortográfica que analisam os textos sugerindo possíveis erros encontrados, contudo podem ser utilizados também não só para correções mas também para identificação de abreviações e de vocabulário informal, ou para interações com usuários, utilização de dispositivos com teclado reduzido e informações de redes sociais. Dentro desse tema temos duas classificações: spell checking (correção ortográfica) e spell checkers (a ferramenta). Existem dois tipos de classes de erros: (1) elementos que não são palavras de um vocabulário, estes são mais fáceis de se identificar; (2) elementos que são palavras de por exemplo tipografia ou cognitivos (palavras homófonas), estes são mais difíceis de se identificar (noisy channel model). A correção ortográfica é feita em duas tarefas: detecção e correção. A detecção de erro do tipo (1) é feita utilizando um dicionário e do (2) de acordo com o contexto. Para determinarmos as correções: (1) Gerar palavras candidatas que palavras válidas. (2) Gerar palavras candidatas que contenham a pronunciação ou ortografia parecida e selecionando a melhor para cada caso. Um dos modelos utilizados para a correção ortográfica é o modelo de canal ruidoso que se baseia na ideia de que existe um sinal original que ao se passar por um canal ele se corrompe de forma que no final tem-se um sinal com ruído surgindo a necessidade de recuperar o sinal original. Para modelar esse canal analisamos uma palavra x (com erro) buscamos encontrar uma palavra w (de um vocabulário V) que gerou a palavra com erro, isto pode ser feito com inferência de Bayes. Esse modelo de canal ruidoso para correção ortográfica foi proposta pela IBM e AT&TBell Labs nos anos 1990. Para a correção ortográfica é preciso então para cada palavra na frase: 1- gerar um conjunto de candidatos; 2 - Selecionar os melhores candidatos. Por exemplo, na aplicação em uma sequência de caracteres que não é uma palavra de um vocabulário primeiramente vemos a seleção de palavras candidatas, nela consideramos as com ortografia (distância de edição pequena) e pronúncia semelhante (distância de pronunciação pequena). Em seguida a distância de edição (Demeraou-Levenshtein) que considera a distância mínima entre 2 cadeias (inserção/eliminação/substituição de um caractere ou transposição de 3 caracteres). E então considerando um dicionário podemos aplicamos o cálculo considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros. Se contarmos o número de vezes que uma letra foi substituída por outra, por exemplo, pode-se elaborar uma matriz de confusão para contar esses erros e ter a probabilidade da edição de uma letra para a outra.
Renan Baisso Aluno: Renan Baisso RA: 11064215 Para dar continuidade nos estudos processamento de linguagem natural (PLN), prosseguiremos com um aprofundamento do conteúdo em aplicações de N-gramas como, por exemplo, geração textual e correção ortográfica em alguns níveis de dificuldade. Além disso, o conteúdo desta aula pode ser encontrado no capítulo 5 e no apêndice B da bibliografia de referência da disciplina - Speech and language processing: An introduction to natural language processing, computational linguistics, and speech recognition. Para que possamos seguir com o aprofundamento, é necessário relembrar os conceitos de N-grams, o qual pode ser definido como "uma sequência contígua de N elementos (e.g., caracteres, palavras, sílabas, fonemas, pares-base)" e que são analisada a partir de um corpus (e.g., texto, documentos, livros). Partindo deste fundamento, é possível utilizar noções de probabilidade para fazer um levantamento de palavras mais prováveis, dada uma sequência de tokens anteriores, isto é, utilizando probabilidade condicional e a regra de Bayes. Sendo assim, chegamos em cadeias de Markov, as quais são utilizadas para prever palavras mais prováveis através de probabilidades multiplicadas entre si. Lembrando que a precisão da técnica de Markov é depende tanto do corpus quanto da quantidade de N-grams utilizados para realizar os cálculos (unigrama, bigrama, trigrama e assim por diante). Exemplo 1 - Analisando bi-gramas em frases - A análise através de bi-grams leva em consideração combinações dos elementos consecutivos das orações do texto. Portanto, para chegar na probabilidade de um frase como um todo, as chances de cada tupla de tamanho 2 é multiplicada pelo próximo conjunto de tamanho 2. Assim, quanto maior o número de palavras, a probabilidade diminui Exemplo 2 - Associando a próxima palavra de uma frase - Nesta aplicação o resultado é a palavra que tem maior chance de ocorrer depois de uma dada frase, assim, a utilização de di-gramas pode ser considerado um caminho possível para este cálculo. Semelhante ao exemplo 1, o algoritmo calcula a chance de cada bi-grama e então realiza uma iteração para descobrir qual deste tem a maior probabilidade de ser escolhido para completar a frase. Exemplo 3 - Analisando n-gramas em frases - Neste exemplo, é possível visualizar a prova do raciocínio descrito anteriormente, no qual foi mencionado que a quantidade de N-gramas pode melhorar a precisão do algoritmo para prever tokens candidatos a completar frases. Exemplo 4 - Geração de frases - Para este caso, vemos um caso mais elaborado da previsão de palavras em frases. Pois, utilizando um corpus de referência e fazendo a análise de N-gramas no mesmo, pode-se realizar uma série de operações em cadeia para que a cada nova iteração seja feita a predição em uma nova frase que foi gerada na iteração anterior. Resultando em uma estrutura que pode ter significado lógico. Exemplo 5 - É uma evolução do caso anterior, em que pontuação e números são colocados na expressão regular para serem detectados como palavras. E o resultado pode se tornar ainda melhor por esta adaptação. Exemplo 6 - Correção ortográfica - Um algoritmo de correção ortográfica é muito mais complexo do que os citados nos parágrafos acima, pois para realização desta operação, deve-se classificar o 1) erro entre erros associados a elementos que não são palavras de um vocabulário (e.g., Universidade que foi digitado como Unversidadr) e 2) erros associados a elementos que são palavras (e.g., boa que foi digitado com oba), sendo que o segundo caso é o mais difícil de detectar e corrigir. Sendo que a detecção e a correção tem tratamentos distintos. No caso 1, a detecção pode ser feita utilizando um bom dicionário como referência, e a correção por eleição da “melhor” palavra candidata válida. Já no caso 2, a detecção é realizada por contexto e a correção pela eleição da “melhor” palavra com pronúncia e ortografia similar. Partindo do assunto do exemplo 6 sobre correção ortográfica, podemos apresentar um modelo para esta técnica, que é amplamente utilizado em engenharia elétrica e de telecomunicações, o modelo de canal ruidoso, o qual consiste em um modelo para prever qual o sinal (ou mensagem) foi transmitido na entrada de um sistema utilizando apenas a saída composta por ruído. Este modelo pode ser classificado como uma inferência de Bayes, a qual é fundamentalmente um algoritmo que descobre qual elemento w maximiza a probabilidade de w dado um x conhecido. Este modelo para PLN foi proposto no anos 90 pela IBM e também pela AT&TBell Labs. Entretanto, só é possível implementar se houverem algumas premissas satisfeitas, como a presença da matriz de confusão de possíveis erros de digitação ou dicionários de possível erros ortográficos e suas correções.
Daniel Vieira Batista Na aula 6, recapitulamos o modelo de linguagem (n-gramas) que atribui probabilidades a uma sequência de palavras (pressuposto/modelo de Markov de ordem n-1), onde estima-se uma probabilidade de uma palavra w dado um histórico de palavras h: P(w|h). Essa probabilidade pode ser calculada com base numa contagem de eventos, neste caso, para P(w|h), pode ser utilizado um texto/corpus para contar o número de vezes que w e h aparecem: P(w|h) = C(w e h)/C(h). Como por exemplo poderíamos computar/calcular a probabilidade: P(a ufabc é uma) = P(a).P(ufabc|a).P(é|a ufabc).P(uma|a ufabc é) Neste sentido, para calcular-se a probabilidade do exemplo acima seria necessário computar a probabilidade condicional através do produtório das probabilidades de cada termo, dado que um termo específico já ocorreu, entretanto existe muitas possibilidades de escrita de frases na linguagem natural e também é possível que não exista dados suficientes para contagem da sequência de palavras. Dito isso, baseado no pressuposto de Markov que diz "a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es)", podemos usar a(s) última(s) palavra(s) (unigramas, bigramas, trigramas) da sentença textual para aproximar a medida de probabilidade. Alguns scripts (ngrams1.py) em python ajudaram na criação de um programa para analisar bi-gramas em frases: para um dado conjunto de frases calculava-se a contagem dos unigramas e bigramas distintos iterativamente e computava-se P como P = P. ( C(w1,w2) / C(w1) ). Também foi mencionado a criação de scripts (ngrams2.py) que associavam um conjunto de termos e de palavras a próxima palavra de uma frase: computava-se a contagem dos unigramas e bigramas do corpus estudado e a probabilidade de cada bigramas P(w1,w2) = C(w1,w2) / C(w1), o algoritmo espera uma frase ser digitada daí uma busca é iniciada em todos os bigramas do corpus analisado onde a primeira palavra do bigrama w1 bate com a última/penúltima palavra da frase informada então pegue o bigrama com maior probabilidade de acontecer (computado num passo anterior) e exiba w2 como a próxima palavra sugerida. Esse mesmo princípio foi estendido para a geração de frases no script ngrams4.py. Na geração de frases algumas palavras podiam ficar de fora dada a nossa expressão regular para capturar as expressões, observamos que com poucas modificações é possível criar uma expressão regular que solucionasse este problema: ([-'a-zA-ZÀ-ÖØ-öø-ÿ]+|[,\\.—?]|[0-9]+). Com a adição de [,\\.—?]|[0-9]+ é possível capturar a pontuação associada a cada unigrama e gerar frases com pontuação também. A aula deu introdução ao tema de correção ortográfica (spell checking) e algumas abordagens para lidar com problemas/erros ortográficos em linguagem natural (spell checkers). Começou-se definindo os tipos de erros como erros simples (fáceis de identificação) associados a elementos que não são palavras em um vocabulário como "anversário" que deveria ser escrito corretamente como "aniversário", e depois discutiu-se sobre erros mais complexos (difíceis de identificar) como "cessão" e "sessão", ou "extremo" e "estremo", ou "cinto" e "sinto" (homónimos, neste caso somente uma letra distingue a sintaxe mas que possuem sentidos distintos). Estes erros mais difíceis podem ser cognitivos ou de tipografia. Por causa destes tipos de erros mais complexos é necessário uma estratégia para lidar com este tipo de problema, no contexto da aula, para os erros simples podíamos usar somente um dicionário e uma heurística de substituição direta mas para erros complexos devemos usar um método que incorpore o contexto das palavras (por isso a necessidade do modelo de canal ruidoso (the noisy channel model)). No modelo de canal ruidoso assumimos que um sinal original corrompeu-se ao passar por um canal., devemos corrigir este sinal, em outras palavras temos a saída do canal e devemos entender qual foi o problema ocorrido. Utilizamos o teorema de Bayes (inferência de Bayes (channel model and prior)) P(a|b) = P(b|a).P(a)/P(b) para encontrar uma palavra a (em um corpus qualquer) que gerou a palavra com erro, temos que procurar a palavra que maximiza P(b|a).P(a). Por conseguinte, isso traz duas componentes que devem ser analisadas: modelo de linguagem e modelo do canal. Após isso, utiliza-se palavras candidatas e a distância de edição para correção no modelo de canal, contudo isso pode não resolver o problema e o modelo de linguagem n-grams pode ser utilizado para correção da palavra.
Renato de Avila Lopes Modelando a linguagem com N-gramas N-grama sequência contigua de N elementos (caracteres, palavras, sílabas, fonemas, pares-base) comumente obtidas a partir de um corpus Probabilidade de (a UFABC é uma) = P (a) x P (UFABC | a) x P (é | a UFABC) x P (uma | a UFABC é) Pressuposto de Markov é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma palavra anterior Teste1 Analisando bigramas em frases Foi utilizado o programa ngrams1.py sobre o texto A Semana de Machado de Assis e sobre o corpus formado por todas as obras de Machado de Assis O bigrama "ele é" aparece em 0.0264 por cento da obra A Semana e em 0.0248 por cento de todas as obras de Machado de Assis Teste2 Associando a próxima palavras de uma frase Utilizando ngrams2.py sobre o mesmo texto observou-se que a probabilidade de que a próxima palavra em "ele é uma pessoa" é "que" com 28,57 por cento de chance No caso da palavra "estudar" 30 por cento de chance de ser "A" O programa ngrams2b.py realiza o mesmo processo com a diferença que retira stopwords. Nesse caso a palavra "dada" é a mais provável de aparecer após "ele é uma pessoa" com 1.50 por cento de probabilidade Analisando n-gramas em frases O programa ngrams3.py aceita um número n como parâmetro que indica que será analisado um n-grama Geração de frases Programa ngrams4.py também aceita um número n como parâmetro No caso foi utilizado um 5-grama Utilizando o programa sobre todas as obras de Machado de Assis como o parâmetro 6 obteve-se a seguinte resposta aqui tenho a honra de concluir fazendo votos para que afeiçoando as idéias que não edulcoradas para perderem o ressabio da origem aí ficam mal expostas digne-se tirar-lhe os ácidos Nota-se que o todo não tem sentido, mas as partes possuem concordância A resposta depende totalmente do corpus (gera um estilo) É possível utilizar pontuação e números fazendo uma alteração na expressão regular utilizada Correção ortográfica Spell checking Spell checkers são as ferramentas Erros de digitação, identificação de abreviações, vocabulário informal Interação com usuários, utilização de dispositivos com teclado reduzido, informações de redes sociais Tipos de erros Tipo 1 Elementos que não são palavras de um vocabulário "Unversidade" Universidade (fáceis de identificar) Tipo 2 Tipografia oba boa Cognitivos (palavras homófonas) "Conselo" Concelho One Won (difíceis de identificar) Detecção Ortografia Tipo 1 Usando um bom dicionário Tipo 2 Usando o contexto Correção Ortografia Tipo 1 Gerar palavras candidatas (válidas) e selecionar a melhor Tipo 2 Gerar palavras candidatas (pronunciação ou ortografia similar) e selecionar a melhor Atividade Detectar se x corresponde a um erro de ortografia Verificar se x está no dicionário Corrigir x (trocar x por sua versão correta) Utilizando n-gramas comparar x com a palavra com maior probabilidade de aparecer naquela posição O que é um modelo de sinal ruidoso? (noisy channel model) Modelo muito utilizado em processamento de sinais Assume-se um sinal original que passa por um canal ruidoso e se corrompe e torna-se um sinal com ruído sendo necessário decodificar o sinal original Inferência de Bayes Ao observar x (palavra com erro ortográfico) queremos encontrar w (de um vocabulário V) que gerou a palavra com erro ? = argmax P (x | w) P (w) onde w pertence a V e x é a palavra com erro ortográfico Segundo Bayes P (a | b) = P (b | a) P (a) / P (b) ? = argmax P(w | x) = argmax P(x | w) P (w) / P (x) ? = argmax P(w | x) = argmax P(x | w) P (w) Exemplo acress Palavras candidatas Ortografia similar (distância de edição pequena) actress across access Pronunciação similar (distância de pronunciação pequena) Distância de edição (Demeraou-Levenshtein) Considera a distância mínima entre duas cadeias. Inserção Eliminação Substituição Transposição Modelo do canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros Exemplo 'e' substituída por 'o' em P (acress | across) Matriz de confusão P (x | w) Probabilidade da edição de w em x del [x, y]: contagem (xy escrita com x) ins [x, y]: contagem (x escrita como xy) sub[x, y]: contagem (x escrita como y) trans[x, y]: contagem (xy escrita como yx) Layouts de teclados podem influenciar as probabilidades de erros
Alex Arantes Goncalves Ao se analizar bi-gramas em uma frase conclui-se que a medida em que se aumente a quantidade de palavras distintas em uma frase, a probabilidade das mesmas de ser encontrada diminui. A análise de N-gramas aplicada a uma obra de machado de assis, a semana- uma série de crônicas semanais que Machado de Assis escreveu utilizando um script permite calcular a contagem de frequência no caso de unigramas e tuplas no caso de bigramas. Uma das desvantagens de se utilizar uma das funções do python para esta análise. A função .read cria um bigrama fictício no caso de palavras no final e no início das frases. A melhor forma de lidar com esta desvantagem seria a análise parágrafo a parágrafo. Após a análise com o código N-grams, é possível realizar uma predição de Markov onde dada uma palavra, a probabilidade mais alta calculada anteriormente é utilizada. Um cuidado a ser tomado é com relação a remoção de stopwords. O programa 3 se trata de análise de n-gramas, recebendo o número n-como parâmetros para retornar as probabilidades de se encontrar uma sequência de palavras. O programa 4 permite a geração de frases baseados nas probabilidades calculadas anteriores. Para isso a ideia é pegar uma palavra aleatória, seguido da palavra posterior com maior probabilidade de surgir no texto de origem esta palavra consecutiva. Ao se utilizar 5-gramas predizemos a próxima palavra mais provável depois das 4 anteriores. Maior o agrupamento, maior o corpus, maior a coerência do texto produzido. Por conta da aleatoriedade do algorítmos, sempre serão geradas frases diferentes. Por meio desta técnica é possível produzir textos de complexidade variável baseada em artigos científicos, que passam por reais em uma escrutinação superficial. Correção ortográfica sempre foi uma necessidade para todos que produzem texto. Um sistema de busca se utiliza de técnicas de correção ortográfica por que a busca sempre tem um custo computacional a ser considerado, corrigindo a entrada é possível diminuir a quantidade de buscas e consequentemente o número de buscas. Spell checking é a correção ortográfica e spell checker é o corretor. Existem dois tipos de classes de erros. Um mais fácil de identificar o mais difícil. Os fáceis se tratam de erros que não produzem palavras presentes no dicionário presente no algoritmo, os mais difíceis são aqueles que geram termos presentes e reconhecíveis no dicionário. Uma pesquisa promovida por Hercules Dalianis estima que em torno de 10% de palavras em uma busca possuem erros ortográficos. A detecção de erros ortográficos mais simples é pelo uso de um bom dicionário. Se houver o prefixo de uma certa palavra a ser avaliada no dicionário é ela é passível de ser detectável. Os erros mais difíceis podem ser detectados pelo contexto. Para a correção podemos gerar palavras candidatas e utilizar modelos probabilísticos para selecionar a mais provável. Modelo de canal ruidoso é uma tecnica de correção ortográfica que se baseia na idéia de modelar canais ruidosos. Muito utilizado em processamento de sinais. Assume-se que existe um sinal original, e ao passar por um meio temos a versão com ruído. Fonte -> canal ruido -> receptor. Inserimos no processo um decodificador, entre o canal ruidoso e o receptor. Ao observar uma palavra x com erro ortográfico queremos encontrar uma palavra w de um vocabulário V que gerou a palavra com erro. Matematicamente se trata de uma palavra que maximiza a probabilidade de dado uma palavra X seja a palavra w. Utilizando a regra de Bayes, podemos usar isso como nosso codificador. Palavras candidatas podem ser obtidas por inserção de um caractere, eliminação de um caractere, substituição de um caractere e transposição de 2 caracteres. Estatisticamente os erros estão a distância de 1 e quase todos a uma distância de 2
Thiago Henrique Gomes Panini Resumo 6 – PLN A aula de número 6 da matéria de Processamento de Linguagem Natural foi iniciada a partir de um resumo da aula anterior, abordando conceitos de N-gramas. Como visto anteriormente, de acordo com a definição, um N-Grama é uma sequência contígua de N elementos, dados por caracteres, palavras, sílabas, fonemas, pares-base, entre outros, comumente obtidas a partir de um _corpus_. Para exemplificar, o professor Jesus Mena mostrou uma tabela com duas colunas relacionando o número de elementos e o número do N-Grama. Um N-Grama com 1 elemento é tido por Unigrama. Com 2 elementos, Bigrama. Com 3 elementos, Trigrama. Com 4 elementos, 4-grama e assim sucessivamente. Exemplos utilizando frases foram tratados para o melhor entendimento desse núcleo pela turma. Após isso, foram abordados conceitos de probabilidade para identificar a probabilidade de uma palavra em uma frase. Logo em seguida, o pressuposto de Markov pôde ser definido para a turma como sendo a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Alguns exemplos foram dados para fixar o conhecimento. As frases utilizadas foram: <s> I am Sam </s>, <s> Sam I am </s> e <s> I do not like green eggs and ham </s>. As probabilidades de ocorrência das frases foram calculadas utilizando os conceitos aprendidos. Assim, foi possível mergulhar no verdadeiro objetivo da aula: propor cases práticos envolvendo os conceitos de N-gramas. O primeiro deles visa analisar bi-gramas em frases. Assim como em algumas aulas anteriores, a situação prática utilizada para exemplificar este conceito foi a análise realizada no livro de Machado de Assis. Além do exemplo prático, o professor Jesus Mena mostrou o código por trás do cálculo das probabilidades de ocorrência de frases, obtendo os resultados esperados para a mesma frase (“ele é uma pessoa”) utilizada como exemplo dentro da obra de Machado de Assis. O segundo case demonstrado foi o de associação a próxima palavra de uma frase. Ainda utilizando a obra de Machado de Assis, o exemplo dado partia da inserção de uma frase e tinha, como saída, a próxima palavra de ocorrência mais provável dentro do contexto com sua respectiva probabilidade. Assim como no case anterior, o professor Jesús Mena mostrou o código em Python responsável por essa implementação. O terceiro case exemplificou a análise de n-gramas em frases e, partindo dos modelos probabilísticos de unigramas, bigramas e trigramas, calculava a probabilidade de ocorrência de frases em diversos contextos. Como exemplo, esse case foi aplicado na obra A Semana de Machado de Assis e também em todas as suas obras, obtendo resultados diferentes para cada um dos contextos. No quarto case, tivemos contato com a geração de frases a partir de palavras unidas em tuplas ou dicionários. Tendo em mãos diversas palavras, o algoritmo (também mostrado pelo professor) realizava o melhor agrupamento dentro de um contexto (obra A Semana de Machado de Assis). Nesse caso, foi possível aplicar o algoritmo utilizando unigramas, bigramas, trigramas e outros. No case de número cinco, utilizamos algo semelhante ao case de número quatro, porém com sinais de pontuações e números. Os resultados foram demonstrados também na obra de Machado de Assis e as expressões regulares foram mostradas em sala. Logo em seguida, falamos sobre correção ortográfica e sua real importância para sistemas de busca e processamento de linguagem natural, seja na internet ou na academia. Os tipos de erros foram elencados e uma atividade foi passada em sala para fixação do conhecimento. Conceitos de canal ruidoso (uma das questões do teste) foram abordados e a regra de Bayes foi mostrada com importância crucial dentro desta análise. A dica de pesquisa do professor para as aulas posteriores foi Peter Norvig.
Igor Neres Trindade Na aula de hoje, 24/06/2019, estudamos duas aplicações possíveis com a modelagem da linguagem com N-gramas: a geração de frases e a correção ortográfica. Como referência bibliográfica, recomenda-se a leitura do apêndice B do livro “Speech and Language Processing”, de Dan Jurafsky. Começamos com uma pequena revisão de como N-gramas, sequências contíguas de N elementos (geralmente palavras, quando obtidas a partir de um corpus), podem ser usados no cálculo de probabilidade de palavras em uma frase. Vimos também como o pressuposto de Markov simplifica todo o processo, fazendo uma pequena aproximação na fórmula ao supor que a probabilidade de uma palavra depende apenas da probabilidade de um conjunto de palavras anteriores. Para ilustrar melhor, um algoritmo que analisa bi-gramas em frases foi mostrado em sala, e ele é bem simples: extraem-se unigramas e bigramas do texto e, dada uma sequência de palavras, percorre-se cada par de palavras adjacentes, calculando a sua probabilidade (dividindo a quantidade de ocorrências desse bi-grama pela quantidade de ocorr?ncias do uni-grama formado pela palavra anterior). As probabilidades são multiplicadas e, como resultado, têm-se a probabilidade daquela frase. Reutilizando todo o código do exemplo anterior, associamos a próxima palavra de uma frase, procurando o bigrama, cujo primeiro elemento seja a última palavra da frase, com maior probabilidade dentre todos os calculados. Em um terceiro programa, generalizamos isso para n-gramas de qualquer tamanho, que é passado como argumento. Dessa forma, podemos calcular a probabilidade com trigramas, por exemplo, dividindo a quantidade de ocorrências de cada trigrama pela quantidade de ocorrências do bigrama formado pelos dois primeiros elementos. Um ponto importante levantado é a forma com que os n-gramas são formados a partir de um corpus. Arquivos de textos podem ter vários parágrafos e, caso o documento todo seja lido de uma vez, ao tokenizar o corpus, podemos formar falsos bí-gramas contendo o fim de um parágrafo e o começo de um outro. Com o que já foi desenvolvido até agora, já é possível desenvolver algoritmos de geração de texto. Como exemplo de aplicação, há o SCIgen, um programa que gera artigos científicos automaticamente, incluindo até fotos. O mais curioso é que um artigo foi aceito conferência. Correção ortográfica foi a segunda aplicação que exploramos. Ela pode ser útil em recuperação de informação, uma vez que melhora a eficiência da busca. Por esse motivo que o Google o utiliza, mesmo havendo um custo por trás dessa operação. Os algoritmos, aqui chamados de spell checkers, podem ter duas tarefas distintas: detecção de erros de ortografia e correção desses erros. No primeiro caso, em uma abordagem mais simples, podemos usar um dicionário para verificar se a palavra existe ou não. Mas e se a palavra escrita de forma errada formou outra? Para isso , devemos usar contexto. No segundo caso, para corrigir os erros, podemos gerar palavras válidas candidatas e selecionar a melhor. Para atacar esse último problema, estudamos o modelo de canal ruidoso, um tipo de inferência de Bayes, que procura recuperar a palavra original que gerou a palavra com erro e foi utilizada pela IBM e AT&T Bell Labs em 1990. Por fim, discutimos algoritmos para correção de palavras inexistentes no vocabulário. Para isso, selecionamos palavras candidatas, considerando as com similar ortografia ou similar pronunciação. Dado que quase todos os erros estão a uma distância de edição de 2, podemos fazer uma série de inserções, eliminações, substituições e transposições de caracteres, procurando palavras do vocabulário e selecionando a de maior probabilidade, segundo o modelo, que considera o número de vezes que uma letra foi substituído por outra usando um corpus de erros, que pode ser representado por uma matriz de confusão.
Guilherme Beo Arqueiro A aula 6, segunda aula sobre o assunto "Modelando a linguagem com N-gramas", se iniciou com uma breve revisão sobre a nomenclatura de N-gramas, probabilidades de palavras e pressuposto de Markov; tópicos vistos na aula anterior. Após esses detalhes, vimos o Teste1, baseado no script ngram1.py que faz a análise de bi-gramas em frases e indica a probabilidade delas, utilizando regex e o cálculo de probabilidade visto. Vimos também o Teste2, que foi tratado no script ngram2.py, capaz de fazer a associação de uma próxima palavra em uma frase e calcular a probabilidade de determinada palavra ocorrer na sequência - neste caso em específico, vimos também como o tratamento de stopwords pode interferir no resultado. No Teste3, vimos a análise de N-gramas em frases utilizando o script ngrams3.py, que calcula a probabilidade para a frase e a aproximação para o n-grama utilizando o seu prefixo, contando os n-grams para todos os tamanhos. O Teste4, com base no script ngrams4.py, possibilita a geração de frases de forma "aleatória", baseado nas tuplas e nos n-gramas analisados, com dependência total ao corpus utilizado. No Teste5, no script ngrams5.py, tem uma execução similar, mas incluí também os regex que insere na geração de frases sinais de pontuação e números. A segunda parte da aula foi dedicada à correção ortográfica, com base no capítulo 5 do livro. Vimos a nomenclatura de "spell checking" (correção ortográfica) e "spell checkers" (ferramenta para essa correção). Existem classes de erros, como os erros associados a elementos que não são palavras do vocabulário e os erros associados a elementos que são palavras (noisy channel model) e são mais difíceis de identificar. Para detectar um erro do tipo 1, é importante utilizar um dicionário completo, mas para o tipo 2 é necessário usar o contexto. A correção deerros de tipo 1 é gerar palavras candidatas e selecionar a melhor delas, mas no tipo 2 é necessário gerar palavras com pronunciação ou ortografia similares e selecionar a melhor candidata. Canal ruidoso: basicamente, assume-se que há um sinal original, que passa por um canal ruidoso e se corrompe, necessitando-se recuperar o sinal original. É um tipo de inferência de Bayes, onde ao observar uma palavra x com erro, queremos encontrar uma palavra w que gerou esse erro, segundo a regra de Bayes: ? = argmaxP(w|x)P(w). Esse modelo para correção de ortografia foi proposto na década de 90, pela IBM e AT&T Bell Labs. No exemplo, vimos que há uma seleção de palavras candidatas, considerando palavras com ortografia ou pronunciação similar, ocorre uma verificação de distância de edição e realizando a inserção, eliminação, substituição de um caractere ou até mesmo transposição de 2 caracteres. É possível construir uma matriz de confusão para contar os erros analisados. Em resumo, para a correção ortográfica, é necessário gerar um conjunto de candidatos para cada palavra na frase e selecionar os melhores candidatos. Peter Norvig foi uma figura importante neste tipo de estudo. Após esse tópico, vimos brevemente a descrição dos layouts de teclado que, de certa forma, interferem nas classes de erros. São exemplos de layout o Azerty, Qwertz, Dvorak e o tradicional Qwerty. Como considerações finais da aula, vimos que os spell checkers são utilizados também para identificação de abreviações e vocabulário informal, e são considerados como seus braços: interação com os usuários, utilização de dispositivos com teclado reduzido e informações de redes sociais. Os spell checkers são estudados e aplicados no Google Ngram e para estudo de patentes, por exemplo.
Tamiris Gabriele da Silva Lira Na sexta aula de Processamento de Linguagem Natural o professor deu continuidade ao estudo da Modelagem da Linguagem usando N-gramas, dessa vez focando em geração de frases e correção ortográfica. Assim, retomamos que um n-grama é composto de uma sequência de n elementos, e que o Pressuposto de Markov afirma que "a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es)". Partimos, então, para a análise das aplicações. A primeira, apelidada de Teste 1, analisa bi-gramas em frases. Nela, podemos ver que, conforme uma sentença aumenta, sua probabilidade diminui. O programa ngrams1.py apresenta um problema: o conteúdo é lido através de um document.read(), o que significa que o texto inteiro será armazenado em uma string. Isso faz com que a última palavra de um parágrafo e a seguinte do próximo sejam consideradas um bi- grama, o que não deveria ocorrer já que o autor não associou essas duas palavras. Dessa forma, é melhor que a leitura seja feita parágrafo a parágrafo. No Teste 2, a próxima palavra de uma frase é associada considerando as probabilidades mais altas, e o teste é repetido após as stopwords serem desconsideradas (assim, considerando que o texto de Machado possui diversas referências ao Rio de Janeiro, a palavra Janeiro possui uma alta probabilidade de seguir a frase "rio", por exemplo). O Teste 3 analisa n-gramas de todos os tamanhos em frases, calculando a probabilidade de cada um deles. Os Testes 4 e 5 geram frases a partir do corpus dado, de forma que se escolhe uma palavra aleatória, a seguinte a ela será a de maior probabilidade e assim por diante. No Teste 5, especificamente, a geração de frases também leva em consideração pontuação e números. Após os exemplos de geração de frases usando n-gramas, seguimos para a parte de correção ortográfica. Um teste foi aplicado no qual deveríamos descrever os passos para detectar se uma sequência de caracteres x corresponde a um erro ortográfico e corrigir x, além de responder o que é um modelo de sinal ruidoso. Após a aplicação do teste, continuamos com a aula, nesse momento sendo apresentados os tipos de erros na área de correção ortográfica. São eles os "erros associados a elementos que não são palavras de um vocabulário" (exmplo -> exemplo) ou os "erros associados a elementos que são palavras". Esses últimos podem ser erros de tipografia ou erros cognitivos (palavras que tem o mesmo som mas escrita diferente) e são erros difíceis de identificar. O Modelo de Canal Ruidoso, usado frequentemente em processamento de sinais, assume que um sinal é corrompido ao passar por um canal ruidoso e, portanto, é necessário recuperá-lo. Nesse caso, usa-se a regra de Bayes para encontrar uma palavra que tenha a maior probabilidade de ser a palavra certa em relação à que tem um erro ortográfico. Podem ser consideradas palavras com ortografia ou pronúncia parecidas, e tenta-se encontrar palavras com distância de edição ou pronunciação pequenas. Podemos também considerar um modelo que calcula o "número de vezes que uma letra foi substituída por outra usando um corpus de erros", constrói uma matriz de confusão para contá-los e usa essa matriz para corrigir os erros. Diversos elementos devem ser considerados ao analisar os erros ortográficos, inclusive o teclado utilizado.
Pedro Ricardo Bronze O pressuposto de Markov: utilizando as k últimas palavras para calcular probabilidade de uma determinada palavra. Se utilizarmos modelagem por bi- gramas a probabilidade se resume a uma contagem. Se utilizarmos um modelo por tri-grama a probabilidade utilizada é das últimas três palavras acontecerem dado que as duas últimas aconteceram. No script em 'ngrams1.py' uma análise por bi-gramas da probabilidade da frase 'ele é uma pessoa de verdade' contida na obra 'A semana' de Machado de Assis é apresentada. Um dos problemas da utilização da função '.read()' é que a pontuação sendo ignorada dá origem a bi-gramas fictícios, considerando tuplas de palavras separadas em frases distintas, como é apresentado em 'ngrams1.py'. Um tratamento por frases lendo linha a linha evita este tipo de problema. No script 'ngrams2.py' podemos inserir frases e ter como retorno a palavra com a maior probabilidade de ocorrência para aquela frase. Retirando stopwords a frase 'que' retorna 0% de probabilidade por ter sido retirada. No script 'ngrams3.py' há uma generalização de 'ngrams1.py' para n-gramas. Uma das aplicações principais para utilização de ngrams é a 'geração de frases'. Geralmente quanto maior o 'n' mais coerente é a frase gerada, porém depende-se ainda do corpus utilizado. Utilizando uma regex suporta-se a adição de pontuação durante a geração de frases. A ferramenta 'SCI-gen' é apresentada assim como a polêmica ao redor da submissão de um artigo lero-lero gerado e que foi aceito em congressos e periódicos. Corrigir antes de realizar sucessivas buscas no banco é menos custoso por isso sistemas de buscas incluem corretores ortográficos. 'Spell Checking' é a correção ortográfica enquanto 'Spell Checker' é a ferramenta. Dos tipos de erros: existem erros que não são associados a palavras de um vocabulário e são fáceis de identificar portanto, erros como de tipografia ('oba' -> 'boa') e cognitivos como palavras homófonas ('concelho' -> 'conselho') por se tratarem de palavras existentes são de mais difícil identificação. Na detecção de erros duas formas de abordagem podem ser consideradas, uso de um 'bom' dicionário ou usando o texto. No primeiro caso podemos gerar palavras candidatas válidas e selecionar a melhor candidata, no segundo caso podemos gerar candidatas com pronunciação/ortografia similar e escolher a melhor. Modelo de canal ruidoso propõem que entre o envio e o recebimento de uma informação esta está sujeita a ruídos no canal pelo qual passa, a modelagem pode seguir segundo a regra de Bayes P(a|b) = P(b|a)*P(a)/P(b). w_chapéu = argmax P(w|x) que equivale a argmax P(x|w)*P(w)/P(x). Sendo P(x|w) a probabilidade de x ter sido gerado por w e P(x) a probabilidade a priori (uni/bi/trigrama).A distância de edição (Demeraou-Levenshtein) considera a distância mínima entre duas cadeias, sendo que a edição pode ser: Inserir, Eliminar e Substituição de um caractere ou a Transposição de 2 caracteres. Uma matriz de confusão pode ser usada para entender os padrões de erros, de quais caracteres por exemplo são transpostos entre si geralmente. 80% dos erros se encontram a uma distância de 1 e quase todos a uma distância de 2. Por fim foi recomendada a leitura da Wikipedia sobre Peter Norvig, um dos grandes nomes no campo de PLN.
Ricardo Gomes Nesta aula, foram abordadas algumas maneiras de se aplicar os conceitos de N-gramas, as probabilidades das palavras aparecerem em uma frase e o pressuposto de Markov, como em casos de geração de frases e correção ortográfica. Primeiro foram realizados diversos testes com vários algoritmos, tomando como base do corpus obras criadas por Machado de Assis. No teste 1 foi utilizado um algoritmo capaz de calcular as probabilidades de diversos bigramas para se analisar a presença desses numa frase. Em seguida, no teste 2, o algoritmo calcula a probabilidade de uma determinada palavra ser a próxima na sequência de uma frase incompleta. Já no teste 3, o algoritmo calcula as probabilidades de um N-grama determinado. No teste 4, o algoritmo gera uma frase baseada no corpus, utilizando um certo N-grama para montá-la, notando que, um valor maior de N gerou frases mais bem estruturadas e próximas ao comportamento humano. No teste 5, foi testada a geração de frases por um algoritmo capaz de utilizar sinais de pontuação e foi observado um comportamento similar ao teste 4. O SCIgen, um exemplo de uso de tais algoritmos, sendo capaz de gerar artigos científicos completos. Em seguida, passamos a uma análise das características da correção ortográfica. Foi realizada uma atividade cujos objetivos eram descrever passos para detectar um erro ortográfico, como corrigi-lo, e descrever o modelo de sinal ruidoso. Nos casos de erro, é necessário um Spell Checking (correção ortográfica) utilizando um Spell Checker (ferramenta de identificação do erro). Os erros podem ser desde elementos que não são palavras pertencentes a um vocabulário (mais fáceis de identificar), até elementos que se confundem com palavras (difícil identificação). Técnicas para detecção de erros podem utilizar dicionários para comparar a existência da palavra e N-gramas para identificar o contexto da mesma. Após a identificação, são geradas palavras candidatas e a melhor opção é selecionada para corrigir o erro. Canais ruidosos são grandes fontes de erros, onde o sinal original é corrompido e deve passar por um tratamento para ser recuperado, podendo ser modelado como um tipo de interferência de Bayes, ou seja, para encontrar a possível palavra original, é necessário encontrar a palavra que maximiza a probabilidade de uma palavra ser a original, corrompida após passar pelo canal. Os erros nas palavras podem ser de quatro tipos: inserção, eliminação, substituição ou transposição de um caractere. É possível utilizar matrizes de confusão para contar os mais comuns dentro de cada um desses tipos e assim definir qual desses é o mais provável, atribuindo o valor da probabilidade ao possível modelo do canal. Nem sempre esses erros simples são as respostas corretas mesmo que a probabilidade seja alta, pois o contexto em que a palavra se encontra pode ser um grande diferencial na escolha da correta, por isso o uso de N-gramas maiores. Outra análise possível dos erros é a observação dos meios físicos que inserem os dados. Palavras digitadas erradas por um teclado podem ser decorrente de acidentes e substituição por um caractere vizinho. Nesse caso, uma técnica de identificação e correção baseada no layout do hardware pode ser mais apropriada.
Humberto Vagner Tondinelli Correa Aula 6 - Modelando a linguagem com N-gramas Começamos com uma breve revisão da aula passada: Um N-grama é uma sequência contigua de N elementos (e.g., caracteres, palavras, sílabas, pares-base) e são comumente obtidas a partir de um corpus. A probabilidade de uma palavra em uma frase se da por P(w|h) onde w é a palavra e h o histórico de palavras antes dela no texto. Entretanto, de acordo com o pressuporto de Markov, a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es), ou seja, não dependendo do histórico h inteiro. E podemos aplicar isso quando analisamos N-gramas. Nessa aula vimos cinco testes: Teste 1 - Analisando bi-gramas em frases. Teste 2 - Associando a próxima palavra de uma frase. Foi utilizado um algoritmo python que analisava um arquivo texto e dada uma frase de entrada ele retornava a palavra com maior probabilidade de ser a palavra seguinte na frase (retirando as stopwords). Teste 3 - Analisando N-gramas em frases. Foi utilizado um algorítmo python que calcula probabilidade baseada em n-gramas. Teste 4 - Geração de frases. Foi utilizado um algoritmo python que com base no corpus do texto analisado gerava um texto novo com base nos parâmetros passados. Teste 5 - Geração de frases com sinais de pontuação e números. Correção Ortográfica: Um dos grandes problemas de análise de textos são os erros de ortografia que podem existir. Nessa aula vimos algoritmos básicos para correção ortográfica. Spell checking: Correção ortográfica. Spell checkers: é o artefato (a ferramenta para tal). Podemos separar as classes de erros em 2: \- Erros associados a elementos que não são palavras de um vocabulário. São erros mais fáceis de se identificar. \- Erros associados a elementos que são palavras e podem ser separados em: Erros de tipografia (gralha), ou seja, quando existe erro de digitação, troca de letras entre a palavra. E erros cognitivos (palavras homófonas), ou seja, palavras com sonoridade parecidas, mas que possuem significados distintos. Esses são erros difíceis de se identificar. Tarefas de ortografia: Detecção de erros de ortografia. Correção de erros de ortografia. Modelo de canal ruidoso para correção ortográfica (The noisy channel model of spelling), é um modelo muito utilizado em processamento de sinais. Assume-se que existe um sinal original que ao passar por um canal ruidoso se corrompe, tendo no final um sinal com ruído, dessa forma se faz necessário recuperar o sinal original. É um tipo de inferência de Bayes, ao observar uma palavra x com erros queremos encontrar uma palavra w de um determinado vocabulário que gerou a palavra com erro, ou seja, verificamos a probabilidade da palavra x ter sido gerada por w. Vimos em aula alguns exemplos, por exemplo utilizando-se de seleção de palavras candidatas e também de distância de edição Demeraou-Levenshtein. Correção ortográfica de elementos que são palavras: Para cada palavra na frase, gerar um conjunto de candidatos e selecionar os melhores candidatos. Ao final da aula vimos que spell checkers não apenas tratam de erros de digitação, mas também identificação de abreviações e vocabulário informal.
Rodrigo Akiyama Abrantes Resumo 6 de Processamento de Linguagem Natural – Aplicações de N-Gramas Durante a primeira metade foi apresentado uma breve revisão dos conceitos vistos na aula anterior. Um n-grama é uma sequência contígua/contínua de N elementos, podendo estes serem caracteres, palavras, sílabas, fonemas, pares-base, etc. Estas são comumente analisadas a partir de um corpus, que nada mais é do que um grande grupo de textos estruturados e que serão processados. A denominação de um n-grama varia de acordo com o tamanho da sequência que é analisada. Por exemplo, se o número de elemento n for igual a 1, teremos um Unigrama. Se n for igual a 2, teremos um Bigrama ou Digrama, e assim sucessivamente. É importante relembrar que, para a construção de qualquer N-grama que não seja unitário, é necessário que o próximo grama inicie com o último elemento da sequência anterior. Para realizar a análise da probabilidade de uma palavra ser a próxima em uma sequência dado que se sabe qual é a palavra atual, utiliza-se o princípio da Cadeia de Markov. Aplicando este princípio, temos que a probabilidade de uma palavra dependerá apenas da probabilidade de uma, ou mais, palavra anterior. Durante a segunda metade da aula, foram apresentados exemplos de aplicações de n-gramas utilizando python. O primeiro exemplo realizou a análise de uni- gramas e de bi-gramas nas frases contidas na obra “A Semana” de Machado de Assis. O segundo exemplo envolvia um algoritmo que realiza uma estimativa estatística para descobrir qual a palavra mais provável de aparecer no texto (ou corpus) “A Semana”, mediante o fornecimento de uma frase como entrada. Percebeu-se que, ao se retirar as stopwords do corpus, a probabilidade da palavra estimada aparecer em sequência diminui muito. Isto se dá pois as stopwords englobam os conectivos da língua portuguesa e estes estão em sua maioria acompanhada de palavras de maior significado semântico. O terceiro exemplo realizava a análise de frases por n-gramas. O quarto exemplo realizava a geração de frases, utilizando como base a obra “A semana” de Machado de Assis. Verificou-se que, quanto maior for o número de elementos n utilizados para a montagem de uma sequência, maior era o nível de coerência obtido. Foi possível perceber também que existe uma dependência grande do corpus utilizado para que seja possível se obter frases com algum sentido. A última parte da aula abordou a utilização de processamento de linguagem natural na correção ortográfica, ou seja, na construção das ferramentas de “spell check”. Os erros ortográficos podem ser classificados em erros associados a elementos que não são palavras de um vocabulário (a palavra digitada simplesmente não existe) ou em erros associados a elementos que são palavras (a palavra que foi digitada é diferente daquela que se desejava). Este segundo tipo de erro é o mais difícil de identificar pois depende da análise do contexto da frase, enquanto o primeiro pode ser solucionado com a utilização de um dicionário. Para ambos os casos, é necessário que palavras candidatas válidas sejam escolhidas para realizar a correção.
Yago Sorrilha A aula de 24/06 foi uma continuação do tema "Modelando a linguagem com N-gramas", iniciando com uma breve revisão de n-gramas, probabilidades em uma frase, cadeias de Andrei Markov e a utilização dos modelos por unigrama, bigrama e trigrama. Foi apresentado um teste analisando bi-gramas em frases e os resultados aplicados a obras de Machado de Assis; um teste associando a próxima palavra de uma frase após análise do corpus; um teste para análise de n-gramas em frases; um teste para geração de frases a partir do corpus de obras de Machado de Assis onde os resultados sugerem que quanto maior o n utilizado em n-gramas, melhor o texto gerado; e um quinto texte de geração de frases com sinais de pontuação e números com resultados bem satisfatórios para uma aplicação de 7-grama, o que pode exemplificar o funcionamento de programas geradores de artigos "lero-lero". Outra aplicação é a de Correção Ortográfica, que tem as seguintes nomenclaturas: spell checking (correção ortográfica) e spell checkers (é o artefato, a ferramenta). Tipos de Erros 1) Erros associados a elementos que não são palavras de um vocabulário: "Unversidade" deveria ser "Universidade". Esses são erros fáceis de identificar 2) Erros associados a elementos que são palavras: Erros de tipografia (gralha): "oba" que deveria ser "boa" Erros cognitivos (palavras homófonas) "Conselho" e "Concelho" Esses são erros difíceis de identificar (Noisy channel model) Tarefas de Ortografia Passos: -Detecção de erros de ortografia -Erro tipo 1: Usando um bom dicionário -Erro tipo 2: Usando o contexto Correção de erros de ortografia: -Erro tipo 1: Gerar palavras candidatas (que sejam palavras válidas) e selecionar a "melhor" candidata -Erro tipo 2: Gerar palavras candidatas (com pronunciação ou ortografia similar) e selecionanr a "melhor" candidata. Modelo de Canal Ruidoso para Correção Ortográfica (The noisy channel model of spelling) É um modelo muito utilizado em Processamento de Sinais. Assume-se que existe um sinal original que, ao passar por um canal (ruidoso) se corrompe. Tendo no final um sinal com ruído. Assim, é necessário recuperar (decodificar) o sinal original. É um tipo de inferência de Bayes. Ao observar uma palavra com erro ortográfico, queremos encontrar outra palavra (de um vocabulário) que gerou a palavra com erro. Para seleção de palavras candidatas podemos considerar palavras com ortografia similar, palavras com pronúncia similar ou a distância de edição, onde a edição pode ser inserção, eliminação, substituição ou transposição de caracteres. O modelo do canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros. Podemos construir uma matriz de confusão para contar esses erros Correção Ortográfica de Elementos que são palavras Para cada palavra na frase: gerar um conjunto de candidatos e selecionar os melhores candidatos. Layouts de teclados também podem influenciar em erros ortográficos (devido a erros de digitação) Os Spell Checkers podem ser utilizados também para identificação de abreviações e vocabulário informal. Existem outros braços dos spell checkers que podem considerar interação com usuário, utilização de dispositivos com teclado reduzido, informações de redes sociais.
Giselle Silva de Santana Nesta sexta aula, do dia 24/06, continuou-se o assunto sobre N-gramas, sendo apresentados dois exemplos de aplicações para os mesmos: Geração de frases e Correção ortográfica. A primeira metade da aula consistiu na apresentação de 5 algoritmos que faziam uso de n-gramas. O programa ngrams1.py era uma aplicação mais simples, que realizava a análise de bi-gramas em frases, fazendo o cálculo das probabilidades conforme apresentado na aula anterior. O segundo programa, ngrams2.py, realiza a associação a próxima palavra de uma frase, também fazendo uso de bi-gramas. Já o script ngrams3.py é uma melhoria do primeiro, pois realiza o mesmo tipo de análise, mas para n-gramas em geral e não apenas bi-gramas. O script ngrams4.py realiza a geração de frases através de n-gramas e o script ngrams5.py, também realiza a geração de frases, mas utilizando também, sinais de pontuação e números, sendo uma versão mais complexa do quarto script. Nos foi apresentado um outro exemplo prático do uso de n-gramas, o SCIgen, gerador de automático de artigos. Na segunda metade da aula, foi abordado o tema “Correção Ortográfica”. Existem dois tipos (classes) de erros: Erros associados a elementos que não são palavras de um vocabulário, estes são mais fáceis de identificar, como por exemplo, Unversidade -> Universidade; Erros associados a elementos que são palavras, sendo este tipo mais difícil de identificar (Noisy channel model), como por exemplo, erros de topografia (oba -> boa) ou erros cognitivos (conselho -> concelho). Para detecção de erros de ortografia, para o primeiro tipo, um “bom” dicionário, para o tipo dois, usa-se o contexto. Para correção de erros de ortografia, para o primeiro tipo pode-se gerar palavras candidatas válidas e selecionar a melhor opção, enquanto que para o segundo caso, pode-se gerar palavras candidatas que possuam pronunciação ou ortografia similar e selecionar a melhor opção. Existe um modelo chamado Modelo de Canal Ruidoso para correção ortográfica, onde assume-se que existe um sinal original que ao passar por um canal ruidoso se corrompe e no final se torna um sinal com ruído e, portanto, é necessário descodificar (recuperar) o sinal original. Isto é um tipo de interferência de Bayes, e através da regra de Bayes chega-se a seguinte expressão: ^w = argmax P(x|w)P(w), onde ^w é a palavra que maximiza P(w|x), P(x|w) é a probabilidade de x ter sido gerado por w (modelo do canal|modelo do erro) e P(w) é a probabilidade à priori (modelo de linguagem – unigrama, bigrama, etc). O modelo do canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros, onde pode-se construir uma matriz de confusão para contar esses erros. Ao final da aula, vimos spell checkers podem ser usados para identificação de abreviações e vocabulário informal, além de tratamento de erros de digitação, tendo braços que podem considerar interação com os usuários, informações de redes sociais e utilização de dispositivos com teclado reduzido.
Joao Victor Fontinelle Consonni A sexta aula começou com uma breve revisão de N-gramas, que trata-se de uma sequencia contígua de N elementos, que podem ser caracterizados por caracteres, palavras, silabas, fonemas ou pares-base. Revisitamos também os conceitos de unigramas, bigramas, e trigamas, assim como a importância do pressuposto de Markov, que contempla a classe de modelos probabilísticos que assumem que a probabilidade de uma palavra ocorrer depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Já no tema da sexta aula, vimos algumas aplicações que utilizam a modelagem da linguagem com N-gramas. A primeira consistiu na probabilidade da ocorrência de uma dada frase, dado um corpus, utilizando a modelagem por bigramas. Verificou-se que uma mesma frase possui probabilidades distintas a depender do corpus utilizado. Além disso, mais adiante na aula, foi vista a mesma aplicação, porém com unigramas e trigramas, o que também evidenciou que, quanto maior o N-grama, mais precisa é a probabilidade da frase testada, porém ao custo de processamento adicional. A segunda aplicação consistiu em tentar adivinhar a palavra seguinte de uma frase por meio de análises de bigramas. Foram vistos dois casos, um com e outro sem stopwords. Similar a esta, vimos uma aplicação de geração de frases considerando diferentes tamanhos de N-gramas. Ficou evidente que, quanto maior o N-grama, mais significado é atribuído à frase gerada, ou seja, a frase parece ficar mais coerente quando considera um contexto maior. Não só isso, ficou claro também a total dependência ao corpus utilizado. Em um exemplo ainda mais complexo, foram considerados sinais de pontuação na geração de frases, o que tornou as frases produzidas ainda mais verídicas. Como um exemplo mais avançado desta aplicação, vimos o SCIgen, um gerador de artigos científicos. Numa segunda parte da aula, tratamos de correção ortográfica e vimos os conceitos de spell checking (o ato da correção ortográfica) e spell checkers (a ferramenta de correção ortográfica). Neste contexto, vimos duas categorias de erros ortográficos. O primeiro está relacionado a erros associados a elementos que não são palavras de um vocabulário. Já o segundo, relaciona-se a erros que produzem palavras que fazem parte do vocabulário. Após essa contextualização, fomos submetidos a uma atividade para testar nossa capacidade de expandir esses conceitos para tentar elaborar, em alto nível, algoritmos para a detecção e correção de erros de ortografia. De volta a aula, foi apresentado um artigo que demonstrou a importância das ferramentas de correção ortográficas para motores de busca, como o Google. Durante a atividade também foi apresentado o modelo de sinal ruidoso, que é bastante utilizado no processamento de sinais. Esse modelo assume que existe um sinal original e que, ao passar por um canal de transmissão, é corrompido por ruídos presentes no canal, fazendo com que o sinal que chega ao receptor seja uma versão distorcida do sinal original. Em PLN, utiliza-se a regra de Bayes para recuperar a palavra original. Em seguida vimos o conceito de distância de edição, assim como a construção de uma matriz de confusão para contar erros.
Matheus de Araujo Vargas Na aula do dia 24/06 do professor Jesus foram aprofundados os conceitos de modelagem da linguagem através de N-gramas. Duas formas de aplicação foram apresentadas, que é o uso de N-gramas para a geração de frases e para detecção / correção ortográfica. Um N-grama é uma sequência contigua de N elementos, comumente obtidos (analisados) a partir de um corpus. A partir dos N-gramas, é possível se obter as probabilidades de cada palavra aparecer em um corpus. O pressuposto de Markov é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Utilizando as probabilidades obtidas através de N-gramas, em conjunto com o pressuposto de Markov, é possível saber qual a palavra com maior probabilidade de aparecer, após uma sequência de outras palavras. Com isso, é possível aplicar essa técnica para a geração de frases ou até mesmo para a detecção de erros. Existem dois tipos de erros de ortografia. O erro tipo I são erros associados a elementos que não são palavras de um vocabulário e são erros fáceis de identificar. Exemplo: “Unversidade” ? “Universidade”. Já os erros do tipo II, são erros associados a elementos que são palavras e são erros difíceis de identificar. Exemplos desse erro são erros de tipografia (gralha): “oba” ? “boa”; E erros cognitivos (palavras homófonas): “Conselho” ? “Concelho”; “One” ? “Won”. Para a detecção de erros do tipo I, podem ser utilizados um "bom" dicionario, através da busca da palavra do corpus no dicionário ou o contexto. Para a detecção de erros do tipo II, devem ser selecionadas palavras candidatas (que tem alguma probabilidade de ser a palavra desejada) e selecionar a melhor dentre elas. Para essa seleção de "palavras candidatas", são usualmente utilizados modelos de canal ruidoso. Nesses modelos, assume-se que existe um sinal original que, ao passar por um canal (ruidoso) se corrompe, tendo no final um sinal com ruído. Assim, é necessário recuperar (descodificar) o sinal original. Um modelo de canal ruidoso é um tipo de inferência de Bayes. Ao observar uma palavra x (i.e., uma palavra com erro ortográfico) queremos encontrar uma palavra w (de um vocabulário V) que gerou a palavra com erro. Para a seleção de palavras candidatas de erros com palavras que não fazem parte de um vocabulário, podemos considerar a distância de edição ou a distância de pronunciação entre duas palavras. A distância de edição é a distância mínima entre 2 cadeias, em que a edição pode ser a inserção de um caractere, a eliminação de um caractere, a substituição de um caractere ou a transposição de 2 caracteres. Para a seleção das palavras candidatas, podemos então considerar o número de vezes que uma letra foi substituída por outra usando um corpus de erros. Por exemplo o número de vezes que a letra ‘e’ for substituída pela letra ‘o’ em P(acress | across). Com essas informações, podemos construir uma matriz de confusão para contar esses erros e aplicar essa matriz para a seleção das palavras candidatas e na escolha da melhor palavra.
Arthur Veloso Kamienski Nesta aula aprendemos aplicações da modelagem de linguagens com o uso de N-gramas. Primeiro, recapitulamos o conceito de N-gramas (mostrando as nomenclaturas para N de 1 a 5) e o conceito de probabilidade de ocorrência de uma frase, revisando o pressuposto de markov, que diz que a probabilidade de ocorrência de uma palavra pode ser aproximada por um número K de palavras anteriores. A aula seguiu com a demonstração de testes envolvendo bi-gramas, utilizando corpora de obras de Machado de Assis para obter a probabilidade de uma determinada frase, também exemplificando a diferença do uso de N-gramas de tamanhos diferentes. Para frases muito grandes, existe a possibilidade da chance de encontrá-la ser zero, dado que ela nunca apareceu no corpus. Além deste exemplo, também foi apresentado um teste de previsão da próxima palavra, que mostra a palavra mais provável de ser obtida após uma frase pré- determinada. Por fim, mostrou-se como é possível fazer a geração de frases baseada na probabilidade de ocorrência de uma palavra. Primeiro, uma palavra é aleatoriamente selecionada para se iniciar a frase. A partir daí as próximas palavras são obtidas ao se escolher aquela com maior probabilidade baseada nas N palavras anteriores. Vale notar que a geração de frases também pode ser feita com sinais de pontuação e números. A segunda aplicação aprendida foi a correção ortográfica (spell check). Existem dois tipos de erros que podem ocorrer na escrita de uma palavra: o primeiro são erros associados a palavras não existentes no dicionário, que podem ser facilmente identificados e consertados. Por outro lado, existem erros que são associados a palavras existentes no dicionário, como no caso em que um erro de tipografia gera uma palavra existente, ou erros cognitivos devido a palavras homófonas (que tem o mesmo som). Tais erros são difíceis de serem identificados e requerem um modelo de canal ruidoso. O primeiro tipo de erro pode ser identificado utilizando um bom dicionário e pode ser consertado ao gerar palavras candidatas similares à palavra escrita, enquanto o segundo tipo de erro pode ser identificado utilizando o contexto e pode ser consertado ao selecionar palavras candidatas com pronunciação ou ortografia similar. Para solucionar o segundo erro, utilizamos o modelo de canal ruidoso. Este modelo assume que existe um sinal que é corrompido ao passar por um canal ruidoso, obtendo um sinal com ruído. O modelo tenta, portanto, obter o sinal original a partir do sinal ruidoso. Para isso, se utiliza uma inferência de bayes, tentando encontrar uma possível palavra que possa ter gerado a palavra com erro ao se maximizar uma probabilidade condicional (chance de palavra com erro aparecer dada um palavra original). Um dos modos de se obter essa probabilidade é utilizando a distância de edição de Demeraou-Levenshtein, que leva em conta o número de operações considerando inserções, eliminações, substituições e transposições. Também é possível calcular a probabilidade utilizando um corpus de erros, modelado utilizando matrizes de confusão. Por fim, spell checkers podem ser utilizados também para a identificação de abreviações e de vocabulário informal.
Lucas Ferraz Nicolau A aula prosseguiu com o tema de n-gramas. Foram estudadas algumas aplicações em python, sobre o corpus da obra de Machado de Assis, com diferentes funções como análise de bi-gramas, e depois n-gramas, verificando a probabilidade da ocorrência de cada um e associação da próxima palavra de uma frase, predizendo a palavra seguinte mais provável. Enfatizou-se a dificuldade de analisar n-gramas em um texto devido desconsideração de pontos entre diferentes parágrafos, isto é, um detalhe de implementação, onde o melhor tratamento seria a realização da leitura parágrafo por parágrafo. Foi apresentado um programa para geração de frases, que tenta reproduzir frases minimamente coerentes baseadas em um corpus. Este programa utiliza um texto e um inteiro n, escolhendo aleatoriamente uma palavra inicial, e gera as consecutivas palavras mais prováveis pelos n-gramas formados e os unifica para, ao final, resultar em uma frase completa. Empiricamente, nota-se que o aumento do valor n resulta em textos mais coerentes, pois utilizamos mais informação para atribuição das palavras. Devemos notar também que a frase gerada possui total dependência do corpus utilizado, pois é de onde baseará seu vocabulário e sua estrutura semântica. Estendendo o escopo da geração de frases, uma outra aplicação poderia alterar a expressão regular utilizada na identificação das palavras para abranger sinais de pontuação e números na análise dos n-gramas. Um exemplo de projeto baseado no conceito de geração de texto é o SCIgen, um programa que gera texto aleatório em um formato que simula um artigo científico sem ter fato algum conteúdo. Partimos então para o tema de correção ortográfica, ou spell checking, o qual se trata do conceito de identificar palavras que não correspondem ao significado desejado e sugerir as substituições apropriadas. Os erros ortográficos se dividem em duas classes: erros associados a elementos que não são palavras do vocabulário, que são mais fácil identificação, e associados a elementos do vocabulário, mais difíceis de apontar. Para detecção de palavras incorretas, utiliza-se a comparação com um dicionário e analisando o próprio contexto em que a palavra se encontra enquanto, para a correção de fato, usam- se estratégias de verificação de palavras candidatas mais prováveis que pertençam ao vocabulário e se assemelhem na pronúncia ou na ortografia. Para correção ortográfica utiliza-se um modelo de canal ruidoso que considera que um sinal final será resultante do sinal original corrompido por um meio vulnerável a ruídos e, portanto, deve ser tratado para recuperação da informação. Este modelo admite a aplicação das Regras de Bayes baseando-se na busca da palavra mais provável para resultar uma palavra incorreta. A aplicação deste método ocorre selecionando um conjunto de palavras candidatas pertencentes ao vocabulário e, então, comparando a distância de edição das palavras, ou seja, a quantidade de “diferenças” entre seus caracteres. Avalia- se essas distâncias de edição com base em uma matriz de confusão que contabiliza as trocas de caracteres mais frequentes no corpus de interesse. Uma última curiosidade foi a consideração dos layouts dos teclados para redução de erros ortográficos por falha tipográfica.
Guilherme Oliveira da Silva Resumo - Aula 06 A aula começou apresentando-se um pouco sobre a modelagem com a linguagem com N-gramas, primeiro iniciou-se com a definição do que é o N-gramas e o que é n-gramas, falou-se também um pouco sobre probabilidade de uma determinada palavra estar obtida numa frase apresentando-se brevemente um exemplo matemático que demonstrava de forma superficial esse cálculo, citou-se como exemplo desses cálculos probabilísticos as cadeias de Andrei Markov, o pressuposto de Markov, explicou-se o que era esse pressuposto e apresentou-se a sua forma matemática. Após apresentado os modelos de n-gramas e os cálculos probabilísticos das palavras em uma frase, apresentou-se também modelos probabilísticos de 3 tipos de n-gramas(unigrama, bigrama e trigrama). Partimos então para os teste, começando pelo primeiro teste que era analisar um bi-grma em frases, foi-se mostrado exemplo de corpus simples e aplicações do código em python para a análise desse bigrama, o próximo teste foi de associação de palavras numa frase, o terceiro teste partiu para uma código de n-gramas e a análise de um texto que contem n-gramas, o teste quatro tivemos exemplos de geração de frases e o teste 5 a inserção de sinais de pontuação e números nesse gerador de frases. Toda essa primeira parte da aula foi uma análise e estudo dos modelos de n-gramas e da geração de frases tendo como base o fator probabilístico de cada modelo de N-grama. Na segunda parte da aula entramos no estudo da correção ortográfica, foi-se iniciado com uma bibliografia sobre o assunto e demonstração de exemplos de como funciona um corretor ortográfico, foi definido também duas nomenclaturas no âmbito da correção ortográfica, o spell checking que é a própria correção ortográfica e o spell checkers que é o artefato em si, a ferramenta a ser utilizada para a correção. Apresentou-se também os tipos de erros ortográficos existentes(alguns, não todos) e a que eles estão associados, como por exemplo erros comuns que podem acontecer devido a proximidade das letras no teclado, após essa breve introdução o professor passou uma atividade em sala, pedindo para que os alunos descrevessem os passos a passo de um corretor ortográfico em duas situações, uma em que ele precisava descobrir o erro e a outra em que ele precisava tratar o erro e uma pergunta(o que era o canal ruidoso), ao final da atividade o professor introduziu o que era o canal ruidoso e como ele funcionava para a correção ortográfica, falou-se um pouco como ele funcionava e para que ele servia e também citou e mostrou alguns exemplos. Falou-se também brevemente sobre matriz de confusão citou-se alguns exemplos e demonstrou também. A parte final da aula reservou-se para alguns exemplos desses corretores em maquinas antigas e também de estudos e aplicações de spell checkers e citou também uma curiosidade, o teclado também influencia bastante nos erros mais comuns ortográficos por conta da distribuição das letras.
Leonardo Nascimento Um modelo de linguagem por N-gramas permite predizer o elemento seguinte de uma sequência baseando-se nas cadeias de Markov. Isso possibilita a construção de aplicações que geram de frases e fazem correção ortográfica. A sequência de scripts apresentada analisa bigramas em frases, associa a próxima palavra de uma frase, analisa N-gramas em frases, gera frases sem e com sinais de pontuação e números, onde a única diferença da anterior é a expressão regular utilizada para construir o corpus. Os N-gramas analisados servem como base para a geração de frases, as quais podem ser usadas para a geração de artigos lero-lero, como os encontrados no SCIgen, uma plataforma criada por estudantes do MIT que gera artigos científicos de Ciência da Computação aleatórios. Para correção ortográfica, deve ser considerada a existência de duas classes de erros: as associadas a elementos que não são palavras de um vocabulário e as associadas a elementos que são palavras. A detecção e correção de erros de ortografia associados a elementos que não são palavras é fácil, usando um bom dicionário é possível identificar esses casos. Tomando como exemplo a palavra “unversidade”, não encontrá-la no dicionário já denota um erro, e a correção pode ser feita gerando palavras candidatas válidas e selecionando a mais provável. A escolha da palavra candidata mais provável pode ser feita usando um modelo de canal ruidoso, muito utilizado em processamento de sinais para recuperar o sinal original que ao passar por um canal ruidoso se corrompe. Esse modelo é um tipo de inferência de Bayes, onde, trazendo para o caso específico, ao observar uma palavra com erro ortográfico, queremos encontrar a palavra candidata mais provável no conjunto de palavras do vocabulário que gerou a palavra com erro. Para a seleção de palavras candidatas podemos considerar palavras com ortografia similar, ou seja, palavras com distância de edição pequena, e também palavras com pronúncia similar, isto é, palavras com uma distância de pronunciação pequena. Dessas palavras candidatas, podemos encontrar a mais provável usando um corpus do idioma. Outra forma de resolver este problema é considerando o número de vezes que uma letra foi substituída por outra, usando um corpus de erros. Podemos construir uma matriz de confusão para contar os erros, calcular as probabilidades, e usá-las para a calcular a probabilidade da edição de uma palavra ortograficamente correta ser transformada na palavra com erro. Em casos de correção ortográfica para elementos que são palavras, onde os erros podem ser tipográficos ou cognitivos, a detecção deve ser feita usando contexto e a correção utiliza a mesma abordagem de geração de palavras candidatas e seleção da mais provável. Corretores ortográficos são utilizados não só para tratamento de erros de digitação, mas também para identificação de abreviações e vocabulário informal, além de utilizados para acelerar a digitação em dispositivos com teclado reduzido, melhorando a interação com usuários. O corpus é decisivo para o sucesso dessas aplicações, e como dito por Peter Norvig, “more data beats clever algorithms, but better data beats more data”.
Paula Keiko Miyashita A aula 6 abordou a modelagem de linguagem utilizando n-gramas, para geração de frases e correção ortográfica. Primeiramente foi realizada uma breve revisão de n-gramas, que se tratam de sequências de n elementos. Utilizando n-gramas é possível calcular a probabilidade de uma palavra ser a próxima, baseada nas n-1 palavras anteriores, segundo o pressuposto de Markov. Em seguida foram estudados códigos em python: o primeiro realiza análise de bigramas depois de ler o documento e separar somente as palavras válidas (passar por um regex). O segundo código calculava a próxima palavra mais provável para a frase dada, o código calcula e salva os valores das probabilidades de cada bigrama e depois compara as probabilidades de todos os bigramas que contém a última palavra da frase como a palavra predecessora. O exemplo seguinte foi uma versão modificada do anterior, predição da próxima palavra, mas desconsiderando stopwords (que, em geral, eram sempre as palavras previstas). O teste 3 foi mais generalizado, feito para n-gramas (não bigramas como nos exemplos anteriores), o código gera um dicionário onde a chave é a tupla com a n palavras e conta quantas vezes essas aparecem no texto fornecido. O cálculo da probabilidade é feito considerando a sequência de palavras e se baseando nas n anteriores à buscada, a frequência do n-grama e a frequência do prefixo (se não houver ocorrência da tupla, devolve 0). O teste 4 introduziu a geração de frases com n-gramas, ele verifica a possibilidade de cada n-grama e junta uma nova palavra a ele caso sua probabilidade seja grande o bastante. O programa depende totalmente do corpus usado, que gera os valores de probabilidade dos n-gramas. O teste 5 gera frases com pontuações e números, é necessário apenas modificar o regex para que estes passem a ser aceitos. A aula seguiu para o tópico de correção ortográfica, primeiro foram apresentados os dois tipos de erros: erros de palavras que não existem no dicionário (que são mais fáceis de identificar) e erros em forma de palavra (quando se erra a ortografia mas acaba escrevendo uma outra palavra), o segundo ainda pode ser divididos em erros de tipografia e erros cognitivos (palavras de mesmo som). A ortografia deve detectar e corrigir os erros. Os erros tipo um podem ser detectados checando um dicionário e corrigidos gerando palavras candidatas para substituição e escolhendo a melhor. O erro 2 só pode ser detectado analisando o contexto a substituição é feita da mesma maneira que a primeira, mas devem- se considerar também as palavras de sonoridade parecida como candidatas. O modelo de canal ruidoso utiliza a regra de Bayes para calcular a palavra mais provável de correção dada uma palavra errada. Por último foi feito um exemplo de correção, gerando tabelas de correção de inserção, eliminação, substituição e transposição e a regra de Bayes e justificativa da utilização de n-gramas para correção. Correção ortográfica de elementos palavras é feita por seleção de candidato e breve explicação sobre layout de teclados.
Fabio Figueiredo Rodrigues Na aula de número seis, o tema abordado foi “Modelando a linguagem com N-Gramas” passando por duas aplicações, sendo a primeira a Geração de Frases, e a segunda Correção ortográfica. Retomando algumas definições, um N-grama é uma sequência contínua de N elementos, como caracteres, palavras, sílabas, fonemas, pares-base. São usados para transformar textos para poderem ser processados por algoritmos de aprendizado máquina de classificação. Os N-gramas são comumente obtidos a partir de um corpus. Também, para calcular a probabilidade de palavras em uma frase, utilizamos uma produtória que leva em conta todas as palavras em sequência, mas o pressuposto de Markov propõe que a probabilidade de uma palavra depende apenas de uma(s) palavra(s) anterior(es). Foi apresentado o Teste 1 "Analisando bi-gramas em frases", que consiste em calcular a produtória dos bi-gramas dentro de certas frases dentro do livro A Semana de Machado de Assis (corpus) e também de todas as suas obras. Já o Teste 2 "Associando a próxima palavra de uma frase" consiste na busca da palavra de maior probabilidade após a frase dada. Teste 3 "Analisando n-gramas em frases" calcula a probabilidade das frases por unigrama, bigrama, trigrama, n-grama. Finalmente, os testes 4 e 5 são geradores de frases que tem como parâmetros o corpus e o N (N-grama). Vimos que quando a frase de 30 palavras foi criada utilizando unigramas, ela fazia nenhum sentindo, porém na medida que foi aumentado o N, as frases cada vez mais pareciam fazer mais sentido. A diferença do Teste 5 é que ele leva em conta os sinais de pontuação e números. Um exemplo da utilização dessa técnica é o gerador de artigos "SCIgen" que gera um artigo de ciência da computação baseando-se em um corpus de cinco artigos relacionados dados. Este gerador curiosamente conseguiu gerar um artigo que foi aceito para a WMSCI em 2005. A segunda parte da aula abordou a correção ortográfica. "Spell checking" consiste na correção ortográfica e "spell checkers" é a ferramenta de correção. Existem dois tipos de erros: 1 - palavras não encontradas no vocabulário; 2 - palavras com erro, mas ainda está presente no vocabulário (exemplo: "boa" "oba"), que são muito mais difíceis de serem identificados. Para a detecção e correção do erro de tipo 1, basta utilizar um bom dicionário e selecionar a "melhor" palavra candidata, já para o segundo tipo, deve-se analisar o contexto e também selecionar a "melhor" candidata. O Modelo de Canal Ruidoso assume que um sinal original, ao passar por um canal ruidoso se corrompe, e esse modelo visa recuperar esse sinal. Então ao observar uma palavra x, buscamos a palavra w (maior probabilidade) que gerou a palavra com erro. Por fim, considerando uma sequência de caracteres que não é palavra de um vocabulário, para selecionarmos as palavras candidatas, consideramos palavras com ortografia/pronunciação similar ou então a distância de edição, em que a edição pode ser a inserção, eliminação, substituição de um caractere ou a transposição de dois caracteres.
Eracton Ferreira Ramalho Nesta sexta aula continuamos o estudo de modelagem de dados. Nesta aula foram mostrados 5 testes que tem propósitos distintos e tem o seu código fonte (em Python) disponível. É altamente recomendável que esses testes sejam feitos por cada aluno em seu tempo de estudo. Não terá grandes dificuldades, visto que o código fonte está disponibilizado e funcionando. A experiência é fundamental para fixar os conhecimentos e aprender na prática os conceitos demonstrados. No teste 1, se analisa qual a probabilidade de achar a frase no corpus. No teste 2, se analisa qual a probabilidade de ser encontrado uma palavra após uma outra. Neste caso só se usa bigramas. Outro aspecto importante é saber que, no primeiro momento, não houve um tratamento em relação às stopwords. Já numa analise posterior, foram elas foram retiradas. No teste 3, é analisado os N-gramas em frases. O slide com uma estrela pode ser considerado o mais importante da aula, por isso é bom ter atenção nele. No teste 4, é visto como criar frases. Ficou observado que quanto maior o N, mais consistência tem as frases criadas. Entende-se por consistência as frases que tenham algum ou mais sentido semântico. Isso foi mostrado quando visto a diferença das frases criadas com n=1, n=2, n=3 e n=6. Importante levar em consideração que o corpus é superimportante nesta analise. No teste 5, para fechar, foi visto o mesmo que no teste 4 com a diferença de ter acrescentado na criação de frases os sinais de pontuação e números. Como isso? Sempre usando os conceitos vistos sobre as expressões regulares. Como aspecto interessante desses testes, podemos ilustrar que alguns pesquisadores já usaram esses criadores de frases para entregar artigos acadêmicos. O mais curioso é que muitos foram aceitos. Seguindo a disciplina, o próximo assunto está no capitulo 5 do mesmo livro que utilizamos até agora e se chama correção ortográfica. Nesta aula foram vistos algoritmos básicos para a correção ortográfica. Como nomenclatura, vamos definir dois conceitos: Spell checking é a correção ortográfica. Speel checkers é o artefato ( a ferramenta). Podemos classificar os erros em dois tipos: erros associados a elementos que não são palavras de um vocabulário e erros associados a elementos que são palavras, mas possuem erros de tipografia e erros cognitivos. Os primeiros são fáceis de identificar, diferentes do segundo que possuem um termo exclusivo diante a dificuldade: noyse channel model (modelo de canal ruidoso). Quais as tarefas da ortografia? Detecção e correção. O modelo de canal ruidoso é muito usado em processamento de sinais. Assumisse que o sinal original ao passar por um canal ruidoso se corrompe. Assim, é preciso descodificar o sinal para que ele chegue como era o original. Isso é um tipo de inferência de Bayes. Em resumo o que deve ser feito, após a análise da inferência de Bayes é: gerar um conjunto de candidatos e selecionar os melhores candidatos para a correção. As empresas que mais investem em correção ortográfica são: Microsoft, IBM e Google.
Caique de Camargo Aula do dia 24 de junho de 2019 de Processamento de Linguagem Natural, continuamos com tema de modelagem de linguagem com N-Gramas, mas dessa vez voltado para duas aplicações: Geração de Frases e Correção Ortográfica. Foi feita uma breve revisão da aula passada, falando sobre N-Gramas, probabilidades de palavras em uma frase e do Pressuposto de Markov. Essa aula foi bem mais voltada para aplicações, o primeiro teste realiza a análise de bi-gramas em frases, onde, dada uma certa frase ele busca a probabilidade de ela existir num dado texto. Um segundo teste retorna qual a próxima palavra mais provável dada uma frase de entrada, isso é, ele analisa a frase dada de acordo com o contexto do texto analisado e diz qual seria a palavra subsequente a esta entrada. Um terceiro teste, sendo uma variação do primeiro, analisa n-gramas em um determinado texto, sendo o elemento a ser analisado e o n dados como entrada. O quarto teste tem como pressuposto a geração de frases, onde analisa as mais prováveis dentro do texto e de acordo com um n-grama de entrada gera um frase que seria bastante provável de acontecer, normalmente retorna frases legíveis e com poucas distorções de contexto. Vale ressaltar que a geração de frases tem uma total dependência do Corpus utilizado. O teste 5 é uma variação do teste 4, mas dessa vez incluindo pontuações e números, sendo feita apenas uma alteração no expressão regular utilizada para a detecção de totens. Foi mostrado um artigo muito interessante sobre a geração automática de papers chamado de "SCIgen - An Automatic CS paper generator", o mais interessante é que um de seus papers chegou a ser aceito em um congresso, levantando questões sobre as análises feitas para a entrada nesses eventos. E por último, mas não menos importante, foi abordado o tema correção ortográfica, trazendo conceitos de spell checking e spell checkers. A correção pode ser dividida em duas classes, a ortográfica, que é mais fácil de ser identificada e utiliza-se de um dicionário e o erro de contexto, onde a palavra que foi errada existe, mas não cabe dentro do contexto em que foi inserida, sendo essa mais difícil de ser identificada. Aí então entra o conceito de modelo de canal ruidoso (ou Noisy Channel Model), muito utilizado em processamento de sinais e que diz que um sinal, ao passar por um canal ruidoso, se corrompe, sendo necessário realizar a recuperação da informação. É um tipo de inferência de Bayes, podendo ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros, construindo-se uma matriz de confusão e a utiliza para a substituição da palavra errada por aquela que tem uma maior probabilidade de ser a correta, mas nem sempre retorna a melhor. Não é um tema recente, datando da década de 90, com a IBM e a AT&T. Ainda foi citado Peter Norvig e realizada uma breve descrição dos layouts de teclados.
Lucas Kenzo Kurokawa A aula começa com a definição de “n-gramas” que seria uma sequência contigua de N elementos, ou seja, os elementos podem ser: caracteres, silabas, palavras, fonemas, etc. Geralmente, quando queremos usar n-gramas para alguma tarefa de PLN, precisamos de um corpus. Normalmente, quando usamos n-gramas, tendemos a usar uma nomenclatura especifica para o número de elementos N: unigrama para 1, bigrama para 2, etc. Após obtermos os n-gramas, podemos calcular as probabilidades de palavras em uma frase. Para isso, usamos o pressuposto de Markov, que diz: a probabilidade da próxima palavra depende apenas da probabilidade de uma ou mais palavras anteriores. Por exemplo: dado o corpus “A aula do professor Jesus é boa. A aula do Jesus é bem interativa.” temos que dado a ocorrência de “aula” seguida de “do” a probabilidade de a próxima palavra ser “professor” é de ½ e ser “Jesus” é de ½. Com isso, vimos como implementar alguns algoritmos de n-grams para PLN, exemplo: dado um determinado corpus, por script conseguimos calcular a probabilidade de uma frase ou palavra ocorrer. Para entendermos o script, aprendemos ou revisamos algumas ferramentas e bibliotecas de Python, por exemplo: biblioteca “re” para expressões regulares. Em seguida, vimos como o uso de n-gramas pode nos ajudar a gerarmos frases e como as frases geradas por unigrama são piores do que a de bigrama, as por bigrama são piores que as por trigrama e etc. Também foi visto que a geração de novas frases com o uso de sinais de pontuação e números (sem normalização que usávamos antes) incrementa o desempenho. Inclusive nos foi apresentado o uso de geradores de frases para gerar artigos que inclusive acabaram sendo aceitos em alguns congressos de menor relevância (sem algum par de avaliação do artigo). Na segunda parte da aula, vimos o uso de algoritmos de n-gramas com finalidade de criarmos corretores ortográficos e como são importantes para algumas empresas e aplicações. Ao tentarmos criar um corretor temos que nos analisar quais os eventuais tipos de erros que podem ocorrer: erros que são palavras não existentes (por exemplo: “univresidade” quando era pra ser “universidade”) e erros que são palavras existentes: “conserto” ou “concerto”. Para detectarmos se é de fato um erro ou não em um texto, temos 2 abordagens comuns: usando um dicionário (análise morfológica) ou avaliando o contexto em que está inserido (análise semântica). Também vimos o modelo de canal ruidoso, frequentemente usado em processamento de sinais, com fim de correção ortográfica. Ele é similar à inferência de Bayes e parte da premissa que um sinal original, ao passar por um canal ruidoso, se corrompe. Ao observar uma palavra com erro ortográfico, busca uma palavra em um vocabulário previamente definido para achar um candidato para correção. Para encontrar um potencial candidato, podemos considerar uma série de fatores: palavras com ortografia similar, com pronúncia similar, distância de edição (Demeraou-Levenshtein), matriz de confusão, layouts de teclado. Vimos também que podem ser utilizados para identificar abreviações.
Luiz Gabriel Correia Usando o pressuposto de Markov, podemos aproximar a probabilidade de encontrar uma palavra usando apenas o produto das últimas k palavras. Utilizando bigramas, por exemplo, basta fazer uma contagem do número de vezes que aparecem as duas palavras contíguas e o número de vezes que aparece a primeira palavra. No trigramas o raciocínio é análogo. No teste 1, analisamos bi-gramas em frases com o programa ngrams1.py. Um detalhe de implementação importante, é fazer a leitura linha a linha, separando por pontos ou parágrafos, para evitar que quando a pontuação seja removida sejam criados bigramas fictícios. No teste 2, ngrams2.py, associamos uma palavra a uma frase, podendo prever as palavra mais provável. O programa ngrams3.py também implementa uma cadeia de Markov, mas especificando com n-grama usar na análise. No teste 4 (ngras4.py) geramos frases a partir de uma palavra aleatória, pegando as próximas palavras como a mais provável de acontecer no corpus analisado. Indicamos qual n-grama considerar e quantas palavras queremos gerar. Vemos que quanto maior o n-grama utilizado mais coerente é o texto resultante. Podemos usar para gerar resumos com base no corpus de resumos. Com apenas uma mudança na expressão regular podemos gerar frases com números e pontuação. Artigos gerados por estas técnicas foram inclusive aceitos em congressos reais. Correção ortográfica, coberto no capítulo 5 do livro-texto. Spell-checking é o processo checar se há errors, Spell-checker é o programa ou função que os checa. Na correção de erros, temos que separar bem a correção da detecção. Para detecção de um erro de ortografia, a forma mais simples é utilizar um bom dicionário. Já para um erro semântico, temos que usar o contexto. Mas uma vez detectado o erro, como fazer a correção? Podemos gerar candidatos válidos e selecionar a melhor, no caso de erros do tipo 1 (ortográfico) ou podemos analisar o contexto e escolher gerar a palavra mais provável para error do tipo 2. Modelo de canal de ruído trata-se de um modelo usado para corrigir palavras que passaram por um canal ruidoso que introduz erros na sequência de caracteres. Um modelo de inferência de Bayes é uma forma de implementar, pegamos a palavra w que maximize a probabilidade de ela ocorrer dado que recebemos a palavra ruidosa x. Para calcular utilizamos a probabilidade a priore (através da frequência) e a probabilidade condicional, do channel model. Para correção, podemos considerar a distância de edição, e obter palavras-candidatas fazendo operações como inserções, eliminações e substituições que obtenham palavras do vocabulário. Com as candidatas podemos obter a frequência delas no corpus. Precisamos de um corpus de erros que diga que, dado determinada palavra a quão provável é de ocorrer determinado tipo de erro. Isto pode não ser suficiente, já que muitas vezes precisamos usar o contexto. Uma solução é usar n-gramas para determinar a probabilidade, considerando as palavras ao redor. O layout do teclado também pode ser importante para determinar erros comuns.
Marcelo Schirbel Gomes Aula 06 Analisando n-gramas em frases Utilizamos Python em nossa aula pois é uma linguagem muito prática. É necessário notar que existem algumas funções em Python que podem prejudicar o desempenho do nosso código. Quando trabalhamos com bigramas, devemos tratar a leitura parágrafo a parágrafo. Pois assim excluímos a chance de termos duplicidade de palavras. Na aula vimos um exemplo para identificar unigramas e bigramas que sofre desse problema. Também vimos um programa para adivinhar a próxima palavra, baseada no texto 'A Semana' de Machado de Assis. E com esse programa temos as probabilidades de acertar a próxima palavra, dado uma entrada. Geralmente, segundo o script, a maior probabilidade recai sobre os stopwords, logo, deveríamos retirá-los para que pudéssemos adivinhar, com uma maior sentido semântico, qual a palavra seguinte. No programa seguinte, adaptado do livro que seguimos, temos uma contagem dos n-gramas e o cálculo de probabilidade. Geração de Palavras E talvez a aplicação mais interessante: Geração de Frases. Desde que consigamos manter o sentido do texto, de acordo com os n-gramas. Quanto maior o n, maior o sentido que o texto terá. No arquivo 'ngramas4.py' temos o objetivo de, começando com uma palavra aleatória de um dicionário, e considerando-a como unigrama. Consideramos a palavra seguinte como a maior probabilidade de acontecer após a palavra seguida. Assim manteremos uma frase, como se fosse um buffer, e no fim teremos um corpus, podendo ou não ter sentido semântico. Sinais de Pontuação Nos exemplos vistos acima, tiramos os sinais de pontuação usando a regex. Mas eles dão sentidos distindos, se usados ou não. Portanto, devemos voltar com eles ao texto. Algo que ficou claro, é que os textos são totalmente dependentes dos corpus, ficando intimamente ligados com os jeitos do escritor ou do locutor ao se gerar o texto. Correção Ortográfica Temos um bom exemplo, como o corrertor de pesquisas do Google. Esse corretor funciona em português ou em inglês. E isso é necessário,para nãorealizarmos duas pesquisas na base de dados. Antes, realizamos uma correção para não perdermos tempo e trazermos melhores resultados para o usuário final. Temos uma dificuldade nas correções de palavra. Uma coisa é corrigir um erro ortográfico, o que é fácil. Mas é muito mais complicado corrigir uma palavra correta, fora de contexto. Para isso, usamos os modelos de Markov para identificar o contexto e saber se a palavra pode ser inserida. Há duas frentes de identificação: A detecção de erros ortográficos; e a correção de erros ortográficos. Para a detecção, precisamos de um bom dicionário ou usar o contexto. Para a correção, precisamos gerar palavras candidatas e selecionamos a com maior probabilidade. Modelo de canal ruidoso Assume-se que existe um sinal original que, ao passar por um canal(ruidoso), se corrompe. Ou seja, é necessário recuperar o sinal original. É uma inferência de Bayes. Para fazer isso computacionalmente, consideramos a distância mínima entre as duas cadeias. E podemos inserir ou eleminar caracteres.
Rodolfo Azevedo Dos Santos 1) Geração de frases 2) Correção ortográfica Teste 1: Analisando bi-gramas em frases Ngrams1.py: Passa como parâmetro um texto (.txt) e retorna a probabilidade de encontrar uma frase no texto. Quanto mais palavras utiliza menor a probabilidade. O programa em questão não utiliza a base log (mas pode ser adaptado para utilizar). Se p>0 então a frase existe no texto. Quanto maior o corpus, mais representativo é o resultado. Termos modernos não faziam parte do corpus das obras de Machado de Assis (caso de exemplo). Utilizar a função read retorna a string do texto inteiro. Isso acaba desconsiderando pontuações e distorcendo análises. Dependendo da aplicação o mais correto é ler o texto parágrafo por parágrafo (sem utilizar a função read). É um detalhe de implementação importante a ser levado em consideração. Teste 2: Associando próxima palavra de uma frase Ngrams2.py Não foi feito nenhum tratamento de stopwords. Dado uma frase o programa retorna a probabilidade da próxima palavra ocorrer (inclusive stopwords). Ngrams2b.py Retorna a probabilidade da próxima palavra sem stopwords. Teste 3: Analisando n gramas em frases Ngrams3.py A lógica é a mesma do teste 1, apenas é mais genérico pois analisa para um dado n de entrada. Se um dos elementos não está no corpus, então a probabilidade é ZERO (pois é uma multiplicação de probabilidades). Teste 4: Geração de frases Ngrams4.py Passa o corpus (texto) como entrada e o n como parâmetro.Escolhe primeira palavra de forma aleatória e escolhe a palavra seguinte com maior probabilidade de ocorrer. Quanto maior o n mais coerente o texto fica. SCIGEN: An automatic CS paper generator Gerador de artigos da computação. Curiosidade: Um artigo gerado por esse programa foi aceito em um evento. A partir disso surge um problema: Como identificar que um texto foi gerado por uma máquina? Correção ortográfica: Google utiliza correção ortográfica em seu sistema de busca. Por quê um sistema de busca deve se preocupar com isso? R: Porque as pessoas podem errar na busca ~ 10%. Classes de erros: 1) Fáceis: Elementos que não fazem parte do dicionário 2) Erros associados a elementos que são palavras ( Erros de tipográfica e/ou erros cognitivos) Tarefas da ortografia: Detecção e correção Modelando canal ruidoso: Muito utilizado em processamento de sinais (não é um termo novo). Assume um sinal original (Sem ruído) que ao ser submetido por um canal ruidoso (noisy) ele se corrompe. Temos apenas a palavra corrompida e queremos a fonte (source) antes do canal ruidoso. Após inferência de Bayes a palavra é “chutada”. Argmax: procura o w (word) que maximiza a probabilidade e a partir disso encontra a melhor palavra. Distância de edição: Tipos: Exclusão, Inserção, Transposição ou Substituição. Cria-se heurísticas para eliminar algumas combinações. Quase todos os erros estão a uma distância de 2. 80% a distância de 1. A partir da melhor palavra candidata, compara com o contexto (para determinar qual a maior probabilidade da palavra em um dado corpus).
Bruno Menezes Gottardo Ladeia Na aula 6 do dia 24/06 foi dado continuidade ao assunto n-gramas, apresentado na aula passada, focado na modelagem da linguagem e suas aplicações práticas. A partir dos pressupostos de Markov em que, a probabilidade de uma palavra depende apenas da probabilidade da(s) palavra(s) anterior(es), foram implementados vários códigos em Python que utilizam n-gramas, para mostrar como se dá sua utilização. O teste 1 consistiu em analisar os bi-gramas presentes nas frases, que serve para analisar quantas vezes aquela estrutura apareceu no texto em análise. O segundo teste consistiu na associação da próxima palavra de uma frase, dando a palavra que tem maior probabilidade de aparecer segundo a frase informada. Este segundo foi modelado de forma a retirar as stopwords (palavras mais comumentes utilizadas na língua), de forma que se for digitado somente a palavra "que", ele não informará nenhuma palavra que a suceda e dará probabilidade 0. O teste 3, bem parecido com o primeiro, consistiu em avaliar n-gramas, ao invés de bi-gramas, possuindo uma implementação um pouco mais robusta que o primeiro exemplo. O teste 4 partiu para uma outra linha em que foi testado a capacidade de geração de frases, a partir de um conjunto de frases informadas. Este teste também avaliou as obras de Machado de Assis e obteve um desempenho particularmente bom para estruturas 6-grama. Este teste tem total dependência ao Corpus utilizado. O 5 completou um pouco mais o 4, ao introduzir pontuações nas frases. Como um bom exemplo de uma ferramenta que segue conceitos de geração de frases, foi apresentado o SCIgen, que gera artigos científicos da área de Computação de forma randômica. Após isso a aula concentrou-se em apresentar algoritmos básicos voltados para correção ortográfica. Vale se atentar a nomenclatura onde temos Spell Checking sendo a correção ortográfica e Spell Checker, a ferramenta responsável por fazer, ou sugerir, a correção. Existem duas classes de erros presentes na correção ortográfica. Os erros tipo 1, fáceis de serem identificados, onde uma palavra não existente no vocabulário é trocada por uma palavra válida, e os erros tipo 2, Noisy Channel Model, ou erros difíceis de serem identificados. Neste segundo há os erros de tipografia (gralha) e os cognitivos (palavras homófonas). Existem duas etapas principais na correção: a Detecção e a Correção. Na deteção os erros tipos 1 podem ser encontrados utilizando um "bom" dicionário, já os 2 podem ser detectados utilizando o contexto. Para a correção dos tipos 1 são geradas palavras candidatas (palavras válidas) e escolhida a "melhor". Já para o segundo as palavras candidatas geradas são as que apresentam ortografia ou pronunciação similar e destas esolhidas a "melhor". Para os tipos 2 é utilizado um modelo muito conhecido chamado Noisy Channel para detectar e as corrigir, onde é assumido que existe um sinal original, que é corrompido ao passar por um canal ruidoso e, para recuperar a mensagem original, é necessário descodificar o sinal original.
Laura Cestavo Borges Dos Santos Nessa aula vimos como modelar a linguagem com N-gramas, estudando dois tipos de aplicações. Conforme visto na aula anterior, um N-grama é uma sequência contigua de N elementos e são obtidos a partir de um corpus. Dependendo da quantidade de elementos em um N-grama eles são classificados em unigramas, bigramas, trigramas ou n-grama, onde n é o número de elementos. Usando o texto A Semana do Machado de Assis, rodou-se um algoritmo que dada uma frase, usando n-gramas, ele checava qual era a próxima palavra que tinha maior tendência de aparecer após aquela frase. Nota-se que na maioria dos casos o que aparece é uma stopword, o que não seria de muito utilidade nesse caso. Alterou-se então o programa, retirando as stopwords, dessa forma tendo resultados mais significativos. Um outro programa visto em sala foi o gerador de frases, que passava um texto e um número de palavras, que representava o tamanho do N-grama, e ele “cuspia” uma resposta, que era um texto. No entanto as frases geradas não tinham pontuação, porque a expressão regular que estava sendo usada só se preocupava com as palavras. Alterando essa expressão para incluir os sinais de pontuação foi possível gerar frases com eles. Uma aplicação conhecida de gerador de frases é o SCIgen, que gera artigos automaticamente. Um outro tópico visto em aula foi a correção ortográfica, que é um assunto um tanto quanto desafiador. No contexto de correção ortográfica existem duas classes de erros: os erros associados a elementos que não são palavra de um vocabulário (aqui se enquadram palavras escritas incorretamente, como faltando uma letra, por exemplo) e os erros associados a elementos que são palavras, aqui existem duas subclasses que são erros de tipografia, por exemplo, as palavras boa e oba, onde se trocou a ordem de duas letras, e erros cognitivos, que se referem a palavras homófonas. A correção ortográfica é muito importante, não só para mecanismos de escrita como o Word, como também para mecanismos de busca. Um artigo publicado em 2002 indica que o uso de um bom corretor ortográfico melhora na eficiência de uma busca. A ortografia tem duas tarefas que são a detecção e a correção de erros. A detecção se dá através do uso de um bom dicionário e do contexto, já a correção é feita através da geração de palavras candidatas e da seleção da melhor entre elas, essas palavras devem ser válidas e de ortografia semelhante. Modelo de canal ruidoso é um tipo de inferência de Bayes, onde ao observar uma palavra x queremos encontrar uma palavra w que gerou a palavra com erro. Para selecionar palavras candidatas, considera-se palavras de similar ortografia e pronunciação. O modelo do canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra, isso é feito usando um corpus de erros e é possível construir uma matriz de confusão para contar tais erros.
Diego Pereira de Lima Na aula de 24/06/2019 de Processamento de Linguagem Natural do Professor Jesús Mena, foi abordado a modelagem de linguagem por N-gramas como meio de correção ortográfica e tradutor de texto. Durante metade da aula foi abordado a modelagem por meio de N-gramas, e evidenciado alguns algoritmos para modelagem onde é proposto uma abordagem um tanto “gulosa” de forma a visar o texto como um todo e não importar as terminações e parágrafos para modelagem, influenciando um pouco no resultado. Mas de toda forma, é com os N-gramas que é possível coletar a relevância e probabilidade de uma palavra ocorrer no corpus e , desta forma, utilizar tal abordagem como conceito ferramental de técnicas de correção ortográfica automática e Tradutor de texto. No exercício que foi dado também solicitava tal descrição de modo a discorrer brevemente como seria a abordagem de identificação do erro ortográfico, sendo por base no contexto ou com base apenas em um bom dicionário de palavras formulado previamente. E desta forma, como seria possível corrigir tal erro, sendo considerando uma substituição simples ou a inferência estatística das ocorrências anteriores já identificadas em outros exemplos. De fato, é possível identificar por contexto erros ortográficos e sugerir tal correção, como o próprio Google realiza antes de executar uma busca, já prevendo um possível erro de digitação/ortografia. Mas também é possível deduzir erros a partir da distância de Levenshtein, a qual visa identificar mudança sendo inversão substituição ou embaralhamento de caracteres em uma palavra. Tendo uma palavra suscetível à correspondência e correção é possível inferir uma corretude ortográfica. Já a segunda parte da atividade e o final da aula abordaram o tema de canal de ruído sendo a modelagem para situações onde desejasse corrigir mensagem com códigos de correção de erro dado que na transmissão do objeto de interesse foi danificado devido a ruídos externos do emissor. Para isso também com o histórico de ocorrências e estatística é possível inferir qual é a real mensagem a se transmitir. Muitos dos métodos de correção ou de tradução são baseados nos modelos e cadeias de Markov, o qual se resume em seu pressuposto onde: “é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma ou mais anteriores (A produtória de termos dependentes). Sendo que durante a aula foi evidenciado alguns códigos em python que exemplificaram tal abordagem de n-grama com o pressuposto de Markov. Além de que do modo inverso identificar pode se criar estruturas (frases) a partir de n-gramas também (Como no caso citado em aulas anteriores do paper publicado gerado a partir de aprendizado de máquina). E por fim depois da abordagem do canal ruidoso e também da correção ortográfica (algoritmos baseados em trabalhos de Peter Norvig), foi comentado sobre a layout das letras do teclado o qual há vários padrões e também geram erros de digitação sistemáticos (Ruído) que podem ser identificados na ortografia.
Vinicius Narciso da Silva Como dito anteriormente, N-gramas são sequências contíguas de N elementos (caracteres, palavras, sílabas, etc). São comumente obtidas a partir de um corpus. Podemos usar o conceito de n-gramas para calcular a probabilidade de uma palavra aparecer numa frase, dadas as palavras anteriores. O pressuposto de Markov simplifica um pouco esse cálculo da probabilidade, dizendo que a probabilidade da palavra aparecer depende apenas das k últimas palavras (1 <= k <= n). Nesta aula, foram feitos alguns testes com algoritmos que calculam esta probabilidade. O primeiro teste feito foi analisar as ocorrências de bigramas, ou seja, calcular a probabilidade de um bigrama, dado uma palavra. O segundo teste foi prever a próxima palavra a aparecer, dado uma frase, ou seja, calcular a palavra com maior probabilidade de aparecer a seguir, dado uma frase. Foi observado que na maior parte dos casos, foram previstas stopwords, então a segunda parte do teste foi feita removendo as stopwords. Um fato curioso é que, para as mesmas frases testadas, ao remover as stopwords, as probabilidades diminuíram muito. O terceiro teste foi uma generalização do primeiro teste, onde era possível testar n-gramas nas frases pré-definidas, recebendo n como entrada. O quarto teste foi de geração de frases aleatórias, fornecendo o primeiro termo (gerado aleatoriamente), utilizando-se das probabilidades previamente calculadas. Fato importante a salientar é que, se variar o n-grama utilizado para cálculo de probabilidades, podemos chegar em frases "que tem um valor semântico plausível" (não é possível simular completamente a compreensão semântica humana e é detectável caso a frase seja gerada por uma máquina), dependendo do Corpus escolhido. O teste cinco incluiu pontuação no quarto teste. Ao fim destes testes, foi mostrado um gerador de artigo cientifico automático, sendo que alguns deles foram submetidos a congressos e foram aceitos. Podemos aplicar estes conceitos em correção ortográfica (Spell Checking). Através de Spell Checkers (algoritmos de correção ortográfica) fazem a detecção e sugere a correção de erros. Para este curso, a detecção será feita por contexto e a sugestão levará em conta a pronúncia e a ortografia similar. Para tal, utiliza-se o modelo de canal ruidoso para correção ortográfica (The noisy channel model of spelling) que assume que o sinal, ao ser emitido, passa por um meio que o corrompe e precisamos trata-lo antes de utiliza-lo. Utilizando-se de conceitos previamente vistos, adaptando um pouco, podemos utilizar o cálculo de probabilidade para achar o argumento (sugestão) que maximiza a probabilidade dado um sinal recebido. As fórmulas de cálculo de probabilidade permanecem as mesmas, o desafio encontra-se em achar os valores iniciais. Porém, nem sempre o resultado é confiável, por este motivo, podemos incluir o contexto para calcular a sugestão. Por fim, se tivermos alguma informação sobre o meio que a informação foi obtida (por exemplo, ao digitar num teclado), podemos usar heurísticas para esse calculo (por exemplo, a distância de letras em um teclado).
Matheus Miranda Teles A aula Modelando a linguagem com N-gramas aborda dois tópicos, a geração de frases e a correção ortográfica. Inicialmente retomamos N-gramas, que são sequências contigua de N elementos (caracteres, palavras, sílabas, fonemas, pares-base) e são comumente obtidos a partir de um corpus. Existem desde N=1, sendo chamado de Unigrama, e passa por Bigrama, Trigrama, 4-grama etc. A aula foi dividida em 5 testes, o primeiro era para analisar bi-gramas em frases, então tomando como partida um corpus, é possivel saber qual a probabilidade daquela frase acontecer. O segundo teste era sobre associar a próxima palavra de uma frase, sendo assim, tomando um corpus e a partir de uma frase era possível saber que palavra teria maior change de aparecer a seguir. Esse método também pode ser feito removendo as stopwords, para obter maior valor semantico. O terceiro teste foi sobre analisar n-gramas em frases, nesse caso, dado uma frase é possível dizer a probabilidade dela acontecer, que tendo em vista o N observado e o corpus levado em conta, o resultado varia. O quarto teste tratou da geração de frases, esta que também varia de acordo com o N escolhido, tende a melhorar conforme o N fica maior, as frases ficam mais coesas e menos disconexas. No teste de numero 5, a geração de frases é abordada para acrescentar números e sinais de pontuação utilizando uma regex mais aprimorada. Outro tópico abordado foi a correção ortográfica, que é muito presente na computação em softwares de escrita de documentos e em ferramentas de busca. Os erros de escrita podem estar associados a dois tipos: o primeiro grupo são os erros associados a elementos que não são palavras de um vocabulário, como a palavra "Universidade" sendo escrita como "Unversidade", e o segundo grupo são erros associados a elementos que são palavras, como erros de ortografia, tornando a palavra "boa" em "oba", ou erros gerados por palavras homófonas, como "one" se tornando "won", este grupo é difícil de identificar. Para detectar estes erros pode-se usar um bom dicionário ou utilizar o contexto, já para corrigí-los, deve-se gerar palavras candidatas, e elger a melhor. Para corrigir, sabemos que a comunicação se da através de um "canal ruidoso", e por isso precisamos de um método para tirar esse ruído. Logo observamos que precisamos encontrar a palavra que melhor se encaixa na situação, logo uma palavra que maximiza a probabilidade de aparecer naquele cenário. Para selecionar as palavras candidatas devemos permutar por seu comprimento ou inserindo um caractere, ou eliminando, ou substituindo ou transpondo 2 caracteres. Sendo assim quando se coloca a palavra acress para esse método, encontramos várias como candidatas, como actress e caress, mas a que maximiza a função é across, isso para unigramas. Mas existem exemplos de unigramas que esse resultado não satizfaz, logo se utilizarmos n-gramas maiores, o resultado pode satizfazer muito mais
Jairo da Silva Freitas Junior Na sexta aula de Processamento de Linguagem Natural tratou-se de geração de frases e mecanismos para detecção de erros ortográficos e correção. No início da aula revisou-se N-Gramas, probabilidade de palavras e o pressuposto de Markov e o professor demostrou cinco scripts em Python relacionando o conteúdo teórico das últimas aulas com a implementação prática. Em todos o corpus é fornecido pelo usuário para o programa, e em classe usamos os textos de Machado de Assis (principalmente a coletânea A Semana). No primeiro script o algortimo imprime a probabilidade da ocorrência de uma coleção de frases teste, calculada como a produtória da probabilidade da ocorrência dos bigramas pela probabilidade de ocorrência dos unigramas constituintes da frase. No segundo arquivo Python, dado uma frase o programa imprime a próxima palavra mais provável e sua probabilidade. Foram feitas versões com e sem stopwords. O terceiro teste recebe um número e o toma como o tamanho dos N-gramas a serem analisados. Considerando N-gramas deste tamanho, retorna a probabilidade da ocorrência de uma frase dado que seus N-Gramas devem ter o tamanho fornecido. Conforme esta variável cresce as probabilidades das frases tendem a zero. Continuando,o professor explicou geração de frases usando o teste quatro, em que fornecido um tamanho de N-grama (N) pelo usuário, o programa gera sentenças a partir de uma semente aleatória, considerando sempre a próxima palavra como aquela cuja probabilidade de ocorrência é máxima no N-grama formado por ela e suas N-1 antecessoras. Vimos que quanto maior o N, mais verossímil a frase gerada. Por fim, no último programa, foi implementada uma pequena alteração em relação ao anterior, considerando na expressão regular que extrai as palavras o reconhecimento de pontuação e números. Para finalizar o assunto de geração de frases, foi apresentado o SCIgen, um gerador automático de artigos de Ciência da Computação. Na segunda parte da aula trabalhou-se detecção e correção ortográfica. Existem duas classes de erros ortográficos, aqueles associados a elementos que não estão no vocabulário e aqueles que estão associados ao contexto da palavra (ela pertence ao vocabulário, porém não faz sentido no contexto empregado). A correção do primeiro caso baseia-se em um bom dicionário para detecção e geração de palavras candidatas a partir do maior argumento da matriz de confusão das distâncias de edição da palavra (geralmente com distância de edição de um a dois). O segundo caso é atacado através do Modelo de Canal Ruidoso, onde dado palavras com distância de edição pequena, verifica-se qual maximiza a probabilidade do n-grama em que ela se encontra. Também é possível empregar outras técnicas, como similaridade de pronunciação. A aula foi finalizada com a discussão sobre a influência que o layout dos teclados podem ter nos erros ortográficos e como isso pode otimizar os algoritmos de correção automática.
Brian Alves Andreossi Aula 5 Ao fazer a leitura de textos a partir de python, tomar cuidado com a forma como é feito a carga de dados para a memória. Exemplo: \- uso da função read(): é melhor usar linha a linha (talvez parágrafo) invés do texto todo. Problemas com pontuação podem atrapalhar o processamento. Sempre lembrar se o contexto de sua análise contempla ou não as stopwords. Observação: Para efeito de estudo, o ngrams3.py é o mais completo. É possível gerar frases a partir de um corpus, ou seja, da probabilidade de certa frase ocorrer (presente no programa ngrams4.py). Possivelmente a aplicação mais interessante. Quanto maior o tamanho do agrupamento (palavras contíguas), mais provável de encontrar uma frase com coerência. 6-gramas: aqui tenho a honra de concluir fazendo votos para que afeiçoando as ideias que nao edulcoradas para perderem o ressabio da origem ai ficam mal expostas digne-se tirar-lhes os ácidos Observação: lembrar que existe uma dependência do Corpus utilizado. Uma geração de texto depende da análise das porcentagens presentes nos textos (corpus) que foram analisados. Com uma leve mudança na expressão regular que retira as palavras do corpus, é possível considerar a pontuação. Nomenclatura \- Spell checking: correção ortográfica \- Spell checkers: artefato que corrige. Tipos (classes) de erros 1\. Erros associados a elementos que não são palavras de um vocabulário. 2\. Erros associados a elementos que são palavras. Exemplo: "oba" -> "boa". Nesse caso, são difíceis de identificar (Noisy channel model) Detecção de Erros \- Erro tipo 1: Usando um "bom" dicionário \- Erro tipo 2: Usando o contexto. Correção de Erros de ortografia: \- Erro tipo 1: gerar palavras candidatas (que sejam válidas) e selecionar a melhor candidata. \- Erro tipo 2: Gerar palavras candidatas (com pronúncia ou ortografia similar) e selecionar a melhor candidata. Modelo de canal ruidoso para correção ortográfica \- Assume que existe um sinal original que passando por um canal ruim, ele se corrompe. \- É necessário recuperar (descodificar) o sinal original. É um tipo de inferência de Bayes. Ao observar uma palavra x, que pode possuir erros, se quer encontrar uma palavra w (de um vocabulário V) que gerou a palavra com erro. → ? = argmax P(w|x) w pertence a V. ? é a palavra que maximiza P(w|x). Seleção de palavras candidatas Pode-se considerar: \- Palavras com ortografia similar \- Palavras com pronúncia similar Distância de edição (Demeraou-Levenshtein) Considera a distância mínima entre 2 cadeias, em que a edição pode ser: \- Inserção \- Eliminação \- Substituir \- Transpor 2 caracteres. 80% dos erros estão a uma distância de edição de 1 e quase todos estão a distância de 2. O modelo de canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros. O contexto pode ser útil, e a correção fica mais fiel se utilizada do modelo de n-gramas para correção
July Anne Pinheiro Aula 6: Modelando a linguagem com N-gramas - Aplicações Geração de Frase: Através da utilização de N-gramas é possível criar frases de forma aleatória, durante a aula foi apresentado e discutidos alguns códigos em python com essa função, no qual viamos a sensibilidade referente a geração considerando ou não pontuação e a importância da análise de contexto das palavras descritas nas frases para avaliação do emprego correto. Importante: Existe uma total dependência ao Corpus utilizado! Correção Ortográfica: Spell checking: Correção ortográfica Spell checkers: É o artefato (a ferramenta) Tipos (classes) de erros 1) Erros associados a elementos que não são palavras de um vocabulário (Erros fáceis de identificar): Ex: “Unversidade” ? “Universidade” 2) Erros associados a elementos que são palavras (Erros difíceis de identificar - Noisy channel model): Ex: Erros de tipografia (gralha): “oba” ? “boa” e Erros cognitivos (palavras homófonas) “Conselho” ? “Concelho” “One” ? “Won” Tarefas de ortografia Para ortografia os N-gramas podem ser utilizados em 2 vertentes: Detecção e Correção de ortografia. \- Detecção de erros de ortografia. Erro tipo 1: Usando um “bom” dicionário. Erro tipo 2: Usando o contexto. -Correção de erros de ortografia: Erro tipo 1: Gerar palavras candidatas (que sejam palavras válidas) e selecionar a “melhor” candidata. Erro tipo 2: Gerar palavras candidatas (com pronunciação ou ortografia similar) e selecionar o “melhor” candidata. Modelo de canal ruidoso para correção ortográfica Modelo de canal ruidoso: É um modelo muito utilizado em Processamento de Sinais. Assume-se que existe um sinal original que, ao passar por um canal (ruidoso) se corrompe. Tendo no final um sinal com ruído. Assim, é necessário recuperar (decodificar) o sinal original. É um tipo de inferência de Bayes, dada por argmax P(x|w) P(w). Considerando um modelo de linguagem baseado em unigramas, para análise de uma palavra x (erro ortográfico) queremos encontrar uma palavra w (de um vocabulário V) que gerou a palavra com erro. Podemos utilizar o método de distância de edição, importante devido a disposição das letras no teclado. Distância de edição (Demeraou-Levenshtein) Considera a distância mínima entre 2 cadeias, em que a edição pode ser: * Inserção de um caractere * Eliminação de um caractere * Substituição de um caractere * Transposição de 2 caracteres Para calcular a quantidade de vezes que uma letra foi substituída por outra, gerando uma matriz de confusão para contagem de erros. O recomendável é usar como modelo de linguagem mais do que unigramas, por exemplo, considerando bigramas, trigramas, etc. Etapas para correção ortográfica: Para cada palavra na frase: * Gerar um conjunto de candidatos * Selecionar os melhores candidatos Principais utilizações do Spell Checkers Utilizados não somente para tratamento de erros de digitação: * Identificação de abreviações * Vocabulário informal Existem outras vertentes dos spell checkers que podem considerar: * Interação com os usuários * Utilização de dispositivos com teclado reduzido * Informações de redes sociais
Thiago Bruini Cardoso Silva A sexta aula da disciplina teve como foco o estudo de duas principais aplicações do modelo de linguagem com N-gramas: Geração de frases a partir de um corpus e correção ortográfica de texto. A aula começou com um resumo do modelo de N-gramas, que trata-se da análise de sequências de N palavras em um corpus. A probabilidade de palavra em um frase tem como base de seu cálculo o pressuposto de Markov: "A probabilidade de uma palavra depende somente da probabilidade da palavra anterior e não de todas que antecederam.". A aplicação de N-gramas para determinação da palavras seguinte de um frase começou com o estudo das probabilidades de N-gramas com "Ns" diferentes. Em seguida, a partir do pressuposto de Markov e do corpus em questão, foi mostrado o cálculo da palavra com maior probabilidade de dar sequência a uma frase. Esse conceito foi expandido para N-gramas, definindo o cálculo do N-grama de maior probabilidade a seguir a frase. A partir desses cálculos foi definido o algoritmo responsável pela geração de frases: 1 - É escolhida uma palavra aleatória do corpus 2 - É definido o N do N-gramas a ser calculado 3 - É definido o número de N-gramas a ser gerado 4 - É determinado o N-grama de maior probabilidade a seguir a última palavra da frase 5 - Caso o número de N-gramas gerado seja o determinado inicialmente, o algoritmo para de incrementar a frase Para exemplificar utilizações de geradores de frases, foram passados como exemplos um gerador de artigos científicos que foi capaz de ter um de seus produtos aceitos em um congresso internacional e um gerador de resumos da matéria de PLN. O próximo tópico a ser tratado foi a correção ortográfica de texto. O primeiro ponto importante a ser levantado sobre corretores ortográficos é a dependência do idioma em questão, um bom corretor em um idioma pode ser ruim em outro. As duas classes de erro relacionadas à ortografia são: erros associados a elementos que não são palavras no vocabulário (por exemplo, digita-se "ob" ao invés de "oba) e erros associados a elementos que são palavras do vocabulário (por exemplo, digita-se "boa" ao invés de "oba"). O primeiro caso é tratado utilizando-se um bom dicionário e substituindo pela palavra mais próxima da incorreta. O segundo caso é solucionado calculando-se a palavra mais provável e próxima em distância de edição da palavra incorreta de acordo com o contexto. A identificação da palavra correta pode ser realizada por meio de um modelo de canal ruidoso, em que se assume que há um sinal original que foi distorcido e precisa ser recuperado. Por inferência de Bayes, podemos assumir a mensagem original.
Marcelo de Souza Pena Na aula 6 continuamos modelando a linguagem com N-gramas, desta vez vimos duas aplicações: geração de frases e correção ortográfica. No começo da aula revisamos um pouco do que vimos nas passadas, o que são N-gramas, corpus, probabilidade das palavras, Pressuposto de Markov e alguns exemplos de corpus e probabilidades. Vimos 5 algoritmos: o primeiro um código simples para identificar bigramas usado em um corpus composto de todas as obras de Machado de Assis (nota: ele pode identificar palavras finais e iniciais dos parágrafos como um bigrama, então é bom analisar cada parágrafo isoladamente ao invés do texto completo), o segundo código mostra a palavra mais provável de aparecer depois de uma frase digitada pelo usuário (depois a mesmo aplicação, mas retirando as stopwords), o terceiro programa é como o primeiro, mas procura n-gramas, não apenas bigramas, o quarto código gera frases de acordo com as últimas n - 1 grams (5-grams no exemplo) e por fim o quinto código também gera textos, mas considera pontuação e números. Vimos novamente o “gerador de lero- lero” e um paper gerado por ele. Iniciamos o assunto correção ortográfica vendo alguns algoritmos spell checkers. Diferentes classes de erros: palavras fora do vocabulário (erros fáceis de identificar) e erros associados a palavras, como palavras com o mesmo som, mas escritas diferentes ou de grafia, como trocar letras de lugar ao digitar. No teste da aula tivemos que descrever como seria a detecção e correção ortográfica e o que era um modelo de sinal ruidoso. Detecção usa um bom dicionário e o contexto, enquanto a correção gera palavras candidatas e escolhe a melhor. Modelo de sinal ruidoso (noisy channel model) pega palavras candidatas usando Bayes e escolhe a melhor, inserindo, eliminando, substituindo ou transpondo caracteres. 80% dos erros estão a uma distância de 1, quase todos estão a uma distância de até 2. Utilizar unigramas pode não ser a melhor estratégia uma vez que um número maior de grams pode ajudar a contextualizar e assim chegar à correção apropriada. É possível ainda usar um corpus de erros para identificar o número de vezes que uma letra foi substituída por outra, montando uma matriz de confusão com esses números. Peter Norvig diz "mais dados vencem algoritmos mais inteligentes, mas melhores dados vencem mais dados". A matriz de confusão pode ser modulada pela posição das letras, assim a letra E pode ser trocada por W e R, por exemplo. O teclado QWERTY não é o mais eficiente, mas o tradicional, que todo mundo já se acostumou. Exemplos de estudos sobre spell checkers e as maiores detentoras de patentes de spell checkers (Microsoft muito na frente).
Rafael Augusto Zanatta Um N grama é uma sequencia contigua de N elementos (caracteres, palavras, silabas, fonemas, pares base). São comumente obtidas e analisadas a partir de um corpo, assim, temos o unigrama, bigrama ou digrama, trigrama, 4-grama, 5-grama. O pressuposto de Markov diz que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(s) Erros ortográficos: Spell checking: Correção ortográfica e Spell checkers: é o artefato (a ferramenta). Existema basicamente 2 tipos de erros os erros associados a elementos que não são palavras de um vocabulário que são fáceis de identificar e os erros associados a elementos que são palavras que são os erros de tipografia (gralha) e os erros cognitivos (palavras homófonas). Para detectar e corrigir os erros de ortografia de um texto os passos que devemos seguir é: Detecção: erro do tipo 1 : usando um “bom” dicionário ou para os erros do tipo 2 usando o contexto. Correção dos erros de ortografia, erros do tipo1: Geramos palavras candidatas que sejam validas e selecionamos a melhor candidata. Já para o erro do tipo 2 geramos palavras candidatas com pronunciação ou ortografia similar e selecionamos a melhor candidata. Para isso temos alguns modelos. O modelo de canal ruidoso para correção ortográfica origina-se do mesmo modelo que é muito utilizado em processamento de sinais, para isso assumimos que um sinal original ao passar por um canal (ruidoso) se corrompe. Sendo o final um sinal com ruído, portanto sendo necessário recuperar (decodificar) o sinal original. Isso é um tipo de interferência de Bayes. Quando observamos uma palavra x, isto é, uma palavra com erro ortográfico queremos encontrar uma palavra w de um vocabulário c que gerou a palavra com erro. Ou seja w= argmaxP(w|x). Segundo a regra de Bayes: [P(a|b) = P(b|a)P(a)]/P(b) Para uma sequencia de caracteres que não é uma palavra de um vocabulário fazemos inicialmente a seleção de uma pavra candidata que podemos considerar como sendo uma palavra com similar ortografia ie. Palavras com uma distancia de edição pequena ou palavras com similar pronunciação, ie. Palavras com uma distancia de pronunciação pequena. Distancia de edição (Demeraou-Levenshtein) considera uma distancia mínima entre 2 cadeias, em que a edição pode ser: * inserção de um caractere * eliminação de um caractere * substituição de um caractere * transposição de 2 caracteres Vale dizer que 80% dos erros estão a uma distancia de 1 e quase todos os erros estão a uma distancia de 2. O recomendável é usar como modelo de linguagem mais do que unigramas, por exemplo, considerando bigramas.
Willian Teruya Kimura No dia 24/06, a aula foi referente a aplicações práticas de n-grams, mais especificamente para dois casos: geração de frases e correção ortográfica. Para iniciar a matéria, foi revisado o conteúdo acerca da aula passada, comentando sobre a estrutura de n-gramas (unigrama, bigramas, trigrama), a probabilidades de palavras em uma frase utilizando-se de cadeias de Andrei Markov, utilizando do pressuposto de Markov, em que se supõe que a probabilidade de uma palavra depende apenas da probabilidade de palavras anteriores. Em continuação, foi apresentado a análise de bi-gramas em frases, mostrando o algoritmo a ser executado. Ao verificar o algoritmo, é realizado a leitura do documento, utilizando expressões regulares para identificar as palavras presentes dentro do arquivo. A partir disso, ele contabiliza a quantidade de unigramas e bigramas presentes dentro de um dicionário. Assim, é realizado o cálculo de probabilidades de aparecer bigramas dado frases. Em um teste seguinte, o algoritmo trabalha com a probabilidade de associar a próxima palavra de uma frase. Nele, ao digitar uma frase, o algoritmo imprime a palavra com a maior possibilidade de se aparecer na frase. Em primeira instância, o algoritmo executado considera os stopwords, o que não é recomendado, assim há uma adaptação no código para desconsiderar as stopwords, assim é perceptível como é reduzido a probabilidade de aparecer palavras dentro de frases. Em seguida, é analisado n-gramas em frases, sobre o qual é importante levar em consideração as diferenças de modelos entre unigramas, bigramas e trigramas, no qual deve ser considerado, dependendo de sua estrutura, a combinação de palavras deve ser adequada para o cálculo de suas probabilidades. Para isso, foi apresentado o algoritmo, no qual traduz adequadamente a análise matemática envolvida nos n-gramas, a partir de diferentes frases. Foi apresentado exemplos práticos que comprovam a diferença de probabilidades. Outro teste realizado foi o de geração de frases, sendo que é utilizado amostras de strings aos quais serão utilizados para gerar possíveis frases, não dependendo da construção de contexto. No algoritmo, é apresentado a importância de utilizar diferentes corpus de n-gramas, sendo que, uma vez aumentando a quantidade de palavras, maior será a coesão de suas frases. Em seguida foi apresentado um gerador de frases com caracteres como “.” e”,” envolvidos. Finalizado a parte de geração de frases, foi apresentado algoritmos mais simples de correção ortográfica, em que se levanta os seguintes pontos para correção: Spell Checking e Spell Checkers. Existem tipos de erros, sendo eles: erros associados a palavras que não são palavras de um vocabulário, e Erros associado a elementos que são palavras do vocabulário.
Lucas Zanoni de Oliveira Relembrando a aula anterior, vimos que um n-grama é uma sequência de N elementos, podendo ser caracteres, palavras, sílabas e etc, sendo obtidas normalmente a partir de um corpus. Além disso, vimos também o pressuposto de markov que se trata da suposição que a probabilidade de uma palavras depende de uma outra anterior (utilizado nas sugestões de busca do Google, por exemplo). Na atual aula, o tópico de Correção Ortográfico foi abordado, trazendo consigo duas nomenclaturas: “spell checking” que é a própria correção da ortografia, e “spell checkers” que é a ferramenta para tal. Os erros se categorizam em duas classes. O primeiro se dá para aqueles erros associados a elementos que não são palavras de um vocabulário, podendo ser facilmente identificados a partir de um bom dicionário e corrigidos pela geração de palavras válidas candidatas. O segundo tipo se dá aos erros associados a elementos que são palavras, e por isso são bem mais difíceis de se identificarem (noisy channel model), pois necessitam do contexto, sendo corrigidos a partir de palavras candidatas que possuam pronúncia ou ortografia semelhante. Para um canal com muito ruído é utilizado um modelo de correção ortográfico que assume que um sinal original ao passar por um determinado canal, se corrompe, resultando então em um sinal de difícil entendimento, e portanto tem como objetivo reverter este processo, sendo denominado como um tipo de inferência de Bayes que pode ser dado pela regra ?=argmax P(x|w)P(w), sendo “x” a palavra com erro ortográfico. No processo de seleção de palavras candidatas com similar ortografia, temos que considerar outras com uma distância de edição (Demeraou-Levenshtein) pequena, que considera a distância mínima entre 2 cadeias, onde a edição pode ser: inserção, eliminação, substituição ou transposição. Desta forma, podemos calcular o modelo do canal considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros, e para isso podemos construir uma matriz de confusão para que esses erros sejam contabilizados. Relacionado com o tema, temos também o layout do teclado que auxiliará na seleção de palavras que foram digitadas de forma errônea, por meio da sugestão de outras palavras que possuam letras próximas àquela incorreta, tendo como exemplos: azerty, qwertz, dvorak e o mais comum atualmente qwerty. Para concluir, temos que os corretores ortográficos não são utilizados apenas para tratamento de erros de digitação, mas também na identificação de abreviações e vocabulários informais, além de outras braços que consideram a interação com os usuários, utilização de dispositivos com teclado reduzido e até informações de redes sociais.
Rodrigo San Martin Ignacio Gomes Modelando a linguagem com N-gramas. Os n-gramas são sequencias contiguas de N elementos, que podem ser caracteres, palavras, sílabas, fones ou pares-base. Após a obtenção dos n-grams a partir do corpus, podem ser realizadas inferências como geração automática de frases e correção ortográfica. A partir do pressuposto de Markov, que supõe que a probabilidade de ocorrência de uma palavra depende apenas de um numero determinado de palavras anteriores (N-grama). Assim, P(wi|wi-1) = C(wi-1,wi)/C(wi-1), onde C se refere a contagem; w a palavras. Assim, para prever a próxima palavra em uma frase, pode-se ranquear as palavras de acordo com sua probabilidade de aparecer após um N-grama, isto é, P(wi|wi-1). A palavra com menor ranqueamento, será a que será sugerida. Essa metodologia pode ser aplicada para sugestão automática de texto em buscadores ou processadores de texto, mas também pode ser expandida para geração automática de texto a partir de um corpus. Por exemplo, tendo a obra completa de um autor, como Machado de Assis, podem ser calculadas todas probabilidades condicionais a quadri-gramas. A partir de uma palavra semente, o algoritmo utiliza P(w|w-1) para sugerir a próxima palavra e essa sugestão automática pode ser repetida até um limite N, que será o tamanho da frase. Uma outra técnica que pode ser utilizada em PLN é a correção ortográfica, que pode atacar classes de errors como os associados a elementos não presentes em um vocabulário ou de modo mais complexo, erros associados a elementos que são palavras. Para o primeiro caso, um corpus pode ser utilizado e comparações de proximidade da palavra incorreta com palavras presentes no corpus podem ser aplicadas de modo mais simplificado. Já para o segundo caso, podem ocorrer erros de tipografia ou erros cognitivos que geram palavras existentes, mas fora do contexto. Para resolver esse problema é utilizado um modelo de canal ruídos (noisy channel model of spelling). Esse modelo é um tipo de inferência de Bayes com w^=argmax P(w|x), onde w^ é a palavra que maximiza P(w|x). Assim, após simplificações, podem ser utilizado w^=argmax P(x|w) * P(w), ou argmax de P(modelo de canal) * P(priori). O modelo de canal pode ser calculado considerando o numero de vezes que uma letra foi substituída por outra usando um corpus de erros. Como a contagem de erros comuns, pode ser montada uma matriz de confusão para seleção dentro um conjunto de erros candidatos para correção ortográfica.
Victor Conceicao Denis Na última aula foi visto o conceito de n-grama. Esse conceito divide um corpus, texto base, em palavras, sendo ela junções de palavras, podendo ser palavras com uma palavra, palavra com duas palavras e assim por diante. Diante desse conceito, é possível executar algumas tarefas. Estudamos duas delas nessa aula, sendo elas a geração de texto e a outra a correção ortográfica. Para a geração de texto é utilizado o princípio de Markov, que diz que a probabilidade de uma palavra depende exclusivamente da probabilidade das palavras anteriores, podendo essa palavra ser um unigrama ou bigrama ou n-gramas. Para fazer a geração de texto, é necessária uma análise dos corpus, em diferentes tamanhos de n-gramas. Após essa análise, é calculada a probabilidade de cada palavra preceder cada palavra, ou palavras, anteriores, podendo assim gerar a probabilidade de cada próxima palavra. Além do método simples, em que são calculadas para todas as palavras pertencentes ao corpus, é possível também fazer essa geração não utilizando stopwords (removendo a probabilidade delas) ou utilizar pontuação, sendo que cada pontuação é considerada uma palavra. Quando utilizada a geração de texto, é possível observar que o quão maior for a quantidade de palavras que antecedem a próxima palavra, mais coeso fica o texto. Isso quer dizer que quando utilizado 6-gramas, a frase gerada tem mais sentido do que quando utilizada com unigrama. Um exemplo de quão coeso o texto fica foi o de um artigo que foi aceito em um congresso científico que foi escrito inteiro por um gerador de frases. Para a correção ortográfica, temos alguma dificuldades. Existem dois tipos de erros, sendo eles associados a palavras que não existem no dicionário de uma língua, que ocorre quando uma letra é omitida ou uma letra é acrescentada ou uma inversão de letras que formam uma palavra que não tem sentido na linguagem, ou quando existem essas variações porém a palavra resultante tem significado na linguagem. Para cada tipo de erro é utilizada uma técnica diferente de detecção, sendo elas a utilização de um bom dicionário e o outro a de entendimento de contexto, e para a correção sendo gerada sugestões de palavras candidatas e selecionar uma delas. Além desses modelos, a aula abrangeu o modelo de canal ruidoso que utiliza uma matriz com a probabilidade de cada erro cometido sugerindo a partir da maior probabilidade. Foi também apresentado e explicado alguns modelos de teclados, que a partir deles podemos calcular erros mais comuns ou letras mais próximas que são geradas num erro de digitação.
Elsio Antunes Junior A aula do dia 24/06, ainda sobre modelagem da linguagem com ngramas, pretende abordar aplicações práticas, a saber: geração de frases (gerador de lero-lero) e correção ortográfica; A aula começou com um resumo sobre ngramas, probabilidade de palavras em uma frase e cadeias de Markov, usado nesse contexto para predizer o item seguinte de um n-grama; Relembrando o cálculo dos modelos em função de unigramas e bigramas onde a probabilidade P de uma palavra w dado um histórico h, ou seja, P(w|h) é dado pela razão entre o número de ocorrências da frase contendo o histórico h e a palavra w, sobre o número de ocorrências do histórico estudado, ou seja P(w|h) = C(hw)/C(h); Segue-se a análise do programa ngrams1.py onde o professor enfatizou o fato de que o uso comando read() pressupõe que os bigramas recolhidos do corpus não consideram divisões de frase, oração ou períodos; Acrescentamos, pois, um trecho que calcula a probabilidade de uma frase em função de bigramas e unigramas extraídos em relação a uma lista de trechos de uma frase, começando com um bigrama e aumentando o número de palavras a cada frase; Um próximo teste agora consiste em, dada uma frase inserida pelo usuário, retornar a palavra com maior probabilidade de completar essa frase; O teste agora é feito com a prévia eliminação dos stopwords, resultando obviamente, no retorno nulo para pesquisas com tais palavras; Teste 3: analisando ngramas em frases; Os novos trechos inseridos do código nos permitem agora analisar a probabilidade de ocorrências das frases em diversas obras do mesmo autor, capturando a frase de maior recorrência entre as obras; Teste 4: geração de frases; A partir das ideias de cálculo de probabilidade de bigramas em frases, um novo programa ngrams4.py agora inclui a capacidade de gerar frases, não necessariamente com sentido mas com um encaixe estatístico que nos possibilita obter períodos inteiros de lero-lero; Os testes continuam, agora com inserção de pontuação e números; O professor nos apresenta uma ferramenta planejada especificamente para gerar artigos e discute que houveram artigos acadêmicos aceitos em algumas entidades que se valeram de tal mecanismo; O resto da aula, depois de um teste com três questões discursivas, falava sobre correção ortográfica e um método de identificar o contexto da palavra no meio da frase, usando as técnicas de probabilidades discutidas no início da aula, mas eu confesso que dormi e não consegui acompanhar mais, dado que estava muito cansado do dia atípico de trabalho. Sorry!
Tiago Suzukayama Começamos a aula definindo o que são n-gramas: uma sequência contigua de N elementos, que pode ser caracteres, palavras, sílabas, fonemas ou pares- base.São obtidas a partir de um corpus. O pressuposto de Markov é a suposição que a probabilidade de uma palavra depende apenas de suas palavras anteriores. Alguns testes práticos foram mostrados: no primeiro, o algoritmo encontrava os bigramas de seu corpus, e a probabilidade de cada um. No segundo, o algoritmo calculava qual a próxima palavra a aparecer na frase de entrada, junto com a sua probabilidade. No último, o algoritmo gerava frases aleatórias a partir de um corpus, e o cálculo de probabilidade de cada n-grama aparecer. Para algoritmos de correção ortográfica, é preciso definir algumas nomenclaturas: spell checking é a correção ortográfica e spell checkers são os artefatos. Erros ortográficos podem ser dividos em duas categorias: erros associados a elementos que não são palavras de um vocabulário, como por exemplo "unversidade", sendo fáceis de identificar, e erros associados a elementos que são palavras, como "oba" e "boa", que são mais difíceis de identificar. Para detectar erros do primeiro tipo, devemos usar um bom dicionário, e gerar boas palavras candidatas para a correção. Já para o segundo tipo, devemos usar o contexto em que a palavra está inserida, e gerar palavras de similar pronúncia ou grafia para correção. O modelo de canal ruidoso pode ser utilizado para correção ortográfica. É muito utilizado em processamento de sinais. Assume-se que existe um sinal original que, ao passar por um canal, se corrompe. Assim é necessário descodificar o sinal original. Pode ser considerado um tipo de inferência de Bayes. Ao observar uma palavra x, que contém um erro ortográfico, queremos encontrar uma palavra w, de um vocabulário V que gerou a palavra com erro. Este modelo de canal ruidoso foi proposto nos anos 90, por funcionários das empresas IBM e AT&T Bell Labs. Para selecionar a palavra candidata de um elemento que não é uma palavra, podemos considerar palavras com similar ortografia, e palavras com similar pronuncia. Podemos utilizar a distância de edição de Levenshtein para determinar como modificaremos a palavra com ruído para "corrigi-la", onde ela considera a distância minima entre 2 cadeias, em que a edição pode ser: inserção de uma caractere, eliminação de um caractere, substituição de um caractere, transposição de 2 caracteres. Para elementos que são candidatos, podemos gerar um conjunto de candidatos e selecionar o melhor.
Ruan Fernandes A aula do dia 24/06, aula 06, iniciou revisando brevemente o que são n-gramas (sequência contígua de N elementos), a probabilidade de encontrar palavras em uma frase e o Pressuposto de Markov (probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Foram mostrados 5 testes (códigos e resultados): 1. Análise de bi-gramas em frases e a probabilidade de encontrar a sequência com um bi-grama; 2. Associando a próxima palavra de uma frase – dada uma frase, mostra a maior probabilidade de ocorrer uma certa palavra após a frase inputada. Esse exemplo foi realizado de 2 modos, sendo o segundo removendo stopwords; 3. Analisou n-gramas em frases: com diferentes n-gramas, calculou a probabilidade de ser encontrada a frase em cada caso, sendo que no exemplo um trigrama não conseguiria criar algumas frases do exemplo; 4. Basicamente, era um gerador de lero-lero. Quanto maior o n-grama, mais “completa” se torna a frase/mais sentido ela faz, com menos repetições. Há total dependência da frase gerada ao corpus utilizado; 5. Geração de frases, mas com pontuações e números: igualmente, quanto maior o n-grama, mais completa e com aparente sentido se torna. Foi apresentado o SCIgen, gerador de pesquisas de Ciência da Computação. Este, chegou a ter um dos artigos gerados apresentados na WMSCI em 2005, um artigo que continha até mesmo imagens e grafos totalmente relacionados com o próprio artigo gerado; Foi introduzido então, spell checking (correção ortográfica) e spell checkers (corretores/ferramenta). Há tipos de erros: 1. Por elementos que não são palavras de um vocabulário (Lingugem -> Linguagem); 2. associados a elementos que são palavras (opa -> pao, seção -> sessão); estes, são denominados “Noisy Channel Model”; NCM: modelo utilizado em Processamento de Sinais; Assume-se que existe um sinal original que é distorcido/corrompido ao passar por um canal, sendo necessário decodificar o sinal original; É também, um tipo de inferência de Bayes (modelo probabilístico). Foi mostrado 2 modelos de canal ruidoso para correção ortográfica dos anos 1990, um da IBM e um da AT&T Bell; Correção ortográfica: para cada palavra na frase, gerar um conjunto de candidatos e então selecionar os melhores candidatos; Foi mostrado diferentes layouts de teclado, incluindo o Dvorak, de 1936, teclado já “morto” mas que possibilita escrita rápida dada a distribuição de teclas e se fosse utilizado similarmente ao QWERTY.
Gustavo Murayama Utilizando N-gramas, uma sequência contígua de N elementos (sejam eles caracteres, palavras, sílabas, fonemas, pares-bases), podemos modelar uma linguagem a partir da análise de um corpus. O pressuposto de Markov é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma ou mais palavras anteriores (cadeias de Andrei Markov). Analisando frases utilizando bi-gramas, podemos calcular a probabilidade de certas frases aparecerem no texto (utilizando o ngrams1.py mostrado em aula) e qual a palavra mais provável de aparecer depois de uma certa frase (ngrams2.py). Ao remover as stopwords, podemos obter um resultado mais relevante da próxima palavra. Com o programa ngrams4.py, é feito uma geração de palavras através da probabilidade das possíveis palavras que podem suceder uma palavra específica. É possível, também, gerar frases com as respectivas pontuações. Os tipos de erros que podem ocorrer são dois: erros associados a elementos que não são palavras de um vocabulário ou erros associados a elementos que são palavras. Erros de tipografia (gralha), como as palavras “oba” e “boa”, e erros cognitivos (palavras homófonas) são erros difíceis de identificar (noisy channel model). Os algoritmos de spell checking (correção ortográfica) tem abordagens diferentes na detecção e correção de erros de ortografia dependendo do tipo de erro. Na detecção de erros, se utiliza um dicionário para erros que não são palavras de um vocabulário, já para o segundo tipo de erro, os associados a elementos que são palavras, é necessário utilizar o contexto. Na correção, o primeiro tipo de erro gera palavras candidatas a serem palavras válidas e seleciona a melhor candidata, já o segundo tipo de erro gera palavras candidatas com pronunciação ou ortografia similar e selecionar o melhor candidato (maior probabilidade). O modelo de canal ruidoso é muito utilizado em processamento de sinais, no qual se assuma que existe um sinal original que, ao passar por um canal ruidoso, se corrompe. É necessário recuperar (decodificar) o sinal original. O modelo de canal ruidoso é um tipo de inferência de Bayes: ao observar a uma palavra x, queremos encontrar uma palavra w dentro de um vocabulário V que gerou a palavra com erro. De maneira geral, os algoritmos de correção ortográfica se baseiam em gerar um conjunto de candidatos e selecionar os melhores candidatos.
Marcio Jose de Carvalho A aula 5 avançou no conceito de modelagem de linguagem com n-gramas, mostrando duas classes de uso: geração de frases e correção ortográfica. A geração de frases a partir de n-gramas pode ser alcançada ao utilizar as frequências de ocorrência das palavras em um determinado corpus e as relações entre essas palavras para, a partir da seleção de uma palavra aleatória e um tamanho para o texto, traçar um caminho no grafo que descreve nosso modelo. Usando cadeias de Markov, determinamos a palavra mais provável a partir das n palavras anteriores, e com isso conseguimos construir textos relativamente coerentes, dependendo do n que usamos. É possível incluir pontuação no modelo, para obter textos mais naturais. Foram analisadas a modelagem estatística de unigramas, bigramas e trigramas, em seguida um exemplo a partir de um corpus de 3 palavras. Vimos exemplos de códigos de geração de frases a partir do corpus da obra completa de Machado de Assis, e seus resultados. Foi demonstrada a capacidade de geradores aleatórios de textos de construir textos coerentes com o exemplo do gerador de artigos científicos, que conseguiu aprovar um artigo em um congresso. Partimos para o tema de correção ortográfica. Definimos que existem duas classes de erros, que demandam abordagens diferentes. Erros relacionados a elementos que não são palavras de um vocabulário, que são fáceis de identificar pelo uso de dicionários ou outras bases de comparação. Já para erros relacionados à palavras que são parte de um vocabulário, é necessário determinar se é de fato um erro, e depois determinar qual a correção mais provável. Nesses casos é possível utilizar o contexto, usando um modelo que represente a linguagem em questão. É possível também fazer a correção direta, utilizando modelos estatísticos que determinam palavras candidatas e a probabilidade de cada uma delas ser a intenção do redator, através de modelos de canal ruidoso (noisy channel model). Modelos de canal ruidoso são prevalentes em processamento de sinal. Tentamos decodificar o erro e encontrar o texto original através de inferência de Bayes, usando matrizes de confusão para determinar as probabilidades necessárias para determinar a melhor opção de correção. Esse tipo de correção já existe de 1990. Vimos diferentes layouts de teclados, que podem influenciar as matrizes de confusão que podemos utilizar.
Matheus Tulio Pereira da Cruz Não fazer a leitura via função real. A melhor opção é ler linha (frases) ou parágrafos. Spell checking - Correção ortográfica Spell checkers - é o artefato (a ferramenta) É importante ter um corretor ortográfico para motores de busca, isso aumenta em 10% a acertividade da busca. Detectar erros é diferente de corrigir erros. Para detectar erros existem duas formas, os erros de tipo 1 podem ser resolvidos é só usar um bom dicionário. Erros do tipo 2 deve-se usar o contexto. Para corrigir erros do tipo 1 é necessário gerar palavras candidatas que sejam válidas e selecionar a melhor entre elas, já erros do tipo 2, é praticamente a mesma coisa, mas a validade está atrelada a similaridade de pronunciação ou ortografia Modelo de canal ruidoso é utilizado em processamento de sinais. Assume-se que existe um sinal original que, ao passar por um canal se corrompe. Então é necessário recuperar o sinal original e o modelo é quem cuida disso, esse modelo é um tipo de inferência de Bayes. w^ = agrmax P(w/x) = argmax (P(x/w)*P(w))/P(x) = argmax P(x/w)*P(w) P(x/w) = Probabilidade de x ter sido gerado por w ( Channel model ) P(w) = Probabilidade à priori Seleção de palavras candidatas: \- Palavras com similar escrita \- Palavras com similar pronúncia \- Distância de edição \- considerar a distância mínima entre 2 cadeias, em que a edição podem ser de 4 tipos: inserção, transposição, eliminação, substituição. Segundo estudos, 80% dos erros estão uma distância de 1 e quase todos os erros estão a uma distância de 2. O modelo do canal pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erro. Os corpus de erro precisam ser criados e é aí que está a dificuldade. Os corpos são criados através de matrizes de adjacência e são criadas matrizes para cada tipo de edição. ( inserção, transposição, eliminação, substituição) Para melhorar a correção, usar também o contexto depois de usar o modelo de canal ruidoso. Ou seja, usar o modelo para gerar bons candidatos e então usar o contexto para definir qual o melhor dos candidatos para ser usado.
Denildo Veloso Braga Sexta aula: modelando a linguagem com N-gramas. Possíveis aplicações: geração de frases e correção ortográfica. O cálculo de probabilidade de uma frase pode ser caro para frases grandes. Pressuposto de Markov: simplifica o modelo de probabilidade. Análise de bi-gramas em frases: um programa em python, que dado um corpus, devolve as probabilidades de encontrar frases. Usar o método read do python para ler o conteúdo de um arquivo e então criar n-gramas não é recomendado, pois pode criar n-gramas indesejados (exemplo: criar um bigrama com a palavra final de um parágrafo e a inicial de outro). Segundo programa: associando uma palavra a uma frase: dado uma frase, retorna a palavra mais provável que seguirá a frase, pode ser útil para identificar stopwords. Terceiro programa: tem a mesma função que o primeiro programa mas não limita- se à bigramas. Quarto programa: geração de frase: recebe um corpus e um n, para o modelo n-grama funcionamento: seleciona uma palavra aleatória do corpus e forma uma frase com a palavra mais provável dado à frase. Quando maior o n mais coerente é a frase final. Quinto programa: gerador de frases, como no quarto programa, mas considera sinais de pontuação. Correção ortográfica: tipos de erros: 1. palavras que não são parte do vocabulário, são fáceis de identificar. 2. palavras que são parte do vocabulário, mas aplicadas no contexto errado, é um erro difícil de identificar. Tarefas de ortografia: detecção e correção de erros. Detecção: usando um dicionário. Correção: gera palavras candidatas e seleciona a que tiver maior probabilidade. Modelo de canal ruidoso para correção ortográfica: palavra original passa por um canal ruidoso e altera-se, conhecendo o canal é possível decodificar a palavra com ruído. Inferência de Bayes: seleciona a palavra que maximiza a probabilidade de ser a palavra original. Seleção das palavras candidatas: distância de edição: considera a distância mínima entre duas palavras, considerando algum tipo de transformação. Matriz de erros: mapeia a quantidade de vezes que uma letra a foi escrita erroneamente como b, não é uma matriz espelhada. Layout dos teclados: relaciona-se com a probabilidade de erros de digitação.
Mayza Cristina da Silva Resumo aula 06 – Modelando a linguagem com N-gramas Cadeias de Andrei Markov O pressuposto de Markov é uma suposição de probabilidade em que uma palavra dependeria apenas da sua própria probabilidade em relação a palavra anterior e ou anteriores. Trendo aqui também um caso de probabilidade de para cada tipo de n-grama: unigrama, bigrama e trigrama P(Wi). Posteriormente à essa explicação te?ocia o professor nos mostra uma análise de palavras baseada nos textos de Machado de Assis, baseado em bigramas em frases. Este foi o teste 1. No segundo teste temos a associação em relação à próxima palavras de uma frase. Aqui o programa sugere qual deve ser a próxima palavra que viria na frase digitada. Para o teste três foi analisado n-gramas em frases. Analisando três textos tivemos o mesmo tipo de predição de próximas palavras. Já no quarto teste realizamos uma geração de frases. A frase que foi gerada não tem uma grande coerência, porém parece ter um pouco de sentido. Aqui pudemos notar a diferença claramente existente para as escolhas de agrupamentos em unigrama, bigrama até a melhor para o caso avaliado que seria o de 6-grama. Existe uma total dependência ao corpus utilizado! No teste cinco foi realizada uma geração de frases considerando pontuação e números, e aqui novamente temos uma melhor clareza quando utilizamos um numero maior de agrupamentos, que no caso foi o de 7-gramas. O professor comentou novamente sobre artigos que foram gerados utilizando algoritmos de análise de pln em outros artigos prévios e que neste caso o artigo extraído pela maquina conseguiu inclusive passar por um processo de aprovação em uma revista de publicação de papers. Posteriormente à isso vimos casos de correção ortográfica. E aí para a detecção é possível identificá-los através do uso de um bom dicionário e também utilizando o contexto. Para isto foi citado o modelo de canal ruidoso e análise de uma matriz de confusão. Foi falado sobre layouts de teclados e como a posição das teclas influenciariam nos erros, e outros padrões além do atual.
Ramon Neres Teixeira Jardim A aula tratou de duas aplicações de modelagem de linguagens com N-gramas: geração de frases e correção ortográfica. No início, foram apresentados 5 programas, e o primeiro deles que calcula a probabilidade de se encontrar uma dada frase em um texto utilizando bigramas. O programa coleta as palavras utilizando uma expressão regular e conta o número de aparições de cada bigrama, utilizando a tupla com as palavras como chave de um dicionário e incrementando o valor relacionado àquela chave a cada aparição da tupla e calcula a probabilidade utilizando o modelo de Markov, visto na última aula. O segundo programa encontra a palavra com maior probabilidade de aparecer após uma dada frase baseado em um dado texto e o terceiro tem a mesma função do primeiro, porém utilizando um N-grama, de forma que o N pode ser escolhido. O quarto programa é um gerador de frases. O programa recebe o texto e o N que é o tamanho dos agrupamentos. O programa toma uma palavra aleatória e escolhe a próxima como a mais provável de aparecer após as palavras anteriores. O quinto programa, assim como o quarto, gera frases baseadas em um corpus, porém é capaz de colocar sinais de pontuação no texto, apenas com uma mudança na expressão regular. Na segunda parte da aula foram introduzidos os spell checkers (corretores ortográficos). Para detectar erros ortográficos, pode-se utilizar um dicionário e o contexto do erro e para corrigi-los, pode-se gerar palavras candidatas, por exemplo, palavras parecidas com aquela que está errada e escolher aquela com maior probabilidade de aparecer naquele contexto. Foi apresentado também o modelo de canal ruidoso. Assume-se que um sinal normal, ao passar por um canal ruidoso pode ser "danificado" e nestes casos seria necessário recuperar o sinal. Para efetuar correções ortográficas, acontece algo parecido, tem-se uma palavra incorreta (danificada), e é necessário recuperá-la e uma das formas de fazê-lo seria escolher a palavra com maior probabilidade de substituir a palavra com erro.
Murilo Bolzan Dionisio Modelagem de informações com n-gramas: Exemplo 1: O código lerá um arquivo inteiro, gerar uma lista com todas as palavras "findall(regex, contente)". Uma boa prática seria fazer a leitura de parágrafo em parágrafo. Exemplo 2: O código gerará um dicionário de todas as palavras (unigramas). Ngramas2.py -> Lê uma frase e mostra qual será a mais provável palavra seguinte. Utiliza bigramas apenas na intenção de tentar realizar as predições. Exemplo 3: Um código generalizado que não só utiliza bigramas para analisar o texto como um todo, mas também que pode vir a receber "n" como parâmetro. Exemplo 4: O programa recebe o arquivo e o quantidade de palavras contíguas também, então indica a sequência de maior probabilidade de palavras que a seguirá. Após isso, o código forma uma frase baseada nesse gerador, com um número predefinido de palavras. Exemplo 5: O código adiciona, em alguma expressão, acentuações e símbolos como vírgulas, pontuações e afins. Noisy Channel model: Este é um modelo de framework bem utilizado em corretores de ortografia para a detecção de erros que faz uso de n-gramas gerados a partir de uma amostra prévia. Uma recorrente aplicação é para o processamento de sinais, entendendo que um sinal limpo foi corrompido após passar por algum canal. Tendo então o resultado final, que é uma versão ruidosa do original. A lógica desse algoritmo é restituir o sinal, identificando o ruído inserido. Utiliza-se o armax P(w|x), ou seja, a palavra de maior probabilidade dado um x qualquer. Para otimização ignora-se o denominador da conta de forma que P(w|x) = P(x|w)P(w)/P(x) = P(x|w)P(w). Distância de edição: Calcula a menor quantidade de edição necessária para igualar duas palavras. Pode-se ser indicado todas as palavras passíveis de substituição ou a com maior probabilidade. Matriz de confusão: É uma técnica de tentar averiguar o contexto do ruído utilizando n-gramas e selecionando as correções mais adequadas à cada caso.
Rafael Pauwels de Macedo A aula começou com três testes envolvendo a análise de bi-gramas/n-gramas em frases. Com eles entendemos sobre a análise de frases reais usando como exemplo as obras de Machado de Assis. É essencial entender a importância de remover stopwords e evitar a leitura errada de linhas, criando bigramas que não são reais. No quarto teste vimos um pouco sobre a geração de textos a partir de n-gramas, usando poucas linhas de código em Python conseguimos criar um chamado "Gerador de lero lero". Deste exemplo vimos alguns exemplos de frases geradas por uni- gramas, bi-gramas, tri-gramas e 6-grama tanto das obras de Machado de Assis quanto de nossos resumos, fica claro assim a importância do Corpus utilizado. Para aumentar o grau de sofisticação das frases geradas vimos também sobre a inclusão de sinais de pontuação e números entre as frases. Entre as aplicações existentes que utilizam tecnologias do tipo vimos o SCIgen, um gerador de artigos dentro do ramo da computação. Outra aplicação com uso mais concreto atualmente são os corretores ortográficos, que utilizam técnicas para identificar possíveis erros, sejam eles simples, como a falta de um caractere ou mais complexos como erros tipográficos (gralha) ou palavras homófonas, sendo necessário processamentos do tipo Noisy Channel Model. Os erros ortográficos são detectados de duas formas em sua maioria, a primeira forma seria usando um bom dicionário e a segunda o uso do contexto, após identificado passamos para a fase da correção do erro, que se baseia na geração de palavras candidatas (válidas, com pronunciação ou ortografia similar) e selecionar a melhor baseada no contexto. Como dito os erros tipo dois se baseiam no modelo de canal ruidoso, que se trata de uma inferência de Bayes, ao observar a palavra errada x queremos encontrar a palavra w que gerou a palavra com erro, as primeiras propostas desse tipo de algoritmo nasceram em 1990 com IBM e a AT&TBell Labs
Paulo Alexander Simoes Paulo Alexander Simões - RA: 11084915 Aula 6 - Modelando a linguagem com N-gramas Nesta aula foram abordadas duas aplicações para a modelagem de linguagem com N-gramas. Aplicação 1: Geração de frases e Aplicação 2: Correção ortográfica. Um N-grama é uma sequência contigua de N elementos, as quais são obtidas a partir de um corpus. A qual está ligada a probabilidade de uma sequência específica de palavras aparecerem. Essa probabilidade é calculada utilizando o teorema de Bayes. onde segue que a probabilidade de xi até n eventos ocorrerem P(x1,x2,x3,...,xn) é dada por P(x1)P(x2|x1)P(x3|x1,x2)...P(xn|x1...,xn-1). Outros modelos de calcular também foram visto como o Pressuposto de Markov, o qual infere sobre a suposição de que a probabilidade de uma palavra depende apenas da(s) palavra(s) anterior(es) como vemos a seguir P(w1,w2,...,wn) = P(wi|w1,...,wi-1). Modelos por unigrama, bigrama e trigrama. P(w1,w2,...,wn) = ||P(wi) P(w1,w2,...,wn) = ||P(wi|wi-1) P(wi|wi-1) = C(wi-1,wi)/ C(wi-1) P(w1,w2,...,wn) = || P(wi|wi-2,wi-1) P(wn|wn-1,wn-2) = C(wn-2wn-1wn)/ C(wn-2Wn-1) Outro tópico abordado no dia, foi correção ortográfica, correções ortográficas estão presentes em muitos sites de busca, de modo simplificado as correções trazem palavras similares e com pouca distância de erros uma das outras. Uma referência nessa área de pesquisa são o Daniel Jurafsky & James H. Martin. A ocrreção ortográfica em si é chamada de Spell checking e a ferramenta é chamada de Spell checkers. Os erros podem ser classificados em algumas classes como: \- Elementos que não são palavras de um vocabulário. \- Erros associados a elementos que são palavras. Modelos de canal ruidoso também podem ser usados para correção ortográfica.
Matheus Dos Santos Pereira Resumo da aula 06 de pln, com 2 aplicações, um n-grama é uma sequência contínua de n elementos, normalmente obtidas a partir de um corpus, para o cálculo de probabilidade de uma palavra utilizamos o pressuposto de markov que é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Analisando bi-gramas em frases, foi mostrado alguns exemplos usando a obra do machado de assis de como as probabilidade de uma frase funciona, assim como os códigos em python funcionassem, após isso vimos a associação deste de uma frase com a próxima palavra, do mesmo modo que o tópico anterior, após isso fomos para frases usando n-gramas, geração de frases, com e sem pontuação e números, seguindo sempre exemplos práticos usando o corpus do machado de assis e o código gerador em python. Correção Ortográfica, podemos ter dois tipos de erros, o primeiro é erro associado a elementos que não são palavras de um vocabulário. Exemplo: "Unversidade” -> “Universidade”, estes erros normalmente são fáceis de identificar.O segundo tipo de erro é associado a elementos que são palavras, como por exemplos: erros de tipografia (gralha): “oba” -> “boa” e os erros cognitivos (palavras homófonas), como por exemplos: “Conselho” -> “Concelho” e “One” -> “Won”. Estes erros são difíceis de identificar e são chamados de Noisy channel model. Para a detecção de erros de ortografia do tipo 1 podemos usar um bom dicionário e do tipo 2 podemos usar o contexto. Para a correção de erros de ortografia do tipo 1 podemos gerar palavras candidatas (que sejam palavras válidas) e selecionar a “melhor” candidata, para o tipo 2, podemos gerar palavras candidatas (com pronunciação ou ortografia similar) e selecionar o “melhor” candidata. Foi apresentado o modelo de canal de ruído (um tipo de inferência de Bayes) e apresentado diferentes tipos de teclados
Rafael Ribeiro Gomes da Silva Na segunda metade dessa sexta aula, aprendemos como é implementado o sistema de correção ortográficas nos corpus. Há uma diferenciação nas nomenclaturas entre spell checking e spell checkers. O checking refere-se ao ato de corrigir a ortografia, já o Checker é a ferramenta que é utilizada. Dividindo em dois macro grupos são identificáveis: erros referentes aos elementos que não correspondem a um dicionário, sendo facilmente encontrados e erros associados a palavras que são muito difíceis de serem identificados, pois podem ocorrer ruídos entre as comunicações . Ainda sobre os erros associados as palavras, temos os problemas de tipografia; onde há a inversão de letras e formação de palavras com significados que podem ser completamente diferentes e os cognitivos; onde pelas pronuncias serem semelhantes é passível o erro de interpretação. Para a detecção de erros tipográficos, um dicionário mais completo pode indicar a falha. Já para os cognitivos, é necessária a análise de contexto em que foi aplicada a palavra. Para a correção, ambos os casos utilizando a geração de palavras candidatas, cada uma com seus próprios métodos: similaridade ortográfica ou fonética. O modelo de canal ruidoso é baseado em Bayes e utiliza conceitos de probabilidade para estimar o resultado e através dele é possível a seleção de palavras candidatas. Foi feito um estudo que prova que a maior parte dos erros de edição ocorre entre um ou dois caracteres e para a distância de edição existem quatro formas: inserção, eliminação, substituição ou transposição de caracteres. Como o inglês é o idioma mais amplamente utilizado, há um maior número de exemplos de matriz de confusão. Tal matriz é útil para detecção dos casos mais comuns de digitação. É interessante notar como boa parte das patentes referentes ao uso de spell checkers está concentrada em grandes conglomerados de produtos tecnologicos.
Gustavo Zanfelice Dib Modelagem de dados com N-gramas Exemplo de código 1: Ler um documento inteiro, listar todas as palavras "findall(regex, contente)". Uma boa prática é realizar a leitura em parágrafo a parágrafo. Exemplo de código 2: Unigramas: criar um dicionário e inserir todas as palavras. Ngramas2.py -> Recebe uma frase e diz qual a mais provável palavra seguinte. Utiliza apenas bigramas para tentar realizar as predições. Exemplo de código 3: Código generalizado que não só utiliza bigramas para analisar o texto para bigramas, recebe "n" como parâmetro. Exemplo de código 4: Recebe o arquivo e o número de palavras contíguas e indica a sequência mais provável de palavras que a segue. Após isso, o programa forma uma frase baseada nisso (com um número x de palavras) Exemplo de código 5: Adiciona na expressão acentuação e símbolos como vírgulas e afins Noisy Channel model: Este modelo é um framework utilizado em corretores ortográficos para a detecção de erros utilizando n-gramas gerados a partir de uma amostra. Uma aplicação é para o processamento de sinais, assumindo que um sinal original foi corrompido após passar por um canal. Assim, o resultado final é uma versão ruidosa do correto. A ideia do algoritmo é restaurar o sinal identificando o ruído inserido. Utiliza o armax P(w|x), ou seja, a palavra de maior probabilidade dado x. Para otimização ignora-se o denominador da conta de forma P(w|x) = P(x|w)P(w)/P(x) = P(x|w)P(w). Distância de edição: calcula a menor edição necessária para igualar duas palavras. Pode- se indicar todas as palavras possíveis de substituição ou a mais provável. Matriz de confusão: é uma maneira de tentar analisar o contexto do ruído através de n-gramas e selecionar a correção mais adequada.
Victor Arruda Ganciar _Correção ortográfica_ Na última aula vimos alguns algoritmos, ou spell checkers, utilizados para correção ortográfica, também chamada de spell checking. Os erros ortográficos podem ser classificados em dois tipos: Erros associados a elementos que não são palavras de um vocabulário e Erros associados a elementos que são palavras. Este último é ainda subdividido em erros de tipografia, ou gralha, e erros cognitivos, ou palavras homófonas. Um algoritmo de correção de erros ortográficos possui duas tarefas básicas: detecção e correção. Para detecção pode ser utilizado um bom dicionário ou um contexto, e para correção é possível gerar palavras candidatas (palavras válidas, com pronunciação ou ortografia silimar) e selecionar a melhor. _Noisy channel model_ O modelo de canal ruidoso para correção ortográfica é muito utilizado para processamento de sinais. neste modelo assume-se que existe um sinal original que após passar por um canal ruidoso se corrompe, sendo assim, é necessário recuperar o sinal original. Como exemplo de uma sequência de caracteres que não faz parte do vocabulário temos a palavra acress. Para seleção de palavras candidatas podemos considerar palavras com similar ortografia (actress, across, access...), e palavras com similar pronunciação. A distância de edição de Demeraou-Levenshtein, considera a distância mínima entre duas cadeias, em que a edição pode ser: inserção de um caractere, eliminação de um caractere, substituição de um caractere ou transposição de dois caracteres. Um percentual de 80% dos erros está a uma distância de 1 e quase todos os erros estão a uma distância de 2. Spell checkers não são utilizados somente para correção de erros de digitação, mas também para identificação de abreviações e vocabulário informal. Existem outros braços de spell checkers que podem considerar interação com usuários, utilização de dispositivos com teclado reduzido ou até informações de redes sociais.
Matheus Fama Machado de Sousa Resumo aula 06 – Na aula passada vimos que um N-grama é uma sequência contígua de N elementos (e.g., caracteres, palavras, sílabas, fonemas, pares-base) e são comumente obtidas (analisadas) a partir de um corpus. Em seguida vimos o Pressuposto de Markov que é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Na aula de hoje, analisaremos um pouco sobre corretores ortográficos e sobre seus algoritmos. Começando com as definições de nomenclatura "Spell checking" significa correção ortográfica e "Spell checkers" significa os artefatos (ferramentas) que corrigem. Para detectar erros ortográficos, você pode partir utilizando-se de um bom dicionário ou utilizando o contexto de aplicação e, para corrigi-los, no primeiro caso, basta gerar palavras candidatas (que sejam válidas) e selecionar a que melhor atende o problema e, no segundo caso, gerar palavras candidatas (com pronunciação ou ortografia similar) e selecionar a melhor candidata. Erros associados a elementos que não são palavras de um vocabulário como, por exemplo “Unversidade” - “Universidade” são fáceis de identificar. Por outro lado, erros de elementos associados que são palavras como, por exemplo, “oba” ? “boa”, ou palavras homófonas, são erros difíceis de identificar pois dependem do contexto. Em 1990 surge um modelo de correção ortográfica de canal ruidoso. Esse modelo pode ser calculado considerando o número de vezes que uma letra foi substituída por outra usando um corpus de erros. Por exemplo o número de vezes que a letra ‘e’ for substituída pela letra ‘o’ em P(acress | across) Podemos construir uma matriz de confusão para contar esses erros. Uma ferramenta que pode mitigar os erros são os layouts de teclados. Vários layouts surgiram nesse meio tempo como, por exemplo, Azerty, Qwertz e Dvorak.
Henrique Augusto Santos Batista n-gramas são uma sequencia contiguá de N elementos e são comumente obtidas a partir de uma analise de um corpus levando em conta analises probabilísticas. o pressuposto de markov é a suposição de que a probabilidade de uma palavra depende apenas de uma ou mais palavras anteriores um modelo de n-grama permite prever usando cadeias de markov qual a próxima palavra que seria usada em uma frase baseado em um texto prévio, o corpus, e permitindo a criação de um texto com um estilo que deveria ser próximo ao do corpus. correção ortográfica é algo muito comum e usado hoje em dia e algo que pode ter um nível de dificuldade bem elevado para implementar. corretores ortográficos resolvem basicamente dois tipos de erros os erros do tipo 1 associados a elementos que não são palavra de um vocabulário que são fáceis de identificar e os erros do tipo 2 que são associados a elementos que são palavras onde podem acontecer erros de tipografia exemplo oba -> boa e erros cognitivos conselho->concelho e esses são erros difíceis de identificar para detecção de erros de ortografia os erros do tipo 1 podem ser detectados com uma bom dicionario e uma comparação, os erros do tipo 2 precisam que seja usado o contexto para a sua detecção. para correção de erros de ortografia os erros de tipo 1 necessitam que seja gerado as palavras candidatas que sejam parecidas e depois usando algorítimos derivados de n-gramas selecionar a melhor candidata de acordo com as probabilidades, os erros do tipo 2 precisam que sejam selecionadas candidatas com ortografia ou pronuncia parecida e usando algorítimos baseados em geração de texto usando n-gramas para selecionar a melhor candidata.
Rodrigo Hiroaki Ideyama Nome: Rodrigo Hiroaki Ideyama RA: 11042714 Resumo PLN 6 O tema da aula seis foi o seguinte: Modelando a linguagem com N-gramas - Aplicação 1: Geração de frases - Aplicação 2: Correção ortográfica. Antes de o professor começar a explicar cada um dos cinco testes (ngrams1.py, ngrams2.py, ngrams3.py, ngrams4.py, ngrams5.py), ele iniciou a aula com a breve revisão da aula anterior que foi explicar sobre N-gramas que é uma sequência contígua de N elementos (e.g., caracteres, palavras, sílabas, fonemas, pares-base) amplamente utilizados em processamento de linguagem natural para transformar textos em caracteres que podem ser processados por um algoritmo de Machine Learning de classificação e que são comumente obtidas (analisadas) a partir de um corpus. Os mais utilizados são o bigrama, trigrama e tetragrama. Quanto maior o valor de n, isto é, maior o número de classes que dividem os dados, maior a confiabilidade da inferência. No entanto, o número de parâmetros a serem estimados cresce exponencialmente em relação à n. Por isso, geralmente são utilizados bigramas ou trigramas em sistemas dessa natureza. Como tópico seguinte, modelo probabilístico, falou que pode ser usado em correção ortográfica, tradução automática de textos e reconhecimento de fala. Sendo que este modelo atribui probabilidades a uma sequência de palavras. Um modelo de linguagem por N-grama permite predizer o seguinte item de uma sequência usando um modelo de Markov de ordem (n-1), são simples e escaláveis. Como este modelo utiliza também conceito relacionado com probabilidade condicional, foi revisado sobre isso, por meio da formalização e usando o seguinte exemplo: P(a ufabc é uma) = P(a) X P(ufabc|a) X P(é|a ufabc) X P(uma|a ufabc é) Ao fazer isso, explicou que a probabilidade de palavras em uma frase têm muitas possibilidades de arranjos de palavras e que não é recomendável pois no corpus não teremos dados suficientes para a contagem das vezes em que a sequência aparece. Em seguida, explicou sobre o pressuposto de Markov que é a suposição que a probabilidade de uma palavra depende apenas da probabilidade de uma(s) palavra(s) anterior(es). Por meio desse conceito, é possível fazer uma estimativa por máxima verossimilhança (ou seja, baseados em um corpus podemos determinar as probabilidades), logo mostrou de uma maneira formal os modelos por unigrama, bigrama e trigrama. Para a um melhor entendimento, ele mostrou com exemplos usando bigramas: com um corpus de 3 frases (<s> I am Sam </s>, <s>Sam I am</s>, <s> I do not like green eggs and ham</s>), que ao calcular suas probabilidades, temos os seguintes resultados: * P(I|<s>) = 23= .67 * P(Sam|<s>) = 13= .33 * P(am|I) = 23= .67 * P(do|I) = 13= .33 * P(</s>|Sam) = 12= 0.5 * P(Sam|am) = 12= 0.5 Terminado toda essa revisão, iniciou a aula seis com base no teste um que é analisando bi-gramas em frases. Nela primeiramente, faz-se a leitura de um documento e procura-se formar dicionários com unigramas e bigramas por meio de palavras que foram tratadas com o regex. Por fim, por meio do laço for, o código analisa a cada das cinco frases exemplificadas, quais as probabilidades. Já no teste dois, o programa tenta associar a próxima palavra de uma frase dada. Como no primeiro, faz-se a formação dos dicionários com os unigramas e bigramas, além disso, forma-se o dicionário com as probabilidades dos bigramas. Depois ele verifica qual a palavra que tem probabilidade maior com base no dicionário Bigram Probabilities para tentar deduzir qual seria a palavra seguinte daquela frase. Já no terceiro teste, o código faz análise de n-gramas em frases. Isso é feito por meio de três métodos que foram definidos na classe N-Gram, uma delas que é o update que contabiliza os n-gramas de diferentes tamanhos a partir do conjunto de palavras, o outro que é o probability que calcula a probabilidade para a frase definida em words e o _probability que calcula a aproximação para o n-grama usando seu prefixo. Com esse programa pode-se notar nos testes realizados que quanto maior a frase, menor fica a probabilidade. No quarto teste, procurou-se analisar como fica melhor a geração de frases com base no uso de diferentes n-gramas (unigrama, bigrama, trigrama, 6-grama). Nas frases de exemplo que foram obtidas, percebe-se que quanto maior o n, ficou mais coerente a frase gerada. Pode-se tirar a mesma conclusão no quinto teste, porém agora foi considerado sinais de pontuação e números e utilizados os n-gramas 5-grama, 6-grama e 7-grama. Depois dos testes, ele havia mostrado um gerador de paper, o SCIgen - An Automatic CS Paper Generator, que foi utilizada e o paper gerado foi submetido no Congresso que acabou passando para ser apresentado. Depois, o prof. começou a explicar sobre correção ortográfica, dizendo que na bibliografia Speech and language processing: An introduction to natural language processing, computational linguistics, and speech recognition.Pearson/Prentice Hall de Daniel Jurafsky & james H. Martin estamos no capítulo cinco: spelling correction and the noisy channel. De início, ele mostrou exemplos de ferramentas que possuem esse serviço de correção ortográfico como no próprio Google e em um website chamado flip. Depois definiu os termos spell checking e spell checkers. Sendo o primeiro, é a correção ortográfica e o segundo, é o artefato (a ferramenta). Em seguida, explicou as duas classes de erros: 1. Erros associados a elementos que não são palavras de um vocabulário. “Unversidade” ? “Universidade” 2. Erros associados a elementos que são palavras: * Erros de tipografia (gralha). “oba” ? “boa” * Erros cognitivos (palavras homófonas). “One” ? “Won” Aí para cada classe de erro, foi explicado como detectar e corrigir: 1. Para o tipo 1, deve-se detectar usando um “bom” dicionário e ao corrigir, deve-se gerar palavras candidatas (que sejam palavras válidas) e selecionar a “melhor” candidata. 2. Para o tipo 2, deve-se detectar usando o contexto e ao corrigir, deve-se gerar palavras candidatas (com pronunciação ou ortografia similar) e selecionar a “melhor” candidata. No próximo tópico, falou sobre o modelo de canal ruidoso para correção ortográfica que é um tipo de inferência de Bayes que ao observar uma palavra x (isto é, uma palavra com erro ortográfico) queremos encontrar uma palavra w (de um vocabulário V) que gerou a palavra com erro. Disse que as maiores referências para esse assunto é tanto um artigo da IBM e outro da AT&T Bell Labs. Depois o Jesús falou de exemplo de uma sequência de caracteres que não é uma palavra de um vocabulário, onde pode fazer o uso de uma matriz de confusão para contar os erros que foram cometidos na escrita de uma palavra. Aí com essa identificação, para a correção ortográfica, deve-se gerar um conjunto de candidatos e selecionar os melhores candidatos para cada palavra na frase. Em seguida, para trazer curiosidade, falou sobre os tipos de teclado: Azerty, Qwertz e Dvorak. E, por fim, fez-se as considerações finais: 1. Spell Checkers e seus braços 2. Spell Checkers e estudos/aplicações
Felipe Dias Correia A aula foi inciada com um breve resumo sobre N-gramas, com as formulas de probabilidades em uma frase e sobre as cadeias de Andrei Markov, e em seguida, foi feito algumas analises usando algoritmos em Python, o primeiro teste foi sobre bi-gramas em frases, o segundo associar a próxima palavra de uma frase, e em terceiro, n-gramas em frases, e o quarto, geração de frases e por último, foi novamente geração de frases, mas com sinais de pontuação e números. Também abordou sobre a correções ortográficas, citando alguns exemplos do Google, onde sugere a palavra correta. Há tipos de erros, e com elas, técnicas para sugerir a palavra correta, dentre elas erros associados a elementos que estão faltando na palavra, e erros onde a ordem as letras está invertida ou trocada, e para a detecção, é necessário um "bom" dicionário e analisar o contexto, e a correção é gerar palavras candidatas que sejam palavras validas e com pronunciação similar. Também foi explicado sobre Modelo de canal ruidoso( Noisy Channel Model), onde assumesse um sinal original que passa por um canal(ruidoso) e corrompe, e precisa decodificar o sinal original, que é um tipo de inferência de Bayes, que quando observa uma palavra x com erro ortográfico, devemos achar uma palavra w, onde foi gerado a palavra com erro. Após isso, foi passado alguns exemplos, usando a palavra acress, onde pode ser "actress, across, access", e a técnica de distância de edição, podendo ser inserção, eliminação, substituição, transposição de caracteres de distancia minima entre 2 cadeias. Ao final da aula, foi mostrado alguns layouts de teclado e o processo de como foram construídos.
Iasmin de Haro Pracchias Na aula do dia 24/06 foram apresentados exemplos de programas escritos em Python que fazem a análise de unigramas e bigramas em frases. Com relação a estes programas o professor comentou que a melhor forma de escrever um programa que precisa ler um documento para identificar n-gramas, seria utilizar a leitura "linha-a-linha" ou "parágrafo-a-parágrafo" uma vez que quando utilizamos a função .read(), ela devolve uma string contendo todo o texto incluindo pontuações, o que poderia ocasionar a identificação de um n-grama fictício, por exemplo, um bigrama formado por uma palavra e um ponto final, e esse tipo de situação não é interessante para análise de n-gramas. Também foram apresentados programas escritos em Python que identificam a possível próxima palavra em uma frase e mostram a probabilidade da a combinação ocorrer. Em seguida foi apresentando um programa, também escrito em Python, que gera frases utilizando n-gramas de tamanhos diversos, de onde pudemos concluir que quanto maior o tamanho do n-grama utilizado mais coerência terá a frase gerada. Foram apresentados os tipos de erro relacionados à correção ortográfica e logo após fizemos uma atividade em classe para entender como essa correção ortográfica é feita. O professor ainda mencionou e indicou o cientista da computação, Peter Norvig, autor de AI: A Modern Approach, livro que está liderando a lista de livros nas universidades em se tratando de inteligência artificial. Por fim foi apresentado o conceito de Modelo de Canal Ruidoso que é um modelo que ao receber uma palavra que está com suas letras embaralhadas identifica qual seria a palavra correta.
Rafael Correia de Lima Nesta aula de PLN serão abordadas algumas aplicações de N-gramas. Foi apresentado um exemplo de código em Python para a busca e contagem de unigramas e bigramas, e a probabilidade de se encontrar frases dentro do texto. Uma outra possibilidade apresentada é a modelagem das palavras mais prováveis de ocorrerem após uma frase específica, podendo prever as palavras seguintes dentro do corpus estudado. Foi mostrada também a análise de N-gramas em frases, que busca a probabilidade de formação das frases com um número maior de elementos do que bigramas ou unigramas. A modelagem de n gramas foi usada também na aplicação de criação de frases a partir do encadeamento das palavras mais prováveis dada a ocorrência das palavras anteriores. É possível aumentar a coerência das frases geradas com o aumento do N, ampliando o contexto de busca das palavras. A geração de frases pode ser melhorada com um ajuste na expressão regular utilizada, para que sejam incluídos nas palavras os sinais de pontuação, que dão mais coerência ao texto gerado. Foi apresentado o exemplo do CSigen, capaz de gerar artigos científicos de ciência da computação com até mesmo imagens e gráficos. Outra aplicação para a modelagem de N-gramas é a de correção ortográfica. Ela é utilizada por exemplo na melhoria de performance de sistemas de busca. Há dois tipos de erros ortográficos identificáveis. O primeiro deles são de palavras que não pertençam a um dicionário pré definido, nesse caso são de fácil detecção. Já outro tipo de erro, derivado da associação incorreta de palavras, são de mais difícil identificação e tratamento.
Lucas Vitalino Severo Pais Nesta ultima aula tivemos a continuação das aplicações de n-gramas, agora mais especificamente para geração de frases e correção ortográfica. Para geração de frases podemos aplicar os n-gramas a um banco de dados de textos, calcular as probabilidades condicionais da sequência de cada palavra e com base nessas probabilidades condicionais podemos aplicar a lei de bayes, calcular o produtório e chutar a palavra mais provável de aparecer em uma frase. No caso de um 2-grama, podemos ainda aplicar o pressuposto de Markov e adivinhas as próximas palavras com base apenas na última palavra ao invés de iterar sobre lei de bayes para a a frase inteira, dado que o resultado do produtório original é numericamente próximo do produtório aproximado de Markov, facilitando os cálculos e agilizando o algoritmo. É importante notar que o texto produzido por um algoritmo desse tipo irá tentar mimetizar textos do banco de dados de texto original usado no treinamento do algoritmo (usado para calcular as probabilidades das tuplas). Para correção ortográfica de palavras existem alguns modelos, o visto em aula é o modelo do canal ruidoso. O modelo do canal ruidoso também utiliza probabilidades condicionais e lei de bayes para inferir os resultados. Dado uma palavra 'x' com ortografia errada, queremos achar 'w' (a palavra equivalente com ortografia correta), e para isso, aplicamos a lei de bayes e aplicamos o produto da probabilidade de acontecer x dado w e a probabilidade de acontecer w, dentre todos os valores calculados, pegamos o maior e sua palavra associada que provavelmente é a correta.
Luana Ferreira do Nascimento Quanto maior o número n de uma análise de ngram, mais coerentes os textos retirados serão, mas o grau de ocorrência deles serão menores também proporcionalmente. Também é interessante a retirada de stop words para fazer este tipo de análise, apesar de que cada caso deve ser avaliada a necessidade de tal pré processamento. Para uma análise de n grams, podemos criar um programa com características semelhantes a um programa recursivo, identificando primeiro as tuplas com maior probabilidade, depois dadas as 2 palavras encontradas ele tenta achar a próxima mais provável, então a próxima e daí por diante. Com a análise feita, é possível criar um gerador de textos que comece de determinada palavras, de forma aleatória ou determinada, e dali em diante vai completando os n grams de forma que siga a estrutura do texto original. Para a detecção de erros, temos 2 tipos de problemas. O primeiro e mais fácil, é quando a escrita possui alguma palavra que sequer existe. Um caso mais difícil é quando erramos a escrita de uma palavra e acabamos escrevendo uma outra palavra que também existe. Podemos fazer análise de erros supondo que estamos tratando de um canal ruidoso, onde existe uma fonte de informação original é uma mensagem que sofre ruído e se corrompe ao chegar no receptor, é só obtemos o documento corrompido. Sendo assim, precisamos descobrir por qual cabala informação passou para descobrir qual era a mensagem original. Este processo auxilia no aumento da confiabilidade da substituição que será realizada.


Número de resumos processados: 70.

Observação:


Arquivo gerado por um programa.