Resumos de aula: PLN - 2019


Nota: Arquivo gerado por um programa.

Nome Resumo
Mauro Mascarenhas de Araujo Aula de 29/07: "NLTK através de exemplos: Sumarização". A aula iniciou-se com o aviso de que o PDF do livro utilizado na bibliografia encontra-se disponível no tidia. Depois, discutiu-se o conceito de sumarização: Dado um conjunto de frases como entrada, selecionar a "mais importante", criando um sistema de classificação (rank); e então foram exibidos três textos de apresentação da UFABC, em inglês, como exemplo. Logo após, iniciou-se a explicação de algumas funções disponíveis no NLTK, começando com a sent_tokenize, que recebe uma string como argumento e realiza a tokenização do texto de entrada por sentenças, separando-as utilizando regras de pontuação (foi exibido casos em que o algoritmo não é tão efetivo, pois, acaba separando abreviações, inclusive, como foi o caso da separação da sentença: "11,145 and dated 26 July 2005."). A segunda função foi a word_tokenize, que recebe uma sentença como parâmetro (pode ser a saída da função anterior, inclusive) e a separa em palavras (similarmente ao que era feito com expressões regulares em aulas anteriores). Já a pos_tag (part of speech tagging) é uma função que recebe os tokens (palavras) e os rotula de acordo com suas características de linguagem (ie., substantivo, verbo, adjetivo, pronome, etc.) usando o Treebank (que foi desenvolvido por especialistas da língua inglesa), sendo que esta é uma das etapas principais de quase todas as análises em PLN. As 36 classificações possíveis realizadas pelo algoritmo também foram exibidas (Treebank). O Treebank foi, inicialmente, desenvolvido a cerca de 1990, sendo uma estrutura hierárquica que anota uma estrutura sintática ou semântica de um corpus. Porém, embora seja uma ferramenta muito útil, ela é extremamente dependente do idioma, sendo assim, a tarefa de criação de rótulos não é fácil (como no caso do idioma árabe). A seguir foi exibido um exemplo de classificação para cada uma palavra contida na sentença de apresentação da UFABC: é interessante notar que, caso o algoritmo não consiga classificar determinado token, a classificação dele passa a ser "ele mesmo". Com isso, já é possível passar para o reconhecedor de entidades nomeadas (processo de identificação NER (Named Entity Recognition)), que normalmente são nomes próprios e locais, sendo usadas em etapas de PLN para identificar entidades-chave, sendo que as seis entidades nomeadas mais comuns são: Pessoas (People), Organizações (Organization), Localização (Location), Entidade geopolítica (Geo-Political Entity), Construção (Facility), Veículos (Vehicles). Para isso, basta usar o método ne_chunck que recebe como parâmetro os tokens já classificados (pela pos_tag) e um valor binário (binary) que, caso seja verdadeiro, apenas identificará as entidades nomeadas, sem classificá-las a qual tipo pertence e, caso seja falso, também atribuirá uma etiqueta/classificação (label) às entidades nomeadas (como uma das seis vistas anteriormente). Voltando à sumarização, que é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história), permitindo não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro (permite evidenciar o tema tratado). Para esta aula assumiu-se que a sumarização é nada mais do que a classificação das frases baseadas em sua importância, e que normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Desta forma, é possível estabelecer um limiar para selecionar apenas as primeiras frases mais importantes. A seguir foi exibido o algoritmo sumarizacao.py, que nada mais é do que a aplicação das funções aprendidas anteriormente sobre as apresentações da universidade, fornecidas como entrada. Foi possível notar que sentenças separadas erroneamente acabaram recebendo uma pontuação (score) mais baixa, sendo assim, o sumarizador determinou que a frase "Federal University of ABC (Portuguese: Universidade Federal do ABC, UFABC) is a Brazilian institution of higher learning based in Santo André, with operations in several municipalities in the ABC region, all in the state of Sao Paulo." foi a melhor classificada (com pontuação 0.54 do máximo de 1). No caso anterior, a pontuação foi dada por score = (nNes + nNouns)/float(nTokens), ou seja, a somatória da quantidade de entidades nomeadas com os substantivos dividido pelo total de palavras na sentença. A seguir foi apresentado, brevemente, um artigo que saiu na ACM : tratava-se da história do SPAM digital (The History of Digital SPAM), que percorre desde o primeiro caso registrado na história (do prisioneiro que recebeu uma carta que não havia solicitado) até os dias atuais. A ideia é mostrar que o SPAM não está mais somente em textos óbvios (sendo fácil de tratar), mas em conteúdo multimídia e, depois, foi exibido a saída do algoritmo de sumarização aplicado sobre o artigo de SPAM. Por fim, o algoritmo de sumarização foi aplicado sobre a notícia da FAPESP : "Atividades humanas já danificaram 75% da superfície terrestre", sendo que a sentença melhor avaliada (pontuação de 0.85) foi "avançar em direção das boas práticas". Já no final da aula foi anunciado o desafio 3, que trata-se de realizar o resumo de algum artigo de 2018 ou 2019 disponível na ACM, sendo que ele deve possuir ao menos duas páginas.
Rodrigo Hiroaki Ideyama Na décima quarta aula, o tema foi sobre “NLTK através de exemplos: Sumarização”. O professor citou a bibliografia (introdutória) que vai ser seguida para o leccionamento das aulas que é o “NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries.” do Nitin Hardeniya da editora Packt. De início, ele mostrou algumas funções bem úteis dessa biblioteca, NLTK, em um texto sobre a UFABC em inglês: * nltk.sent_tokenize (string): devolve a cópia do texto passada como parâmetro com token de frase, usando o tokenizer de sentença recomendada da NLTK. * nltk.word_tokenize (sentence): esta recebe uma sentença por parâmetro e faz a separação das palavras. * nltk.pos_tag (tokens): classifica cada palavra da lista dada no parâmetro, dando uma tag. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem, isto é, substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Penn) Dando mais detalhes sobre o conceito de treebank: na lingüística, um treebank é um corpus de texto analisado que anota a estrutura da sentença sintática ou semântica. A construção de corpora analisada no início da década de 1990 revolucionou a linguística computacional, que se beneficiou de dados empíricos de grande escala. A exploração dos dados do banco de árvores tem sido importante desde que o primeiro treebank em grande escala, The Penn Treebank, foi publicado. No entanto, embora originário da linguística computacional, o valor dos bancos de árvores está se tornando mais amplamente apreciado na pesquisa lingüística como um todo. Por exemplo, os dados anotados do treebank têm sido cruciais na pesquisa sintática para testar as teorias lingüísticas da estrutura das sentenças contra grandes quantidades de exemplos que ocorrem naturalmente. Como dado em aula, dependendo do idioma, não é uma tarefa considerada de fácil realização a criação de um conjunto de rótulos, por exemplo, árabe. Depois, ele deu uma pequena revisão sobre reconhecedor de entidades nomeadas, dizendo que um reconhecedor nos possibilita identificar e classificar as entidades nomeadas em um texto escrito em linguagem natural, onde estas podem ser índices para conceitos e novas relações / associações entre outras entidades, sendo na web, elas serem associadas à links com maiores informações e comumente são nomes próprios, locais e são utilizados para etapas de processamento de linguagem natural que permita identificar entidades-chave. As entidades nomeadas vão dependendo de aplicação para aplicação, entretanto, a seguir temos uma lista das seis entidades nomeadas mais comuns: * People (PER) * Organization (ORG) * Location (LOC) * Geopolitical (GPE) * Facility (FAC) * Vehicles (VEH) O reconhecimento dessas entidades é bem complicado, em parte, por causa da ambiguidade da segmentação. Para a resolução, é preciso decidir o que é uma entidade e o que não é, e quais são os limites. No próximo tópico, o professor começou a falar de sumarização que é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Podemos também assumir que: Normalmente uma frase que tem mais entidades e substantivos têm maior importância que outras sentenças. Usando essa lógica vamos ver um exemplo "simples” para cálculo de pontuação de importância. Podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. Para o melhor entendimento, Jesús mostrou na prática um exemplo de sumarização com o código sumarizacao.py. Nele, primeiramente, se faz uma contagem dos substantivos (NN e NNP) e das entidades nomeadas, depois faz o cálculo do score somando o número das entidades nomeadas e dos substantivos e divide pelo número de tokens, por fim, traz como saída a ordem invertida pelo score. Por fim, no último tópico, ele mostrou o site “Communications of the ACM” para a classe e deu dois exemplos de artigos importantes presentes que aplicam processamento de linguagem natural, são eles: The History of Digital Spam e Atividades humanas já danificaram 75% da superfície terrestre da FAPESP. Para finalizar a aula, ele falou do terceiro desafio que vai valer meio ponto na média final. É um resumo de um artigo que deve ser feito da Magazine Communication of the ACM (CACM: [https://cacm.acm.org/](https://cacm.acm.org/)). O artigo deve ter sido publicado em 2018 ou em 2019, contendo no mínimo duas páginas, sendo o resumo nos mesmos moldes dos resumos da aula. Deve ser submetido pelo tidia na seção de atividades.
Igor Neres Trindade Na aula de hoje, 29/07/2018, abordamos o tema de sumarização de texto e, para isso, fizemos uma pequena revisão de tudo que vimos até agora, usando a biblioteca NLTK do python. Para o tema dessa aula, recomenda-se a leitura do livro NLTK Essentials. De maneira geral, a sumarização se refere a extração de um resumo de um corpus qualquer. E isso pode ser feito de diversas formas: uma delas é considerar o texto como um conjunto de frases e ranquear as frases com um critério específico, sendo a frase mais específica com valor muito alto. Seguimos essa estratégia nessa aula. De início, vimos a função nltk.sent_tokenize(), que recebe como argumento um texto e retorna as sentenças deles. Para separação em sentenças, é levado em consideração o ponto final, o que pode gerar efeitos colaterais quando se usa abreviações com ponto final, separando sentenças em lugares errados. As diferentes sentenças podem ainda ser divididas em palavras e, para isso, existe a função nlkt.word_tokenize() que recebe como argumento uma sentença e retorna uma lista de palavras. Essa função utiliza uma expressão regular, da mesma forma que usamos nas primeiras aulas para separar as palavras, porém essa regex considera também sinais de pontuação. O resultado? Vírgulas, pontos de exclamação e interrogação, dois pontos, ponto e vírgula são todos considerados palavras. Como próximo passo, podemos rotular as palavras extraídas. A função nltk.pos_tag() desempenha bem essa função! Ela recebe como argumento uma lista de tokens e retorna uma lista de tuplas, onde o primeiro elemento é o próprio token e o segundo seu rótulo. É importante notar que o POS-tagging (sigla para Part-of-Speech Tagging) não observa o contexto, considerando somente o nome próprio, rotulando palavras com sua característica de linguagem, isto é, se é verbo, adjetivo, pronome, etc. O conjunto de rótulos mais popular utilizado atualmente é o Treebank, desenvolvido inicialmente por um grupo de linguistas, numa tentativa de representar as frases como uma árvore. Isso, por sua vez, não ajuda muito na desambiguação das palavras, por não considerar o contexto. Como vimos em aulas anteriores, JK pode se referir à pessoa Juscelino Kubitschek, ao governo JK ou à avenida ou shopping que também levam esse nome. Por fim, seria interessante reconhecer entidades nomeadas! Na biblioteca NLTK, isso pode ser feito através da função nltk.ne_chunk() que recebe dois argumentos: o primeiro é uma lista de tuplas de tokens com seus rótulos, que é o retorno da função vista anteriormente; o segundo é uma variável booleana chamada binary, que quando verdadeira usa um chunker binário que simplesmente identifica entidade nomeadas, e quando falso, usa um chunker multi classe, que define as classes de algumas palavras. Como na maioria das vezes só queremos saber se é entidade ou não, usamos binary verdadeiro. Temos quase tudo nesse ponto. Agora podemos fazer a sumarização ou, em outras palavras, podemos gerar automaticamente um resumo associado ao texto. A estratégia adotada para isso foi classificar as frases baseando-se na importância de cada uma, e considerando que frases mais importantes tem mais entidades e substantivos (verificando os rótulos obtidos no com a função nltk.pos_tag()). De fato, o que se pode observar quando feito a classificação é que a frase erroneamente separada ficou na último última posição. Foram feitos outros testes também: em um artigo da revista Communications of the ACM e uma notícia da FAPESP. No final da aula, o professor apresentou o terceiro e último desafio, que adiciona meio ponto extra na média. Para isso, deve-se fazer o resumo de um artigo da revista CACM. Também discutimos sobre a possibilidade de a prova ser levada para casa e o professor concordou em fazer isso se aproximadamente 70 pessoas entregarem os próximos três resumos.
Eracton Ferreira Ramalho O tema dessa aula 14 foi estudar NLTK através de exemplos, começando por sumarização. O livro base agora é o “NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries”, do Nitin Hardeniya. Começamos com um texto base que falava sobre a UFABC, utilizando o vocabulário em inglês. Foi separado o texto em cinco parágrafos, podemos chamar de nltk.sent_tokenize( string ). E depois separando cada palavra, fazendo uma tokenização que podemos chamar de nltk.word_tokenize( sentence ). Por fim, cada palavra foi classificada/rotulada de acordo com a sua característica e chamamos isso de nltk.pos_tag( tokens). A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Penn). O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. E quais os tipos de EN mais comuns? Dependerá muito da aplicação, mas a seguir temos uma lista das 6 entidades nomeadas mais comuns: pessoas, organizações, localizações, geopolítica, veículos ou entidades de facilidade. Agora vamos falar de sumarização de informação. É um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. Ela permitiria evidenciar o tema tratado. Podemos assumir que é a classificação das frases baseadas em sua importância. Pode-se assumir também que uma frase que tem mais entidades e substantivos têm maior importância que outras sentenças. Com isso é possível calcular a pontuação de importância. Foi feito um exemplo, em Python para ilustrar tudo isso. Toda essa abordagem mostra como podemos identificar SPAM. Para finalizar, o professor falou da importância de ver notícias científicas da nossa área de computação. Isso é importante para que saibamos o que anda rolando pelo mundo e ir se atualizando. Por isso, esse será o tema do desafio 3. Para ser mais especifico, precisamos encontrar um artigo da Magazine Communication of the ACM e fazer um resumo nos mesmos moldes dos resumos de aula. O artigo selecionado deve ter sido publicado ou em 2018 ou em 2019. O artigo deve conter, no mínimo, 2 páginas. Enviar pelo tidia, seção atividades, até o final do quadrimestre.
Elsio Antunes Junior 29/04 - NLTK através de exemplos: Sumarização; NLTK (Natural Language Toolkit) é uma conhecida biblioteca de código aberto para composição de programas em linguagem Python que trabalham com linguagem natural; Ele fornece classes básicas para representar dados relevantes ao processamento de linguagem natural; implementações de tarefas como part-of- speech tagging, análise sintática, classificação e outros que em conjunto podem solucionar problemas complexos; O professor nos conta baseará as próximas aulas no livro NLTK Essentials de Nitin Hardeniya; Em seguida exibe um pequeno texto de três parágrafos em inglês sobre a definição de "UFABC" na Wikipédia; Para exemplificar o uso do método nltk.sent_tokenize(String) o professor aplica o texto citado, mencionando os problemas em se separar automaticamente uma sentença, baseado apenas na pontuação, já que no meio da sentença aparecem termos como "Ph.D.s" que contém o ponto final; O método nltk.sent_tokenize() reconhece a pontuação do título de doutor em inglês, mas erra ao interpretar "No." como final de sentença, exibindo um resíduo numérico ao invés de interpretar "No." como abreviação de Número; Em seguida a demonstração do uso do método nltk.word_tokenize(sentence) seguido da explicação de outras questões a respeito de se separar uma frase em palavras; O professor nos ensina que não se deve simplesmente aplicar um split nos espaços da frase pois isso pode gerar palavras de strings vazias; também nos alerta para a pontuação que neste caso ficaria atrelado a palavra; uma boa expressão regular, conta o professor, deve incluir a captura da pontuação e das palavras separadamente; O próximo método mostrado é o nltk.pos_tag(tokens) que tem por função rotular uma palavra para começarmos a atribuir sentido semântico ao que foi capturado no corpus; a pos-tagging é um dos principais componentes de análise de PLN; trata-se de colocar uma etiqueta com a morfologia da palavra: substantivo (nn), verbo (vbz), etc incluindo flexões (em inglês); Internamente, o que o pos-tag faz (sob o conjunto de rótulos treebank) é um parser que decodifica a sentença e organiza as informações para montar uma árvore sintática de onde são extraídas as partículas morfológicas; Existe, é claro, uma forte dependência do idioma; Linguagens como o Árabe oferecem dificuldades adicionais; Entidades Nomeadas (Named Entity Recognition); Na aula passada falamos um pouco sobre entidades nomeadas; Nomes próprios, locais, organizações, listas conhecidas (como dias da semana, signos do zodíaco etc) que nos permite identificar entidades-chave para atribuição de sentido, contexto, significado, emoção etc ao texto processado; Os testes com o método nltk.ne_chunk mostram que nem sempre o algoritmo é capaz de reconhecer corretamente a entidade de forma automática, sem ajuda; No exemplo, o termo "Federal" seguido de "university" foi corretamente classificado como Organização; no entanto, "universidade federal" foi classificada por Pessoa; Sumarização; Processo de geração automática de resumo associado a um objeto; A sumarização permite entender a estrutura de um texto e evidenciar o tema tratado; A sumarização automática tratada aqui vai considerar uma classificação de frases baseada em importância; vamos assumir que a frase com maior número de entidades e substantivos tem maior importância; O código sumarizacao.py feio em python demonstra a utilização dos métodos nlkt {sent_tokenize, word_tokenize, pos_tag e ne_chunk} fazendo separação das sentenças, separação das palavras, rotulação dos termos e um cálculo que privilegia o maior número de substantivos pelo total de palavras no texto estudado; Apesar do exemplo utilizado ser pequeno, de fato a frase ranqueada pelo código parece conter mais informação útil que as outras menos pontuadas; Como disse o professor: uma frase sem substantivos está falando sobre nada.
Jair Edipo Jeronimo O Natural Language Toolkit (NLTK) é um conjunto de bibliotecas na linguagem de programação python, que são utilizadas para auxiliar no processamento de linguagem natural para a língua inglesa. Em aula, vimos sua aplicação em um texto em inglês sobre a Universidade Federal do ABC, onde foram aplicados alguns métodos, como o sent_tokenize por exemplo, que recebe um texto e o separa em frases, entretanto, como ele avalia apenas os pontos finais para realizar esta separação, podem ocorrer erros devido a abreviações ou outras funcionalidades que o ponto final possui e que podem ser confundidas com a separação de frases. Outro método visto foi o word_tokenize, que a partir de uma frase, realiza o processo de tokenização, ou seja, constrói uma lista com todas as palavras contidas na frase, sendo que os caracteres especiais são separados de forma individual. Além disso, vimos o método pos_tag, um dos principais métodos utilizados para análises em PLN, que a partir de uma lista de palavras, realiza uma classificação chamada Part of Speech, que rotula uma palavra baseada em sua característica de linguagem, como por exemplo se é um substantivo, verbo, adjetivo, entre outros. O método devolve uma lista de tuplas com cada palavra da lista e sua respectiva classificação. O conjunto de rótulos mais popular para realizar está classificação é o treebank, criado no início dos anos 90, que utiliza um grafo em forma de árvore para classificar as palavras. Porém, o pos_tagging possui uma grande dependência com o idioma em que se está sendo utilizado, uma vez que, para casos como o árabe por exemplo, a rotulação se torna mais complexa. Por fim, após a classificação das palavras, é possível realizarmos um reconhecimento de entidades nomeadas, que normalmente são nomes próprios ou locais e que são usados para identificação de entidades-chave. Com relação ao NLTK, foi apresentado o método ne_chunk que recebe a lista de tuplas com as palavras e seus rótulos e avalia quais são as entidades nomeadas. Outro tema estudado foi a sumarização de informação, que é um processo que realiza a geração automática de um resumo associado à um objeto, permitindo ter a compreensão do texto como um todo, evidenciando o tema tratado. Em sala, assumimos que a sumarização será tratada como uma classificação de frases baseadas em sua importância, a qual é dada pela quantidade de entidades e substantivos que ela possui. Assim, foi apresentado um programa em Python que a partir de um corpus, realizava a separação em tokens, a rotulação via pos_tag e a separação em entidades nomeadas. Após isso, para cada sentença é calculado a quantidade de substantivos e de entidades nomeadas, sendo que, estes valores são somados e divididos pela quantidade de palavras. Ao final eram mostrados os valores que foram calculados e as frases em ordem de importância. Como exemplo, vimos o mesmo texto sobre a UFABC. Antes de partimos para os outros exemplos, foi apresentado o site da revista Communications of the ACM, uma revista importante para a área da Ciência da Computação e que possui diversos artigos, dentre os quais, foi utilizado um artigo sobre spam para aplicarmos no algoritmo de sumarização. Também foi aplicado uma notícia da FAPESP sobre os danos que as atividades humanas causaram na superfície terrestre. Ao final da aula, foi apresentado o desafio 3, que consiste de um resumo de um artigo da revista Communication of the ACM, que tenha sido publicado em 2018 ou 2019 e com pelo menos 2 páginas.
Daniel Vieira Batista NLTK através de exemplos: Sumarização Nesta parte do curso será tratado de abordagens mais práticas com ferramentas implementadas e já utilizadas na área de processamento de linguagem natural. Existem inúmeras ferramentas que possuem diversas funcionalidades já consolidadas na comunidade e que pode-se utilizar para dar maior velocidade ao curso e ao projeto. Alguns exemplos são o NLTK (Natural Language Toolkit), TextBlob, Stanford CoreNLP, spaCy, gensim, entre outras. Na aula em questão, iniciou-se falando do NLTK e de uma recomendação de livro para sua utilização. O livro: NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries, escrito por Nitin Hardeniya. Na prática, foi visto a aplicação (em slides) de algumas funções de tokenização de sentenças (nltk.sent_tokenize) e de palavras (nltk.word_tokenize) em um exemplo textual. Para sumarização de textos, objeto principal de discussão na aula, precisa-se identificar quais são as principais palavras e sentenças que possuem maior relevância dentro de um parágrafo ou conjunto de parágrafos. Neste sentido, é interessante rotular as palavras e frases com suas características da linguagem. Em outras palavras, é importante que existam estratégias para identificar as classes gramaticais de cada termo numa dada sentença textual. Por isso, existe a necessidade do POS-tagging (part of speech tagging), que é uma tarefa de etiquetagem das palavras com rótulos gramaticais. Essa etiquetagem possui diversas classes gramaticais que pode variar dependendo da linguagem considerada. A forma que a etiquetagem é realizada baseia-se num dicionário de-para onde cada chave é uma palavra do vocabulário e cada valor associado à chave é uma tag/classe gramatical da linguagem. Um dos dicionários (conjunto de palavra-classe gramatical) mais populares discutidos em sala de aula é o Treebank. É um dicionário de POS-tagging da língua inglesa. Esse dicionário mantém uma hierarquia de taggs que pode ser representado numa árvore de taggs, caso fosse etiquetado uma determinada frase. Normalmente estes dicionários ajudam muito na identificação de classes gramaticais das palavras, contudo eles possuem forte dependência do idioma ao qual estão construídos. Além disso, é muito custoso mantê-lo atualizado, dado a volatilidade das palavras e termos de cada língua. Reconhecedor de entidades nomeadas (NER Named Entity Recognition): realiza o reconhecimento de nomes próprios, locais, classes gramaticais. É utilizado para identificar entidades-chaves. No contexto de sumarização de textos isso pode ajudar na detecção de termos de sumarização, isto é, em termos que são relevantes na construção de uma frase ou conjunto de frases. Quando se pretende sumarizar um texto deve-se ter em mente que é um processo de geração automática de um resumo associado a um texto, não há interesse final em resumir somente uma frase mas um conjunto de frases. Procura-se por estratégias de minerar/tornar evidente o tema tratado no texto. Uma forma simples e intuitiva de fazer isso seria classificar as frases baseadas num "tagguiamento"/etiquetagem ou com base numa importância atribuída. Por exemplo, podemos assumir que uma frase que tem mais entidades e que carrega mais informação gramatical (quantidade de entidades, substantivos... de classes gramaticais importantes na construção de uma frase) tem maior importância que as demais sentenças de um texto e, podemos também adotar um limiar de corte onde a importância é considerada. Essa abordagem é simplista, entretanto dá uma boa noção do caminho que deve-se seguir para obter entidades relevantes na detecção de um tema de texto ou na sumarização de sentenças textuais.
Michelle Kaori Hamada Nesta aula de “NLTK através de exemplos: Sumarização” vimos na prática a utilização de tudo que viemos aprendendo sendo utilizado pelo NLTK. A bibliografia introdutória dessa aula é o livro NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries” de Nitin Hardeniya, da editora PACKT. O texto usado de exemplo foi um texto sobre a UFABC em inglês, aplicou-se tokenização por sentença, por palavra, e também POS-tagging utilizando part of speech forma que caracteres como “(”, “,”, “.” fossem palavras. POS-tagging, em quase todas as análises de PLN, ele é um dos principais componentes, ele consiste na tarefa de etiquetar que implica simplesmente em rotular as palavras de acordo com a sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome), por exemplo: She - PRP (Personal pronoun), sells - VBZ (Verb, 3rd person singular present), seashells - NNS (Noun, plural), etc. O conjunto de rótulos mais conhecido é o treebank (U. Penn). Treebank, foi elaborado na década de 1990, revolucionando a linguística computacional, se trata de um corpus analisado que contém a estrutura da sentença sintática ou semântica. Ao se utilizar treebank existe uma forte dependência ao idioma que está sendo tratado, assim não se trata de uma tarefa fácil a criação de um conjunto de rótulos, podemos citar como exemplo o caso para o árabe que foi exibido em aula. Para o mesmo texto sobre a UFABC foi aplicado um reconhecedor de entidades nomeadas (NER) com binary como true e também como false, que relembrando um reconhecedor permite identificar “entidades nomeadas” que comumente são os nomes próprios, locais de forma que estes são utilizados para as etapas de PLN que permitam identificar as entidades-chave. Seus tipos mais comuns dependem muito da aplicação mas que entre as entidades nomeadas mais comuns estão PER (people), ORG (organization), LOC (location), GPE (geo-political entity), FAC (facility) e VEH (vehicles). Assim chegamos a sumarização de informação que é um processo de geração automática de um resumo associado a um objeto, por exemplo, textos, artigos e histórias. A sumarização permite além de entender a estrutura de uma frase, entender a estrutura de um texto inteiro. Assim, ela permitiria encontrar o tema que está sendo tratado. De forma geral, a sumarização é a classificação das frases baseadas em sua importância. Assumimos que normalmente uma frase que tem mais entidades e substantivos possui uma maior importância que outras sentenças. Seguindo essa lógica, aplicamos a sumarização em um exemplo “simples” para o cálculo de pontuação de importância, consideramos um limiar para selecionar apenas as primeiras frases mais importantes. No algoritmo sumarizacao.py ele realiza a contagem dos substantivos e das entidades nomeadas e então faz o cálculo do score ingênuo. Ele foi aplicado no texto sobre a UFABC, em um artigo sobre SPAM e também em uma notícia da FAPESP de modo que a saída foram as frases em ordem invertidas pelo score. O último assunto da aula foi o desafio 3 em que devemos fazer um resumo de um artigo da Magazine Communication of the ACM (CACM). O artigo que selecionarmos deverá ter sido publicado em 2018 ou em 2019 e conter, no mínimo, duas páginas. Ele deverá ser nos mesmos moldes dos resumos já feitos sobre as aulas e ser enviado pelo Tidia.
Renato de Avila Lopes Resumo 14 NLTK através de exemplos: Sumarização Bibliografia introdutória: NTLK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries O texto usado como exemplo foi a descrição da UFABC em inglês Foi utilizado o comando ntlk.sent_tokenize(string) para separar o texto em seis sentenças O programa separou erroneamente um pedaço do último parágrafo porque havia um ponto em "No." Em seguida foi utilizado nltk.word_tokenize(sentence) para separá-las em tokens Por exemplo o pedaço Federal University of ABC (Portuguese: Universidade Federal do ABC, UFABC) foi separado da seguinte forma: ['Federal', 'University', 'of', 'ABC', '(', 'Portuguese', ':', 'Universidade', 'Federal', 'do', 'ABC', ',', 'UFABC'] Depois o comando nltk.pos_tag(tokens) para classificar os tokens em entidades nomeadas pos_tag: Part of speech tagging POS-tagging é um dos principais componentes em quase todas análises de PLN Rotula palavras com sua característica de linguagem (substantivo, verbo, advérbio, pronome) Conjunto de rótulos mais popular é o treebank (U. Penn) Alguma tags CC Coordinating conjunction CD Cardinal Number JJ Adjective FW Foreign Word NN Noun, singular or mass, NNS noun, plural VB Verb, base Form Treebank é um corpus que utiliza uma estrutura de sentenças sintáticas ou semânticas Forte dependência do idioma tratado Não é tarefa fácil criar um conjunto de rótulos (Exemplo: árabe) Reconhecedor de entidade nomeadas NER Named Entity Recognition Comumente nomes próprios, locais São utilizados na etapa de PL que identifica entidades-chave O comando nltk.ne_chunk(tagged, bunary=True) separa as tags em entidades nomeadas ou não (binário) Com o parâmetro binary em false o comando faz a classificação das entidades nomeadas Os tipos mais comuns de ENS dependem da aplicação, mas as seis mais comuns são: People PER Organization ORG Location LOC Geo-Political GPE Facility FAC Vehicles VEH Sumarização da informação Processo de geração automática de um resumo associado a um objeto (texto, artigo, história) Permite não somente entender a estrutura de uma frase e a estrutura de um texto inteiro Evidencia o tema tratado Abordagem intuitiva - Classificação de frases baseadas em sua importância Assumindo que normalmente uma frase que tem mais entidades e substantivos tem maior importância Exemplo simples de cálculo de pontuação de importância - Limiar para selecionar as primeiras frases mais importantes (sumarizacao.py) O programa sumarizacao.py atribuiu o valor 0.54 a primeira frase (frase 0) do texto 'descrição da UFABC' Utilizando uma matéria da revista Communications of the ACM (SPAM) o programa atribuiu o valor 1.0 (máximo) para o que ele considerou como frase "Public health" Também atribuiu 1.0 para 'Socal Spam Applications Political manipulation' O motivo desta pontuação é a forma como é calculado dividindo a quantidade de substantivos e entidades pelo total Sobre a matéria 'Atividades humanas já danificaram 75% da superfície terrestre' do site da Fapesp o valor máximo foi 0.85 para a frase 'avançar em direção das boas práticas' Nesta aula o professor também falou sobre o desafio 3, que consiste em fazer um resumo de um artigo da revista Communications of the ACM (CACM) O artigo deve ter sido publicado em 2018 ou 2019 e deve conter no mínimo duas páginas Deve ser feito nos mesmos moldes dos resumos de aula e ser enviado pelo Tidia e vale até 0,5 pontos na média final
Ruan Fernandes Aula 14: NLTK (Natural Language Toolkit) através de exemplos: Sumarização - a aula iniciou mostrando como funções nativas do nltk podem ser usadas em um texto. Primeiro, a sent_tokenize, que tokeniza os parágrafos; depois, o word_tokenize, que faz a separação de palavras e sinais em tokens individuais. O pos_tag, aplicado aos tokens, faz a etiquetagem delas evidenciando sua função morfológica. Essa etiquetagem é chamada de Part of Speech (PoS) tagging. Esse é um dos principais componentes das análises de PLN, constituindo-se em rotular palavras com sua função morfológica da linguagem. Foi apresentado, em seguida, uma tabela de legenda dos significados de cada etiqueta (exemplo, NNS = substantivo plural). O conjunto de rótulos mais popular é o treebank. O treebank é um corpus de texto analisado que tem textos rotulados sintática ou semanticamente. Existe uma enorme dependência do idioma que está sendo tratado e a etiquetagem do idioma desejado. É necessário que ambos sejam compatíveis. Reconhecedor de entidades nomeadas: permite identificar as "entidades nomeadas", normalmente nomes próprios ou locais, sendo utilizados em etapas de PLN para que permitam identificar entidades- chave. Foi mostrado então, a função do nltk ne_chunk, que cria "blocos" classificados conforme encontra esses chunks (pedaços) de entidades. A função aceita como parâmetro "binary", sendo esse valor true ou false. Caso o valor atribuido seja false, ele retorna o token etiquetado e classificado, por exemplo, em organização, GPE (geo-political entity), etc. Como true, é retornado apenas se é NE (named entity). Os 6 mais comuns costumam ser PER- People, ORG-Organization, LOC-Location, GPE-Geo-political Entity, FAC- Facility, VEH-Vehicles. Sumarização de informação: processo de geração automática de resumo associado a um objeto. Permite entender a estrutura tanto de uma frase quanto de um texto como um todo. Permite evidenciar o tema tratado. Resumidamente: é a classificação de frases baseada na sua importância. Essa importância é dada em uma relação entre a quantidade de entidades e substantivos dentro dela, sendo as que tem mais entidades/substantivos, consideradas mais importantes. Em seguida desse tópico, foi apresentado um código de teste que tem entrada de um texto, faz sua tokenização, sua etiquetagem, em seguida classifica seus "chunks" e então, faz a contagem de seu comprimento. Então, realiza a contagem de "NN"s e "NNP"s dentro da lista de tuplas geradas do texto (token, rótulo). Após isso, conta quantas entidades são nomeadas ("NE" e "label"). O cálculo do "dummy score" se resume em uma soma entre entidades nomeadas e nomes próprios dividido pelo tamanho do texto (número de tokens). Foi então mostrado um exemplo do código sendo aplicado em um texto com alguns parágrafos, valorizando cada um deles conforme essa sumarização de informação simples. Foi apresentado o site "Communications of the ACM", leitura importante e que deve ser rotineira para futuros cientistas da computação por conter os projetos e estudos científicos da área. Foi mostrado o artigo do CACM sobre SPAM, sobre sua origem, origem do termo e como tanto a caça a spams quanto os próprios spams se modernizaram mutuamente durante os mais de 20 anos.
Humberto Vagner Tondinelli Correa Foi passado como bibliografia introdutória o livro "NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries." Nessa aula foi apresentada a biblioteca nltk (Natural Language Toolkit), que é utilizada para construção de aplicações Python para trabalhar com análise de textos em linguagem humana. De acordo com o site oficial (https://www.nltk.org/): NLTK tem sido dita "uma maravilhosa ferramenta para ensino, e para trabalhar com, de linguistica computacional utilizando Python" e "uma incrível biblioteca para lidar com linguagem natural". De fato, durante a aula, foram apresentados alguns exemplos da utilização da ferramenta em um texto de exemplo, utilizando-se das funções "sent_tokenize" que realiza a tokenização de sentenças, utilizando '.' como split (mas isso pode causar alguns erros, como apresentado em sala), "word_tokenize" que realiza a tokenização de palavras e "pos_tag" esta por sua vez realiza a etiquetagem das palavras de acordo com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome) e é um dos principais componentes de quase todas as análises de PLN, sendo o conjunto de rótulos mais popular o treebank (U. Penn). Em linguística, um treebank é um corpus processado que rotula estruturas de sentenças sintaticamente ou semanticamente. A construção de vários corpus processados no começo dos anos 90 revolucionou a linguística computacional. Entretanto, existe uma forte dependência ao idioma que está sendo tratado. A criação de um conjunto de rótulos não é uma tarefa fácil, como exemplo em sala foi mostrada a rotulação no caso para o Árabe. Reconhecedor de entidades nomeadas (NER, Named Entity Recognition) permite identificar entidades nomeadas. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Os tipos de EN mais comuns dependem muito da aplicação, entretanto existem 6 entidades nomeadas mais comuns: PER (People), ORG (Organization), LOC (Location), GPE (Geo-Political Entity), FAC (Facility) e VEH (Vehicles). Sumarização de informação é um processo de geração automática de resumo associado a um objeto (e.g., texto, artigo, história) e permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Em um exemplo em aula, assumimos que a sumarização nada mais é que a classificação das frases baseadas em sua importância e também que normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. E usando essa lógica vimos um exemplo para cálculo de pontuação de importância (utilizando script Python). Como resultado o algoritmo retorna o nível de importância de cada sentença. Ainda utilizando este script foram analisados mais dois textos: "The History of Digital Spam" (https://cacm.acm.org/) e uma notícia publicada pela FAPESP "Atividades humanas já danificaram 75% da superfície terrestre". Foi ainda apresentado na aula o Desafio 3, onde a proposta é realizar um resumo de um artigo da revista Communication of the ACM (CACM). Deve ser um artigo que tenha sido publicado em 2018 ou 2019 e o artigo deve conter no mínimo 2 páginas.
Leonardo Nascimento A biblioteca NLTK é uma das mais utilizadas na comunidade de processamento de linguagem natural (PLN). O livro escrito por Nitin Hardeniya, NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries, cujo possui uma abordagem mais prática, servirá como bibliografia sobre o assunto. Um processo de sumarização inicia com a separação em frases de um texto, que pode ser feita com o método do NLTK sentence tokenize – nltk.sent_tokenize(text: string), onde toda ocorrência de um ponto final denota o fim de uma frase. Com o primeiro texto de exemplo se pode verificar que nem todas as frases são separadas como esperado, uma vez que o ponto na abreviação “no.”, da palavra “número”, é confundido com o ponto final que marca o final de uma frase. Quase todos os programas tradicionais possuem este comportamento e, portanto, o tratamento costuma ser feito em uma etapa de pré-processamento onde o ponto pode ser omitido ou substituído. Para extrair a importância de uma frase é necessário analisar as palavras, o que pode ser feito com o método do NLTK word tokenize – nltk.word_tokenize(sentence: string). Esse método extrai as palavras e também os sinais de pontuação, os quais são considerados palavras nesse contexto. Vale salientar que a tokenização de palavras não é simplesmente dividir por espaços em branco, pois neste caso os sinais de pontuação seriam considerados como parte da palavra, como visto em aulas anteriores. A partir das palavras resultantes é feita a rotulagem de sua característica de linguagem, isto é, rotular se a palavra é um substantivo, verbo, adjetivo, advérbio, pronome, etc., com o método do NLTK part of speech tagging – nltk.pos_tag(word: string). Não existe uma heurística que permita com poucas regras determinar se um dado conjunto de caracteres é um substantivo, verbo, adjetivo ou qualquer outra coisa. Assim, se faz necessário o uso de dicionários, os quais dependem fortemente do idioma sendo tratado e possuem um processo de construção bastante difícil, principalmente para idiomas como o árabe. O conjunto de rótulos mais popular é o Treebank, criado por pesquisadores da Universidade da Pensilvânia. Este tipo de construção revolucionou a linguística computacional e é muito utilizado na área de linguística como todo. O reconhecimento de entidades nomeadas, comumente locais e nomes próprios, pode ser feito com o método do NLTK named entity chunk – nltk.ne_chunk(tagged, binary=True). As 6 entidades nomeadas mais comuns são, em inglês: People, Organization, Location, Geo-Political, Entity, Facility e Vehicles. Considerando que a sumarização de informação é a geração automática de um resumo associado a um texto, cujo deveria evidenciar o tema tratado, assumiu- se neste contexto que esta nada mais é do que a classificação de frases baseadas em sua importância. Usando essa lógica, o exemplo de sumarização foi construído assumindo que uma frase com mais entidades e substantivos são mais importantes, onde uma pontuação de importância é atribuída e as frases com maior pontuação são as mais relevantes.
Joao Victor Fontinelle Consonni A décima quarta aula de PLN apresentou a biblioteca NLTK (Natural Language Toolkit) do python, desenvolvida por Steven Bird e Edward Loper na Univaersidade da Pensilvânia (U. Penn). A aula iniciou introduzindo duas funções de tokenização da biblioteca, a nltk.sent_tokenize e a nltk.word_tokenize, que quebram um texto de entrada em sentenças e palavras, respectivamente, retornando um vetor de token. Em seguida, foi apresentada a função nltk.pos_tag (referência a Part Of Speech tagging), que recebe um vetor de token, ou palavras, e as rotula com sua característica de linguagem (i.e., substantivo, verbo , adjetivo , advérbio, pronome). Para a lingua inglesa, o conjunto de rótulos mais popular é o treebank da U. Penn. Existe uma forte dependência entre o idioma e o conjunto de rótulos, de tal forma que a tarefa de contruir um novo conjunto de rótulos é bastante complicada. Por meio da função nltk.ne_chunk, é possível realizar o Reconhecimento de Entidades Nomeadas (NER, Named Entity Recognition), que permite identificar elementos de texto que referem-se a nomes próprios, locais, ou qualquer outro elemento do texto que possa ser classificado como uma entidade-chave. Essa função recebe de entrada um vetor com as tuplas de palavras com seu respectivo rótulos, assim como um parâmetro booleano. Quando esse parâmetro é configurado como verdadeiro, a função apenas identifica possíveis entidades nomeadas; caso seja falso, além de identificar as entidas nomeadas, a função as classifica. Essa clissificação depende da aplicação, mas geralmente envolve seis categorias: pessoas, organizações, localidades, entidades geo-políticas, construções e veículos. Na segunda parte da aula, tratamos da sumarização de informação, um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). A sumarização permite não somento entender a estrutura de uma frase, mas também a estrutura do texto inteiro, de forma a evidenciar o tema tratado. Partimos do pressuposto de que uma frase que tem mais entidades e substantivos tem maior importancia que outras sentenças. A partir desta lógica, vimos um exemplo simples para o cálculo de pontuação de importância,considerando um limiar para selecionar apenas as primeiras frases mais importantes. O código de exemplo utilizou todas as funções do nltk vistas nesta aula para atribuir uma pontuação de grau de importância para cada sentença baseado no número de substantivos e entidades nomeadas. Após o exemplo, fomos apresentados ao Communications of the ACM, uma página que centraliza notícias, artigos e pesquisas relacionadas à computação. Um artigo tratando da história do Spam foi utilizado como texto de entrada para o código de sumarização recém apresentado. A notícia da FAPESP relacionada ao impacto das atividades humana no meio ambiente também foi testada. Por fim, fomos apresentados ao Desafio 3, que concede 0.5 na média final para os alunos que o entregarem. O desafio é elaborar um resumo de um artigo recente (2018 e 2019), de ao menos duas páginas, da Magazine Communication of the ACM.
Vinicius Narciso da Silva O tema da aula foi "NLTK através de exemplos: Sumarização". A bibliografia introdutória recomendada foi um livro do essencial de NLTK, combinado com outras bibliotecas Python, para aplicações de PLN e machine learning. Utilizamos um texto, em inglês, de três parágrafos para os exemplos. A primeira função utilizada foi para tokenização de sentenças (nltk.sent_tokenize(string)), ou seja, separação em frases dos parágrafos, levando em conta o ponto como caractere delimitador. Porém, essa abordagem pode gerar alguns comportamentos estranhos, como visto no texto, caso tenha um ponto que não seja final, a função considera que a sentença termina neste ponto (por exemplo, pontos usados em abreviações). Em seguida, após separar as sentenças, foi a vez de separa-las em palavras, utilizando a função nltk.word_tokenize(sentence). Em seguida, as palavras receberam tags de POS (Part Of Speech, classes gramaticais em português). Esse passo (POS-tagging) é um dos principais componentes de quase todas as análises de PLN. O objetivo é rotular palavras de acordo com sua característica de linguagem (ou seja, substantivo, verbo, adjetivo, advérbio, pronome...). O treebank é o conjunto de rótulos mais popular. O treebank é um corpus de texto que denota valor sintático ou semântico para a estrutura de uma sentença. Foi uma construção revolucionária para área de computação linguística no início da década de 90. Embora seja revolucionária, a construção depende muito do idioma que está sendo tratado (em casos como o alfabeto árabe, não é uma tarefa fácil rotular sentenças). Após o tagging, submetemos o resultado a um reconhecedor de entidades nomeadas (que vimos na aula passada) para gerar correlação entre os termos da frase. A função do nltk que nos auxilia nisso é a nltk.ne_chunk(tagged, binary=True). Ao fim desse passo, teremos uma estrutura, muito parecida com uma árvore, que nos diz a que entidade nomeada cada palavra está relacionada. Relembrando da aula passada, os tipos mais comuns de Entidade Nomeadas são: Pessoas, Organizações, Locais, Entidades Geo-Políticas, Edifícios e Veículos. Depois desses processos, fomos para o que realmente era o objetivo da aula: a Sumarização, que nada mais é que um processo de geração automática de um resumo associado a um objeto, objeto esse que pode ser um texto, um artigo ou uma história, por exemplo. Ela nos permite entender não somente a estrutura de uma frase, mas também a estrutura do texto inteiro, além de evidenciar o tema tratado. Para tratar o problema, assumimos algumas heurística: 1) a sumarização nada mais é do que a classificação das frases devido a sua importância; e 2) Uma frase que tem mais entidades e substantivos tem maior importância quando comparada com outra. Dito isso, vimos um exemplo para calcular a pontuação de importância de sentenças (com isso, podemos traçar um limiar para selecionar apenas as frases mais importantes). Podemos utilizar essa aplicação mais simples para identificação de Spans.
Renan Baisso Retomando nossos estudos a respeito de Processamento de Linguagem Natural, desta vez, para estudar de maneira prática os conceitos já discutidos em aulas anteriores. Desta forma, iremos abordar uma das apis mais conhecidas neste ramo, a NLTK. A bibliografia utilizada é o livro NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries. Apesar de nesta aula serem abordadas funções da biblioteca em questão, o principal que deve ser fixado é o conjunto de conceitos para processamento de texto, o raciocínio para resolver problemas e chegar a um resultado satisfatório. Assim sendo, dado que temos um texto com alguns parágrafos, por exemplo, a descrição em inglês da Universidade Federal do ABC, queremos desenvolver uma rotina que identifique os pontos mais relevantes do texto os separe de maneira lógica, i.e., uma sumarização Logo, para que isso ocorra devemos seguir alguns passos, são eles: 1) tokenização de sentenças, 2) tokenização de palavras, 3) rotulação de discurso e 4) reconhecimento de entidades nomeadas (NER). Agora que temos um direcionamento, podemos analisar cada etapa com mais detalhes e relação a API utilizada. 1) Neste passo fazemos uso da função sent_token(string) que recebe o texto que se deseja tokenizar dado um de delimitador de sentenças. Por padrão o delimitador é o ponto final, desta maneira, a saída tende a ser um conjunto de frases. Entretanto, no caso de um caractere ponto no meio da frase, para indicar alguma abreviação, pode atrapalhar o resultado final. 2) Logo após a divisão do texto em sentenças, é necessário a separação das palavras para quê a etapa 3 seja possível, por isso, o uso da função word_tokenize(sentence) deve ser aplicado a cada sentença obtida no passo 1. O resultado é um conjunto de tokens separados, sendo que os tokens podem ser palavras ou caracteres de pontuação ou especiais. 3) Agora, com os tokens de cada sentença separados, podemos seguir com a rotulação realizando a chamada à função pos_tag( tokens ), a qual faz classificação dos tokens em pronomes pessoais, advérbios, verbos e outras categorias ditas pelo treebank, o qual é uma lista de siglas para denotar um significado semântico ou sintático de uma estrutura, esta ideia foi proposta em 1990 por pesquisadores americanos. Os treebanks são diretamente associados ao idioma de estudo. 4) Por último, podemos prosseguir para a nomeação de entidades textuais utilizando a função ne_chunk(tagged, binary=false), em que o primeiro parâmetro são os elementos da etapa 3 e o segundo configura a chamada, sendo que se for true apenas será classificado entre NE ou não NE, e se for false realizará uma classificação mais detalhada (pessoa, organização, lugar, etc). Desta maneira, podemos gerar resumos de textos de maneira automática e com maior precisão, por com as técnicas apresentadas o algoritmo levará em conta o contexto do documento analisado.
Carlos Eduardo Ramos O tema da aula foi: NLTK através de exemplos: Sumarização. Inicialmente, uma breve introdução ao NLTK foi feita. Após, um texto sobre a UFABC foi apresentado, ao passo que o comando nltk.sent_tokenize foi executado sobre o texto, onde está função do nltk tokeniza as sentenças do texto. O comando nltk.word_tokenize realiza a tokenização no nível das palavras do texto, retornando uma lista de tokens. O comando nltk.pos_tag realiza a etiquetagem dos tokens de acordo a característica linguística do token, como por exemplo: verbo, substantivo, determinante, etc. Este conceito se chama POS (part of speech) Tag.. O corpus Treebank é um corpus anotado em língua inglesa que possui um conjunto de rótulos e pode ser usado para etiquetar textos não etiquetados. Criar um etiquetador não é uma tarefa simples, pois há forte dependência do idioma e da sintaxe da língua. Conforme a aula 13, o conceito de entidades nomeadas foi relembrado. Com o auxílio do etiquetador de Pos tags, podemos pensar em um Reconhecedor de entidades nomeadas. Com uma proposta inicial, podemos inferir que as entidades nomeadas são sempre nomes próprios e locais, ou seja, substantivos. A etiquetagem pode separar os tokens com estas características no reconhecedor de entidades nomeadas. O comando nltk.ne_chunk(tagged, binary=True) segmenta e rotula sequências de tokens múltiplos etiquetados recebidos como parâmetro. Com a flag binary=True, temos apenas a indicação de que a sequência de tokens é uma entidade nomeada. Com a flag binary=False, temos a indicação do tipo de entidade nomeada da sequência de tokens, por exemplo: Organização, Pessoa, etc. Outro conceito apresentado em aula foi o de Sumarização. Sumarização é um processo de geração automática de resumos. Isso pode trazer a temática do texto, as palavras chaves, as partes com mais informações etc. A primeira hipótese foi a de que a sumarização retorna as partes mais importantes do texto. Estas partes podem conter mais substantivos e entidades nomeadas. O primeiro algoritmo apresentado considerava tokens com características de substantivos e entidades nomeadas para formar um ranking de importância das palavras e assim retornar as frases onde estas palavras são mencionadas. A exibição das frases importantes é feita na ordem do ranking. Está é uma ideia inicial, mas o sumarizador pode ter outros critérios que podem incrementar o algoritmo. Foi apresentado a página do Communications of the ACM, uma revista mensal carro-chefe da Association for Computing Machinery que aborda artigos e pesquisas sobre ciência da computação. O algoritmo de sumarização foi executado sobre um artigo sobre a história do Spam digital, uma notícia da FAPESP sobre impactos das atividades humanas sobre superfície terrestre. Por fim, foi apresentado o desafio 3, valendo pontos na média final. O desafio é realizar a sumarização sobre um artigo da Communications of the ACM.
Matheus Tulio Pereira da Cruz Bibliografia: NLTK Essentials: Build cool NLP machine learning applications using NLTK and other Python libraries Se for estudar pelo livro, o professor começou pelo capítulo 5. Sumarizar é selecionar uma quantidade pequena de elementos, mas que são os mais importantes do total analisado. Uma frase e uma sentença são um conjunto de palavras que são finalizados por um ponto. Mas algumas vezes é preciso fazer um pré processamento para não considerar aquelas palavras que possuem um ponto e não são final de frase, como por exemplo No. ntlk.sent_tokenize(string) - Separa o texto até o primeiro ponto. ntlk.word_tokenize( sentence ) - Separa toda a frase em um conjunto de palavras, mas não é um conjunto de palavras únicas. ntlk.pos_tag( sentence ) - part of speech. É uma função que rótula as palavras, quase como se falasse o que é um verbo, o que é um nome próprio, etc. A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente sem rotular palavras com sua característica de linguagem.( i.e., substantivo, verbo, adjetivo, etc) A POS-tagging além de rotular as palavras, ela também cria uma árvore chamada Treebank. Árvore são estruturas hierárquicas que por sua vez podem ser expressadas através de parênteses. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar "entidades nomeadas" Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. ntlk.ne_chunk(tagged, binary = true) - analisa tuplas ou palavras únicas e dão nomes de entidades a elas se fazem sentido. ntlk.ne_chunk(tagged, binary = false) - faz a mesma coisas que o true, mas com mais especificidade, além de falar que é uma entidade, fala qual entidade é. Sumarização é um processo de geração automática de um resumo associado a um objeto. A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Podemos assumir que: Normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras. Usando essa lógica vamos ver um exemplo "simples” para calculo de pontuação de importância Podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. Existem spam mais sofisticados para driblar os algoritmos de detecção de spam. PLN vem para ajudar a resolver esses problemas. Communications é um site como o IEEE da computação, lá se publica muitos e muitos artigos interessantes. Desafio 3 é um resumo de um artigo da CACM, o requisito do artigo deve ser maior ou igual a 2.
Giselle Silva de Santana Nesta décima quarta aula, ministrada no dia 29/07, o tema da aula foi “NLTK através de exemplos: Sumarização”. A bibliografia recomendada para esse novo tema é o livro “NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries” de Nitin Hardeniya. A aula foi iniciada com a apresentação do uso das funções nltk.sent_tokenize(string), nltk.word_tokenize(sentence) e nltk.pos_tag(tokens), utilizando-se um texto em inglês descrevendo a UFABC. Part of speech tagging, ou pos-tagging, é um dos principais componentes de quase todas as análises de PLN. A etiquetagem PoS implica simplesmente em rotular palavras com sua característica de linguagem, como por exemplo, marcar o que é substantivo, verbo, adjetivo, pronome, advérbio. O conjunto de rótulos mais popular para este tipo de rotulação é o treebank (U. Penn), tendo sua construção por volta dos anos 1990. A criação destes rótulos PoS não é uma tarefa simples, dado que existe uma forte dependência ao idioma que está sendo tratado. Os rótulos presentes no treebank são~: NN (noun, singular), NNS (noun, plural), NNP (proper noun, singular), NNPS (proper noun, plural), VDB (verb, past tense), VBG (verb, gerund or present participle), VBN (verb, past participle), VBP (verb, non-3rd person singular present), VBZ (verb, 3rd person singular present), JJ (adjective), IN (preposition or subordinating conjunction), DT (determiner). Através de etapas de PLN, é possível identificar entidades-chaves que permitam o reconhecimento de entidades nomeadas (NER, named entity recognition), que comumente são nomes próprios ou locais. As seis entidades nomeadas mais comuns são: PER (people), ORG (organization), LOC (location), GPE (geo-political entity), FAC (facility) e VEH (vehicles). Em seguida, foi apresentado o assunto de sumarização de informação, que consiste no processo de geração automática de um resumo associado a um objeto, como por exemplo, um texto ou artigo. A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro, além de permitir evidenciar o tema que está sendo tratado. De maneira simplificada, pode-se assumir que a sumarização é a classificação das frases baseadas em sua importância, podendo-se considerar que uma frase com mais entidades e substantivos tem maior importância que outras sentenças. Por fim, nos foi apresentado o terceiro desafio da disciplina, que vale mais meio ponto na média final. Este terceiro, e último desafio, consiste em realizar um resumo de aproximadamente 500 palavras de um artigo selecionado da Magazine Communication of the ACM (CACM) <>. O artigo deve ter sido publicado ou em 2019 ou em 2018 e conter no mínimo 2 páginas.
Laura Cestavo Borges Dos Santos A aula do dia 29/7 foi sobre NLTK novamente, porém focando em exemplos. Começamos vendo um exemplo de texto que iria passar pelo processo NLTK. O primeiro passo é “tokenizar” um texto, ou seja, quebrar o texto em palavras. Após isso são atribuídas tags para cada token, essas tags são chamadas de pos_tag. Pos_taggin é um dos principais componentes de quase todas as analises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e. substantivo, verbo, adjetivo, adverbio, pronome) e cada palavra só tem uma única tag. O conjunto de rótulos mais popular é o treebank. A tarefa de rotulação é fortemente dependente do idioma que está sendo tratado e não é uma tarefa fácil a criação de um conjunto de rótulos. No árabe, por exemplo, as palavras não contem espaços e são escritas de trás para frente, o que dificulta ainda mais a tarefa. O reconhecimento de entidades nomeadas (NER) permite identificar as entidades nomeadas, as quais comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. O terceiro passo do NLTK tem relação com isso, é a fase do ne_chunk. Nessa fase é possível atribuir como false ou true. Caso atribua True ele só busca as entidades nomeadas e as marca como NE, caso atribua False ele classifica as entidades nomeadas, por exemplo, como organization. Os tipos de EM dependem da aplicação, mas existem os seis tipos mais comuns que são: people (PER – pessoas), organization (ORG – organização), location (LOC- localização), geo- political (GPE – geopolítica), entity (entidade) , facility (FAC- instalações) e vehicles (VEH – veículos). Outro tópico abordado foi a sumarização. Sumarização de informação é um processo de geração automática de um resumo associado a um objeto. Ela permite não somente entender a estrutura de uma frase, mas também a do texto inteiro e permitiria evidenciar o tema tratado. Ou seja, a sumarização nada mais é que a classificação das frases baseadas em sua importância e normalmente frases que tem mais entidades e substantivos tem maior importância que outras sentencias. Em sala vimos um código que fazia justamente isso, para cada frase ele aplicava os passos do NLTK e depois contava quantas palavras naquela frase eram NN ou NNP (substantivos) e depois contava as entidades nomeadas. Com base nesses somatórios, era feito um score ingênuo e então imprimia as frases com o score maior para o menor. Também no fim da aula foi discutido sobre o terceiro desafio bônus, que consiste em um resumo de artigo.
Bruno Menezes Gottardo Ladeia Na aula do dia 14 o tema da vez foi NTLK através de exemplos: sumarização. O livro base da aula foi o NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries. da Nitin Hardeniya da Pack Publishing. NLTK é um acrônimo para Natural Language Toolkit, que consiste de um suíte de bibliotecas e programas para PLN. Com base num texto de exemplo que falava sobre a UFABC, utilizou exemplos de programas ntlk (especificamente ntlk.sent_tokeniza (string), codificação para (sentence) e, posteriormente pos_tags (token).) para classificar e agrupar o texto de exemplo. O POS- tagging é um dos principais componentes de quase toda análise PLN. Resume-se em, basicamente, rotular palavras com sua característica de linguagem (i.e. substantivo, verbo, adjetivo, advérbio, pronome, etc). O conjunto de rótulos mais popular utilizado para pos é o Treebank (U. Penn). Uma treebank é corpus textual parseado que possui anotações sobre estruturas sintáticas ou semânticas. É uma estrutura datada desde a década de 90. As treebanks possuem uma forte dependência ao idioma que está sendo tratado. Depois foi falado sobre Named Entity Recognition (NER), que permite identificar "entidades nomeadas". Estas entidades são comumente nomes próprios, locais e são utilizadas em etapas de PLN que permita identificar entidades-chave. Os tipos das entidades depende muito da aplicação, mas as mais comuns geralmente são People (PER), Organization (ORG), Location (LOC), Geo-Political (GPE), Entity Facility (FAC) e Vehicles (VEH). Agora vamos falar sobre sumarização. Consiste em um processo de geração automática de um resumo associado a um objeto. (e.g. texto, artigo, história). Ela permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. Permitiria, inclusive, evidenciar o tema tratado. Então, de uma forma intuitiva, ela nada mais é do que a classificação das frases com base em sua importância, então é possível assumir que, normalmente uma frase que possua mais entidades e substantivos, tem maior importância que outras sentenças. Como demonstração foi implementado uma script sumarizacao.py, que é um exemplo "simples" para cálculo de pontuação de importância, colocando um limiar para selecionar apenas as frases mais importantes. E, como texto de exemplo, foi utilizado o mesmo texto sobre a UFABC mostrado no início da aula. A partir dele foi possível obter as pontuações de cada sentença. Depois rodou o algoritmo com um exemplo para SPAM (obtendo infos direto da Association for Computer Machinery - ACM) e uma referente a uma notícia da FAPESP, obtendo a importância em ambos dos dois casos.
Amanda Cruz Francesconi NLTK através de exemplos - Sumarização: bibliografia: NLTK essentials, Nitin Hardeniya - livro mais prático, começaremos no capítulo 5. SUMARIZAR: não significa criar novas frases e sim selecionar do conjunto de frases de entrada algumas que sejam mais importante. funções: sent_tokenize(string): recebe um string e separa esse texto em frases considerando o final da frase como ponto final. Porém existem abreviações como No. que o algoritmo identifica como final de frase mesmo não sendo, assim é necessário fazer um pré processamento para retirar esses casos em que é conhecido o uso do ponto como não final da frase. word_tokenize(sentence): utiliza uma expressão regular como as já vistas em aula para separar a sentença em palavras. Um erro comum em usuários novos em PLN é utilizar a função slit e considerar o final de palavra como um espaço em branco, essa não é a utilizaçaõ correta pois uma vírgula é considerada na palavra caso não tenha espaço entre elas. A função word_tokenize considera sinais de pontuação, letras maiúsculas, etc. nlkt.pos_tag(tokens) - part of speech tagging: um rotulador de partes da fala, recebe uma lista de palavras e as classifica em rótulos segundo um dado dicionário. Características: os sinais de pontuação não são rotulados e a atribuição para cada palavra é única, ela recebe um único rótulo. O conjunto de rótulos mais populas é o treebank, criado por linguistas na universidade de Penn, contém 36 rótulos diferentes. nltk.ne.chunck(tagged, binary): reconhecedor de entidades nomeadas (NER - Named Entity Recognition). caso binary = FALSE, é realizada uma avaliação mais aprofundada, caso escolha TRUE o retorno é que classifica-se as palavras do texto que são consideradas entidades. Os rótulos mais comuns são: pessoas, organizações, localização, local geo-político, entidade, facility e veículos. SUMARIZAÇÃO: atribuir um peso para cada frase, é um processo de geração automática, permite não somente entender o conteúdo da frase em si mas sim do texto inteiro. Um programa possível consiste em utilizar as quatro funções vistas acima e a partir disso por exemplo contar quantos substantivos tem na frase, contar quantas entidades nomeadas e a partir disso calcular uma pontuação para cada frase considerando o cálculo (nº pronomes + nº substantivos)/nº de palavras, aquelas que tiverem pontuação mais próxima de um, na teoria seriam as mais importantes. Communicatins of the ACM: revista com coleção de artigos sobre computação, como por exemplo "the history of digital spam", atualmente está sendo utilizado inteligência artificial para produzir spam, gerando novos problemas nessa área.
July Anne Pinheiro Aula 14: NLTK através de exemplos: Sumarização A aula iniciou com um exemplo de NLTK em python para entendermos o seu funcionamento em um conjunto de texto de exemplo. pos_tag: Part of speech tagging Junto com o exemplo vimos a aplicação do POS-tagging, um dos principais componentes de quase todas as análises de PLN. Ela é uma tarefa de etiquetagem de POS que implica simplesmente em rotular palavras com sua característica de linguagem como por exemplo em substantivo, verbo, adjetivo, advérbio, pronome. O conjunto de rótulos mais popular de um pos-tagging é o treebank. Treebank Definição: É um corpus de texto analisado que anota a estrutura da sentença sintática ou semântica . A construção de corpora analisada no início dos anos 90 revolucionou a linguística computacional, que se beneficiou de dados empíricos em grande escala. Para o processamento de linguagem existe uma forte dependência ao idioma que está sendo tratado. Devido a essa dependência a criação de um conjunto de rótulos a tarefa não se torna fácil. Reconhecedor de entidades nomeadas O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Tipos mais comuns de NER Tipos mais comuns são: People(PER), Organization(ORG), Location(LOC), Geo-Political(GPE), Facility(FAC), Vehicles(VEH). Sumarização de informação Consiste em um processo de geração automática de um resumo associado a um objeto. A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Outra abordagem da sumarização Vamos assumir que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Além disso, assumiremos que normalmente uma frase que tem mais entidades e substantivos possui maior importância que outras sentenças. Usando essa lógica temos como um exemplo "simples” para cálculo de pontuação de importância, considerando um limiar para selecionar apenas as primeiras frases mais importantes. Exemplo em código: Vimos um exemplo de aplicação em python para sumarização de um texto, com palavras de acordo com sua importância. CACM: SPAM! Foi apresentado também a revista de computação CACM, e alguns artigos sobre SPAM e a sua relevância em relação a sumarização assim como notícias da FAPESP. Desafio 3: No final da aula foi apresentado o desafio 3 da disciplina, composto pela leitura de um artigo de até 2 páginas na CACM.
Thiago Henrique Gomes Panini Resumo 14 – PLN O professor Jesús deu início a décima quarta aula de Processamento de Linguagem Natural abordando a biblioteca NLTK e comentando sobre algumas análises a serem feitas nas próximas aulas. Recomendação de livro: NLTK Essentials. Como primeiro exemplo, o professor mostrou um texto de exemplo e fez uma experiência com os alunos perguntando sobre o número de frases presentes em determinado parágrafo. Obviamente, temos o ponto final como separados de frases. Entretanto, existem algumas situações apartadas que podem ser confundidas com frases (como por exemplo, o ponto final em No. 754). A biblioteca NLTK automaticamente realiza a separação de frases a partir do método sent_tokenize(string), dividindo o texto a partir de um ponto. Uma segunda função chamada word_tokenize(sentence), utiliza uma expressão regular e divide a sentença em palavras, incluindo sinais de pontuação, como ponto, vírgula, parênteses, entre outros. A terceira função é a pos_tag(tokens) que, por sua vez, recebe uma lista de palavras (tokens) e atribui um rótulo (label) a cada uma das palavras. Este método é um rotulador de palavras e um componente principal em análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e. substantivo, verbo, adjetivo, advérbio, pronome). Uma questão importante realizada em sala mencionou a presença de palavras ambíguas, ou seja, de grafia igual mas com significados diferentes (por exemplo, Washington, Albert Einstein, entre outros). Para estes casos, o professor disse que o que tem sido visto é o contexto sendo considerado para essa definição. Um corpus famoso relacionado a essa classificação dos tokens é o Penn Treebank. Voltando um pouco ao exemplo utilizado para a explicação dos métodos, o significado de alguns rótulos foi dito, além da dificuldade em realizar esse tipo de tokenização e classificação em idiomas árabes e chineses. Até o momento, dividimos a frase, dividimos as palvras, e as palvras foram rotuladas. Dentre os rótulos mais comuns, temos People, Organization, Location(LOC), Geo-Political(CPE), Entity, Facility(FAC), Vehicles(VEH). Na abordagem intuitiva, a sumarização é a classificação de frases em sua importância. Assim, é possível assumir que normalmente uma frase que tem mais substantivos e entidades tem maior relevância. No final da aula, o professor comentou a respeito do que seria o Desafio 3 da matéria, sendo este contemplado pelo resumo de um artigo da revista CACM com requisito de que tal artigo tenha, no mínimo, duas ou mais páginas.
Felipe Rigo Yoshimura Na aula 14 foi mostrado a utilização da biblioteca NLTK em python utilizando exemplos de sumarização, tokenização e part of speech tagging (POS-tagging). Como referência foi utilizado o livro Nitin Hardeniya. NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries. PACKT. Utilizando um texto como exemplo da descrição da UFABC, foram introduzidas funções do NLTK como nltk.sent_tokenize(string) que serve para quebrar o corpo do texto em frases. A partir disso, é possível utilizar a função nltk.word_tokenize(sentence) para quebrar uma frase em palavras. Utilizando uma lista de tokens na função nltk.pos_tag(tokens) é realizado o part of speech tagging de cada token, ou seja, rotulado cada token com sua característica da linguagem como verbo, substantivo, adjetivo etc. O conjunto mais popular de rótulos é o treebank, criado no começo de 1990, revolucionou a linguística computacional utilizando grandes massas de dados empíricos. Esses rótulos criados são fortemente relacionados com o idioma utilizado, podendo se tornar um grande desafio como no árabe. O reconhecimento de entidades nomeadas visto na aula passada, que podem ser nomes próprios, locais e organizações entre outros, são muito utilizados para identificar palavras-chave. Utilizando a função nltk.ne_chunk(tagged, binary) pode-se fazer o reconhecimento das entidades nomeadas em um texto, caso o parâmetro binary for true a função apenas reconhece a entidade nomeada, caso contrário ela também a classifica. As classificações variam muito da aplicação, porém as mais comuns são: people, organization, location, geo-political, entity, facility e vehicles. Na segunda parte da aula foi visto o conceito de sumarização, que é o processo de geração automática de resumo associado a um objeto, por exemplo um texto, uma história ou um artigo. A sumarização permite entender as entruturas das frases, além do texto inteiro e o tema tratado. Essa técnica será vista como uma classificação de importância de frases, podendo assumir que a frase que possuir maior número de substantivos e entidades nomeadas tem maior importância em comparação com as outras. Após calcular uma pontuação para cada frase, basta selecionar uma nota de corte (limiar) para selecionar as frases que permanecerão na sumarização. Esse cálculo pode ser a simples razão entre entidades nomeadas mais substantivos e o total de tokens na frase. Alguns exemplos foram mostrados na aula utilizando textos de SPAM e notícias da FAPESP.
Lucas Ferraz Nicolau Esta foi a primeira aula focada na utilização prática da biblioteca Natural Language Toolkit (NLTK), neste momento, para sumarização de corpus. Foram explanados o funcionamento de diversos métodos da biblioteca assim como apresentou-se exemplos de implementações das mesmas. Como referência bibliográfica, foi utilizado NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries de Nitin Hardeniya. A primeira função apresentada foi nltk.sent_tokenize(string), sendo utilizada para dividir um texto em sentenças, isto é, unidades menores para análise mais apurada. A ideia básica desta função é a separação do texto em fragmentos, como frases, conforme se encontram pontos finais na leitura. Note que não necessariamente a pontuação indica final de uma frase, portanto, seu funcionamento real deve ser mais sofisticado. A função nltk.word_tokenize(sentence) recebe uma sentença e a divide em palavras. Sua implementação é feita através de uma expressão regular, de modo parecido com o método visto em aulas anteriores. A nltk.pos_tag(tokens) é uma função que atribui rótulos a um token (part of speech tagging). Para tal tarefa, é necessário um dicionário pois não se pode criar uma heurística para rotular qualquer palavra. Logo, esta função é fortemente dependente do idioma do contexto, sendo uma tarefa de alta de dificuldade para certos idiomas. O conjunto de rótulos mais popular é o treebank (U. Penn) que possui 36 diferentes tags para caracterizar uma palavra. A última função analisada foi nltk.ne_chunk(tagged, binary) é utilizada para reconhecer entidades nomeadas a partir de uma palavra rotulada, utilizando para isso uma estrutura hierárquica. Caso o parâmetro binary seja passado como True, a função apenas irá distinguir entidades nomeadas de entidades não nomeadas enquanto, passada com o valor False, irá buscar diferentes classificações para as entidades nomeadas. A sumarização é um processo de geração automática de um resumo associado a um objeto. É um resumo de um texto considerando um ranqueamento de importância entre as frases que o compõe. Utiliza-se a sumarização para estruturar um texto e evidenciar o tema tratado. Uma abordagem intuitiva que poderia ser utilizada para sumarização de um texto é considerar as frases mais importantes aquelas que apresentam uma maior quantidade de entidades nomeadas. Este conceito pode ser implementado através das 4 funções apresentadas e resulta em uma maneira simples de pontuação de importância.
Thiago Felipe Floreste A aula "NLTK através de exemplos: Sumarização" introduziu o NLTK (Natural Language Toolkit), uma biblioteca para processamento de linguagem natural em python, focando principalmente em aplicá-la em processos de Sumarização da Informação. Inicialmente foram apresentadas algumas funçõesbásicas do NLTK, usando como exemplo um texto em inglês contendo uma apresentação da Universidade Federal do ABC (UFABC). A função "sent_tokenize" recebe como entrada um texto e retorna uma cópia do texto tokenizada em sentenças, em um formato de array de sentenças. As sentenças retornadas pelo "sent_tokenize" podem ser usadas como entrada na função "word_tokenize", que retorna um vetor de palavras da sentença. A função "pos_tag" realiza o POS tagging (Part-of- speech tagging) dos tokens - isto é, rotula cada palavra de acordo com a característica de linguagem ao qual ela está relacionada (como substantivo, verbo, etc) - retornando um array de tuplas, onde cada tupla contém o token e o rótulo definido para ele. Para o processo de POS tagging, o "The Penn Treebank" é o conjunto de rótulos mais popular. A função "ne_chunk", por sua vez, realiza o reconhecimento de Entidades Nomeadas (EN), que normalmente são as entidades principais de um texto . A "ne_chunk" recebe como entrada uma lista de tuplas rotuladas com o "pos_tag" e um parâmetro para indicar se a classificação deve ser binária ou multiclasse. A Sumarização é um processo que permite entender a estrutura de um texto e compreender seu tema principal. Nesta aula foi usada uma abordagem intuitiva para a Sumarização, dessa forma, ela foi definida como a classificação de frases de acordo com a importância, sendo a importância de uma frase medida pela proporção de Entidades Nomeadas que ela contém. Um código em python (nomeado sumarizacao.py) que implementa esta versão da Sumarização foi apresentado na aula ,exibindo os resultados que ele gerou para três textos: o texto de apresentação da UFABC, usado como exemplo durante o decorrer da aula; o artigo "The History of Digital SPAM", retirado da magazine Communications of the ACM; e uma notícia da FAPESP sobre os danos causados na superfície da terra pelas atividades humanas.Por fim, foi apresentado o Desafio 3, que consiste em realizar o resumo de um artigo que contenha pelo menos 2 páginas e tenha sido publicado entre 2018 e 2019 na magazine Communications of the ACM;
Marcelo de Souza Pena Aula 14 de PLN sobre NLTK (Natural Language Toolkit - biblioteca Python cheia de funções de PLN) através de exemplos, nesta aula focando em sumarização. NLTK essentials, livro cheio de exemplos (tem em PDF) de PLN, com expressões regulares, lemmatizadores, etc por trás, focando no capítulo 5 nesta aula. Vimos alguns exemplos de funções da biblioteca NLTK sendo aplicadas. Primeira função recebe um texto e quebra em frases a cada ponto final. Isso pode dar problema em casos onde o ponto não indica fim de frase, mas sim abreviações como "No. 1", assim uma frase acaba sendo erroneamente quebrada em duas. Neste caso o correto é fazer um preprocessamento já sabendo em quais casos isso pode acontecer e, quando acontecer, trocar o ponto por outro caractere especial. Segunda função quebra em palavras. Terceira recebe uma lista de palavras e atribui um rótulo dentre os 36 de uma lista (interjeição, verbo sem conjugação, advérbio, nome próprio no singular, etc). A rotulação é feita por um treebank, que é quase como uma árvore, mas depende muito do idioma, uma vez que existem idiomas lidos em sentido reverso, por exemplo, além de dificultar a criação de rótulos. Quarta função recebe uma lista de tuplas e mostra quais são importantes (NER - reconhecimento de entidades nomeadas), com ou sem as classificações (pode apenas mostrar quais são importantes ou classificar as pessoas, organizações, etc). As seis entidades nomeadas mais comuns são as mesmas da aula passada, vá ver os resumos dela. Entrando em sumarização de informação, que é o processo de gerar automaticamente um resumo associado a um objeto, permitindo entender a estrutura da frase e do texto inteiro, evidenciando o tema tratado. Na prática a sumarização classifica frases com base em sua importância, sendo que normalmente as mais importantes terão mais entidades e substantivos. Código de exemplo que lê o arquivo, faz a divisão em frases, palavras, atribuição dos rótulos e atribuição de entidades nomeadas, depois conta quantos de cada rótulo teve e mostra as frases ranqueadas com suas pontuações e outros números. Communications of the ACM é como o IEEE da computação. Tem revista digital com acesso pela UFABC, destaque para um específico sobre a história do spam. Desafio 3 é ler uma notícia dessa revista e resumir.
Pedro Ricardo Bronze Para as próximas aulas utilizaremos o livro 'NLTK Essentials' que apresenta a biblioteca NLTK. Essa biblioteca possui diversas funções implementadas para o processamento de linguagem natural, parte do que já estudamos aqui já possui implementação. Sumarização consiste em extrair as frases que sintetizam o sentido do texto fazendo um resumo. Podemos assumir que uma frase ou sentença é aquela que é divida por um 'ponto'. Utilizando a função 'sent_tokenize(content)' do pacote NLTK, podemos dividir em frases que são estruturas separadas por pontos. A função 'word_tokenize(sentence) cria listas de palavras para cada sentença. Utilizar regex é melhor do que a função 'split' dividida por espaços em branco, haja visto que vírgulas podem ser consideradas parte de palavras. A terceira função importante é a 'pos_tag(tokens)' podemos atribuir rótulos a cada palavra para saber a que tipo cada qual pertence. No caso do NLTK, sua função 'pos_tag' é baseada no Treebank que vem sendo desenvolvido por linguistas desde os anos 90. Há implementações em português com lematizadores e stemmers disponíveis. Para alguns casos como a língua árabe na qual os caracteres não apresentam espaços em branco entre si se torna mais complicada a implementação de certas funções vistas até agora. Com a função 'ne_chunk(tagged, binary=True)' automatiza-se o processo de extrair entidades nomeadas (NE) do texto. Em alguns casos pode-se haver equívocos, no caso do texto utilizado o programa nomeia 'Federal University' como uma entidade que está na localidade 'ABC' e não como uma instituição (entidade nomeade única). Com essas 4 funções podemos começar o processo de sumarizar, a ideia fundamental é atribuir um peso a cada frase automaticamente para se obter um resumo. Frases que contenham mais substantivos e entidades são consideradas mais relevantes. O script 'sumarizacao.py' é um exemplo de como podemos criar um script para realizar o processo de sumarização de forma simples. Uma breve explanação sobre como o fenômeno do SPAM vem sendo tratado ao longo dos anos e foi então apresentado uma prova de conceito de spam visual. Utilizando Inteligência Artificial poderia-se criar spams em tempo real simulando por exemplo celebridades falando algo que nunca ocorreu. O Desafio 3 consiste na produção de um resumo de 2 páginas da revista ACM.
Paula Keiko Miyashita A aula 14 foi sobre NLTK através de exemplos de sumarização. Para esta aula, consideramos sumarização como identificação dos trechos de maior importância, no caso o texto em questão foi dividido em frases, acabando em pontos finais. A ideia do algoritmo estudado era separar os parágrafos em frases, determinadas pelo ponto final, e então separar as palavras. Assim podemos tokenizar, rotular as palavras individualmente. O conjunto utilizado foi o treebank U. Penn, um rótulo muito popular, nele existem 36 rotulações diferentes possíveis para uma palavra. Essa classificação/rotulação é feita por análise sintática e semântica. O rotulador, no entanto, depende muito da linguagem sobre a qual é aplicada, nem todas as línguas tem a mesma separação entre palavras e frases, se compararmos o inglês com o árabe, chinês ou até mesmo o alemão, podemos notar grandes diferenças. Em seguida estudamos um reconhecedor de entidades nomeadas, NER – Named Entity Recognition. Entidades nomeadas são normalmente nomes próprios, locais e utilizadas para localizar entidades-chave. Aplicamos o algoritmo sobre alguns trechos da internet sobre a UFABC. Voltando ao tema da sumarização, assumimos que uma frase com maior quantidade de entidades e substantivos retém maior informação sobre o texto em questão, logo é mais importante. Baseando-se nessa definição, foi apresentado um código em python que calculava uma pontuação de importância, permitindo que nós selecionemos apenas as frases mais importantes do texto. O script quebra e rotula as palavras individualmente. Em seguida calcula o número de substantivos e entidades nomeadas e calcula um score, que nada mais é que a porcentagem de substantivos e unidades nomeadas sobre o total de tokens/palavras. Ao fim da execução, imprime-se as frases com maiores scores (informando os valores dos scores). Foi comentado um pouco sobre a utilização do método estudado para a criação de spams, que atualmente são até modificados de acordo com os interesses de cada usuário para gerar maior efetividade. Para finalizar a aula, o professor falou sobre o terceiro desafio, também com valor de 0.5 na média final, que se trata de um resumo de um artigo da Magazine Communication of the ACM de pelo menos duas páginas e ano de publicação 2018 ou 2019.
Willian Teruya Kimura Na aula realizada no dia 29/07, foi apresentado o tema referente a “NLTK através de exemplos: Sumarização”, no qual explicou o conteúdo referente a categorização de tokens, introduzido através de um exemplo prático explicando algumas etapas brevemente referentes a: separação de string de cada parágrafo, a separação do texto em tokens por meio de uma função _word_tokenize_ por sentença, e, por fim, a categorização dos tokens por meio de tags (função _pos_tag_ ). _Pos-tagging_ é um dos componentes mais importantes em quase todas as análises de PLN, em que a tarefa de etiquetagem se trata em rotular as palavras com suas devidas características adotadas pela linguagem, tendo como exemplo: pronomes, substantivos, artigos etc. O conjunto mais popular hoje em dia é o Treebank. Treebank é um corpus de texto que registra estruturas de sentença sintática ou semântica, que fora desenvolvido no início dos anos 90 e revolucionou a linguística computacional, em que foi beneficiado por dados empíricos em larga escala. No Treebank, existe uma forte dependência com o idioma em que está sendo tratado, assim se torna mais difícil criar um conjunto de rótulos. Para identificar “entidades nomeadas”, é utilizado o NER, ou Named Entity Recognition, em que tais entidades comumente são nomes próprios, locais são utilizados para etapas de PLN que permita identificar entidades-chave. As entidades mais comuns a serem utilizadas são pessoas (people), organização (organization), local (location), Geo-Política (Geo-Political), instalação (facilities) e veículos (vehicles). Após compreender Entidades nomeadas, foi apresentado o conteúdo de sumarização, em que se trata da geração automática de um resumo a partir da associação de um objeto. Ela permite não apenas compreender a estrutura de uma frase, mas sim a do texto inteiro, permitindo evidenciar o tema tratado. Na aula, foi assumido de maneira intuitiva que a sumarização não é mais que uma classificação das frases baseadas em sua relevância. A partir dessa linha de raciocínio, é mostrado um exemplo “simples” para calcular um score de importância. Com isso foi apresentado um algoritmo para se calcular tal score, verificando a quantidade de substantivos e entidades presentes em cada frase. Em seguida, foi mostrado o uso de Digital SPAM.
Tamiris Gabriele da Silva Lira A décima quarta aula de Processamento de Linguagem Natural começou a introduzir o pacote NLTK, Natural Language Toolkit, através de exemplos. Nessa aula, foi, especificamente, tratada a sumarização. A bibliografria indicada para essa aula é o livro NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries, capítulo 5. O texto de exemplo para essa aula trata de uma introdução, em inglês, à UFABC. Com a função nltk.sent_tokenize(string), esse texto foi dividido em sentenças, usando um ponto (.) como critério de separação. Isso não gerou sentenças perfeitas, visto que a última foi dividida em duas pela presença do ponto que indicava abreviação na palavra No.. A função nltk.word_tokenize(sentence), recebe a sentença e a separa em tokens, os quais podem ser palavras ou sinais de pontuação. Ao usar a função nltk.pos_tag(tokens) no resultado da função anterior, cada token é classificado - seja em substantivos, verbos, pronomes, etc., seja como pontuação no caso dos símbolos (por exemplo, o símbolo ':' é classificado como ':'). Essa função é um componente fundamental para as análises de processamento de linguagem natural, pois rotula "palavras com sua característica de linguagem". O conjunto de rótulos mais popular usado para essa função é o treebank, que classifica a palavra de acordo com 36 identificadores. A definição dos rótulos é extremamente dependente do idioma que será, por eles, tratado. Um reconhecedor de entidades nomeadas (NER) pode ser utilizado para identificar entidades nomeadas (NE). No NLTK, a função nltk.ne_chunk(tagged, binary = True) pode ser usada para identificar e agrupar NEs. Caso o parâmetro binary seja falso, as NEs são classificadas de acordo com rótulos como organização, pessoa, etc.. A Sumarização é um processo de geração de resumos. Aqui, assumimos que a sumarização é a classificação de frases baseadas em sua importância. Considerando maior importância para frases que possuem mais NEs e substantivos, o programa sumarizacao.py classifica as frases do texto de exemplo de acordo com um score (score = (nNes + nNouns)/nTokens). Por fim, o professor apresentou o desafio 3, que consistirá no resumo de um artigo da CACM, que precisa ser maior ou igual a duas páginas.
Diego Pereira de Lima Na aula do dia 29/08, de Processamento de Linguagem Natural do professor Jesus Mena Chalco foi abordado conceitos de sumarização através da biblioteca NLTK. Na introdução da aula foi feita uma breve citação das referencias a serem utilizadas ao percorrer da aula. Entrando em meio a matéria a ser abordada na aula, foi discorrido sobre algumas funções do próprio NLTK, entre eles: extração de tokens, realiza separação de palavras, pos tag (rotulando as palavras das mensagens em um corpus identificando substantivos, adjetivos, advérbios e pronomes por exemplo). Depois foi abordado sobre o Treebank (as primeiras análises feitas na década de 90 proporcionaram um grande avanço na área de linguística computacional), o qual é um conceito que visa analisar e extrair a estrutura da sentença tanto de forma sintática quanto de forma semântica. Sendo que atualmente a não só utilizado na linguística computacional, mas também na pesquisa de teorias linguísticas e casos reais de ocorrências na língua. Os bancos de arvore são extremamente uteis quando se trata de corpora em grande escala. Entretanto, dependendo da linguagem a ser mapeada é difícil o processo de efetuar os rótulos em cada palavra. Línguas que possuem símbolos em sua escrita torna-se complexo tal uso da técnica. Foi também abordado uma breve revisão do reconhecimento de entidades. Técnica utilizada para agrupar classes de palavras como: pessoas, organização, localização, veículos, entre outros. Este método visa relacionar e associar entidades em meio a o texto escrito. Entretanto, o reconhecimento de entidades pode-se tornar complicado devido a ambiguidade em certas situações. Foi abordado também em aula a geração automática de um resumo por sumarização, o que representa uma classificação de frases baseadas em sua relevância no meio da corpora. Em sala, como forma de exemplificação, foi utilizado um script em python calculando o score de entidades nomeadas relacionando com o número de tokens de forma a extrair a importância da entidade. E por fim foi abordado as como deve ser feito o terceiro desafio valendo meio ponto na média final, o qual tem como objetivo resumir um artigo publicado entre 2018 e 2019 nos mesmos moldes dos resumos em aula.
Luiz Gabriel Correia NLTK através de exemplos: Sumarização. NLTK Essentials é um bom livro prático com muitos exemplos do uso da biblioteca NLTK. Hoje veremos o capítulo 5. Como sumarizar um texto? Podemos pegar frases do texto e ordená-las atribuindo uma nota, mostrando apenas as mais importantes. Não devemos usar espaços em branco para separar as palavras, devemos sempre usar expressões regulares ou o módulo de NLTK para isto. A quebra de palavras é mais complexa do que isso. POS- tagging é um dos principais componentes de quase todas as análises de PLN. O pos-tagging rotula as palavras com base nas informações geradas pelo Treebank, em 36 rótulos como conjunções, adjetivos, pronomes, verbos, etc. Está é a forma de categorização que um grupo de linguistas montaram através de uma árvore simular a um tesaurus. O treebank começou a ser construído no anos 90, para língua inglesa, e até hoje é bastante utilizado. Para português o NLTK também pode ser utilizado, mas é necessário instalar o dicionário. A função ne_chunk recebe um lista de tuplas. O método analisa as tuplas e retorna uma Entidade Nomeada (NE) para cada um deles. Se colocamos o parâmetro binary como True, teremos somente se as tuplas são ou não entidades, já se ele for False, a classificação será entre 6 tipos básicos de entidades. A sumarização de informação é um processo de geração automática de um resumo associado com o texto completo. Para atribuir um pontuação, assumiremos o seguinte princípio: normalmente, uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Em um rápido programa, usamos NLTK para classificar as entidades do texto, e em loop contamos as que são substantivos NN ou NNP. Na segunda parte, fazemos a mesma coisa contanto do número de entidades nomeadas (NE). Depois fazemos um cálculo ingênuo de um score que considera a fração de substantivos em cada frase, quanto mais próximo de 1 maior a importância da frase. Depois imprimimos o ranking das melhores frases por esse critério. A ACM é a IEEE da computação. Todos que querem seguir como cientista da computação é importante ler a Comunications ACM.
Jean Augusto de Araujo Resumo da aula de Processamento de Linguagem Natural do dia 29/07: NLTK através de exemplos: Sumarização. A aula iniciou com a bibliogragia introdutória e um texto de exemplo. Foi mostrado exemplo de entrada e saída com nltk.sent_tokenize, nltk.word_tokenize e nltk.pos_tag, da biblioteca nltk para introduzir o tema. Em sequência, foi introduzido o pos_tag: Part of speech tagging, que é um dos principais componentes de quase todas as análises de PLN. A ideia principal é rotular ou etiquetar palavras de acordo sua característica de linguagem. Como por exemplo, substantivo, verbo, adjetivo, advérbio, pronome. Um conjunto de rótulos que já popular, é conhecido como treebank U. Penn. Seguindo, eminglês, exemplo de tags e suas descrições, como CC - Conjunção coordenada, CD - Numero cardinal, JJ - Adjetivo, etc. Na linguística, o treebank é, dado um corpus de entrada, capaz de de denotar a estrutura sintática ou a semântica da sentença. O treebank tem sido crucial na área de pesquisa de sintaxe e teorias de linguagem, contudo, ele é fortemente dependente ao idioma do corpus, pois os rótulos podem assumir diferentes formas a depender do idioma. Um reconhecedor de entidades nomeadas, as NER, Named Entity Recognition, possibilidta a identificação de nomes próprios e locais, utilizado em Processamento de Linguagem Natural para identificar entidades-chaves. Utilizando esses conceitos, foi apresentado entrada e saída para nltk.ne_chunk, com entrada e saída. Entre as ENs mais abundantes ou comuns, se encontra pessoas, organizações, localizações, monumentos e contruções ou veículos. A partir disso, é possível criar sumarização. Sumarização de informação é o processo capaz de gerar de forma automática um resumo, desde que associado a um objeto. É com ela que é capaz entender a estrutura de uma frase ou sentençã e, não só, mas entender também a estrutura de todo o texto do corpus. A partir da sumarização, é possível identificar o tema tratado, discutido ou proposto. É uma classificação das frases, baseada na importância das entidades e substantivos. No exemplo sumarizacao.py é feito o cálculo de pontuação da importância, onde é dado um limiar, para considerar em ordem, apenas as frases mais importantes.
Ramon Neres Teixeira Jardim Esta aula foi sobre NLTK aplicado em exemplos de sumarização. Primeiramente foi apresentada a função sent_tokenize que divide um texto enviado como parâmetro em frases, separando-o pelos pontos encontrados e tem um funcionamento parecido com a função split popularmente usada nas linguagens de programação. Em seguida, a função word_tokenize, que utiliza uma expressão regular para dividir o texto enviado como parâmetro em palavras. Uma abordagem parecida, porém, errônea, que pode também ser feita com a função split é a divisão do texto pelos espaços em branco, que funcionaria parcialmente, mas traria junto às palavras os caracteres que as acompanham, incluídos sinais de pontuação. Também foi exibida a função pos_tag (que é uma das mais utilizadas para análises em PLN), rotula as palavras nos conjuntos PRP, VBZ, NNS, IN, DT, NN e outros que visam representar sua característica de linguagem. O acrônimo “pos” no início do nome da função significa Part of Speech e essa rotulação acontece baseando-se em uma treebank, que é um corpus que contém informações sobre a sintática e a semântica de uma linguagem. Após isso foi mostrado o reconhecedor de entidades nomeadas presente na função ne_chunk. Esta função aglomera um conjunto de palavras em um grupo e atribui uma tag (caso seja enviado false como parâmetro) ao grupo como um todo, por exemplo, “São Paulo” pode ser agrupado como uma organização, enquanto as palavras “São" e "Paulo" são rotuladas como nomes próprios. Podemos utilizar estas 4 funções em conjunto para sumarizar um texto e para isso, pode-se atribuir pesos as frases. Uma noção intuitiva para atribuir estes pesos seria definir frases com mais entidades e substantivos como mais importantes obtendo-se assim uma lógica simples para calcular uma medida de importância para cada frase e então permitindo que se obtenha apenas as frases mais importantes, considerando todas aquelas que tem o grau de importância acima de um dado limiar. O programa sumarizacao.py utiliza estas 4 funções exibidas e este cálculo intuitivo de importância das frases para criar resumos de textos selecionando as frases mais importantes com base neste cálculo.
Jairo da Silva Freitas Junior A aula 14 foi baseada no livro “NLTK Essentials: Buidl cool NLP and machine learning applications using NLTK and other Python libraries”, de Nitin Hardeniya. Suponha que importemos a respectiva biblioteca como nltk. Para separar frases de uma cadeia podemos usar nltk.sent_tokenize(string). Esta função separa frases com base na pontuação final, desconsiderando siglas como Ph.D.s. Porém, se algum padrão desconhecido que se pareça com um fim de frase for encontrado a mesma irá quebrar a string. Usando nltk.pos_tag(tokens), a biblioteca retorna tuplas no formato (token, Part of Speech Tag). Por exemplo: na frase “Brazilian institution based in Santo André” retornaria [ (‘Brazilian’, ‘JJ’), (‘institution’, ‘NN’), (‘based’, ‘VBN’), (‘in’, ‘IN’), (‘Santo’, ‘NNP’), (‘André’, ‘NNP’) ], onde NN é substantivo, VBN verbo, IN preposição e NNP nome próprio. Esta atividade é muito comum e, lembre-se, é implementada a partir de um conjunto de dados. O conjunto de rótulos mais popular é o Treebank. Outra funcionalidade implementada no NLTK é o reconhecimento de entidades nomeadas. Usando nltk.ne_chunk(tagged, binary), em que tagged é uma tupla (token, Part of Speech Tag), teremos como retorno uma NLTK Tree, que é uma estrutura de dados que armazenas termos e suas entidades nomeadas associadas hierarquicamente, seguindo a teoria das linguagens formais (aplicando as regras substituição segundo um modelo formal). De posse desses conhecimentos analisamos formas de sumarizar textos, ou seja, selecionar frases mais relevantes do texto que traduzem as ideias principais nele contidas. Numa primeira abordagem (sumarizacao.py) para cada frase atribuímos uma pontuação que varia de 0 a 1, calculada como a razão entre a quantidade de entidades nomeadas e substantivos pelo total de tokens. Testando esta abordagem ingênua em uma página da CACM os resultados foram insatisfatórios, pois frases pequenas com pouco contexto foram as primeiras colocadas, porém ainda assim é melhor que ler todo o texto. Ao final da aula o professor divulgou o terceiro desafio valendo 0.5 na média final. Os alunos devem resumir um artigo de 2018 ou 2019 publicado na revista CACM com pelo menos duas páginas.
Matheus de Araujo Vargas Na aula de Processamento de Linguagem Natural do dia 29 de Julho do professor Jesus P. Mena o tema abordado foi apresentado o NTLK (Natural Language Toolkit) e exemplos de uso do mesmo. Foram abordados também o conceito de POS- Tagging, entidades nomeadas e sumarização de informação. O Natural Language Toolkit, ou mais comumente NLTK, é um conjunto de bibliotecas e programas para processamento de linguagem natural disponível na linguagem de programação Python. Foi desenvolvido por Steven Bird e Edward Loper no Departamento de Computação e Ciência da Informação da Universidade da Pensilvânia. O NLTK conta com uma gama muito grande de recursos, como: classificação, tokenização, stemming, tagging, parsing e raciocínio semântico. Todas essas funções são utilizadas para análise dos textos. Outras vantagens do NLTK é a existência de versões para Windows, Mac OS X e Linux, sendo também open source e existindo uma grande comunidade ativa de desenvolvedores que estão sempre atualizando e adicionando novos recursos. A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular e usualmente utilizado é o treebank. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Os tipos mais comuns de entidades nomeadas são: pessoas, organizações, localizações, entidades, edifícios e veículos. A sumarização é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Assume-se que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Podemos também assumir que, normalmente, uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças.
Rodrigo Akiyama Abrantes Aula 14 de Processamento de Linguagem Natural - NLTK através de exemplos: Sumarização A NLTK é uma biblioteca que contém diversas funções e métodos para o tratamento de linguagem natural. Foi desenvolvida na Universidade da Pensilvânia. Nela, estão implementadas funcionalidades como o ngrama, a tokenização e diversos outros métodos já previamente estudados na disciplina. Foi dado o exemplo da tokenização te um texto sobre a UFABC a partir das funções da nltk. A partir dos tokens gerados foi realizado a etiquetagem (tagging) de cada um destes, rotulando as palavras com sua característica de linguagem (substantivo, verbo,adjetivo, advérbio, pronome). Este é um dos principais componentes de qualquer análise de PLN.O conjunto de rótulos mais popular é o treebank.Ele é um acopla aos tokens a estrutura sintática e semântica da língua especificada. Esta estrutura é fortemente dependente do idioma que é tratado, visto que diferentes idiomas possuem diferentes formas de escrita e leitura de suas palavras. Por meio do NLTK, é possível também realizar o reconhecimento de entidades nomeadas, que são, normalmente, nomes próprios, locais, títulos, etc. Estas são identificados como entidades-chave. os tipos de entidades mais comuns são o de pessoas, organizações, localizações, geo-politico, entidade, facilities e veículos. Através da função nltk.ne_chunk, é possível realizar esta análise. Sumarização de informação: A sumarização é um processo de geração automática de um resumo associado a um objeto textual. Ela permite o entendimento da estrutura do texto inteiro, quando o resumo é bem construído já que ela irá evidenciar o tema tratado de forma mais explícita.Para PLN, podemos assumir que a sumarização revolve em classificar as frases com base na sua importância e que as frases que contém mais entidades e substantivos possuem maior importância. Desta forma, podemos construir um resumo baseado apenas nas frases mais importantes, seguindo um esquema de pontuação atribuído a estas sentenças mais importantes. Tal método pode ser empregado para a identificação de spam, já que estes conterão pouca informação útil.
Luana Ferreira do Nascimento NLTK é uma ferramenta que nos auxilia a criar modelos de machine learning, possuindo dentro de si várias ferramentas. Uma destas ferramentas é o post_tag, que serve para separar todos os tokens de um texto para depois caracterizar cada um de acordo com sua função sintática, ou seja, vai dizer para cada token se ele é um adjetivo, substantivo, verbo, etc. A entrada deste algoritmo é um vetor de tokens e a saída é um vetor de tuplas com o token como chave e um código indicando sua classificação na língua como valor. O conjunto de rótulos que mais é utilizado é o treebank, que além de contar com diferentes tipos de funções sintáticas que os termos podem ter também conjuga verbos dando assim indicações semânticas sobre o texto analisado. A primeira lista treebank publicada revolucionou a computação e se beneficiava de um grande dataset empírico e foi útil para testar diversas teorias linguísticas. O primeiro treebank publicado que causou toda esta revolução foi o The Penn Treebank. Estes modelos sempre vão possuir uma forte dependência do idioma a ser tratado, sendo uma tarefa bem difícil de ser realizada. O NER (reconhecimento de entidades nomeadas) permite identificar termos que se referem a nomes próprios, geralmente de pessoas, locais e instituições e podem ser considerados como entidades-chave em muitas ocasiões. Sumarização de informação é o processo que gera automaticamente um resumo de um certo objeto que pode ser um texto, artigo, história, etc. Este processo nos permite entender a estrutura de frases e também a estrutura de todo um texto, evidenciando o tema tratado. Podemos assumir que a sumarização é a classificação das frases de um texto com base na importância de cada uma, sendo que geralmente quanto mais entidades e substantivos uma frase tem maior a sua importância para o tema tratado. Seguindo esta lógica podemos definir um sistema de pontuação de importância para cada frase e selecionar apenas as mais importantes para o resumo.
Marcela Akemi Yamashita NLTK através de exemplos: sumarização. Livro referência: NLTK Essentials. Texto de exemplo sobre a UFABC em inglês. Exemplo de tokenização usando nltk.sent_tokenize: texto decomposto em frases, separadas por ponto final. Problema: quebra indevida de frases, onde ponto é utilizado para abreviar palavras. Pos_tag: part of speech tagging. Um dos principais componentes de quase todas as análises de PLN. Rotular palavras de acordo com sua característica de linguagem (substantivo, verbo, adjetivo, advérbio, pronome). Treebank: conjunto de rótulos mais popular: existe uma forte dependência ao idioma que está sendo tratado. Dificil para criação de conjunto de rótulos em outros idiomas (ex: árabe). Reconhecedor de entidades nomeadas (NER: names entity recognition) permite identificar "entidades nomeadas". Comumente nomes próprios, locais, utilizados para etapas que permitam identificar entidades- chave. Pacote: Nltk.ne_chunk. Exemplo: Federal University of ABC = [('federal', 'NNP), ('University, 'NNP'), ('of', 'IN'), ('ABC', 'NNP'), ('(', '('), ('Portuguese', 'JJ') = (S (NE Federal/NNP University/NNP) of/IN, (NE ABC/NNP)(/( NE Portuguese/JJ)... Tipos de EN mais comuns: dependerá muito da aplicação. Comuns: People TAG: PER, Organization TAG: ORG, etc. Sumarização de informação: processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). Permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Abordagem intuitiva: assumindo que sumarização é apenas uma classificação das frases baseadas em sua importância, pode-se assumir que normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Nessa lógica é possível realizar um cálculo de pontuação de importância. Exemplo em algoritmo: sumarização.py. Exemplo de aplicações: história da evolução do spam digital, spam multimídia com face transfer, notícias, notícias da FAPESP. Desafio 3: Bônus + 0.5 na MF. Resumo de um artigo da CACM (Magazine of comunication of ACM). Artigo selecionado deverá ter sido publicado em 2018 ou 2019 e deve conter no mínimo 2 páginas. Envio pelo tidia.
Guilherme Beo Arqueiro Na aula 14 de PLN, vimos exemplos e aplicações do NLTK (Natural Language ToolKit). Vimos o conceito de POS-tagging, ou Part of Speech tagging, que é uma marcação de partes do discurso, que é um componente utilizado em praticamente todas as análises de processamento de linguagem natural. Esse tipo de componente atua como um etiquetador que rotula palavras com sua característica de linguagem, ou seja, se são substantivo, verbo, adjetivo, advérbio, pronome, etc. O conjunto mais popular utilizado para rotulação é o treebank, que é um corpus de texto já analisador que denotam as estruturas sintáticas e semânticas de frases. Foi construído na década de 1990 e foi beneficiado por uma grande quantidade de dados empíricos. Contudo, o treebank depende fortemente do idioma que está sendo usado, e não é uma tarefa muito fácil fazer a criação de um conjunto de rótulos (vimos o exemplo para a língua árabe). Vimos também o conceito de reconhecimento de entidades nomeadas NER (Named Entity Recognition), que permite identificar entidades já nomeadas, como nomes próprios, locais, organizações, geo-políticas, entidades, instalações e veículos. São utilizados em algumas etapas de PLN para identificar entidades- chave. Vimos também o processo de sumarização de informação, ou seja, uma geração automática de um resumo associado a um objeto, como um texto, artigo ou história. Essa sumarização permite entender a estrutura de uma frase e, consequentemente, a estrutura do texto inteiro, permitindo evidenciar o tema que está sendo tratado. Assumimos uma abordagem intuitiva da sumarização, que é basicamente a classificação das frases baseadas em usa importância. Além disso, assumimos que em geral as frases possuem mais entidades e substantivos possuem uma importância maior do que outras sentenças, e utilizamos essa lógica para o calculo de uma pontuação de importância, assim podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. Na parte final da aula, vimos alguns exemplos aplicados em artigos sobre SPAM e notícias.
Ricardo Gomes Nesta aula vimos a utilização do NLTK e a sumarização de informação. NLTK é uma ferramenta muito útil no processamento de linguagem natural e possui diversas funções já estudadas em aulas anteriores. Temos a função de tokenização, tanto de sentenças quanto de palavras, e uma das mais importantes, a função pos_tag. Esta função é responsável pelo POS-tagging, ou seja, rotular palavras de acordo com as caraterísticas da linguagem, sendo esta uma das principais componentes de quase todas as análises. Para a atribuição de rótulos, normalmente é utilizado o treebank, um conjunto de rótulos pré determinados. Apesar de ser extremamente útil, ainda se trata de um conjunto fortemente dependente de alguma linguagem, um problema bem sério na análise de textos. Outra função presente no NLTK é o reconhecimento de entidades nomeadas, utilizada na identificação de entidades-chaves (palavras relevantes como nomes e locais). Esta função pode levar a diferentes resultados na classificação de entidades nomeadas dependendo do modo de operação. Quanto à sumarização de informação, esta é um processo de geração automática de um resumo, seja sobre um texto, um artigo, etc. A sumarização permite entender a estrutura do texto e evidenciar o tema tratado de forma simples e resumida. Este processo se trata da classificação de frases baseadas em sua importância, normalmente através da identificação de entidades relevantes, e atribuição de uma pontuação dado essa importância. Uma possibilidade é considerar apenas a primeira frase de cada parágrafo como sendo um resumo de informações importantes sobre o mesmo e atribuir uma ordem de importância dos parágrafos mais relevantes. Como exemplo, temos a aplicação dessa ideia em um texto da Wikipédia sobre a UFABC e a utilização de um cálculo simples, a soma de entidades nomeadas e substantivos, dividido pela quantidade de tokens, para atribuir valores de importância. Um exemplo prático de aplicação dessas ideias e ferramentas é a identificação de spam, analisando o conteúdo de uma mensagem.
Matheus Dos Santos Pereira Resumo da aula 14, sobre NLTK através de exemplos: Sumarização; foi apresentado um exemplo de texto em inglês sobre a universidade federal do abc (UFABC), e exemplificado a aplicação do nltk.sent_tokenize(String) e do nltk.word_tokenize(Sentence) e do nlyk.pos_tag(tokens), assim como algumas dificuldades em usá-los e facilidades em usá-los. A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Penn). Existe uma forte dependência ao idioma que está sendo tratado., não sendo uma tarefa fácil a criação de um conjunto de rótulos. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”, normalmente sendo nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Sumarização de informação é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história), permitindo não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro e evidenciar o tema tratado. Abordagem intuitiva baseia em assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância, mas podemos também assumir que, normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Usando essa lógica vamos ver um exemplo "simples” para calculo de pontuação de importância, podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. O Desafio 3 foi passado para a sala, sobre o artigo dos anos de 2018 a 2019, com o resumo de pelo menos 2 paginas, foi proposto além disso um desafio relacionado a prova e os próximos 3 resumos, contemplando uma maioria de 70 resumos para mudança na aplicação da prova.
Iasmin de Haro Pracchias Na aula do dia 29/07 vimos exemplos de sumarização através do uso do NLTK (Natural Language Tool Kit), vimos exemplos da aplicação das seguintes funções em um texto: 1) nltk.sent_tokenize(string), onde a função recebe uma sentença e a quebra em tokens, 2) nltk.word_tokenize(sentence), onde a função recebe uma sentença e a quebra em palavras, 3) nltk.pos_tag(tokens), onde a função recebe tokens e os rotula. A função pos_tag é muito utilizada em PLN, e consiste basicamente em classificar as palavras de acordo com suas classes de linguagem, como por exemplo, verbos, pronomes, adjetivos, etc. Vimos o conceito de Treebank que trata-se de um corpus que relaciona estruturas semânticas ou sintáticas de uma sentença. Essa estrutura é de extrema importância para estudos de linguística computacional e processamento de linguagem natural, uma vez que fornece dados empíricos em grande escala. A Treebank tem formato de uma árvore que relaciona rótulos e palavras, e pode ser também representada com o uso de parênteses e tags. A atribuição dos rótulos é única para cada palavra e como existe uma forte dependência do idioma que está sendo tratado não é simples criar um conjunto de rótulos. Também foi apresentada a função nltk.ne_chunk(tagged, binary=True(or False), que analisa tuplas "palavra e tag" e permite fazer o reconhecimento de entidades nomeadas (NER: Named Entity Recognition), sendo algumas das mais comuns, People (PER), Organization (ORG), Location (LOC), etc. Por fim vimos o conceito de sumarização que é um processo que classifica as sentenças baseada na importância das mesmas. Podemos analisar a importância de uma sentença baseando-se no número de entidades que a mesma possui, sendo que uma sentença com mais entidades deverá ser classificada com maior importância. Também foi apresentado um exemplo de programa em Python que faz a classificação das frases por meio de uma pontuação numérica.
Lucas Kenzo Kurokawa NLTK possui algumas funções como sent_tokenize que recebe um texto (string) e retorna uma lista de strings separados por pontos finais. Outra função importante é o word_tokenize que recebe uma sentença (string) e retorna uma lista de palavras (strings) das palavras contidas na sentença. A função pos_tag recebe os tokens (lista das “palavras”) e as classifica em classes de palavras (verbos, substantivos, adjetivos, etc). POS-tagging (part of speech tagging) é um dos principais componentes da análise de processamento de linguagem natural (PLN). O conjunto de rótulos mais famoso usado por pos- taggers é o treebank (contém 36 classes de palavras). Ele faz anotações semânticas e sintáticas e foi construído nos anos 90 e revolucionou a área de linguística computacional. Estes conjuntos de rótulo são muito dependentes do idioma que está sendo tratado, portanto não é muito fácil. O nltk tem uma função chamada ne_chunk (ne vem de named entity) que recebe uma tupla contendo o token e a classe à qual pertence, e retorna qual entidade aqueles tokens se referem e agrupa-os caso necessário. As entidades mais frequentes são pessoas, organizações, localizações, entidades geopolíticas, instalações e veículos. Sumarização é o processo de resumir algum objeto (texto, artigo, história, etc), permitindo não só entender a estrutura de uma sentença ou frase, mas sim de um texto inteiro, evidenciando o tema tratado. Podemos assumir que sumarização é uma classificação das frases baseadas na importância, ou seja, uma frase com mais entidades e substantivos tem maior importância que outras sentenças. Com isso, temos um simples cálculo de pontuação de importância e usando um limiar de seleção das X frases mais importantes, geramos nosso resumo. Vimos também os algoritmos para testar todas as funções e conceitos aprendidos, além de ter visto na prática onde isso é utilizado. Ao fim da aula, vimos o 3º desafio para bônus na média final.
Brian Alves Andreossi Nltk Estado da arte, muito utilizado na atualidade. A ideia é estudá-lo por meio de exemplos. Um texto pode ser visto como um conjunto de frases, a ideia é ranquear as frases e selecionar as mais importantes. Todas as frases serão dividas por ponto. Porém eventualmente usamos o ponto para outras finalidades, impedindo de dividir todas as frases com pontos. Eventualmente será necessário um pré processamento, trocando ponto por algum caracter especial. A função sent_tokenize da biblioteca de nltk do python transforma o texto em frases, obrigatoriamente divididas por pontos. É possível utilizar a função word_tokenize para se tomar cada palavra do texto. Alguns sinais de pontuação são considerados palavras Existe também a função nltk.pos_tag que é capaz de rotular as palavras. Alguns exemplos podem ser contraditórios, pois alguns textos podem conter palavras em mais de uma língua. Eh utilizado um dicionário para classificar as palavras POS significa part of speech, sendo assim pos_tag eh capaz de classificar (tag) partes do discurso. É importante destacar que depende da língua. Além disso, é extremamente difícil classificar palavras com a mesma escrita e significado diferentes. O pos_tag tenta classificar da forma mais geral possível. As diversas classificações das palavras foram organizadas em árvore e chamadas de treebank Uma árvore pode ser representada em forma de parêntesis Treebank tornou-se padrão para palavras inglesas. Mais uma vez é dependente do idioma que se está analisando. Não é simples criar um conjunto de rótulos para as palavras de um texto. É necessário realizar o reconhecimento de entidades nomeadas. A função nltk.ne_chunk permite identificar entidades nomeadas A ideia eh agrupar palavras que integram o significado transmitido por completo. As 4 funções permitem a sumarização das informações. Assumiremos que a sumarização é a classificação das frases baseada em importância. Uma frase com mais entidades e substantivos são mais importantes
Arthur Veloso Kamienski NLTK (Natural Language ToolKit) é uma biblioteca para a linguagem de programação Python que oferece um conjunto de funções e recursos para o processamento de linguagem natural. A ferramenta foi criada para a aplicação das técnicas na lingua inglesa. Apesar de poder ser utilizada em outras linguas, o seu funcionamento não é garantido. A biblioteca conta com funções como sent_tokenize e word_tokenize, que identificam sentenças e palavras em um documento, respectivamente. Também existe funções que realizam a tarefa de POS (Part Of Speech) Tagging, ou o rotulamento das palavras de uma frase de acordo com seu papel dentro dela (como substantivo, verbo, adjetivo, etc.), tal como a função pos_tag. O treebank é o conjunto de rótulos mais utilizado atualmente. Essa abordagem faz o arranjo dos rótulos em uma estrutura hierarquica para a classificação das palavras. No entanto, é muito dependente da lingua que está sendo analisada. Para linguas como o árabe, a tarefa de rotulação é mais difícil, como é o caso para o árabe. O NLTK também oferece a funcionalidade de reconhecimento de entidades nomeadas (NER), utilizando a função ne_chunk. Essa função recebe parâmetros para identificar tanto de forma binária (é/não é uma entidade nomeada) ou multi-categórica (diversas categorias de entidades). A sumarização é a geração de um texto resumido que expresse as informações contidas num texto original de forma automática. Essa técnica pode ser entendida como a classificação das frases de um texto de acordo com sua importância. Podemos assumir que a importância de uma frase é proporcional ao número de entidades e substantivos de uma frase, por exemplo. As frases mais importantes podem ser utilizadas, portanto, para gerar um texto resumido a partir do texto original. Essa técnica também pode ser utilizada para classificar SPAMs, ao identificar as frases mais importantes em textos de SPAM e utilizá-las para caracterizá-los.
Felipe de Campos Mesquita Na aula 14 de Processamento de Linguagens Naturais, o principal tópico foi sumarização, e mais especificamente NLTK através de exemplos. A bibliografia introdutória para a aula foi NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries. PACKT. Dado um texto de exemplo vimos alguns resultados de tokenização, como tokenização de palavras. Foi comentado sobre o POS-tagging (part of speech tagging), que é um dos principais componentes de quase toda as análises de PLN. Segundo os slides, a tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e. substantivo, verbo, adjetivo, advérbio, pronome). Temos como referência uma lista de tags do conjunto mais popular de rótulos da U. Penn., alguns exemplos são CC (Coordinating Conjunction), CD (Cardinal Number), JJ (Adjective), NN (noun, singular or mass) e RB (adverb). Na aula também foi abordado o tópico de Treebanks, uma treebank é um parse de um texto (corpus) que trás estrutura para a parte semântica ou sintática, o exemplo mais famoso é o Treebank da U. Penn., the penn treebank. Neste caso existe uma forte dependência da análise com o idioma do texto. E então podemos observar através de vários idiomas que não é fácil definir um conjunto de rótulos (tags). Outro tópico abordado em aula foi a definição de sumarização, que é o processo de geração automática de um resumo associado a um objeto (e.g. texto, artigo, história). A sumarização pode ser entendida como a classificação de frases baseadas em sua importância. Vimos o código sumarização.py como exemplo e o resultado obtido. Uma das aplicabilidades é para uso em spams. No final da aula foi passado o Desafio número 3 do curso que é um resumo de artigo da CACM, dos anos 2018 ou 2019, com duas ou mais páginas.
Marcelo Schirbel Gomes Aula 14 - NLTK e Sumarização Sumarizar é resumir um texto. E rankear as frases do texto. E segundo alguma métrica saber quais tem o melhor rank. E assim poderemos seleciona-las. Nosso objetivo não é criar estruturas em NLTK. Vamos aprender os conceitos que estão por trás da ferramenta. E essa lib em Python possui muitas funções, como por exemplo a *nltk.sent_tokenize()*. Que extrai tokens de uma dada string. Além de subdividir o texto em frases, precisamos saber as palavras separadamente(*nltk.word_tokenize()*). Podemos ter, então, uma lista de palavras, que podemos usar como entrada para algum vocabulário. Tagging É um dos componentes de análise de NLP. Na qual precisamos associar alguma identificação com a palavra analisada. Por exemplo, qual a classe morfológica de uma dada palavra. Para fazer isso, não podemos depender de um dicionário, isso seria muito custoso para o algoritmo. Para fazer isso, muitas vezes precisamos de um contexto, porque seria muito difícil entender a linguagem somente pela palavra. Para fazer isso, usamos o *treebank* uma estrutura em árvore que permite adicionarmos uma interpretação a partes de uma sentença, de um modo linear. O problema dessa estrutura é o uso do idioma. Devemos usar as tags mais comuns para fazer essa classificação. People, Organization, Location, Geo-Political, Entity, Vehicles, Facility. Sumarizar Vmoa assumir como o fato de atribuir um peso para cada frase. Um processo de geração automática para não somente entender uma frase, mas um texto inteiro. Uma abordagem inicial é que uma frase com mais substantivos tem mais importância que as outras. Isso é uma abordagem ingênua, mas pode ser um bom ponto de contato inicial. Com essa abordagem podemos classificar as frases e obter uma ideia central de um texto. Apesar da abordagem ingênua, podemos ter um ranking básico mas que já apresenta resultados satisfatórios.
Estevao Crippa da Veiga O Natural Language Toolkit (NLTK) é um plataforma usada para construir os programas em Python com o intuito de trabalhar com PLN. A seguir são descritas algumas funções: 1. nltk.sent_tokenize (string): separa a string passada como parâmetro em sentenças, utilizando o ponto como critério para tal separação; 2. nltk.word_tokenize (sentence): separa a sentença em palavra; 3. nltk.pos_tag (tokens): do inglês, Part of speech tagging, categoriza as palavras em com sua característica de linguagem; 4. nltk.ne_chunk (tagged, binary): reestrutura o conjunto de tuplas de palavras e rótulos, gerados pela função anterior, em uma treebank. Caso binary seja verdade, então as entidades nomeadas são representadas por NE, mas caso binary seja falso, então as entidades nomeadas são representadas pelas entidades-chave. O conjunto de rótulos mais popular que existe é o treebank, que consiste em um corpus com estrutura que denota sentenças semânticas ou anotações sintáticas. Essa estrutura pode ser representada tanto na forma de texto como na forma de árvore e depende do idioma que é utilizado. Entidades nomeadas normalmente são nomes próprios e locais e são utilizados para etapas de PLN que permitam identificar entidades-chave. Elas dependem da aplicação, mas as mais comuns são: pessoas, organização, localização, localização geopolítica, instalações e veículos. A sumarização é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). Ela auxilia no entendimento acerca do que é tratado no assunto de um texto, bem como apresenta as principais frases do mesmo. Em outras palavras, a sumarização é a classificação das frases com base na sua importância. Assumindo que uma frase que tem mais entidades tem mais importância, então basta organizar as frases de acordo com a quantidade de entidades e utilizar as que possuem mais entidades para fazer parte da sumarização.
Rafael Pauwels de Macedo O tema desta aula foi NLTK (Natural Language ToolKit) através de exemplos e sumarização, começamos com exemplos aplicando alguns métodos do nltk sobre um texto base. Vimos por ordem a tokenização de sentenças (sent_tokenize), palavras (word_tokenize) e por caraterísticas da linguagem (pos_tag). O pos_tag (part of speech tagging) é encarregado de rotular as palavras da linguagem como substantivo, verbo, advérbio, pronome, etc. A mais popular base de rótulos utilizada é a treebank, que surgiu no começo da década de 90, revolucionando para sempre a ciência da linguística computacional. É válido considerar a dependência forte entre a base e o idioma, a tokenização ocorre de formas distintas em cada idioma. Na aula vimos um exemplo disso usando como exemplo o idioma árabe. Na sequência vimos sobre o reconhecimento de entidades nomeadas ou NER. Nada mais são que nomes próprios e locais que podem utilizados nas etapas de PLN que identificam entidades-chave. Para esse propósito utilizamos o nltk.ne_chunk. Na segunda parte da aula focamos na sumarização de informações, esse é um processo que gera automaticamente um resumo associado a um objeto. Uma das formas simples de sumarizar um texto é através de um sistema de pontos que classifica por importância as sentenças, sendo as mais importantes aquelas que possuem mais entidades e substantivos. Vimos então uma implementação ingênua do cálculo de score usando python, mas que basta para classificar com certa acurácia a importância das sentenças. Logo em seguida finalizamos a aula com uma discussão sobre SPAM e as possibilidades de ataques com o avanço das técnicas de machine learning e um novo desafio foi dado para a turma, resumir um artigo com no mínimo duas páginas publicado na CACM (Communication of the ACM), é importante que o artigo deve ter sido publicado entre 2018 e 2019.
Henrique Augusto Santos Batista A POS-tagging é um dos principais componentes de quase todas as análises de PLN a tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Penn) Existe uma forte dependência ao idioma que está sendo tratado, não é uma tarefa fácil a criação de um conjunto de rótulos. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”, comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Dependerá muito da aplicação, mas aqui temos uma lista das 6 entidades nomeadas mais comuns: People PER, Organization ORG, Location LOC, Geo- Political Entity GPE, Facility FAC, Vehicles VEH. A sumarização de informação é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história), a sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro, a sumarização permitiria evidenciar o tema tratado. Assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância então podemos também assumir que: Normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças, podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. Usando essa lógica podemos rodar um programa que vai pegar uma texto e deparar a frases então vai rodar frase a frase pegando as palavras relevantes isso é excluindo as “stop-words” depois vai categorizar as palavras em uma base conhecida colocando tags nelas, cada tag refere a uma entidade conhecida, após isso serão contadas as tags e as frases ordenadas por maior numero de palavras com maior relevância.
Lucas Zanoni de Oliveira Na aula 14 do dia 29/04/2019, foi apresentado o conceito de NTLK que nada mais é do que a abreviação de Natural Language Toolkit, que é um conjunto de bibliotecas (linguagem Python) e programas para processamento de linguagem natural, para as categorias simbólicas e estatísticas. Sendo assim, foi dado um texto de exemplo que por meio de tratamentos foi inicialmente processado em strings, depois em sentenças e por final em tokens, ou seja, palavras. Com isso foi mostrado o “pos_tag” que é uma dos principais componentes da maioria das análises de processamento de linguagem natural existentes atualmente, tendo como tarefa principal a rotulação de palavras com base na sua característica de linguagem, onde seu conjunto mais popular de rótulos é o treebank. Posteriormente foi mostrada a sumarização de informação que é um processo de geração automática de um resumo a partir de um texto, artigo, livro e etc, permitindo com que a estrutura do objeto seja entendida também além de uma mera frase e possibilitando também evidenciar o tema tratado. Em outras palavras trata-se de uma classificação das frases com base em sua importância. Vale ressaltar também que foi dito que uma frase que possua mais entidades e substantivos, tendem a ter uma importância maior do que as demais sentenças do mesmo objeto. Com isso, foi mostrado um exemplo prático em Python, sobre o mesmo texto utilizado no exemplo prático do início da aula. No final da aula foi apresentado o desafio 3 que assim como os dois primeiros acresce 0,5 ponto na média final, tendo como diferença que o resumo deverá ser feito com base em um artigo da Magazine Communication of the ACM, devendo ter sido publicado em 2018/2019 e possuir pelo menos 2 páginas.
Lucas Vitalino Severo Pais O Natural Language Toolkit, ou mais comumente NLTK, é um conjunto de bibliotecas e programas para processamento de linguagem natural simbólica e estatística (NLP) para o inglês escrito na linguagem de programação Python. Foi desenvolvido por Steven Bird e Edward Loper no Departamento de Computação e Ciência da Informação da Universidade da Pensilvânia. O NLTK inclui demonstrações gráficas e dados de amostra. É acompanhado por um livro que explica os conceitos subjacentes às tarefas de processamento de idiomas suportadas pelo kit de ferramentas, mais um livro de receitas. O NLTK destina-se a apoiar a pesquisa e o ensino em PNL ou áreas estreitamente relacionadas, incluindo linguística empírica, ciência cognitiva, inteligência artificial, recuperação de informações e aprendizado de máquina. O NLTK tem sido usado com sucesso como uma ferramenta de ensino, como uma ferramenta de estudo individual, e como uma plataforma para prototipagem e construção de sistemas de pesquisa. Existem 32 universidades nos EUA e 25 países que usam o NLTK em seus cursos. O NLTK suporta funcionalidades de classificação, tokenização, stemming, marcação, análise e raciocínio semântico. O NLTK também suporta sumarização que é o assunto da aula 14. Sumarização é o processo de geração automática de um resumo associado a um objeto, ela permite não somente entender a estrutura de uma frase mas também a estrutura do texto inteiro. A biblioteca já dispoem de métodos prontos para tokenizar as strings (nltk.word_tokenize) e fazer o pos_tag que é um dos principais componentes de todas as análises de PLN pois consiste da etiquetagem das palavras com sua característica de linguagem, exemplo categorizar as palabras em substantivo, verbo, adjetivo, advérbio, pronome). Treebank é outra tecnica que parsea o corpo de um texto e atribui categorias sintáticas e semanticas aos nós da arvore parseada.
Matheus Fama Machado de Sousa NLTK através de exemplos : Sumarização pos_tag( Part of speech tagging): A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome) sendo o treebank o conjunto de rótulos mais popular Na linguística, um treebank é um corpus de texto analisado que anota a estrutura da sentença sintática ou semântica. A construção de corpora analisada no início da década de 1990 revolucionou a linguística computacional, que se beneficiou de dados empíricos de grande escala. A exploração dos dados do banco de árvores tem sido importante desde que o primeiro treebank em grande escala, The Penn Treebank, foi publicado. No entanto, embora originário da linguística computacional, o valor dos bancos de árvores está se tornando mais amplamente apreciado na pesquisa linguística como um todo. Por exemplo, os dados anotados do treebank têm sido cruciais na pesquisa sintática para testar as teorias linguísticas da estrutura da sentença em relação a grandes quantidades de exemplos que ocorrem naturalmente. O treebank exige uma forte dependência ao idioma que está sendo tratado e, em alguns casos, como por exemplo o idioma árabe, pode não ser uma tarefa simples. Reconhecedor de entidades nomeadas: O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”.Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Sumarização de informação : É um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história).A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado.
Yago Sorrilha NLTK através de exemplos: Sumarização. Bibliografia introdutória: NLTK Essentials: Build Cool NLP and machine learning applications using NLTK and other Python libraries. Para analisar um texto de exemplo, utilizamos nltk.sentence para separação em sentenças e nltk.word_tokenize(sentence) para separação de palavras de uma sentença. nltk.pos_tag(tokens) recebe uma lista de palavras e atribui um rótulo, indicando o tipo da palavra (rotulação). pos_tag: part of speech tagging - rotulador de partes da fala. A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e. substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Peen). Existe uma forte dependência ao idioma que está sendo tratado. Não é uma tarefa fácil a criação de um conjunto de rótulos (p. ex. caso para o árabe). Reconhecedor de entidades nomeadas: permite identificar "entidades nomeadas". Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. nltk.ne_chunk (tagged, binary = True) analisa as tuplas por unidade e tuplas contíguas e identifica entidades nomeadas. O parâmetro binary identifca se devemos identificar apenas a entidade nomeada ou atribuir uma classificação àquela entidade. EN mais comuns: pessoas, organizações, locais, geopolítico, facilidade, veículo. Sumarização de informação: é um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). Assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Podemos também assumir que normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Explicação do programa sumarizacao.py e explicação sobre aplicações e revista CACM
Gabriel Peterlini Pinto Nesta aula do dia 29/07 foram abordados tópicos de sumarização de textos através exemplos com NLTK (Natural Language Tool Kit). Começamos vendo como podemos tokenizar strings ou sentenças por palavras ou frases completas, utilizando o nltk.sent_tokenize podemos dividir um texto em frases separadas por pontuação, por outro lado, usando o nltk.word_tokenize conseguimos uma lista contendo cada palavra da sentença, por exemplo, ao utilizar o word_tokenize em "Universidade Federal do ABC" obtemos a lista ['Universidade', 'Federal', 'do', 'ABC']. Outro método importante para PLN é o pos_tag, é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank, porém ele tem uma forte dependência ao idioma que está sendo tratado. Não é uma tarefa fácil a criação de um conjunto de rótulos para idiomas diferentes devido as características linguísticas particulares de cada uma. Depois aprendemos o conceito de reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Podemos utilizar o nltk.ne_chunk para identificar tais entidades em textos, os 6 tipos mais comuns de entidades nomeadas são Pessoas (PE), Organizações (ORG), Localizações (LOC), Entidades geo-políticas (GPE), Facilities (FAC) e Veículos (VEH). Por último vimos, vimos que a sumarização é um processo de geração automática de um resumo associado a um objeto (por exemplo um texto, artigo, história). A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro, ela também permite evidenciar o tema tratado.
Mayza Cristina da Silva Reconhecimento de entidades nomeadas – Extração de informação -Os sistemas de extração de informação permitem: Transformar os dados não estruturados (incorporados em textos) em dados estruturados. - Encontrar partes relevantes do texto. Obter informação de trechos de texto. - Produzir uma representação estruturada de informação relevante. -- Objetivos: Organizar informação que seja útil para as pessoas. Colocar informações de forma clara que sejam úteis para inferências realizadas por algoritmos computacionais. Um reconhecedor permite identificar e classificar as EN em um texto escrito em linguagem natural. Com este reconhecedor é possível identificar entidades que possam ser, por exemplo, comumente buscadas em uma pesquisa, podendo ser um local, uma instituição, dentre outros. Estas entidades na web podem encaminhar para links que expliquem um pouco mais sobre. Um lugar que usualmente podemos ver este tipo de marcação são nas páginas da Wikipédia, em que ao visitar um texto sobre um assunto é possível navegar por outros tantos correlacionados durante o texto. Um reconhecedor de EN Permite encontrar segmentos de texto que constituam nomes próprios e, em seguida, classificar seu tipo da entidade. O reconhecimento é difícil, em parte, devido à ambiguidade da segmentação. Precisamos decidir o que é uma entidade e o que não é, e quais são os limites. Exemplo: JK ( Juscelino Kubitschek ) Escola? Avenida? Pessoa? Governo? Tipos de EN mais comuns Dependerá muito da aplicação, mas na seguinte tabela temos uma lista das 6 entidades nomeadas mais comuns. Pessoa – PER – Turing é um gigante da computação Organização – ORG – a IBM lançou novos dispositivos Localização – LOC – o mar vermelho ... Geopolítica – GPE – São Paulo está parada Facility – FAC – O edifício Banespa está aberto à visitação Veículos – VEH – é um ford clássico
Murilo Bolzan Dionisio Quando vamos resumir algum texto de modo que rankeamos as frases pertencentes nele, podemos usar o termo sumarizar. Mas para isso precisamos também fazer uso de alguma métrica para conseguir interpretar corretamente qual o rank delas, sendo assim, podendo também selecioná-las. Nltk: Com essa matéria, não temos a intenção de gerar novas estruturas em nltk, porém iremos sim tentar absorver os conceitos que fazem esta ferramenta funcionar. Ao avaliarmos essa lib do Python, podemos ver que ela possui diversas funções, como exemplo a nltk.sent_tokensize() que serve para extrair tokens de alguma string fornecida. Como além de subdividir o texto em frases, também precisamos ter conhecimento das palavras individualmente, podemos usar o exemplo anterior para isso. A saída disso tudo será uma lista de palavras que poderemos fazer uso como entrada para um vocabulário em algum outro código. Taggling: Ao fazermos a análise de um NLP, taggling será um de seus componentes, onde iremos precisar associar a identificação com cada uma das palavras pertencentes na análise. Podemos procurar qual a classe morfológica de alguma palavra em específico, como exemplo. Para conseguirmos fazer isso, não podemos ficar dependentes de algum dicionário, pois isso seria de um custo extremo para o algoritmo. Então, muitas das vezes, iremos receber o contexto junto, porque interpretar a linguagem somente com as palavras é algo bem difícil de ser feito. Esse contexto é fornecido via freebank, que é uma estrutura em árvore onde é permitido fazer adições de interpretações separadas de qualquer sentença de maneira linear. O idioma é um grande problema nesse tipo de estrutura e devemos sempre usar as tags de maior frequência para fazer tais classificações.
Gustavo Murayama O NLTK (Natural Language Toolkit) é um conjunto de bibliotecas e programas utilizados para processamento de linguagem natural simbólica e estatística. É possível transformar um texto em vários tokens e colocar tags para cada um deles. O pos_tag é um dos principais componentes de quase todas as análises de PLN, uma vez que a rotula os tokens de acordo com as características da linguagem (substantivo, verbo, pronome etc.). O treebank é um corpus de texto analisado que possui anotação semântica ou estrutural de frases. Existe uma forte dependência ao idioma que está sendo tratado, um mesmo conjunto de rótulos não é reaproveitado para uma outra língua. Em árabe, a frase é lida da direita para esquerda, o que muda completamente o jeito que é feita a análise da frase. O Reconhecedor de Entidades Nomeadas (NER, Named Entity Recognition) permite identificar essas entidades nomeadas. São comumente nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades- chave. As entidades nomeadas mais comuns dependem da aplicação, mas geralmente são 6: People, Organization, Location, Geo-Political, Entity, Facility e Vehicles. A sumarização de informação é um processo de geração automática de um resumo associado a um objeto (texto, artigo, história, entre outros), permitindo entender a estrutura de uma frase e a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado no objeto. De maneira intuitiva, a sumarização é a classificação das frases baseadas em sua importância. Podemos assumir também que uma frase que tem mais entidades e substantivos têm maior importância que outras sentenças, possibilitando a criação de um ranking para selecionar apenas as frases mais importantes de um texto.
Caique de Camargo Resumo da aula 14 de Processamento de Linguagem Natural. Nessas começamos a analisar técnicas de PLN utilizando o NLTK, nessa aula foi abordada a Sumarização. A primeira delas é o sent_tokenize, que separa os parágrafos do texto como tolkens, então o word_tokenize, separa cada palavra como um token único. A post_tag é capaz de identificar a qual classe cada token pertence, se é substantivo, verbo, adjetivo, pronome, advérbio. O conjunto de rótulos mais utilizados é o do treebank, um corpus criado na década de 1990 que guarda estruturas sintáticas e sequências semânticas. A rotulação depende diretamente do idioma que está sendo tratado. O ne_chunk, que é um NER (ou reconhecimento de entidades nomeadas) que permite identificar entidades-chave, normalmente nomes próprios, locais e os "agrupa". Sumarização é um processo de geração automática de um resumo associado a um objeto, permite entender a estrutura do texto como um todo bem como evidenciar o tema tratado. Podemos assumir que sumarização nada mais do que a classificação de frases baseadas na sua importância. Foi dado um exemplo (encontra-se no arquivo sumarizacao,py na página) que devolve um determinado organizado pela ordem de importância de cada sentença, um ranking. Comentou-se sobre o Communications of the ATM, uma espécie de revista que traz diversos artigos relacionados a área da ciência da computação e que tem uma certa relevância, muitas numa linguagem um pouco mais simples, tal como um magazine. Um dos artigos é sobre spam, onde, segundo o estudo, o primeiro se deu ainda no século XIX em 1898. Também foi comentado sobre o artigo Atividades Humanas já danificaram 75% da superfície terrestre.
Rodrigo San Martin Ignacio Gomes NLTK através de exemplos - Sumarização. Part of speech tagging (POS-tagging) é um dos principais componentes de todas análises de processamento de linguagem natual (PLN). A tarefa de etiquetagem de POS implica em rotular palavras com sua caracteristica de linguagem, indicando se é substantivo, verbo, adjetivo, advérbio ou pronome. Dentre os conjuntos de rótulos mais populares se destaca o treeank, da U. Penn. O tree bank é um corpo de texto que marca estrutura semântica e sintática da estrutura. A construção desse corpora realizada em 1990 revolucionou a linguística computacional. O uso dessa base de dados anotada foi importante desde a sua primeira publicação. No entanto, apesar de originado em linguística computacional, o valor dos treebanks está tornando cada vez mais importante em pesquisas de linguística como um todo. Por exemplo, o banco de dados anotadado tree bank foi crucial para pesquisa sintática para validar teorias linguísticas de estrutura de sentenças em relação a uma grande quantidade de exemplos que ocorrem natualmente. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Entre as entidades mais comuns estão pessoas, organização, localização, entidade geo-politica, instalação e veículos. Um texto pode ser resumido automaticamente através da sumarização de informação, permitindo o entendimento da estrutura do texto inteiro, e não apenas da frase, evidenciando o tema tratado. A abordagem para solução desse problema pode ser intuitiva, classificando frases de acordo com sua importância. Nesse caso, frases que contenham mais entidades e substantivos tem mais importância que outras sentenças. A partir dessa abordagem, podemos pontuar a importância de cada frase e selecionar apenas as mais importantes a considerando um limiar.
Gustavo Zanfelice Dib Muitas vezes, um objetivo da analise é reduzir o texto para facilitar o processamento. Um modo é rankear as frases pertencentes nele, um método é a sumarização. É necessário utilizar alguma métrica para conseguir interpretar corretamente o rank de cada frase, de forma que sejam selecionáveis. Biblioteca NLTK(Natural language toolkit): Na matéria não iremos gerar novas estruturas NLTK mas sim entender o funcionamento conceitual das ferramentas. Uma função de extrema importância é a nltk.sent_tokenize() que extrai os tokens do envio (String). Somente a análise agrupada por frases, não é base suficiente para o estudo, assim,devemos também considerar o valor de cada palavra. Com esse método podemos extrair o vocabulário, já que temos uma lista com os tokens em cada retorno. Vale-se notar que a biblioteca NLTK se extende muito além deste uso, também possui stopwords já inseridas, lemmatizador, stemmer e muitos outros métodos de PLN inclusive implementados em português. Taggling: Para analisarmos um NLP, existe um método chamado taggling que se baseia na associação da identificação das palavras entre si. Por exemplo, podemos tentar extrair informação das classes morfológicas de cada palavra ou algo similar. Esse tipo de análise não pode ser simplesmente baseado em um dicionário pois seria extremamente custoso, sendo assim, podemos utilizar todo o contexto e interpretá-lo, assim não teremos apenas as palavras para realizar a análise.Esse contexto vem através da estrutura FreeBank, uma árvore que permite adições e interpretações separadas de qualquer sentença linearmente. O maior problema desse contexto é o idioma que irá afetar toda a correlação da estrutura, então devemos possuir o suporte necessário para realizar as classificações.
Denildo Veloso Braga Aula 14: NLTK através de exemplos: Sumarização. Bibliografia recomendada: NLTK Essentials: Build cool NLP and machine learning applications using NLTK and other Python libraries de Nitin Hardeniya. POS-tagging ou part of speech tagging é o processo de rotular palavras por suas características de linguagem, por exemplo, verbo, advérbio, adjetivo, substantivo, pronome, etc. POS-tagging é um processo comum em análises de PLN. O conjunto de rótulos mais popular é o treebank. Treebank é uma estrutura em árvore formada pelos rótulos das palavras. A criação do treebank é fortemente dependente do idioma que está sendo tratado. Um reconhecedor de entidades nomeadas ou NER (Named Entity Recognition) permite identificar entidades nomeadas. Os tipos de entidades nomeadas incluem nomes, locais, organizações e datas. Sumarização de informação é o processo de geração automática do resumo de um documento, como um texto, artigo ou história. Permite identificar as ideias principais do documento. Um abordagem intuitiva para fazer a sumarização é considerar as frases mais importantes. Normalmente, uma frase com mais entidades nomeadas é mais importante que outras frases. Podemos usar essa lógica para criar uma pontuação de importância e criar um limiar para selecionar só as frases importantes. O programa sumarizacao.py implementa essa abordagem intuitiva. Desafio 3: este desafio adiciona mais 0.5 na média final e consiste em fazer um resumo de um artigo da Magazine Communication of the ACM (CACM). O artigo selecionado deve ter sido publicado ou em 2018 ou em 2019. O artigo deve conter, no mínimo, 2 páginas. O resumo segue as mesmas regras dos resumos das aulas: entre 250 e 500 palavras e envio pelo tidia.
Rafael Correia de Lima Nessa décima quarta aula de PLN o tema foi NLTK através de exemplos: Sumarização. No início da aula foram exibidos alguma exemplos de funções da biblioteca para o processamento de textos longos e sentenças isoladas. O primeiro exemplo foi da função tokenize, que faz de forma direta a tokenização (separação em palavras) do texto. Em seguida foi abordada a função pos_tag, que faz a "part of speech tagging" das palavras na sentença analisada, isto é, rotula as palavras de acordo com a sua característica de linguagem (substantivo, verbo, adjetivo, advérbio, pronome). Outra aplicação demonstrada em aula que está incluída na biblioteca é a identificação de Entidades Nomeadas através da função ne_chunk. Como visto em aulas anteriores as entidades nomeadas são palavras que representam entidades como nomes próprios, eventos, datas e locais. Seus tipos mais comuns são: pessoas, organizações, localizações, entidades geopolíticas, construções e veículos. A aplicação final apresentada foi a de Sumarização de textos que gera um resumos do texto analisado, baseando-se num rankeamento de importância para as frases contidas no corpo do texto. Gerada uma pontuação de importância para cada frase do texto é possível escolher um limiar para que sejam selecionadas apenas as que sejam consideradas relevantes. Ao final da aula foi apresentado o terceiro desafio valendo ponto extra na nota final da disciplina. Semelhante aos dois desafios anteriores, neste é necessário criar um resumo de aproximadamente 500 palavras sobre algum artigo publicado na revista Communication of ACM. Deverá ser escolhido um artigo publicado entre os anos de 2018 e 2019, e o resumo deve seguir o formato dos resumos das aulas.
Felipe Dias Correia Aula 14 foi sobre o tema de NLTK através de exemplos: sumarização, onde sumarização significa resumir os principais indicativos, assuntos e informações de forma a facilitar o que se pretender ler ou estudar. E foi introduzido com um texto de exemplo, onde se fala sobre a UFABC e um pouco da sua instituição, professores e sua criação em 2014, e dividindo cada paragrafo em strings, sentenças e tokens. E aplicou-se o pos_tag, que é um componente de quase análise de PLN, onde é feito uma entiquetagem de POS para rotular as palavras com característica de linguagem (substantivos, verbos, adjetivos e etc), o conjunto de rótulos usado é do Treebank, que é um corpus de texto analisado que anota a estrutura da sentença sintática ou semântica. Após isso, foi explicado sobre o reconhecedor de entidades nomeadas, ou NER, que permite identificar entidades nomeadas como um nome próprio ou locais, onde é uma das etapas de PLN para identificar entidades-chaves.A EN mais comuns são de pessoas, organização, locais, geo-politica, entidade, construções e veículos. Sobre sumarização, onde foi introduzido no começo do resumo, foi dado uma abordagem intuitiva, onde sumarização pode ser uma classificação de frases e basear a sua importância no texto, e alguns exemplos em python, onde no texto exemplo, foi colocado pesos sobre cada paragrafo como uma forma de pontuar e classificar a importância (de 0 a 1). E outros exemplos também foram dados, como da página da communications ACM, uma matéria da CACM sobre SPAM e uma notícia da FAPESP, onde no artigo sobre SPAM, dois parágrafos tiveram pontuações 1
Julia Messias Costa A sumarização consiste na seleção de uma quantidade de elementos (sendo ela pequena), sendo que eles devem ser os mais importantes do total a ser analisado. Frase e sentença consistem num conjunto de palavras com um ponto no final. Mas pode ser necessário um pré-processamento para desconsiderar palavras que possuem ponto no final, mas não são final de frase, por exemplo: "etc.", "No." * ntlk.sent_tokenize(string): separa o texto até o primeiro ponto. * ntlk.word_tokenize(sentence): separa a frase inteira num conjunto de palavras. * ntlk.pos_tag(sentence) - part of speech: rotula as palavras (em verbo, nome próprio, etc.). A POS-tagging é um dos principais componentes de quase todas as análises de PLN, sendo que sua tarefa de etiquetagem consiste em aplicar rótulos às palavras de acordo com suas características (substantivo, adjetivo, verbo, etc.). Além disso, também cria um Treebank (árvore). Entidades nomeadas são, normalmente, nomes próprios. Entidades são "tudo e qualquer coisa". * ntlk.ne_chunk(tagged, binary = true): analisa tuplas ou palavras únicas e, além disso, as nomeiam com entidades. * ntlk.ne_chunk(tagged, binary = false): similar ao true, mas mais específico, pois mostra qual entidade é. A sumarização é um processo automático que consiste na classificação de frases com base em sua importância. O cálculo da importância das frases pode ser feito de maneira simples: normalmente frases com mais entidades e substantivos se mostram mais importantes. É fundamental para o entendimento de estruturas (sendo elas de uma frase ou mesmo de um texto). O PLN ajuda na resolução de problemas relacionados a spam, já que existem spam que driblam algoritmos de detecção de spam.
Lucas Monteiro de Oliveira Durante a aula for a apresentadas formas de implementação de conceitos de processamento de linguagem natural através da utilização de bibliotecas como a NLTK da linguagem Python. A primeira função apresentada chamava-se sent_tokenize, que ao receber uma string, ou seja, um corpus, é capaz de segregá-lo em tokens de sentenças. Este tokens gerados por sua vez, podem ser utilizados na função apresentada em seguida, word_tokenize, que recebe sentenças e as tokeniza. Somente então é possível utilizar umas das funções mais importantes do NLTK, a pos_tag, que é capaz de identificar a posição na qual as palavras provavelmente estarão posicionadas. A função utiliza o conjunto de rótulos treebank, que é o mais popular para esta aplicação, extrair características linguísticas de palavras e textos. O treebank é uma construção concebida em meados de 1990, época que teve cenário de processamento de linguagem natural revolucionado pela tecnica acima mencionada. Existe uma dependência muito grande entre o treebank e o idioma que está sendo analizado, o que implica que idiomas diferentes deve possuir treebanks diferentes. Entretanto, não é uma tarefa trivial criar um conjunto de rótulos capazes de descrever uma linguagem. Um outro passo importante do processmaneto de linguagem natural é o reconhecimento de entidades nomeadas (NER) que permite identificar “entidades nomeadas”. Estas são comunmente nomes próprios e/ou locais, e são utilizadas para permitir a identificação de entidades-chave. No NLTK o NER pode ser implementado através da função ne_chunk, que recebe um conjunto de tags. Os tipos de entidades nomeadas mais comuns são: pessoas, organizações, locais, localizações geo-políticas, entidades, lugares e veículos.
Tiago Suzukayama O assunto desta aula foi o estudo de NLTK (Natural Laguage Tookit) através de exemplos. Existem algumas partes importantes para análises de PLN. A POS- tagging é uma delas: esta tarefa implica em rotular palavras com suas características de linguagem (substantivo, verbo, adjetivo, pronome). O conjunto mais popular é o treebank. Treebank é um corpus que anota estruturas semânticas ou sintáticas. A contrução de corpus parseados nos anos 90 revolucionou a linguistica computacional, que se beneficiou de dados empíricos em grande escala. O reconhecedor de entidades nomeadas - NER - permite identificar entidades nomeadas. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Depende muito da aplicação, mas as entidades nomeadas mais conhecidas são: pessoas, organizações, locais, geo-politica, entidades, estruturas e veículos. A sumarização da informação é um processo de geração automática de um resumo associado a um objeto. A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. Esta permitiria evidenciar o tema tratado. Para casos mais práticos, podemos assumir que a sumarização nada mais é do que a classificação das frases baseadas em sua importância. Pode-se assumir também que normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Usando tal lógica podemos criar um exemplo simples para cálculo de pontuação de importância. Considerando um limiar para selecionar apenas as primeiras frases mais importante. No algoritmo de exemplo, este calcula a contagem de entidades nomeadas, faz o cálculo do score ingenuo, e imprime as frases em ordem invertida pelo escore
Rafael Ribeiro Gomes da Silva Nessa aula vimos aplicações na prática do NLKT, que é uma biblioteca open source para o Python para análise estatística de NLP, funcionando com a linguagem humana. Esse kit possui bibliotecas para tokenização, parsing, classificação e outros recursos de NLP. Com o texto referência sobre a UFABC, fizemos toda a tokenização das palavras, que executa um Split entre as palavras e são índices do vetor. Após realizar a separação em tokens, é realizada a POS-tagging, que nada mais é que um rótulo das palavras com características da linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). Essa é uma das principais etapas nos processos de PLN e seu representante mais popular é o treebank. O treebank é uma forma de analisar sintática e semanticamente uma estrutura do corpus textual. Há uma forte dependência em relação ao idioma que está sendo tratado e pode ser muito complexo para idiomas que sejam derivados principalmente por símbolos. Foi nos apresentado uma forma de reconhecimento para entidades, caracterizados comumente como nomes próprios, locais, instituições. A técnica de sumarização reduz os textos de maneira a resumir algum corpus, possibilitando o entendimento do contexto como um todo. Com uma quantidade maior de entidades e substantivos, é presumido que há uma maior importância nas frases. Também nos foi apresentado o que deve ser entregue no terceiro desafio para aumento de nota final. Deve ser um artigo bem recente, a partir de 2018 e a quantidade mínima de páginas é 2. O estilo de resumo é semelhante aos dos resumos da aula e deve ser feito o envio pelas atividades.
Eric Shimizu Karbstein Na última aula aprendemos alguns métodos existente na biblioteca NLTK, escrita em C com wrapper em Python. O primeiro método mostrado foi o "sent_tokenize", que recebe um texto e o separa em frases, analizando pontos de finalização. O segundo método mostrado foi o "word_tokenize", que recebe um texto e retorna uma lista de tokens de palavras; logo em seguida nos mostrou o método "pos_tag" que recebe uma lista de tokens e retorna uma lista de tuplas que contem o token e sua classificação, a classificação pode ser um de 36 classes de características lingtauísticas, esse método utiliza da técnica de treebank, que consiste em criar uma árvore da oração e analizar a sintaxe de acordo com a arvore sintática da lingua, utiliza-se também de uma técnica chamada Named Entity Recognition (NER), ou em português, reconhecimento de entidades nomeadas, que permite identificar nomes próprios e locais, muito utilizado em PLN para identificar entidades- chaves. O próximo método é o "ne_chunk", que é uma função que dado uma lista de tokens classificados, tenta encontrar essas entidades-chaves, se o parâmetro "binary" for igual a "false", ele tenta não só encontrar como também classificá-los de acordo com seis classes pré-definidas. Após isso foi explicado sobre sumarizaçãp de informação, que é um processo de geração automática de um resumo associado a um objeto, permitindo assim avidenciar um tema tratado. Em seguida foi mostrado uma implementação simples que valoriza mais substantivos e entidades no cálculo de pontuação e exemplos desse código em python em alguns textos em aula.
Paulo Alexander Simoes Resumo - Aula 14 - NLTK através de exemplos: Sumarização A POS-tagging é um dos principais componentes de quase todas as análises de PLN. A tarefa de etiquetagem de POS implica simplesmente em rotular palavras com sua característica de linguagem (i.e., substantivo, verbo, adjetivo, advérbio, pronome). O conjunto de rótulos mais popular é o treebank (U. Penn).Existe uma forte dependência ao idioma que está sendo tratado. Não é uma tarefa fácil a criação de um conjunto de rótulos. Veja o caso para o árabe. O reconhecimento de entidades nomeadas (NER, Named Entity Recognition) permite identificar “entidades nomeadas”. Comumente são nomes próprios, locais e são utilizados para etapas de PLN que permita identificar entidades-chave. Dependerá muito da aplicação, mas na seguinte tabela temos uma lista das 6 entidades nomeadas mais comuns. É um processo de geração automática de um resumo associado a um objeto (e.g., texto, artigo, história). A sumarização permite não somente entender a estrutura de uma frase, mas também a estrutura do texto inteiro. A sumarização permitiria evidenciar o tema tratado. Assumiremos que a sumarização é nada mais do que a classificação das frases baseadas em sua importância. Podemos também assumir que: Normalmente uma frase que tem mais entidades e substantivos tem maior importância que outras sentenças. Usando essa lógica vamos ver um exemplo "simples” para calculo de pontuação de importância. Podemos considerar um limiar para selecionar apenas as primeiras frases mais importantes. Com isso concluímos que é possível realizar a sumarização de modo eficiente com a lib nltk do python.
Anderson Chaves Faria A aula foi mais focada sobre uma biblioteca em python chamada NLTK com exemplos reais de como executar uma sumarização da informação. Os primeiros exemplos de métodos foram sobre tokenização em sentenção e em palavras, assim como era previsto os primeiros passos do pipeline apresentado nas aulas anteriores. Através do método nltk.pos_tag, é possível com nossa lista de tokens gerados pelo método de tokenização de palavras, atribuir um dos principais componentes de quase todas as análises de programação da linguagem natural: classificar as palavras de acordo com sua característica de linguagem, sendo o treebank, um conjunto de rótulos de 1990, um dos mais relevantes. Treebanks são fortemente dependentes do idioma tratado, e não é uma tarefa fácil a criação de um. Assim como vimos nas aulas anteriores, temos a explicação do método nltk.ne_chunk, capaz de reconhecer entidades nomeadas para identificar entidades-chaves, esse assunto volta a ter relevância no contexto de sumarização pois ela nada mais é do que a classificação das frases de acordo com o número de entidades relacionadas. Isso somado com um limiar para filtrar somente as X primeiras frases mais importantes, nos dá uma forte estimativa da importância de uma frase baseada na sua quantidade de entidades e substantivos.


Número de resumos processados: 73.

Observação:


Arquivo gerado por um programa.