Skip to content

Instantly share code, notes, and snippets.

@JonasLopesdoO
Last active May 13, 2019 02:49
Show Gist options
  • Save JonasLopesdoO/ab4d2159a7e9aae227055ed1a1fcfc4c to your computer and use it in GitHub Desktop.
Save JonasLopesdoO/ab4d2159a7e9aae227055ed1a1fcfc4c to your computer and use it in GitHub Desktop.
Trabalho Final Machine Learning etapa 2
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Final Work of Machine Learning Discipline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tipo de problema\n",
"NER - Named Entity Recognition.\n",
"\n",
"Neste tipo de problema um modelo de predição para textos tentará predizer da melhor maneira possível quais são as entidades em um texto. Os problemas de NER surgem devido diversas maneiras de expressar uma determinada coisa e também onde uma coisa pode significar várias outras.\n",
"A língua Portuguesa por exemplo possui muitos tempos verbais e maneiras de conjugação de verbos.\n",
"\n",
"Ex: conjugar, conjugado, conjugaria, conjugarei, conjugaríamos, conjugaríeis, conjugaste, conjugou, conjuguemos...\n",
"\n",
"Tente explicar por exemplo para um extrangeiro a diferença entre \"bota a calça e calça a bota\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Problema\n",
"O problema a ser resolvido com a resolução deste trabalho é utilizar um dataset com milhares de textos e palavras rotulados e a partir de um modelo de predições de texto realizar o ranqueamento das melhores classificações. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Datasets\n",
"Será utilizado um dataset amplamente difundido que foi utilizado primariamente na Conference on Computational Natural Language Learning (CoNLL-2003) acessível a partir do seguinte link: https://www.clips.uantwerpen.be/conll2003/ner/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Divisão do dataset\n",
"O primeiro item de cada linha é uma palavra. O segundo é um Part-of-Speech (POS) tag. O terceiro é uma tag de fragmento sintático. A quarta é a tag de entidade nomeada.\n",
"\n",
"As tags de fragmento e os nomes de entidades tem o formato I-TYPE que significa que a palavra está dentro de uma frase do tipo TYPE.\n",
"\n",
" Uma palavra com a tag O não é parte de uma frase."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Divisão do dataset - rows\n",
"Os arquivos de dados de tarefas compartilhadas CoNLL-2003 contêm quatro colunas separadas por um único espaço.\n",
"\n",
"- O primeiro item de cada linha no dataset é uma palavra. \n",
"- O segundo é um Part-of-Speech (POS) tag. \n",
"- O terceiro é uma tag de fragmento sintático. \n",
"- A quarta é a tag de entidade nomeada.\n",
"\n",
"As tags de fragmento e os nomes de entidades tem o formato I-TYPE que significa que a palavra está dentro de uma frase do tipo TYPE.\n",
"\n",
" Uma palavra com a tag O não é parte de uma frase."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ferramenta\n",
"Será utilizado o Spacy que é uma ferramenta para o emprego de técnicas de Processamento de Linguagem Natural - PLN. Será utilizado voltado ao NER - Named Entity Recognition.\n",
"\n",
"O Spacy é uma ferramenta de código aberto muito poderosa que já possui diversos modelos prontos para uso para diversos idiomas.\n",
"\n",
"Será utilizado o modelo para classificação de textos em inglês.\n",
"\n",
"Algumas funções do spacy estão definidas mais abaixo no documento."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"#U.N. NNP I-NP I-ORG \n",
"#official NN I-NP O \n",
"#Ekeus NNP I-NP I-PER \n",
"#heads VBZ I-VP O \n",
"#for IN I-PP O \n",
"#Baghdad NNP I-NP I-LOC \n",
"#. . O O "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'noun, proper singular'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# mostra o que significa cada saída do token\n",
"spacy.explain(\"NNP\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Divisão dos arquivos de dados\n",
"A divisão dos arquivos do dataset se dão da seguinte forma:\n",
" - Consiste de 3 arquivos por linguagem\n",
" - Um arquivo de treino\n",
" - Dois arquivos de teste, testeA e testeB\n",
" - O primeiro arquivo de teste será usado em produção para encontrar os melhores parametros\n",
" - O segundo arquivo de teste será usado para a avaliação final\n",
" - Os dados estão disponíveis em dois datasets, um em Inglês e também em Alemão. Para o propósito deste trabalho será usado apenas a versão em inglês.\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Arquivos\n",
"- eng.raw.tar - 13,930 MB - Conjunto de dados em inglês\n",
"- ner.tgz - 3,374 MB - Contém o software para fazer o build dos dados\n",
"- 000README.txt - 8 KB - Instruções para descompactação\n",
"\n",
"Os dados em inflês são uma coleção de artigos de notícias do Reuters Corpus."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Métricas de Avaliação\n",
"A competição utiliza três métricas principais que são:\n",
"- Precision\n",
"- Recall\n",
"- F-Score\n",
"\n",
"Precision é a porcentagem de named entities encontradas pelo sistema de aprendizado que estão corretas.\n",
"\n",
"Recall é a porcentagem de named entities presentes no Corpus que são encontradas pelo sistema.\n",
"\n",
"Uma named entity só está correta se for uma correspondência exata da entidade correspondente no\n",
"arquivo de dados."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import spacy\n",
"from spacy import displacy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nlp = spacy.load(\"en_core_web_sm\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"doc = nlp(u\"Apple is looking at buying U.K. startup for $1 billion\")\n",
"\n",
"for token in doc:\n",
" print(token.text, token.pos_, token.dep_)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"for token in doc:\n",
" print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,\n",
" token.shape_, token.is_alpha, token.is_stop)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Separando cada parte do texto como string"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"doc2 = nlp(u'You finded the book that I told you, Carla?')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"doc2.text.split()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pegando cada token e mostrando"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"[token for token in doc2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pegando os tokens como strings"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"[token.orth_ for token in doc2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pegando apenas as palavras de um texto"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[token.orth_ for token in doc2 if not token.is_punct]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[token.orth_ for token in doc2 if token.is_punct]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Similaridade"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tokens = [token for token in doc2]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# you | I\n",
"tokens[0].similarity(tokens[5])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# you | book\n",
"tokens[0].similarity(tokens[3])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Análise de classes gramaticais"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[(token.orth_, token.pos_) for token in doc2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fazendo a lematização \n",
"Isso funciona para textos que podem ter diversas conjufações e tempos verbais, assim ele somente pega a raíz da palavra"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[token.lemma_ for token in doc2 if token.pos_ == 'VERB']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"doc2 = nlp(u'knew, know')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[token.lemma_ for token in doc2 if token.pos_ == 'VERB']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# verifica se uma palavra é ancestral de outra\n",
"doc2 = nlp(u'find finded')\n",
"tokens = [token for token in doc2]\n",
"tokens[0].is_ancestor(tokens[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Entidades!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"doc = nlp(u'Levi Carneiro one of the best writers in Brazil, was an president of the Brasilian Academy of Letters')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"[(entity, entity.label_) for entity in doc.ents]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# Exemplo maior\n",
"wiki_obama = \"\"\"Barack Obama is an American politician who served as\n",
"the 44th President of the United States from 2009 to 2017. He is the first\n",
"African American to have served as president,\n",
"as well as the first born outside the contiguous United States.\"\"\"\n",
"nlp_obama = nlp(wiki_obama)\n",
"[(entity, entity.label_) for entity in nlp_obama.ents]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mostrando informações sobre cada entidade"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"doc = nlp(u\"Apple is looking at buying U.K. startup for $1 billion\")\n",
"\n",
"for ent in doc.ents:\n",
" print(ent.text, ent.start_char, ent.end_char, ent.label_)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"doc = nlp(u\"Apple is looking at buying U.K. startup for $1 billion\")\n",
"spacy.displacy.render(doc, style='ent', jupyter=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#doc = nlp(u\"Apple is looking at buying U.K. startup for $1 billion\")\n",
"#spacy.displacy.serve(doc, style='dep', options={'distance' : 140})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Training data: Examples and their annotations.\n",
"\n",
"### Text: The input text the model should predict a label for.\n",
"\n",
"### Label: The label the model should predict.\n",
"\n",
"### Gradient: Gradient of the loss function calculating the difference between input and expected output."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import Image\n",
"Image(filename=\"training model.png\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment