Merge branch 'main' of https://github.com/microsoft/ML-For-Beginners into main
commit
9bf8968da1
@ -0,0 +1,21 @@
|
|||||||
|
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.203.0/containers/python-3/.devcontainer/base.Dockerfile
|
||||||
|
|
||||||
|
# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
|
||||||
|
ARG VARIANT="3.10-bullseye"
|
||||||
|
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
|
||||||
|
|
||||||
|
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
|
||||||
|
ARG NODE_VERSION="none"
|
||||||
|
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
|
||||||
|
|
||||||
|
# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
|
||||||
|
# COPY requirements.txt /tmp/pip-tmp/
|
||||||
|
# RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
|
||||||
|
# && rm -rf /tmp/pip-tmp
|
||||||
|
|
||||||
|
# [Optional] Uncomment this section to install additional OS packages.
|
||||||
|
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||||
|
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
||||||
|
|
||||||
|
# [Optional] Uncomment this line to install global node packages.
|
||||||
|
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
||||||
|
// https://github.com/microsoft/vscode-dev-containers/tree/v0.203.0/containers/python-3
|
||||||
|
{
|
||||||
|
"name": "Python 3",
|
||||||
|
"runArgs": ["--init"],
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile",
|
||||||
|
"context": "..",
|
||||||
|
"args": {
|
||||||
|
// Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6
|
||||||
|
// Append -bullseye or -buster to pin to an OS version.
|
||||||
|
// Use -bullseye variants on local on arm64/Apple Silicon.
|
||||||
|
"VARIANT": "3",
|
||||||
|
// Options
|
||||||
|
"NODE_VERSION": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Set *default* container specific settings.json values on container create.
|
||||||
|
"settings": {
|
||||||
|
"python.pythonPath": "/usr/local/bin/python",
|
||||||
|
"python.languageServer": "Pylance",
|
||||||
|
"python.linting.enabled": true,
|
||||||
|
"python.linting.pylintEnabled": true,
|
||||||
|
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
|
||||||
|
"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
|
||||||
|
"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
|
||||||
|
"python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
|
||||||
|
"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
|
||||||
|
"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
|
||||||
|
"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
|
||||||
|
"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
|
||||||
|
"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Add the IDs of extensions you want installed when the container is created.
|
||||||
|
"extensions": [
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.vscode-pylance"
|
||||||
|
],
|
||||||
|
|
||||||
|
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||||
|
// "forwardPorts": [],
|
||||||
|
|
||||||
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
|
// "postCreateCommand": "pip3 install --user -r requirements.txt",
|
||||||
|
|
||||||
|
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
|
||||||
|
"remoteUser": "vscode"
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
|||||||
|
# Crea una línea de tiempo
|
||||||
|
|
||||||
|
## Instrucciones
|
||||||
|
|
||||||
|
Usando [este repositorio](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crea una línea temporal de algunos aspectos de la historia de los algoritmos, matemáticas, estadística, Inteligencia Artificial (AI), Aprendizaje Automático (ML), o una combinación de todos estos. Te puedes enfocar en una persona, una idea o período largo de tiempo de pensamiento. Asegúrate de agregar elementos multimedia.
|
||||||
|
|
||||||
|
## Rúbrica
|
||||||
|
|
||||||
|
| Criterio | Ejemplar | Adecuado | Necesita mejorar |
|
||||||
|
| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- |
|
||||||
|
| | Una línea de tiempo desplegada es representada como una página de Github | El código está incompleto y no fue desplegado | La línea del tiempo está incompleta, sin buena investigación y sin desplegar |
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Создайте временную шкалу
|
||||||
|
|
||||||
|
## Инструкции
|
||||||
|
|
||||||
|
Используя [этот репозиторий](https://github.com/Digital-Humanities-Toolkit/timeline-builder), создайте временную шкалу какого-либо аспекта истории алгоритмов, математики, статистики, искусственного интеллекта или ML или их комбинации. Вы можете сосредоточиться на одном человеке, одной идее или на длительном промежутке времени. Обязательно добавьте мультимедийные элементы.
|
||||||
|
|
||||||
|
## Рубрика
|
||||||
|
|
||||||
|
| Критерии | Образцовый | Адекватный | Нуждается в улучшении |
|
||||||
|
| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- |
|
||||||
|
| | Развернутая временная шкала представлена в виде страницы GitHub | Код неполон и не развернут | Временная шкала неполная, недостаточно изучена и не развернута |
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Explorez le Fairlearn
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Dans cette leçon, vous avez découvert le concept de Fairlearn, un « projet open source géré par la communauté pour aider les data scientists à améliorer l'équité des systèmes d'IA ». Pour ce devoir, explorez l'un des [carnets de Fairlearn](https://fairlearn.org/v0.6.2/auto_examples/index.html) et rapportez vos découvertes dans un article ou une présentation.
|
||||||
|
|
||||||
|
## Rubrique
|
||||||
|
|
||||||
|
| Critères | Exemplaire | Adéquat | Besoin d'amélioration |
|
||||||
|
| -------- | --------- | -------- | ----------------- |
|
||||||
|
| | Une présentation papier ou powerpoint est présentée sur les systèmes de Fairlearn, le bloc-notes qui a été exécuté et les conclusions tirées de son exécution. | Un article est présenté sans conclusions | Aucun papier n'est présenté |
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Entrevista a un científico de datos
|
||||||
|
|
||||||
|
## Instrucciones
|
||||||
|
|
||||||
|
En tu compañía, en un grupo de usuarios, o entre tus amigos o compañeros de estudio, habla con alguien que trabaje profesionalmente como científico de datos. Escribe un artículo corto (500 palabras) acerca de sus ocupaciones diarias. ¿Son ellos especialistas, o trabajan como 'full stack'?
|
||||||
|
|
||||||
|
## Rúbrica
|
||||||
|
|
||||||
|
| Criterio | Ejemplar | Adecuado | Necesita mejorar |
|
||||||
|
| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- |
|
||||||
|
| | Un ensayo de la longitud correcta, con fuentes atribuidas, es presentado como un archivo .doc | El ensayo es pobremente atribuido o más corto que la longitud requerida | No se presentó el ensayo |
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
# मशीन लर्निंग का परिचय
|
||||||
|
|
||||||
|
पाठ्यक्रम के इस भाग में, आपको मशीन लर्निंग के क्षेत्र में अंतर्निहित बुनियादी अवधारणाओं से परिचित कराया जाएगा, यह क्या है, इसका इतिहास क्या है और इसके साथ काम करने के लिए शोधकर्ताओं द्वारा उपयोग की जाने वाली तकनीकों के बारे में जानेंगे। आइए एक साथ मशीन लर्निंग की इस नई दुनिया को एक्सप्लोर करें!
|
||||||
|
|
||||||
|

|
||||||
|
> <a href="https://unsplash.com/@bill_oxford?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">बिल ऑक्सफ़ोर्ड</a> द्वारा तस्वीर <a href="https://unsplash.com/s/photos/globe?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">अनस्पेलश </a> पर
|
||||||
|
|
||||||
|
### पाठ
|
||||||
|
|
||||||
|
1. [मशीन लर्निंग का परिचय](../1-intro-to-ML/README.md)
|
||||||
|
1. [मशीन लर्निंग और ए.आइ. का इतिहास ](../2-history-of-ML/README.md)
|
||||||
|
1. [निष्पक्षता और मशीन लर्निंग](../3-fairness/README.md)
|
||||||
|
1. [मशीन लर्निंग की तकनीके](../4-techniques-of-ML/README.md)
|
||||||
|
|
||||||
|
### क्रेडिट
|
||||||
|
|
||||||
|
"मशीन लर्निंग का परिचय" [मुहम्मद साकिब खान इणां ](https://twitter.com/Sakibinan), [ओर्नेला अलटून्यं ](https://twitter.com/ornelladotcom) और [जेन लूपर ](https://twitter.com/jenlooper) द्वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
"मशीन लर्निंग और ए.आइ. का इतिहास" [जेन लूपर ](https://twitter.com/jenlooper) और [एमी बोयड](https://twitter.com/AmyKateNicho) द्वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
"निष्पक्षता और मशीन लर्निंग" [टोमोमी ईमुरा](https://twitter.com/girliemac) द्वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
"मशीन लर्निंग की तकनीक" [जेन लूपर](https://twitter.com/jenlooper) और [क्रिस नोरिंग ](https://twitter.com/softchris) द्वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,11 @@
|
|||||||
|
# Crea un modelo de regresión
|
||||||
|
|
||||||
|
## Instrucciones
|
||||||
|
|
||||||
|
En esta lección viste cómo construir un modelo usando tanto la regresión lineal como polinomial. Usando este conocimiento, encuentra un conjunto de datos o usa uno de los conjuntos de datos incorporados de Scikit-learn, para construir un modelo nuevo. Explica en tu notebook por qué elegiste dicha técnica y demuestra la precisión de tu modelo. Si este no es preciso explica por qué.
|
||||||
|
|
||||||
|
## Rúbrica
|
||||||
|
|
||||||
|
| Criterio | Ejemplar | Adecuado | Necesita mejorar |
|
||||||
|
| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- |
|
||||||
|
| | Presenta un notebook completo con la solución bien documentada. | La solución se encuentra incompleta. | La solución es defectuosa o tiene errores. |
|
||||||
@ -0,0 +1,348 @@
|
|||||||
|
# Crie um aplicativo Web para usar um modelo de ML
|
||||||
|
|
||||||
|
Nesta lição, você treinará um modelo de ML em um conjunto de dados que está fora deste mundo: _avistamentos de OVNIs no século passado_, obtidos do banco de dados do NUFORC.
|
||||||
|
|
||||||
|
Você vai aprender:
|
||||||
|
|
||||||
|
- Como 'pickle' um modelo treinado
|
||||||
|
- Como usar esse modelo em uma aplicação Flask
|
||||||
|
|
||||||
|
Continuaremos nosso uso de notebooks para limpar dados e treinar nosso modelo, mas você pode levar o processo um passo adiante, explorando o uso de um modelo 'em estado selvagem', por assim dizer: em um aplicativo web.
|
||||||
|
|
||||||
|
Para fazer isso, você precisa construir um aplicativo da web usando o Flask.
|
||||||
|
|
||||||
|
## [Teste pré-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/17?loc=br)
|
||||||
|
|
||||||
|
## Construindo um aplicativo
|
||||||
|
|
||||||
|
Existem inúmeras maneiras de criar aplicativos web para consumir modelos de machine learning (aprendizado de máquina). Sua arquitetura web pode influenciar a maneira como seu modelo é treinado. Imagine que você está trabalhando em uma empresa em que o grupo de ciência de dados treinou um modelo que eles desejam que você use em um aplicativo.
|
||||||
|
|
||||||
|
### Considerações
|
||||||
|
|
||||||
|
Existem muitas perguntas que você precisa fazer:
|
||||||
|
|
||||||
|
- **É um aplicativo web ou um aplicativo mobile?** Se você estiver criando um aplicativo mobile ou precisar usar o modelo em um contexto de IoT, poderá usar o [TensorFlow Lite](https://www.tensorflow.org/lite/) e usar o modelo em um aplicativo Android ou iOS.
|
||||||
|
- **Onde o modelo residirá?** Na nuvem ou localmente?
|
||||||
|
- **Suporte offline.** O aplicativo precisa funcionar offline??
|
||||||
|
- **Qual tecnologia foi usada para treinar o modelo?** A tecnologia escolhida pode influenciar o ferramental que você precisa usar.
|
||||||
|
- **Usando o fluxo do Tensor.** Se você estiver treinando um modelo usando o TensorFlow, por exemplo, esse ecossistema oferece a capacidade de converter um modelo do TensorFlow para uso em um aplicativo da web usando [TensorFlow.js](https://www.tensorflow.org/js/).
|
||||||
|
- **Usando o PyTorch.** Se você estiver construindo um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), você tem a opção de exportá-lo em formato [ONNX](https://onnx.ai/) (Troca de rede neural aberta (Open Neural Network Exchange)) para uso em aplicativos web JavaScript que podem usar o [Onnx Runtime](https://www.onnxruntime.ai/). Esta opção será explorada em uma lição futura para um modelo treinado para aprender com Scikit.
|
||||||
|
- **Usando Lobe.ai ou Azure Custom Vision.** Se você estiver usando um sistema ML SaaS (Software as a Service), como [Lobe.ai](https://lobe.ai/) ou [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-15963-cxa) para treinar um modelo, este tipo de software fornece maneiras de exportar o modelo para muitas plataformas, incluindo a construção de uma API sob medida para ser consultada na nuvem por seu aplicativo online.
|
||||||
|
|
||||||
|
Você também tem a oportunidade de construir um aplicativo web Flask inteiro que seria capaz de treinar o próprio modelo em um navegador da web. Isso também pode ser feito usando TensorFlow.js em um contexto JavaScript.
|
||||||
|
|
||||||
|
Para nossos propósitos, já que estamos trabalhando com notebooks baseados em Python, vamos explorar as etapas que você precisa seguir para exportar um modelo treinado de tal notebook para um formato legível por um aplicativo web construído em Python.
|
||||||
|
|
||||||
|
## Ferramenta
|
||||||
|
|
||||||
|
Para esta tarefa, você precisa de duas ferramentas: Flask e Pickle, ambos executados em Python.
|
||||||
|
|
||||||
|
✅ O que é [Flask](https://palletsprojects.com/p/flask/)? Definido como um 'micro-framework' por seus criadores, o Flask fornece os recursos básicos de estruturas web usando Python e um mecanismo de modelagem para construir páginas web. Dê uma olhada [neste módulo de aprendizagem](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-15963-cxa) para praticar a construção com Flask.
|
||||||
|
|
||||||
|
✅ O que é [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 é um módulo Python que serializa e desserializa a estrutura de um objeto Python. Quando você 'pickle' um modelo, serializa ou aplaina sua estrutura para uso na web. Tenha cuidado: pickle não é intrinsecamente seguro, então tome cuidado se for solicitado para ser feito um 'un-pickle' em um arquivo. Um arquivo tem o sufixo `.pkl`.
|
||||||
|
|
||||||
|
## Exercício - limpe seus dados
|
||||||
|
|
||||||
|
Nesta lição, você usará dados de 80.000 avistamentos de OVNIs, coletados pelo [NUFORC](https://nuforc.org) (Centro Nacional de Relatos de OVNIs). Esses dados têm algumas descrições interessantes de avistamentos de OVNIs, por exemplo:
|
||||||
|
|
||||||
|
- **Exemplo de descrição longa.** "Um homem emerge de um feixe de luz que brilha em um campo gramado à noite e corre em direção ao estacionamento da Texas Instruments".
|
||||||
|
- **Exemplo de descrição curta.** "as luzes nos perseguiram".
|
||||||
|
|
||||||
|
A planilha [ufos.csv](../data/ufos.csv) inclui colunas sobre a `city`, `state` e `country` onde o avistamento ocorreu, a `shape` do objeto e sua `latitude` e `longitude`.
|
||||||
|
_nota da tradução: city é a coluna referente a cidade, state é a coluna referente ao estado e country é a coluna referente ao país._
|
||||||
|
|
||||||
|
Em um [notebook](../notebook.ipynb) branco incluído nesta lição:
|
||||||
|
|
||||||
|
1. importe as bibliotecas `pandas`, `matplotlib`, e `numpy` como você fez nas lições anteriores e importe a planilha ufos. Você pode dar uma olhada em um conjunto de dados de amostra:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
ufos = pd.read_csv('./data/ufos.csv')
|
||||||
|
ufos.head()
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Converta os dados ufos em um pequeno dataframe com títulos novos. Verifique os valores únicos no campo `Country`.
|
||||||
|
|
||||||
|
```python
|
||||||
|
ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
|
||||||
|
|
||||||
|
ufos.Country.unique()
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Agora, você pode reduzir a quantidade de dados com os quais precisamos lidar, descartando quaisquer valores nulos e importando apenas avistamentos entre 1 a 60 segundos:
|
||||||
|
|
||||||
|
```python
|
||||||
|
ufos.dropna(inplace=True)
|
||||||
|
|
||||||
|
ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
|
||||||
|
|
||||||
|
ufos.info()
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Importe a biblioteca `LabelEncoder` do Scikit-learn para converter os valores de texto de países em um número:
|
||||||
|
|
||||||
|
✅ LabelEncoder encodes data alphabetically
|
||||||
|
|
||||||
|
```python
|
||||||
|
from sklearn.preprocessing import LabelEncoder
|
||||||
|
|
||||||
|
ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
|
||||||
|
|
||||||
|
ufos.head()
|
||||||
|
```
|
||||||
|
|
||||||
|
Seus dados devem ser assim:
|
||||||
|
|
||||||
|
```output
|
||||||
|
Seconds Country Latitude Longitude
|
||||||
|
2 20.0 3 53.200000 -2.916667
|
||||||
|
3 20.0 4 28.978333 -96.645833
|
||||||
|
14 30.0 4 35.823889 -80.253611
|
||||||
|
23 60.0 4 45.582778 -122.352222
|
||||||
|
24 3.0 3 51.783333 -0.783333
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exercício - construa seu modelo
|
||||||
|
|
||||||
|
Agora você pode se preparar para treinar um modelo, dividindo os dados no grupo de treinamento e teste.
|
||||||
|
|
||||||
|
1. Selecione os três recursos que deseja treinar como seu vetor X, e o vetor y será o `Country`. Você quer ser capaz de inserir `Seconds`, `Latitude` e `Longitude` e obter um id de país para retornar.
|
||||||
|
|
||||||
|
_nota da tradução: seconds são os segundos e country são os países._
|
||||||
|
|
||||||
|
```python
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
|
||||||
|
Selected_features = ['Seconds','Latitude','Longitude']
|
||||||
|
|
||||||
|
X = ufos[Selected_features]
|
||||||
|
y = ufos['Country']
|
||||||
|
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Treine seu modelo usando regressão logística:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from sklearn.metrics import accuracy_score, classification_report
|
||||||
|
from sklearn.linear_model import LogisticRegression
|
||||||
|
model = LogisticRegression()
|
||||||
|
model.fit(X_train, y_train)
|
||||||
|
predictions = model.predict(X_test)
|
||||||
|
|
||||||
|
print(classification_report(y_test, predictions))
|
||||||
|
print('Predicted labels: ', predictions)
|
||||||
|
print('Accuracy: ', accuracy_score(y_test, predictions))
|
||||||
|
```
|
||||||
|
|
||||||
|
A precisão não é ruim **(cerca de 95%)**, o que não é surpresa, já que `Country` e `Latitude/Longitude` se correlacionam.
|
||||||
|
|
||||||
|
O modelo que você criou não é muito revolucionário, pois você deve ser capaz de inferir um `País` de sua `Latitude` e `Longitude`, mas é um bom exercício tentar treinar a partir de dados brutos que você limpou, exportou e, em seguida, use este modelo em um aplicativo da web.
|
||||||
|
|
||||||
|
## Exercício - 'pickle' seu modelo
|
||||||
|
|
||||||
|
Agora, é hora de _pickle_ seu modelo! Você pode fazer isso em algumas linhas de código. Depois de _pickled_, carregue seu modelo pickled e teste-o em uma matriz de dados de amostra contendo valores para segundos, latitude e longitude,
|
||||||
|
|
||||||
|
```python
|
||||||
|
import pickle
|
||||||
|
model_filename = 'ufo-model.pkl'
|
||||||
|
pickle.dump(model, open(model_filename,'wb'))
|
||||||
|
|
||||||
|
model = pickle.load(open('ufo-model.pkl','rb'))
|
||||||
|
print(model.predict([[50,44,-12]]))
|
||||||
|
```
|
||||||
|
|
||||||
|
O modelo retorna **'3'**, que é o código do país para o Reino Unido. Maneiro! 👽
|
||||||
|
|
||||||
|
## Exercício - construir um aplicativo Flask
|
||||||
|
|
||||||
|
Agora você pode construir uma aplicação Flask para chamar seu modelo e retornar resultados semelhantes, mas de uma forma visualmente mais agradável.
|
||||||
|
|
||||||
|
1. Comece criando uma pasta chamada **web-app** ao lado do arquivo _notebook.ipynb_ onde o arquivo _ufo-model.pkl_ reside.
|
||||||
|
|
||||||
|
2. Nessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela, e **templates**. Agora você deve ter os seguintes arquivos e diretórios::
|
||||||
|
|
||||||
|
```output
|
||||||
|
web-app/
|
||||||
|
static/
|
||||||
|
css/
|
||||||
|
templates/
|
||||||
|
notebook.ipynb
|
||||||
|
ufo-model.pkl
|
||||||
|
```
|
||||||
|
|
||||||
|
✅ Consulte a pasta da solução para uma visão da aplicação concluído
|
||||||
|
|
||||||
|
3. O primeiro arquivo a ser criado na pasta _web-app_ é o arquivo **requirements.txt**. Como _package.json_ em uma aplicação JavaScript, este arquivo lista as dependências exigidas pela aplicação. Em **requirements.txt**, adicione as linhas:
|
||||||
|
|
||||||
|
```text
|
||||||
|
scikit-learn
|
||||||
|
pandas
|
||||||
|
numpy
|
||||||
|
flask
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Agora, execute este arquivo navegando até o _web-app_:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd web-app
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Em seu terminal, digite `pip install`, para instalar as bibliotecas listadas em _requirements.txt_:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Agora, você está pronto para criar mais três arquivos para finalizar o aplicativo:
|
||||||
|
|
||||||
|
1. Crie **app.py** na raiz do projeto.
|
||||||
|
2. Crie **index.html** no diretório _templates_.
|
||||||
|
3. Crie **styles.css** no diretório _static/css_.
|
||||||
|
|
||||||
|
7. Construa o arquivo _styles.css_ com alguns estilos:
|
||||||
|
|
||||||
|
```css
|
||||||
|
body {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
font-family: 'Helvetica';
|
||||||
|
background: black;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
letter-spacing: 1.4px;
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
min-width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
width: 300px;
|
||||||
|
border: 1px solid #2d2d2d;
|
||||||
|
display: grid;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
color: #fff;
|
||||||
|
background: #2d2d2d;
|
||||||
|
padding: 12px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Em seguida, crie o arquivo _index.html_:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>🛸 Predição de aparência de OVNIs! 👽</title>
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="grid">
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
|
||||||
|
<p>De acordo com o número de segundos, latitude e longitude, que país provavelmente relatou ter visto um OVNI?</p>
|
||||||
|
|
||||||
|
<form action="{{ url_for('predict')}}" method="post">
|
||||||
|
<input type="number" name="seconds" placeholder="Seconds" required="required" min="0" max="60" />
|
||||||
|
<input type="text" name="latitude" placeholder="Latitude" required="required" />
|
||||||
|
<input type="text" name="longitude" placeholder="Longitude" required="required" />
|
||||||
|
<button type="submit" class="btn">Preveja o país onde o OVNI vai ser visto</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p>{{ prediction_text }}</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
Dê uma olhada no modelo neste arquivo. Observe a sintaxe do 'mustache' em torno das variáveis que serão fornecidas pelo aplicativo, como o texto de previsão: `{{}}`. Há também um formulário que posta uma previsão para a rota `/predict`.
|
||||||
|
|
||||||
|
Finalmente, você está pronto para construir o arquivo python que direciona o consumo do modelo e a exibição de previsões:
|
||||||
|
|
||||||
|
9. Em `app.py` adicione:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import numpy as np
|
||||||
|
from flask import Flask, request, render_template
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
model = pickle.load(open("./ufo-model.pkl", "rb"))
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def home():
|
||||||
|
return render_template("index.html")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/predict", methods=["POST"])
|
||||||
|
def predict():
|
||||||
|
|
||||||
|
int_features = [int(x) for x in request.form.values()]
|
||||||
|
final_features = [np.array(int_features)]
|
||||||
|
prediction = model.predict(final_features)
|
||||||
|
|
||||||
|
output = prediction[0]
|
||||||
|
|
||||||
|
countries = ["Australia", "Canada", "Germany", "UK", "US"]
|
||||||
|
|
||||||
|
return render_template(
|
||||||
|
"index.html", prediction_text="Likely country: {}".format(countries[output])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(debug=True)
|
||||||
|
```
|
||||||
|
|
||||||
|
> 💡 Dica: quando você adiciona [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) enquanto executa o aplicativo da web usando o Flask, todas as alterações feitas em seu aplicativo será refletido imediatamente, sem a necessidade de reiniciar o servidor. Cuidado! Não ative este modo em um aplicativo de produção.
|
||||||
|
|
||||||
|
Se você executar `python app.py` ou `python3 app.py` - seu servidor web inicializa, localmente, e você pode preencher um pequeno formulário para obter uma resposta à sua pergunta candente sobre onde OVNIs foram avistados!
|
||||||
|
|
||||||
|
Antes de fazer isso, dê uma olhada nas partes do `app.py`:
|
||||||
|
|
||||||
|
1. Primeiro, as dependências são carregadas e o aplicativo é iniciado.
|
||||||
|
2. Em seguida, o modelo é importado.
|
||||||
|
3. Em seguida, index.html é renderizado na rota inicial.
|
||||||
|
|
||||||
|
Na rota `/predict`, várias coisas acontecem quando o formulário é postado:
|
||||||
|
|
||||||
|
1. As variáveis do formulário são reunidas e convertidas em um array numpy. Eles são então enviados para o modelo e uma previsão é retornada.
|
||||||
|
2. Os países que desejamos exibir são renderizados novamente como texto legível de seu código de país previsto e esse valor é enviado de volta para index.html para ser renderizado no modelo.
|
||||||
|
|
||||||
|
Usar um modelo dessa maneira, com o Flask e um modelo em conserva, é relativamente simples. O mais difícil é entender qual é o formato dos dados que devem ser enviados ao modelo para se obter uma previsão. Tudo depende de como o modelo foi treinado. Este possui três pontos de dados a serem inseridos a fim de obter uma previsão.
|
||||||
|
|
||||||
|
Em um ambiente profissional, você pode ver como uma boa comunicação é necessária entre as pessoas que treinam o modelo e aqueles que o consomem em um aplicativo da web ou móvel. No nosso caso, é apenas uma pessoa, você!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Desafio
|
||||||
|
|
||||||
|
Em vez de trabalhar em um notebook e importar o modelo para o aplicativo Flask, você pode treinar o modelo diretamente no aplicativo Flask! Tente converter seu código Python no notebook, talvez depois que seus dados forem limpos, para treinar o modelo de dentro do aplicativo em uma rota chamada `train`. Quais são os prós e os contras de seguir esse método?
|
||||||
|
|
||||||
|
## [Teste pós-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/18?loc=br)
|
||||||
|
|
||||||
|
## Revisão e autoestudo
|
||||||
|
|
||||||
|
Existem muitas maneiras de construir um aplicativo da web para consumir modelos de ML. Faça uma lista das maneiras pelas quais você pode usar JavaScript ou Python para construir um aplicativo da web para alavancar o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou na nuvem? Nesse último caso, como você acessaria? Desenhe um modelo arquitetônico para uma solução da Web de ML aplicada.
|
||||||
|
|
||||||
|
## Tarefa
|
||||||
|
|
||||||
|
[Experimente um modelo diferente](assignment.pt-br.md)
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Experimente um modelo diferente
|
||||||
|
|
||||||
|
## Instruções
|
||||||
|
|
||||||
|
Agora que você construiu um aplicativo da web usando um modelo de regressão treinado, use um dos modelos de uma lição anterior de regressão para refazer este aplicativo da web. Você pode manter o estilo ou projetá-lo de maneira diferente para refletir os dados da abóbora. Tenha o cuidado de alterar as entradas para refletir o método de treinamento do seu modelo.
|
||||||
|
|
||||||
|
## Rubrica
|
||||||
|
|
||||||
|
| Critérios | Exemplar | Adequado | Precisa Melhorar |
|
||||||
|
| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- |
|
||||||
|
| | O aplicativo da web é executado conforme o esperado e é implantado na nuvem | O aplicativo da web contém falhas ou exibe resultados inesperados | O aplicativo da web não funciona corretamente |
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
## अपने एमएल मॉडल का उपयोग करने के लिए एक वेब ऐप बनाएं
|
||||||
|
|
||||||
|
पाठ्यक्रम के इस खंड में, आपको एक लागू एम.एल विषय से परिचित कराया जाएगा: अपने सैकिट-लर्न मॉडल को एक फ़ाइल के रूप में कैसे सहेजा जाए जिसका उपयोग वेब एप्लिकेशन के भीतर पूर्वानुमान लगाने के लिए किया जा सकता है। मॉडल सहेजे जाने के बाद, आप सीखेंगे कि फ्लास्क में निर्मित वेब ऐप में इसका उपयोग कैसे करें। आप पहले कुछ डेटा का उपयोग करके एक मॉडल तैयार करेंगे जो कि यू.एफ.ओ देखे जाने के बारे में है! फिर, आप एक वेब ऐप तैयार करेंगे जो आपको अक्षांश और देशांतर मान के साथ सेकंड इनपुट करने देगा ताकि यह अनुमान लगाया जा सके कि किस देश ने यू.एफ.ओ देखने की सूचना दी है।
|
||||||
|
|
||||||
|

|
||||||
|
> <a href="https://unsplash.com/@mdherren?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">माइकल हेरेन </a> द्वारा तस्वीर <a href="https://unsplash.com/s/photos/ufo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">अनस्पेलश </a> पर
|
||||||
|
|
||||||
|
### पाठ
|
||||||
|
|
||||||
|
- [वेब ऐप बनाएं](../1-Web-App/README.md)
|
||||||
|
|
||||||
|
### क्रेडिट
|
||||||
|
|
||||||
|
- "वेब ऐप बनाएं" [जेन लूपर ](https://twitter.com/jenlooper) द्वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
- प्रश्नोत्तरी रोहन राज वारा ♥ से लिखा गया
|
||||||
|
|
||||||
|
- डाटासेट [कागल](https://www.kaggle.com/NUFORC/ufo-sightings) से लिया गया था
|
||||||
|
|
||||||
|
- वेब ऐप आर्किटेक्चर अभिनव सागर द्वारा [इस लेख](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) और [इस रेपो](https://github.com/abhinavsagar/machine-learning-deployment) से प्रेरित है
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
# Crie um aplicativo da web para usar seu modelo de ML
|
||||||
|
|
||||||
|
Nesta seção do curso, você será apresentado a um tópico de ML aplicado: como salvar seu modelo Scikit-learn como um arquivo que pode ser usado para fazer previsões dentro de uma aplicação web. Depois que o modelo for salvo, você aprenderá como usá-lo em uma aplicação web integrada no Flask. Primeiro, você criará um modelo usando alguns dados sobre avistamentos de OVNIs! Em seguida, você construirá um aplicativo web que permitirá que você insira um número de segundos com um valor de latitude e longitude para prever qual país relatou ter visto um OVNI.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Foto por <a href="https://unsplash.com/@mdherren?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Michael Herren</a> em <a href="https://unsplash.com/s/photos/ufo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Lições
|
||||||
|
|
||||||
|
1. [Crie um aplicativo Web](../1-Web-App/translations/README.pt-br.md)
|
||||||
|
|
||||||
|
## Créditos
|
||||||
|
|
||||||
|
"Crie um aplicativo Web" foi escrito com ♥ por [Jen Looper](https://twitter.com/jenlooper).
|
||||||
|
|
||||||
|
♥️ Os questionários foram escritos por Rohan Raj.
|
||||||
|
|
||||||
|
O conjunto de dados é originado do [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings).
|
||||||
|
|
||||||
|
A arquitetura do aplicativo da web foi sugerida em parte por [esse artigo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) e [esse repositório](https://github.com/abhinavsagar/machine-learning-deployment) do Abhinav Sagar.
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# 构建一个 Web 应用程序来使用您的机器学习模型
|
||||||
|
|
||||||
|
课程的本章节将为您介绍机器学习的应用:如何保存您的 Scikit-learn 模型为文件以便在 Web 应用程序中使用该模型进行预测。模型保存后,您将学习如何在一个由 Flask 构建的 Web 应用程序中使用它。首先,您将会使用一些 UFO 目击事件的数据去创建一个模型!然后,您将构建一个 Web 应用程序,这个应用程序能让您输入秒数,经度,纬度来预测哪个国家会报告 UFO 目击事件。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图片由 <a href="https://unsplash.com/@mdherren?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Michael Herren</a> 拍摄,来自 <a href="https://unsplash.com/s/photos/ufo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## 教程
|
||||||
|
|
||||||
|
1. [构建一个 Web 应用程序](../1-Web-App/translations/README.zh-cn.md)
|
||||||
|
|
||||||
|
## 致谢
|
||||||
|
|
||||||
|
"构建一个 Web 应用程序" 由 [Jen Looper](https://twitter.com/jenlooper) 用 ♥ 编写️
|
||||||
|
|
||||||
|
测验由 Rohan Raj 用 ♥️ 编写
|
||||||
|
|
||||||
|
数据集来自 [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings)
|
||||||
|
|
||||||
|
Web 应用程序的架构一部分参考了 Abhinav Sagar 的[文章](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4)和[仓库](https://github.com/abhinavsagar/machine-learning-deployment)
|
||||||
|
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# 构建一个推荐器
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
根据本课程中的练习,您现在了解了如何使用 Onnx Runtime 和转换后的 Onnx 模型构建基于 JavaScript 的 Web 应用程序。尝试使用课程中的数据或其他来源(请添加致谢)的数据来构建一个新的推荐器。您可以根据不同的个性属性构建一个宠物推荐器,或者根据人的情绪创建音乐流派推荐器。要有创意!
|
||||||
|
|
||||||
|
## 评判标准
|
||||||
|
|
||||||
|
| 标准 | 优秀 | 中规中矩 | 仍需努力 |
|
||||||
|
| ---- | --- | -------- | ------- |
|
||||||
|
| | 提交了一个 Web 应用程序和 notebook 工程文件,两者的注释说明充分并且能正常运行 | 其中一个没提交或者有缺陷 | 两个都没提交或者都有缺陷 |
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
# Introducción a la clasificación
|
||||||
|
|
||||||
|
## Tema regional: Deliciosas cocinas asiáticas e indias 🍜
|
||||||
|
|
||||||
|
En Asia y la India, las tradiciones alimentarias son muy diversas, ¡y muy deliciosas!. Veamos los datos sobre las cocinas regionales para intentar comprender sus ingredientes.
|
||||||
|
|
||||||
|

|
||||||
|
> Photo by <a href="https://unsplash.com/@changlisheng?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Lisheng Chang</a> on <a href="https://unsplash.com/s/photos/asian-food?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Lo que aprenderás
|
||||||
|
|
||||||
|
Esta sección, se basará en el estudio anterior de la Regresión y aprenderás sobre otros clasificadores que puedes usar para entender mejor los datos.
|
||||||
|
|
||||||
|
Hay herramientas "low code" útiles que pueden ayudarte a aprender a trabajar con modelos de clasificación. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-15963-cxa)
|
||||||
|
|
||||||
|
## Lecciones
|
||||||
|
|
||||||
|
1. [Introducción a la clasificación](../1-Introduction/README.es.md)
|
||||||
|
2. [Más clasificadores](../2-Classifiers-1/README.md)
|
||||||
|
3. [Otros clasificadores](../3-Classifiers-2/README.md)
|
||||||
|
4. [ML aplicado: construir una aplicación web](../4-Applied/README.md)
|
||||||
|
|
||||||
|
## Créditos
|
||||||
|
|
||||||
|
"Getting started with classification" fue escrito con ♥️ por [Cassie Breviu](https://www.twitter.com/cassiebreviu) y [Jen Looper](https://www.twitter.com/jenlooper)
|
||||||
|
|
||||||
|
El conjunto de datos de cocinas deliciosas se obtuvo de [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines).
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
# वर्गीकरण के साथ शुरुआत
|
||||||
|
|
||||||
|
## क्षेत्रीय विषय: स्वादिष्ट एशियाई और भारतीय व्यंजन
|
||||||
|
|
||||||
|
एशिया और भारत में खाद्य परंपराएं बेहद विविध हैं, और बहुत स्वादिष्ट हैं! आइए क्षेत्रीय व्यंजनों का डेटा (data) देखकर उनकी सामग्री को समझने का प्रयास करें।
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> <a href="https://unsplash.com/@changlisheng?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">लीशेंग चैंग (Lisheng Chang)</a> द्वारा <a href="https://unsplash.com/s/photos/asian-food?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">अनस्प्लैश (unsplash)</a> पर चित्र
|
||||||
|
|
||||||
|
## आप क्या सीखेंगे
|
||||||
|
|
||||||
|
इस खंड में आप इस पाठ्यक्रम के पूर्व भाग में सीखे गए प्रतिगमन (regression) के कौशल पर निर्माण करेंगे, और अन्य वर्गीकारकों (classifiers) के बारे में जानेंगे। इन वर्गीकारकों का उपयोग करके आप डेटा (data) को बेहतर ढंग से समझ सकते हैं।
|
||||||
|
|
||||||
|
> कई उपकरण हैं जिनकी सहयता से आप न्यूनतम कोड के माध्यम से वर्गीकरण मॉडलों के साथ काम करना सीख सकते हैं। [इस कार्य के लिए अज़ौर म. ल. (Azure ML) का उपयोग करें।](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-15963-cxa)
|
||||||
|
|
||||||
|
## पाठ
|
||||||
|
|
||||||
|
1. [वर्गीकरण से परिचय](../1-Introduction/README.md)
|
||||||
|
2. [और वर्गीकारक](../2-Classifiers-1/README.md)
|
||||||
|
3. [और भी अनेक वर्गीकारक](../3-Classifiers-2/README.md)
|
||||||
|
4. [व्यावहारिक म. ल. (ML): वेब अनुप्रयोग का निर्माण](../4-Applied/README.md)
|
||||||
|
|
||||||
|
## श्रेय
|
||||||
|
|
||||||
|
"वर्गीकरण के साथ शुरुआत" [कैसी ब्रेवियू](https://twitter.com/cassiebreviu) और [जेन लूपर](https://www.twitter.com/jenlooper) द्वारा ♥️ के साथ लिखा गया था।
|
||||||
|
|
||||||
|
स्वादिष्ट व्यंजनों का डेटासेट (dataset) [कैगल (Kaggle)](https://www.kaggle.com/hoandan/asian-and-indian-cuisines) से प्राप्त किया गया था।
|
||||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,173 @@
|
|||||||
|
# Introdução ao Processamento de Linguagem Natural
|
||||||
|
|
||||||
|
Esta aula cobre uma breve história, bem como conceitos importantes do *processamento de linguagem natural*, uma subárea da *Linguística computacional*.
|
||||||
|
|
||||||
|
## [Teste pré-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/31?loc=br)
|
||||||
|
|
||||||
|
## Introdução
|
||||||
|
|
||||||
|
O Processamento de Linguagem Natural (PLN) ou, em inglês, Natural Language Processing (NLP), como é geralmente conhecido, é um dos campos mais conhecidos onde o aprendizado de máquina (machine learning) tem sido aplicado e usado na produção de software.
|
||||||
|
|
||||||
|
✅ Você consegue pensar em algum software que você usa todo dia e que provavelmente tem algum PLN integrado? E em programas de processamento de palavras ou aplicativos mobile que você usa com frequência?
|
||||||
|
|
||||||
|
Você vai aprender sobre:
|
||||||
|
|
||||||
|
- **A noção de linguagens**. Como as linguagens se desenvolveram e quais são as principais áreas de estudo.
|
||||||
|
- **Definição e conceitos**. Você também vai aprender definições e conceitos relacionados com o modo como os computadores processam texto, incluindo análise sintática (parsing), gramática e identificação de substantivos e verbos. Existem algumas tarefas de programação nesta aula, juntamente com a introdução de muitos conceitos importantes, os quais você irá aprender a programar nas próximas aulas.
|
||||||
|
|
||||||
|
## Linguística computacional
|
||||||
|
|
||||||
|
Linguística computacional é uma área de pesquisa e desenvolvimento que vem aumentando ao longo das décadas e estuda como computadores podem trabalhar e comunicar com linguagens, traduzir, e até entendê-las. O processamento de linguagem natural (PLN) é um campo relacionado à linguística computacional que foca em como computadores podem processar linguagens 'naturais' ou humanas.
|
||||||
|
|
||||||
|
### Exemplo - transcrição de voz no celular
|
||||||
|
|
||||||
|
Se você já usou o recurso de transcrição de voz ao invés de escrever ou fez uma pergunta para uma assistente virtual, sua fala foi convertida para o formato textual e então ela foi processada ou *parseada* (teve a sintaxe analisada). As palavras-chave detectadas então são processadas em um formato que o celular ou a assistente possa entender e agir.
|
||||||
|
|
||||||
|

|
||||||
|
> Compreensão de linguagem de verdade é difícil! Imagem por [Jen Looper](https://twitter.com/jenlooper)
|
||||||
|
|
||||||
|
> Tradução:
|
||||||
|
> Mulher: Mas o que você quer? Frango? Peixe? Patê?
|
||||||
|
> Gato: Miau
|
||||||
|
|
||||||
|
### Como essa tecnologia é possível?
|
||||||
|
|
||||||
|
Ela é possível porque alguém escreveu um programa de computador para fazer isto. Algumas décadas atrás, escritores de ficção científica previram que as pessoas iriam falar majoritariamente com seus computadores, e que computadores sempre conseguiriam entender exatamente o que elas queriam dizer. Infelizmente, isto mostrou-se mais difícil do que muitos imaginavam, e apesar de hoje ser um problema muito melhor compreendido, ainda existem desafios significativos para alcançar o processamento de linguagem natural 'perfeito' no que tange a entender o significado de uma frase/oração. Este é um problema particularmente difícil quando é preciso entender humor ou detectar emoções como sarcasmo em uma frase.
|
||||||
|
|
||||||
|
Agora, você pode estar se lembrando das aulas da escola onde o professor fala sobre a gramática de uma oração. Em alguns países, estudantes aprendem gramática e linguística em uma matéria dedicada, mas, em muitos, estes tópicos são incluídos como parte do aprendizado da linguagem: ou sua primeira linguagem na pré-escola (aprendendo a ler e escrever) e talvez a segunda linguagem no ensino fundamental ou médio. Contudo, não se preocupe se você não é experiente em diferenciar substantivos de verbos ou advérbios de adjetivos!
|
||||||
|
|
||||||
|
Se você tem dificuldade com a diferença entre o *presente do indicativo* e o *gerúndio*, você não está sozinho(a). Esta é uma tarefa desafiadora para muitas pessoas, mesmo falantes nativos de uma língua. A boa notícia é que computadores são ótimos em aplicar regras formais, e você vai aprender a escrever código que pode *parsear* (analisar a sintaxe) uma frase tão bem quanto um humano. A maior dificuldade que você irá encontrar é entender o *significado* e o *sentimento* de uma frase.
|
||||||
|
|
||||||
|
## Pré-requisitos
|
||||||
|
|
||||||
|
Para esta aula, o pré-requisito principal é conseguir ler e entender a linguagem. Não existem equações ou problemas da matemática para resolver. Enquanto o autor original escreveu esta aula em inglês, ela também será traduzida em outras línguas (como em português!), então você pode estar lendo uma tradução. Existem exemplos onde diferentes linguagens são usadas (como comparar regras gramaticais entre diferentes linguagens). Elas *não* são traduzidas, mas o texto que as explica sim, então o significado fica claro.
|
||||||
|
|
||||||
|
Para as tarefas de programação, você irá usar Python. Os exemplos a seguir usam Python 3.8.
|
||||||
|
|
||||||
|
Nesta seção, você vai precisar:
|
||||||
|
|
||||||
|
- **Entender Python 3**. Entender a linguagem Python 3, esta aula usa input (entrada), loops (iteração), leitura de arquivos, arrays (vetores).
|
||||||
|
- **Visual Studio Code + extensão**. Nós iremos utilizar o Visual Studio Code e sua extensão de Python, mas você pode usar a IDE Python de sua preferência.
|
||||||
|
- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) é uma biblioteca de processamento de texto simplificada para Python. Siga as instruções no site do TextBlob para instalá-lo no seu sistema (instale o corpora também, como mostrado abaixo):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -U textblob
|
||||||
|
python -m textblob.download_corpora
|
||||||
|
```
|
||||||
|
|
||||||
|
> 💡 Dica: Você pode rodar Python diretamente nos ambientes (environments) do VS Code. Veja a [documentação](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-15963-cxa) para mais informações.
|
||||||
|
|
||||||
|
## Falando com máquinas
|
||||||
|
|
||||||
|
A história de tentar fazer computadores entender a linguagem humana é de décadas atrás, e um dos primeiros cientistas a considerar o processamento de linguagem natural foi *Alan Turing*.
|
||||||
|
|
||||||
|
### O 'Teste de Turing'
|
||||||
|
|
||||||
|
Quando Turing estava pesquisando *inteligência artificial* na década de 1950, ele imaginou um caso onde um teste de conversação digitada que poderia ser dado para um humano e um computador, onde o humano na conversa não conseguiria ter certeza de que ele estava falando com outro humano ou um computador.
|
||||||
|
|
||||||
|
Se o humano não pudesse determinar se as respostas foram dadas por um computador ou não depois de um certo período de conversa, poderíamos dizer que computador está *pensando*?
|
||||||
|
|
||||||
|
### A inspiração - 'o jogo da imitação'
|
||||||
|
|
||||||
|
A ideia do teste veio de um jogo de festa chamado *O Jogo da Imitação* (The Imitation Game), onde um interrogador está sozinho em um cômodo e tem a tarefa de determinar qual de duas pessoas (em outro cômodo) é o homem e qual é a mulher. O interrogador pode mandar notas, e precisa tentar pensar em questões onde as respostas escritas revelam o gênero da pessoa misteriosa. Obviamente, os jogadores na outra sala estão tentando enganar o interrogador ao responder questões de forma confusa/enganosa, ao mesmo tempo em que aparentam dar respostas sinceras.
|
||||||
|
|
||||||
|
### Desenvolvendo Eliza
|
||||||
|
|
||||||
|
Nos anos 1960, um cientista do MIT chamado *Joseph Weizenbaum* desenvolveu [*Eliza*](https://wikipedia.org/wiki/ELIZA), um computador 'terapeuta' que fazia perguntas ao humano e aparentava entender suas respostas. No entanto, enquanto Eliza conseguia parsear e identificar certas construções gramaticais e palavras-chave para conseguir responder de forma razoável, não podemos dizer que ele conseguia *entender* a frase. Se Eliza fosse apresentado com uma sequência de sentenças seguindo o formato "**Eu estou** <u>triste</u>" ele podia rearranjar e substituir palavras na sentença para formar a resposta "Há quanto tempo **você está** <u>triste</u>?".
|
||||||
|
|
||||||
|
Isso dá a impressão de que Eliza entendeu a afirmação e fez uma pergunta subsequente, enquanto na realidade, o computador mudou a conjugação verbal e adicionou algumas palavras. Se Eliza não conseguisse identificar uma palavra-chave que já tem uma resposta pronta, ele daria uma resposta aleatória que pode ser aplicada em diversas afirmações do usuário. Eliza podia ser facilmente enganado, por exemplo, quando um usuário escrevia "**Você é** uma <u>bicicleta</u>", a resposta dada poderia ser "Há quanto tempo **eu sou** uma <u>bicicleta</u>?", ao invés de uma resposta mais razoável.
|
||||||
|
|
||||||
|
[](https://youtu.be/RMK9AphfLco "Chatting with Eliza")
|
||||||
|
|
||||||
|
> 🎥 Clique na imagem abaixo para ver um video sobre o programa original ELIZA
|
||||||
|
|
||||||
|
> Nota: Você pode ler a descrição original de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publicada em 1966 se você tem uma conta ACM. Alternativamente, leia sobre Eliza na [wikipedia](https://wikipedia.org/wiki/ELIZA)
|
||||||
|
|
||||||
|
## Exercício - programando um bot de conversação básico
|
||||||
|
|
||||||
|
Um bot de conversação, como Eliza, é um programa que obtém o input do usuário e parece entender e responder de forma inteligente. Diferentemente de Eliza, nosso bot não vai ter diversas regras dando a aparência de uma conversação inteligente. Ao invés disso, nosso bot tem uma única habilidade, a de continuar a conversação com respostas aleatórias que podem funcionar em qualquer conversação trivial.
|
||||||
|
|
||||||
|
### O plano
|
||||||
|
|
||||||
|
Seus passos quando estiver construindo um bot de conversação:
|
||||||
|
|
||||||
|
1. Imprima instruções indicando como o usuário pode interagir com o bot
|
||||||
|
2. Comece um loop (laço)
|
||||||
|
1. Aceite o input do usuário
|
||||||
|
2. Se o usuário pedir para sair, então sair
|
||||||
|
3. Processar o input do usuário e determinar resposta (neste caso, a resposta é uma escolha aleatória de uma lista de possíveis respostas genéricas)
|
||||||
|
4. Imprima a resposta
|
||||||
|
3. Voltar para o passo 2 (continuando o loop/laço)
|
||||||
|
|
||||||
|
### Construindo o bot
|
||||||
|
|
||||||
|
Agora, vamos criar o bot. Iremos começar definindo algumas frases.
|
||||||
|
|
||||||
|
> Nota da tradutora: em função da política de contribuição da Microsoft, todos os códigos foram mantidos em inglês. No entanto, é possível encontrar traduções abaixo deles para ajudar no entendimento. Para não estender muito o arquivo, somente algumas partes foram traduzidas, então sintam-se convidados a pesquisar em tradutores/dicionários.
|
||||||
|
|
||||||
|
1. Crie este bot em Python com as seguintes respostas:
|
||||||
|
|
||||||
|
```python
|
||||||
|
random_responses = ["That is quite interesting, please tell me more.",
|
||||||
|
"I see. Do go on.",
|
||||||
|
"Why do you say that?",
|
||||||
|
"Funny weather we've been having, isn't it?",
|
||||||
|
"Let's change the subject.",
|
||||||
|
"Did you catch the game last night?"]
|
||||||
|
```
|
||||||
|
> A lista de respostas genéricas inclui frases como "Isso é bem interessante, por favor me conte mais." e "O tempo esses dias está bem doido, né?"
|
||||||
|
|
||||||
|
Aqui estão alguns outputs de exemplo para te guiar (as entradas do usuário se iniciam com `>`):
|
||||||
|
|
||||||
|
```output
|
||||||
|
Hello, I am Marvin, the simple robot.
|
||||||
|
You can end this conversation at any time by typing 'bye'
|
||||||
|
After typing each answer, press 'enter'
|
||||||
|
How are you today?
|
||||||
|
> I am good thanks
|
||||||
|
That is quite interesting, please tell me more.
|
||||||
|
> today I went for a walk
|
||||||
|
Did you catch the game last night?
|
||||||
|
> I did, but my team lost
|
||||||
|
Funny weather we've been having, isn't it?
|
||||||
|
> yes but I hope next week is better
|
||||||
|
Let's change the subject.
|
||||||
|
> ok, lets talk about music
|
||||||
|
Why do you say that?
|
||||||
|
> because I like music!
|
||||||
|
Why do you say that?
|
||||||
|
> bye
|
||||||
|
It was nice talking to you, goodbye!
|
||||||
|
```
|
||||||
|
> O bot se apresenta e dá instruções de como o usuário deve interagir. A conversa é iniciada pelo bot, que pergunta "Como você está hoje?". O usuário diz "Estou bem, valeu", ao que o bot responde "Isso é bem interessante, por favor me conte mais.". A conversa continua por mais alguns diálogos.
|
||||||
|
|
||||||
|
Uma solução possível para a tarefa está [aqui](../solution/bot.py)
|
||||||
|
|
||||||
|
✅ Pare e pense
|
||||||
|
|
||||||
|
1. Você acha que respostas aleatórias seriam capazes de fazer uma pessoa achar que o bot realmente entendeu que ela disse?
|
||||||
|
2. Quais recursos/funções o bot precisaria ter para ser mais convincente?
|
||||||
|
3. Se um bot pudesse 'entender' facilmente o significado de uma frase, ele também precisaria se 'lembrar' do significado de frases anteriores?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀Desafio
|
||||||
|
|
||||||
|
Escolha um dos elementos do "pare e considere" acima e tente implementá-lo em código ou escreva uma solução no papel usando pseudocódigo.
|
||||||
|
|
||||||
|
Na próxima aula, você irá aprender sobre algumas outras abordagens de análise sintática de linguagem natural e de aprendizado de máquina.
|
||||||
|
|
||||||
|
## [Teste pós-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/32?loc=br)
|
||||||
|
|
||||||
|
## Revisão & Autoestudo
|
||||||
|
|
||||||
|
Dê uma olhada nas referências abaixo e talvez até as considere como oportunidade de leitura futura.
|
||||||
|
|
||||||
|
### Referências
|
||||||
|
|
||||||
|
1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
|
||||||
|
2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010.
|
||||||
|
|
||||||
|
## Tarefa
|
||||||
|
|
||||||
|
[Procure por um bot](assignment.pt-br.md)
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Procure por um bot
|
||||||
|
|
||||||
|
## Instruções
|
||||||
|
|
||||||
|
Bots estão em todos os lugares. Sua tarefa: encontrar um e analisá-lo! Você pode encontrá-los em web sites, aplicações de bancos, e no celular, por exemplo, quando entra em contato com bancos em busca de ajuda ou informação sobre sua conta. Analise o bot e veja se você consegue confundi-lo. Se você conseguir, por qual motivo você acha que isto aconteceu? Escreva um pequeno artigo sobre sua experiência.
|
||||||
|
|
||||||
|
## Rubrica
|
||||||
|
|
||||||
|
| Critério | Exemplar | Adequado | Precisa melhorar |
|
||||||
|
| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- |
|
||||||
|
| | Um artigo de uma página completa foi escrito, explicando a suposta arquitetura do bot e resumindo sua experiência com ele | O artigo está incompleto ou mal pesquisado | Nenhum artigo foi feito |
|
||||||
@ -0,0 +1,220 @@
|
|||||||
|
# Técnicas e tarefas frequentes do Processamento de Linguagem Natural
|
||||||
|
|
||||||
|
Para a maioria das tarefas de *processamento de linguagem natural*, o texto a ser processado precisa ser quebrado em partes e examinado, e os resultados precisam ser guardados ou cruzados com regras e data sets. Estas tarefas permitem que o programador obtenha _significado_, _intencionalidade_ ou a _frequência_ de termos e palavras em um texto.
|
||||||
|
|
||||||
|
## [Teste pré-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/33?loc=br)
|
||||||
|
|
||||||
|
Vamos descobrir técnicas frequentemente usadas no processamento de texto. Combinadas com aprendizado de máquina, estas técnicas ajudam você a analisar grandes quantidades de texto com eficiência. Contudo, antes de aplicar o aprendizado de máquina para estas tarefas, vamos entender os problemas enfrentados por um especialista de PLN (ou NLP).
|
||||||
|
|
||||||
|
## Tarefas frequentes para o PLN
|
||||||
|
|
||||||
|
Existem diferentes formas de analisar um texto em que você está trabalhando. Existem algumas tarefas que você pode executar e através destas você pode obter um entendimento melhor do texto e chegar a conclusões. Você geralmente as realiza em uma sequência.
|
||||||
|
|
||||||
|
### Tokenização
|
||||||
|
|
||||||
|
Provavelmente a primeira coisa que a maioria dos algoritmos de PLN precisa é fazer um split (quebra) do texto em tokens, que, na prática, são palavras. Apesar de parecer simples, considerar pontuação e delimitadores de palavras e orações de diferentes linguagens pode ser trabalhoso. Você pode ter que usar vários métodos para determinar os delimitadores.
|
||||||
|
|
||||||
|

|
||||||
|
> Tokenizando uma frase de **Orgulho e preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper)
|
||||||
|
|
||||||
|
### Embeddings
|
||||||
|
|
||||||
|
[Word embeddings](https://wikipedia.org/wiki/Word_embedding) (em português, podemos dizer vetores de palavras - apesar de o termo mais comum ser word embeddings) são uma forma de converter seus dados textuais em dados numéricos. Os embeddings são feitos de tal forma que as palavras com significado parecido ou palavras usadas em conjunto ficam agrupadas em clusters.
|
||||||
|
|
||||||
|

|
||||||
|
> "I have the highest respect for your nerves, they are my old friends." - Word embeddings de uma frase em **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper)
|
||||||
|
|
||||||
|
✅ Tente esta [ferramenta interessante](https://projector.tensorflow.org/) para experimentar com word embeddings. Clicar em uma palavra mostra o cluster (agrupamento) de palavras parecidas: 'brinquedo' está agrupado com 'disney', 'lego', 'playstation', e 'console'.
|
||||||
|
|
||||||
|
### Parsing & Marcação de Partes da Fala (Part of Speech Tagging - POS)
|
||||||
|
|
||||||
|
Toda palavra tokenizada pode ser marcada como parte da fala - um substantivo, verbo, ou adjetivo. A frase `A rápida raposa pula por cima do preguiçoso cão marrom` pode ser marcada com partes da fala da seguinte forma: raposa = substantivo, pula = verbo.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> Parseando/analisando sintaticamente uma frase de **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper)
|
||||||
|
|
||||||
|
Parsear é reconhecer quais palavras se relacionam entre si em uma frase - por exemplo, `A rápida raposa pula` é uma sequência com adjetivo-substantivo-verbo que difere da sequência `preguiçoso cão marrom`.
|
||||||
|
|
||||||
|
### Frequência de palavras e frases
|
||||||
|
|
||||||
|
Um procedimento útil ao analisar um texto grande é construir um dicionário com toda palavra/frase de interesse e com a frequência ela aparece. A frase `A rápida raposa pula por cima do preguiçoso cão marrom` tem uma frequência de 1 para a palavra raposa.
|
||||||
|
|
||||||
|
Vamos observar um exemplo de texto onde contamos a frequência de palavras. O poema The Winners de Rudyard Kipling contém o seguinte verso:
|
||||||
|
|
||||||
|
> O poema não foi traduzido, porém, basta observar as frequências.
|
||||||
|
|
||||||
|
```output
|
||||||
|
What the moral? Who rides may read.
|
||||||
|
When the night is thick and the tracks are blind
|
||||||
|
A friend at a pinch is a friend, indeed,
|
||||||
|
But a fool to wait for the laggard behind.
|
||||||
|
Down to Gehenna or up to the Throne,
|
||||||
|
He travels the fastest who travels alone.
|
||||||
|
```
|
||||||
|
|
||||||
|
Dependendo do caso, pode ser necessário que a frequência de expressões considere variações de letras maiúsculas e minúsculas (case sensitive) ou não (case insensitive). Se desconsiderarmos a diferença entre maiúsculas e minúsculas, a expressão `a friend` possui frequência de 2 no poema e `the` tem frequência de 6, e a de `travels` é 2.
|
||||||
|
|
||||||
|
### N-gramas
|
||||||
|
|
||||||
|
Um texto pode ser dividido em sequências de palavras de certo tamanho, uma única palavra (unigrama), duas palavras (bigrama), três palavras (trigrama) ou qualquer número de palavras (n-gramas).
|
||||||
|
|
||||||
|
Por exemplo, `A rápida raposa pula por cima do preguiçoso cão marrom` com um n-grama de tamanho 2 produz os seguintes n-gramas:
|
||||||
|
|
||||||
|
1. a rápida
|
||||||
|
2. rápida raposa
|
||||||
|
3. raposa pula
|
||||||
|
4. pula por
|
||||||
|
5. por cima
|
||||||
|
6. cima do
|
||||||
|
7. do preguiçoso
|
||||||
|
8. preguiçoso cão
|
||||||
|
9. cão marrom
|
||||||
|
|
||||||
|
Pode ser mais fácil visualizar o n-grama como uma caixa que desliza sobre a frase. Aqui está um exemplo dos n-gramas de 3 palavras, o n-grama está em negrito em cada frase:
|
||||||
|
|
||||||
|
A rápida raposa pula por cima do preguiçoso cão marrom
|
||||||
|
|
||||||
|
1. <u>**A rápida raposa**</u> pula por cima do preguiçoso cão marrom
|
||||||
|
2. A **<u>rápida raposa pula</u>** por cima do preguiçoso cão marrom
|
||||||
|
3. A rápida **<u>raposa pula por</u>** cima do preguiçoso cão marrom
|
||||||
|
4. A rápida raposa **<u>pula por cima</u>** do preguiçoso cão marrom
|
||||||
|
5. A rápida raposa pula **<u>por cima do</u>** preguiçoso cão marrom
|
||||||
|
6. A rápida raposa pula por **<u>cima do preguiçoso</u>** cão marrom
|
||||||
|
7. A rápida raposa pula por cima **<u>do preguiçoso cão</u>** marrom
|
||||||
|
8. A rápida raposa pula por cima do **<u>preguiçoso cão marrom</u>**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> N-grama de tamanho 3: Infográfico por [Jen Looper](https://twitter.com/jenlooper)
|
||||||
|
|
||||||
|
### Extração de sujeito e objeto
|
||||||
|
|
||||||
|
Na maioria das frases, existe um substantivo que é o sujeito ou o objeto da oração. Em português (e em inglês também), geralmente é possível identificá-los por serem precedidos por palavras como "a(s)" e "o(s)". Identificar o sujeito ou o objeto de uma oração é uma tarefa comum em PLN quando o objetivo é entender o significado de uma frase.
|
||||||
|
|
||||||
|
✅ Nas frases "Não sei precisar a hora, ou o lugar, ou o olhar, ou as palavras que lançaram as bases. Faz muito tempo. Eu já estava no meio antes de me dar conta de que havia começado.", você consegue identificar os sujeitos e os objetos?
|
||||||
|
|
||||||
|
Na frase `A rápida raposa pula por cima do preguiçoso cão marrom` existem dois substantivos **raposa** e **cão**, que, respectivamente, são sujeito e objeto.
|
||||||
|
|
||||||
|
### Análise de sentimento
|
||||||
|
|
||||||
|
Uma frase ou texto pode ser analisado para encontrar sentimento, ou avaliar o quão *positivo* ou *negativo* é. Sentimento é medido em *polaridade* e *objetividade/subjetividade*. Polaridade é medida de -1.0 a 1.0 (negativo a positivo) e objetividade/subjetividade é medida de 0.0 a 1.0 (mais objetivo a mais subjetivo).
|
||||||
|
|
||||||
|
✅ Mais tarde você irá aprender que existem diferentes formas de se determinar sentimento usando aprendizado de máquina (machine learning), mas um jeito de fazer é ter uma lista de palavras e frases categorizadas como positivas ou negativas por um especialista humano e aplicar este modelo ao texto para calcular a pontuação da polaridade. Você consegue perceber como isso poderia funcionar melhor em alguns casos e pior em outros?
|
||||||
|
|
||||||
|
### Inflexão/flexão
|
||||||
|
|
||||||
|
A inflexão/flexão é a variação de uma palavra. Exemplos incluem flexão de número (singular/plural), gênero (feminino/masculino) e grau (aumentativo/diminutivo).
|
||||||
|
|
||||||
|
### Lematização
|
||||||
|
|
||||||
|
Um *lema* é uma palavra (ou conjunto de palavras) que é raiz ou termo base, como, por exemplo, *voa*, *voou*, *voando* são variações (lexemas) do verbo *voar*.
|
||||||
|
|
||||||
|
Também existem databases úteis disponíveis para pesquisadores de PLN, particularmente:
|
||||||
|
|
||||||
|
### WordNet
|
||||||
|
|
||||||
|
[WordNet](https://wordnet.princeton.edu/) é uma database de palavras, sinônimos, antônimos e muitos outros detalhes para todas as palavras em muitas linguagens diferentes. É incrivelmente útil quando estamos tentando construir tradutores, verificadores de ortografia ou ferramentas de linguagem de qualquer tipo.
|
||||||
|
|
||||||
|
## Bibliotecas de PLN
|
||||||
|
|
||||||
|
Por sorte, você não precisa criar estas técnicas por si só, já que existem excelentes bibliotecas de Python disponíveis, que tornam o PLN muito mais acessível para desenvolvedores que não são especializados em processamento de linguagem natural ou machine learning. As próximas aulas incluem mais exemplos delas, mas aqui você irá aprender alguns exemplos úteis para te ajudar na próxima tarefa.
|
||||||
|
|
||||||
|
### Exercício - usando a biblioteca `TextBlob`
|
||||||
|
|
||||||
|
Iremos utilizar uma biblioteca chamada TextBlob, pois ela contém APIs convenientes para lidar com esse tipo de tarefa. O TextBlob "se apoia nos ombros dos gigantes [NLTK](https://nltk.org) e [pattern](https://github.com/clips/pattern), e funciona bem com ambos". Existe uma quantidade considerável de aprendizado de máquina embutido em sua API.
|
||||||
|
|
||||||
|
> Nota: Um guia inicial ([Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart)) está disponível para o TextBlob e é recomendado para desenvolvedores Python.
|
||||||
|
|
||||||
|
Quando estiver tentando identificar *sujeitos e objetos*, o TextBlob oferece diversas opções de extratores para encontrar ambos.
|
||||||
|
|
||||||
|
1. Obeserve o `ConllExtractor`.
|
||||||
|
|
||||||
|
```python
|
||||||
|
from textblob import TextBlob
|
||||||
|
from textblob.np_extractors import ConllExtractor
|
||||||
|
# import and create a Conll extractor to use later
|
||||||
|
extractor = ConllExtractor()
|
||||||
|
|
||||||
|
# later when you need a noun phrase extractor:
|
||||||
|
user_input = input("> ")
|
||||||
|
user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified
|
||||||
|
np = user_input_blob.noun_phrases
|
||||||
|
```
|
||||||
|
|
||||||
|
> O que está acontecendo aqui? O [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) é "um extrator de sujeito e objeto que usa parsing/análise sintática de chunks, e é treinado com o ConLL-2000 training corpus." O nome ConLL-2000 é em referência à conferência 2000 Conference on Computational Natural Language Learning. Todo ano a conferência sedia um workshop para lidar com um problema difícil de NLP e, em 2000, foi o noun phrase chunking (divisão da frase em subcomponentes - como substantivos e verbos). Um modelo foi treinado no Wall Street Journal, com "seções 15-18 como dados de treino (211727 tokens) e a seção 20 como dados de teste (47377 tokens)". Você pode ver os procedimentos utilizados [aqui](https://www.clips.uantwerpen.be/conll2000/chunking/) e os resultados [aqui](https://ifarm.nl/erikt/research/np-chunking.html).
|
||||||
|
|
||||||
|
### Desafio - melhorando seu bot com PLN
|
||||||
|
|
||||||
|
Na aula anterior você construiu um bot de perguntas e respostas bastante simples. Agora, você vai fazer Marvin um pouco mais simpático ao analisar seu input em busca do sentimento e imprimindo a resposta de forma a combinar com ele. Você também vai precisar identificar um `sujeito ou objeto` e perguntar sobre.
|
||||||
|
|
||||||
|
Seus passos quando estiver construindo um bot de conversação são:
|
||||||
|
|
||||||
|
1. Imprima instruções indicando como o usuário pode interagir com o bot
|
||||||
|
2. Comece um loop (laço)
|
||||||
|
1. Aceite o input do usuário
|
||||||
|
2. Se o usuário pedir para sair, então sair
|
||||||
|
3. Processar o input do usuário e determinar resposta adequada de acordo com o sentimento expressado no input
|
||||||
|
4. Se um sujeito ou objeto for identificado no sentimento, torne o bot mais variado e pergunte por mais inputs sobre aquele tópico
|
||||||
|
5. Imprima a resposta
|
||||||
|
3. Voltar para o passo 2 (continuando o loop/laço)
|
||||||
|
|
||||||
|
|
||||||
|
Aqui está um trecho de código que determina o sentimento usando TextBlob. Note que só existem quatro *gradientes* de resposta a sentimento (você pode ter mais, se quiser):
|
||||||
|
|
||||||
|
> É feita uma divisão por valor de polaridade. Se estiver no intervalo, retorna respostas correspondentes: "Nossa, isso parece terrível", "Hmm, isso não parece muito bom", "Bom, isso parece positivo" e "Uau, isso soa ótimo"
|
||||||
|
|
||||||
|
```python
|
||||||
|
if user_input_blob.polarity <= -0.5:
|
||||||
|
response = "Oh dear, that sounds bad. "
|
||||||
|
elif user_input_blob.polarity <= 0:
|
||||||
|
response = "Hmm, that's not great. "
|
||||||
|
elif user_input_blob.polarity <= 0.5:
|
||||||
|
response = "Well, that sounds positive. "
|
||||||
|
elif user_input_blob.polarity <= 1:
|
||||||
|
response = "Wow, that sounds great. "
|
||||||
|
```
|
||||||
|
|
||||||
|
Aqui estão alguns outputs de exemplo para te guiar (input do usuário está nas linhas que começam com >):
|
||||||
|
|
||||||
|
```output
|
||||||
|
Hello, I am Marvin, the friendly robot.
|
||||||
|
You can end this conversation at any time by typing 'bye'
|
||||||
|
After typing each answer, press 'enter'
|
||||||
|
How are you today?
|
||||||
|
> I am ok
|
||||||
|
Well, that sounds positive. Can you tell me more?
|
||||||
|
> I went for a walk and saw a lovely cat
|
||||||
|
Well, that sounds positive. Can you tell me more about lovely cats?
|
||||||
|
> cats are the best. But I also have a cool dog
|
||||||
|
Wow, that sounds great. Can you tell me more about cool dogs?
|
||||||
|
> I have an old hounddog but he is sick
|
||||||
|
Hmm, that's not great. Can you tell me more about old hounddogs?
|
||||||
|
> bye
|
||||||
|
It was nice talking to you, goodbye!
|
||||||
|
```
|
||||||
|
|
||||||
|
Uma possível resposta para a tarefa está [aqui](../solution/bot.py)
|
||||||
|
|
||||||
|
✅ Checagem de conhecimento
|
||||||
|
|
||||||
|
1. Você acha que respostas simpáticas conseguiriam convencer uma pessoa a achar que o bot realmente entendeu o que ela disse?
|
||||||
|
2. Será que identificar sujeito e objeto tornam o bot mais convincente?
|
||||||
|
3. Porque você acha que extrair o sujeito e o objeto de uma oração é algo útil a se fazer?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀Desafio
|
||||||
|
|
||||||
|
Implemente o bot discutido acima da seção checagem de conhecimento e teste-o em amigos. O bot consegue enganá-los? Você consegue fazer seu bot mais convincente?
|
||||||
|
|
||||||
|
## [Teste pós-aula](https://white-water-09ec41f0f.azurestaticapps.net/quiz/34?loc=br)
|
||||||
|
|
||||||
|
## Revisão & Autoestudo
|
||||||
|
|
||||||
|
Nas próximas aulas você vai aprender mais sobre análise de sentimento. Pesquise sobre esta técnica interessante em artigos como estes no [KDNuggets](https://www.kdnuggets.com/tag/nlp).
|
||||||
|
|
||||||
|
## Tarefa
|
||||||
|
|
||||||
|
[Faça um bot responder](assignment.pt-br.md)
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# Faça um bot responder
|
||||||
|
|
||||||
|
## Instruções
|
||||||
|
|
||||||
|
Nas últimas aulas, você programou um simples bot de conversação. Ele retorna mensagens aleatórias até você dizer 'bye' (tchau). Você consegue fazer as respostas menos aleatórias e acionar certas respostas se você disser coisas específicas, como 'porque' ou 'como'? Pense um pouco sobre como o machine learning pode fazer este tipo de tarefa menos manual enquanto você melhora seu bot. Você pode usar as bibliotecas NLTK ou TextBlob para fazer seu trabalho mais fácil.
|
||||||
|
|
||||||
|
## Rubrica
|
||||||
|
|
||||||
|
| Critério | Exemplar | Adequado | Precisa melhorar |
|
||||||
|
| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- |
|
||||||
|
| | Um novo arquivo bot.py foi apresentado e documentado | Um novo arquivo com bot foi apresentado, porém, contém bugs | Nenhum arquivo foi criado |
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
# एक बॉट के लिए खोजें
|
||||||
|
|
||||||
|
## निर्देश
|
||||||
|
|
||||||
|
बॉट हर जगह हैं। आपका कार्य: एक ढूंढो और उसे अपनाओ! आप उन्हें वेब साइटों पर, बैंकिंग अनुप्रयोगों में और फोन पर पा सकते हैं, उदाहरण के लिए जब आप वित्तीय सेवा कंपनियों को सलाह या खाता जानकारी के लिए कॉल करते हैं। बॉट का विश्लेषण करें और देखें कि क्या आप इसे भ्रमित कर सकते हैं। यदि आप बॉट को भ्रमित कर सकते हैं, तो आपको क्या लगता है कि ऐसा क्यों हुआ? अपने अनुभव के बारे में एक संक्षिप्त लेख लिखें।
|
||||||
|
|
||||||
|
## रूब्रिक
|
||||||
|
|
||||||
|
| मानदंड | अनुकरणीय | पर्याप्त | सुधार की जरूरत |
|
||||||
|
| -------- | -------------------------------------------------- -------------------------------------------------- ------------- | ------------------------------------------- | --------------------- |
|
||||||
|
| | एक पूर्ण पृष्ठ का पेपर लिखा जाता है, जो अनुमानित बॉट आर्किटेक्चर की व्याख्या करता है और इसके साथ आपके अनुभव को रेखांकित करता है | एक पेपर अधूरा है या अच्छी तरह से शोध नहीं किया गया है | कोई पेपर सबमिट नहीं किया गया |
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
# Iniciando com Processamento de Linguagem Natural
|
||||||
|
|
||||||
|
O processamento de Linguagem Natural (PLN) ou, em inglês, Natural Language Processing (NLP) é a habilidade de um programa de computador entender linguagem humana da maneira falada e escrita -- o que são referidas como linguagem natural. É um componente da inteligência artificial (IA). O PLN já existe há mais de 50 anos e possui raízes no campo da linguística, que é todo direcionado a ajudar máquinas a entender e processar a linguagem humana. Isto pode então ser usado para realizar tarefas como verificação de ortografia ou tradução. Existe uma variedade de aplicações do mundo real em muitos campos, como em pesquisa médica, ferramentas de busca e inteligência de negócio.
|
||||||
|
|
||||||
|
## Tópico regional: línguas europeias e literatura, e hotéis da Europa ❤️
|
||||||
|
|
||||||
|
Nesta seção do currículo, você vai aprender mais sobre uma das formas mais difundidas do aprendizado de máquina (machine learning): Processamento de Linguagem Natural (PLN). Vinda da linguística computacional, esta categoria de inteligência artificial é a ponte entre humanos e máquinas através de comunicação de voz ou textual.
|
||||||
|
|
||||||
|
Nessas aulas, iremos aprender os fundamentos do PLN ao construir simples bots de conversação para entender como o aprendizado de máquina ajuda a tornar essas conversas mais e mais 'inteligentes'. Você vai viajar para o passado, conversando com Elizabeth Bennett e Mr. Darcy do livro clássico de Jane Austen, **Orgulho e Preconceito**, publicado em 1813. Então, você aumentará seu conhecimento ao aprender sobre análise de sentimentos por meio de avaliações de hotéis da Europa.
|
||||||
|
|
||||||
|

|
||||||
|
> Foto por <a href="https://unsplash.com/@elaineh?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Elaine Howlin</a> em <a href="https://unsplash.com/s/photos/pride-and-prejudice?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Aulas
|
||||||
|
|
||||||
|
1. [Introdução ao Processamento de Linguagem Natural](../1-Introduction-to-NLP/translations/README.pt-br.md)
|
||||||
|
2. [Técnicas e tarefas frequentes do Processamento de Linguagem Natural](../2-Tasks/translations/README.pt-br.md)
|
||||||
|
3. [Translation and sentiment analysis with machine learning](../3-Translation-Sentiment/README.md) (ainda não traduzido)
|
||||||
|
4. [Preparing your data](../4-Hotel-Reviews-1/README.md) (ainda não traduzido)
|
||||||
|
5. [NLTK for Sentiment Analysis](../5-Hotel-Reviews-2/README.md) (ainda não traduzido)
|
||||||
|
|
||||||
|
## Créditos
|
||||||
|
|
||||||
|
Essas aulas de processamento de linguagem natural foram escritas com ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT)
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
# Introduction à la prévision des séries chronologiques
|
||||||
|
|
||||||
|
Qu'est-ce que la prévision des séries chronologiques ? Il s'agit de prédire des événements futurs en analysant les tendances du passé.
|
||||||
|
|
||||||
|
## Thème régional : consommation mondiale d'électricité ✨
|
||||||
|
|
||||||
|
Dans ces deux leçons, nous vous présenterons la prévision des séries temporelles, un domaine moins connu de l'apprentissage automatique qui est pourtant extrêmement précieux pour les applications industrielles et commerciales, entre autres. Bien que les réseaux neuronaux puissent être utilisés pour améliorer l'utilité de ces modèles, nous les étudierons dans le contexte de l'apprentissage automatique classique comme des modèles permettant de prédire les performances futures sur la base du passé.
|
||||||
|
|
||||||
|
Nous nous concentrons sur l'utilisation de l'électricité dans le monde, un ensemble de données intéressant pour apprendre à prévoir l'utilisation future de l'électricité sur la base des modèles de charge passés. Vous pouvez voir comment ce type de prévision peut être extrêmement utile dans un environnement commercial.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Photo par <a href="https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Peddi Sai hrithik</a> de poteaux électriques sur une route au Rajasthan, sur <a href="https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Leçons
|
||||||
|
|
||||||
|
1. [Introduction à la prévision des séries chronologiques](../1-Introduction/README.md)
|
||||||
|
2. [Construction de modèles de séries temporelles ARIMA](../2-ARIMA/README.md)
|
||||||
|
3. [Construction d'un régresseur à vecteur de support pour la prévision des séries temporelles](../3-SVR/README.md)
|
||||||
|
|
||||||
|
## Crédits
|
||||||
|
|
||||||
|
"Introduction à la prévision des séries chronologiques" a été écrit avec ⚡️ par [Francesca Lazzeri](https://twitter.com/frlazzeri) et [Jen Looper](https://twitter.com/jenlooper). Les notebooks ont été publiés pour la première fois en ligne dans le [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) écrit à l'origine par Francesca Lazzeri. La leçon sur les SVR a été rédigée par [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD)
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
# समय श्रृंखला पूर्वानुमान से परिचय
|
||||||
|
|
||||||
|
समय श्रृंखला पूर्वानुमान (time series forecasting) क्या है? यह अतीत के रुझानों का विश्लेषण करके भविष्य की घटनाओं की भविष्यवाणी करने के बारे में है।
|
||||||
|
|
||||||
|
## क्षेत्रीय विषय: दुनिया भर में बिजली का उपयोग ✨
|
||||||
|
|
||||||
|
इन दो पाठों में आपको समय श्रृंखला पूर्वानुमान से परिचित कराया जाएगा। यह मशीन लर्निंग (machine learning) का कुछ कम ज्ञात क्षेत्र होने के बावजूद भी अन्य क्षेत्रों के साथ-साथ उद्योग और व्यावसायिक अनुप्रयोगों के लिए अत्यंत मूल्यवान है। जबकि इन मॉडलों की उपयोगिता को बढ़ाने के लिए न्यूरल नेटवर्क (neural networks) का उपयोग किया जा सकता है, हम इनका अध्ययन शास्त्रीय मशीन लर्निंग (machine learning) के संदर्भ में करेंगे, जहाँ मॉडल अतीत के आधार पर भविष्य के प्रदर्शन की भविष्यवाणी करने में मदद करते हैं।
|
||||||
|
|
||||||
|
हमारा क्षेत्रीय केंद्र दुनिया में बिजली का उपयोग है। यह पिछले विद्युत भार के प्रतिरूप के आधार पर भविष्य के बिजली के उपयोग का पूर्वानुमान करना सीखने के लिए एक दिलचस्प डेटासेट (dataset) है। आप भांप सकते हैं कि इस प्रकार का पूर्वानुमान व्यावसायिक वातावरण में किस प्रकार अत्यंत सहायक हो सकता है।
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> राजस्थान में एक सड़क पर बिजली के टावरों का <a href="https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">पेड्डी साई ऋतिक (Peddi Sai hrithik)</a> द्वारा Unsplash <a href="https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">अनस्प्लैश (Unsplash)</a> पर चित्र
|
||||||
|
|
||||||
|
|
||||||
|
## पाठ
|
||||||
|
|
||||||
|
1. [समय श्रृंखला पूर्वानुमान से परिचय](../1-Introduction/README.md)
|
||||||
|
2. [अरीमा (ARIMA) समय श्रृंखला मॉडलों का निर्माण](../2-ARIMA/README.md)
|
||||||
|
3. [समय श्रृंखला पूर्वानुमान के लिए समर्थन वेक्टर प्रतिगामी (Support Vector Regressor) का निर्माण](../3-SVR/README.md)
|
||||||
|
|
||||||
|
## श्रेय
|
||||||
|
|
||||||
|
"समय श्रृंखला पूर्वानुमान से परिचय" ⚡️ के साथ [फ्रैंचेस्का लज़ैरी (Francesca Lazzeri)](https://twitter.com/frlazzeri) और [जेन लूपर (Jen Looper)](https://twitter.com/jenlooper) द्वारा लिखा गया था। नोटबुकें पहली बार [अज़ौर "डीप लर्निंग फॉर टाइम सीरीज़" रिपॉजिटरी (Azure "Deep Learning For Time Series" repository)](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) में ऑनलाइन दिखाई दी, जिसे मूल रूप से फ्रैंचेस्का लज़ैरी (Francesca Lazzeri) ने लिखा था। एस. वी. आर. (SVR) पाठ [अनिर्बान मुखर्जी (Anirban Mukherjee)](https://github.com/AnirbanMukherjeeXD) द्वारा लिखा गया था।
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
# 时间序列预测简介
|
||||||
|
|
||||||
|
什么是时间序列预测?它通过分析过去的趋势来预测未来的事件。
|
||||||
|
|
||||||
|
## 区域主题:全球用电量✨
|
||||||
|
|
||||||
|
在这两节课中,你将了解时间序列预测,这是机器学习中一个鲜为人知的领域,但对工业和商业应用程序以及其他领域非常有价值。虽然神经网络可用于增强这些模型的实用性,但我们将在经典机器学习的背景下研究它们,因为模型有助于根据过去预测未来的表现。
|
||||||
|
|
||||||
|
我们的重点是世界上的用电量,这是一个有趣的数据集,可以根据过去的用电量负载来预测未来的用电量。你可以看到这种预测在商业环境中非常有用。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
<a href="https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Peddi Sai hrithik</a> 摄于 <a href="https: //unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## 课程
|
||||||
|
|
||||||
|
1.【时间序列预测介绍】(../1-Introduction/README.md)
|
||||||
|
2.【构建 ARIMA 时间序列模型】(../2-ARIMA/README.md)
|
||||||
|
3.【构建支持向量回归器的时间序列预测】(../3-SVR/README.md)
|
||||||
|
|
||||||
|
## 作者
|
||||||
|
|
||||||
|
“时间序列预测简介” 由 [Francesca Lazzeri](https://twitter.com/frlazzeri) 和 [Jen Looper](https://twitter.com/jenlooper) 用 ⚡️ 编写。笔记本首先出现在 [Azure“时间序列深度学习”存储库](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) 最初由 Francesca Lazzeri 编写。SVR 课由 [Anirban Mukherjee](https://github.com/AnibanMukherjeeXD) 编写
|
||||||
|
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
# Una búsqueda del tesoro con aprendizaje automático
|
||||||
|
|
||||||
|
## Instrucciones
|
||||||
|
|
||||||
|
En esta lección aprendiste acerca de muchos casos de uso en la vida real que fueron solucionados usando aprendizaje automático. Si bien, el uso del aprendizaje profundo, las nuevas técnicas y herramientas en la inteligencia artificial y el apoyo en las redes neuronales han ayudado a acelerar la producción de herramientas para ayudar a estos sectores, el aprendizaje automático clásico que usa las técnicas en este curso aún tienen gran valor.
|
||||||
|
|
||||||
|
Para esta asignación, imagina que estás participando en un hackatón. Usa lo que has aprendido en el curso para así proponer una solución mediante el uso de aprendizaje automático clásico y así resolver un problema en uno de los sectores discutidos en esta lección. Crea una una presentación donde discutes cómo implementarás tu idea. ¡Tendrás puntos adicionales si puedes reunir datos de prueba y construir un modelo de aprendizaje automático para soportar tu concepto!
|
||||||
|
|
||||||
|
## Rúbrica
|
||||||
|
|
||||||
|
| Criterio | Ejemplar | Adecuado | Necesita mejorar |
|
||||||
|
| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- |
|
||||||
|
| | Entregó una presentación de PowerPoint - puntos adicionales si creó un modelo | Entregó una presentación básica nada innovadora | El trabajo está incompleto |
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
# Postdata: Aplicaciones del mundo real de aprendizaje automático clásico
|
||||||
|
|
||||||
|
En esta sección del curso, presentaremos algunas aplicaciones del aprendizaje automático clásico en el mundo real. Hemos escrutinado el internet para encontrar documentos oficiales y artículos acerca de aplicaciones que han usado estas estrategias; evitando las redes neuronales, el aprendizaje profundo y la inteligencia artificial tanto como fue posible. Aprende cómo se usa el aprendizaje automático en los sistemas comerciales, las aplicaciones ecológicas, las finanzas, el arte y la cultura y más.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> Foto por <a href="https://unsplash.com/@childeye?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexis Fauvet</a> en <a href="https://unsplash.com/s/photos/artificial-intelligence?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Lección
|
||||||
|
|
||||||
|
1. [Aplicaciones del mundo real para el aprendizaje automático](../1-Applications/translations/README.es.md)
|
||||||
|
## Créditos
|
||||||
|
|
||||||
|
"Aplicaciones del mundo real" fue escrito por un equipo de personas, incluyendo a [Jen Looper](https://twitter.com/jenlooper) y [Ornella Altunyan](https://twitter.com/ornelladotcom).
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
# Postscript: Applications réelles de l'apprentissage automatique classique
|
||||||
|
|
||||||
|
Dans cette section du cours, nous vous présenterons quelques applications réelles du ML classique. Nous avons parcouru l'Internet pour trouver des papiers de recherches et des articles sur des applications qui ont utilisé ces stratégies, en évitant autant que possible les réseaux neuronaux, l'apprentissage profond et l'IA. Découvrez comment le ML est utilisé dans les systèmes commerciaux, les applications écologiques, la finance, les arts et la culture, et plus encore.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> Photo par <a href="https://unsplash.com/@childeye?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexis Fauvet</a> sur <a href="https://unsplash.com/s/photos/artificial-intelligence?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||||
|
|
||||||
|
## Leçon
|
||||||
|
|
||||||
|
1. [Applications du monde réel pour le ML](../1-Applications/README.md)
|
||||||
|
|
||||||
|
## Crédits
|
||||||
|
|
||||||
|
"Applications du monde réel pour le ML" a été rédigé par une équipe de personnes, dont les suivantes [Jen Looper](https://twitter.com/jenlooper) et [Ornella Altunyan](https://twitter.com/ornelladotcom).
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
# उपसंहार: शास्त्रीय मशीन लर्निंग (machine learning) के वास्तविक विश्व अनुप्रयोग
|
||||||
|
|
||||||
|
पाठ्यक्रम के इस खंड में आपको शास्त्रीय एम. एल. (ML) के कुछ वास्तविक-विश्व के अनुप्रयोगों से परिचित कराया जाएगा। हमने इंटरनेट को खंगालकर इन रणनीतियों का उपयोग करने वाले अनुप्रयोगों के बारे में श्वेतपत्र और लेख खोजे हैं। यह करते हुए, जितना संभव हुआ हमने न्यूरल नेटवर्क (neural networks), डीप लर्निंग (deep learning) और ए. आई. (AI) से बचने का प्रयास किया है। आईये जानें की एम. एल. का उपयोग व्यावसायिक प्रणालियों, पारिस्थितिक अनुप्रयोगों, वित्त, कला और संस्कृति आदि में कैसे किया जाता है।
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> <a href="https://unsplash.com/@childeye?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">एलेक्सिस फॉवेट (Alexis Fauvet)</a> द्वारा <a href="https://unsplash.com/s/photos/artificial-intelligence?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">अनस्प्लैश (Unsplash)</a> पर चित्र
|
||||||
|
|
||||||
|
## पाठ
|
||||||
|
|
||||||
|
1. [एम. एल. (ML) के वास्तविक-विश्व अनुप्रयोग](../1-Applications/README.md)
|
||||||
|
|
||||||
|
## श्रेय
|
||||||
|
|
||||||
|
"वास्तविक विश्व अनुप्रयोग" को [जेन लूपर (Jen Looper)](https://twitter.com/jenlooper) और [ओर्नेला अल्टुन्यान (Ornella Altunyan)](https://twitter.com/ornelladotcom) सहित एक मित्रों की टोली द्वारा लिखा गया था।
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue