{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![Logo-PUC-Minas-Sobre-290x250.png](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4UKGRXhpZgAASUkqAAgAAAAJABIBAwABAAAAAQAAABoBBQABAAAAegAAABsBBQABAAAAggAAACgBAwABAAAAAgAAADEBAgANAAAAigAAADIBAgAUAAAAmAAAADsBAgAVAAAArAAAAGmHBAABAAAA3hAAABzqAgAbEAAAwgAAAHAhAAAsAQAAAQAAACwBAAABAAAAR0lNUCAyLjEwLjI4AAAyMDIyOjA1OjA2IDEwOjUyOjE3AEJydW5hIE1pY2FlbGkgUnVnZ2lvAAAyOCAyMzQgMCAwIDAgOCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAAAAYAA5ACABQAAAAsEQAABJACABQAAABAEQAAkZICAAMAAAAwMAAAkpICAAMAAAAwMAAAAaADAAEAAAABAAAAHOoCABsQAABUEQAAAAAAADIwMTg6MDI6MTUgMTA6NDc6MDAAMjAxODowMjoxNSAxMDo0NzowMAAyOCAyMzQgMCAwIDAgOCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw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PSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmEzMzkyYjFiLWM0MzktNDZiZS04YjFjLWJkZWUyYzI3NWYxNyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMzQwYTY3Zi0yMzkxLTRhNWItOTQwMy1mZjI1NDRhMThhNGYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4ZjQ1NTEzNy05YjI0LTQ2MjItOTBkYy0wMmRjNWFkNzI5M2IiIGRjOkZvcm1hdD0iaW1hZ2UvanBlZyIgR0lNUDpBUEk9IjIuMCIgR0lNUDpQbGF0Zm9ybT0iTGludXgiIEdJTVA6VGltZVN0YW1wPSIxNjUxODQ1MTM5NDQ0MzUyIiBHSU1QOlZlcnNpb249IjIuMTAuMjgiIHhtcDpDcmVhdGVEYXRlPSIyMDE4LTAyLTE1VDEwOjQ3OjAwIiB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOkJhZz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDpjaGFuZ2VkPSIvIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc0NWVhYjE5LWFlYTUtNDc3ZS04ZThhLTllZTBiODgzMzZmZiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiIHN0RXZ0OndoZW49IjIwMjItMDUtMDZUMTA6NDQ6MzItMDM6MDAiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDpjaGFuZ2VkPSIvIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmRmN2YzODliLTNlNmUtNGNjMi1iOTM1LWVkNzg3YjEwNWU3NiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiIHN0RXZ0OndoZW49IjIwMjItMDUtMDZUMTA6NDY6MDItMDM6MDAiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDpjaGFuZ2VkPSIvIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjA3ZmFkMTZlLWIyYmMtNGQ4Yy1hNDk3LTFlMzUwZmM0M2RlOCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiIHN0RXZ0OndoZW49IjIwMjItMDUtMDZUMTA6NTI6MTktMDM6MDAiLz4gPC9yZGY6QmFnPiA8L3htcE1NOkhpc3Rvcnk+IDxkYzpjcmVhdG9yPiA8cmRmOlNlcT4gPHJkZjpsaT5CcnVuYSBNaWNhZWxpIFJ1Z2dpbzwvcmRmOmxpPiA8L3JkZjpTZXE+IDwvZGM6Y3JlYXRvcj4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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)\n\n## Programa de Pós Graduação em Informática\n\n### Disciplina: Natural Language Processing (NLP)\n\n### Aluno: Felipe A. L. Reis","metadata":{}},{"cell_type":"code","source":"%load_ext autoreload\n%autoreload 2\nimport os\nimport gc\nimport numpy as np\nimport pandas as pd\n\nfrom sklearn.preprocessing import MinMaxScaler\nfrom tqdm import tqdm\n\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset, DataLoader\n\nfrom transformers import AutoTokenizer, AutoConfig, AutoModel#, Trainer\nfrom transformers import AutoModelForSequenceClassification, DataCollatorWithPadding\n\nos.environ[\"WANDB_DISABLED\"] = \"true\"\nos.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"","metadata":{"papermill":{"duration":9.953561,"end_time":"2022-05-16T21:16:20.472089","exception":false,"start_time":"2022-05-16T21:16:10.518528","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:02:49.131861Z","iopub.execute_input":"2022-07-23T14:02:49.132681Z","iopub.status.idle":"2022-07-23T14:02:49.209151Z","shell.execute_reply.started":"2022-07-23T14:02:49.132638Z","shell.execute_reply":"2022-07-23T14:02:49.207851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_data(filename):\n    data = pd.read_csv(filename, delimiter=',')\n    \n    return data\n    \ndef split_data(x_data, y_data, test_size=0.2):\n  \"\"\"Função para divisão dos conjuntos de treinamento e testes.\"\"\"\n\n  return train_test_split(\n    x_data,\n    y_data, \n    test_size = test_size, #percentual do conjunto de treino\n    #random_state = 10 #seed random, para resultados semelhantes\n  )\n        \ndef calcula_correlacao(y_true, y_pred):\n    pd_true = pd.DataFrame({'true': y_true})\n    pd_pred = pd.DataFrame({'pred': y_pred})\n\n    pd_pred['pred'] = pd_pred['pred'].transform(lambda x: 0. if x < 0. else (1. if x > 1. else x ))\n\n    test_eval = pd.concat([pd_true, pd_pred], axis=1)\n    \n    return test_eval.corr()\n\ndef pre_process_data_codes(data, codes):   \n    data = data.merge(codes, left_on='context', right_on='code')\n    data['title'] = data['title'].transform(lambda x: x.lower().replace(';', ''))\n    \n    return data\n\n\ndef pre_process_codes(codes):\n    codes['code3'] = codes['code'].transform(lambda x: x[:3])\n    codes['len3'] = codes['code'].transform(lambda x: len(x))\n    codes['title'] = codes['title'].transform(lambda x: x.lower().replace(';', '.'))\n    codes = codes[(codes.len3 > 1) & (codes.len3 <=4)]\n    \n    keys = pd.unique(codes.code3)\n    dicionario = {}\n    for k in keys:\n        dicionario[k] = ''\n\n    for code in codes.iterrows():\n        key = code[1]['code3']\n        title = code[1]['title']\n        dicionario[key] += ' ' + title + '.'\n\n    df = pd.DataFrame(list(dicionario.items()), columns = ['code', 'title'])\n    df\n    \n    return df","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:49.212000Z","iopub.execute_input":"2022-07-23T14:02:49.212459Z","iopub.status.idle":"2022-07-23T14:02:49.289589Z","shell.execute_reply.started":"2022-07-23T14:02:49.212421Z","shell.execute_reply":"2022-07-23T14:02:49.288232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"---\n# U.S. Patent Phrase to Phrase Matching\n\nAvailable at: https://www.kaggle.com/competitions/us-patent-phrase-to-phrase-matching/\n\nIn this dataset, you are presented pairs of phrases (an anchor and a target phrase) and asked to rate how similar they are on a scale from 0 (not at all similar) to 1 (identical in meaning). This challenge differs from a standard semantic similarity task in that similarity has been scored here within a patent's context, specifically its [CPC classification (version 2021.05)](https://en.wikipedia.org/wiki/Cooperative_Patent_Classification), which indicates the subject to which the patent relates. For example, while the phrases \"bird\" and \"Cape Cod\" may have low semantic similarity in normal language, the likeness of their meaning is much closer if considered in the context of \"house\".\n\nThis is a code competition, in which you will submit code that will be run against an unseen test set. The unseen test set contains approximately 12k pairs of phrases. A small public test set has been provided for testing purposes, but is not used in scoring.\n\nInformation on the meaning of CPC codes may be found on the [USPTO website](https://www.uspto.gov/web/patents/classification/cpc/html/cpc.html). The CPC version 2021.05 can be found on the [CPC archive website](https://www.cooperativepatentclassification.org/Archive).\n\n### Score meanings\nThe scores are in the 0-1 range with increments of 0.25 with the following meanings:\n\n1.0 - Very close match. This is typically an exact match except possibly for differences in conjugation, quantity (e.g. singular vs. plural), and addition or removal of stopwords (e.g. “the”, “and”, “or”).\n0.75 - Close synonym, e.g. “mobile phone” vs. “cellphone”. This also includes abbreviations, e.g. \"TCP\" -> \"transmission control protocol\".\n0.5 - Synonyms which don’t have the same meaning (same function, same properties). This includes broad-narrow (hyponym) and narrow-broad (hypernym) matches.\n0.25 - Somewhat related, e.g. the two phrases are in the same high level domain but are not synonyms. This also includes antonyms.\n0.0 - Unrelated.\n\n### Files\n\n* train.csv - the training set, containing phrases, contexts, and their similarity scores\n* test.csv - the test set set, identical in structure to the training set but without the score\n* sample_submission.csv - a sample submission file in the correct format\n\n### Columns\n\n* id - a unique identifier for a pair of phrases\n* anchor - the first phrase\n* target - the second phrase\n* context - the [CPC classification (version 2021.05)](https://en.wikipedia.org/wiki/Cooperative_Patent_Classification), which indicates the subject within which the similarity is to be scored\n* score - the similarity. This is sourced from a combination of one or more manual expert ratings.","metadata":{}},{"cell_type":"markdown","source":"---\n## Referência\n\nNotebook inspirado nas submissões do Kaggle, publicadas na comunidade:\n\n* https://www.kaggle.com/code/aruthart/submission, por [Arto](https://www.kaggle.com/aruthart);\n* https://www.kaggle.com/code/aruthart/eda-and-baseline/notebook, por [Arto](https://www.kaggle.com/aruthart);\n* https://www.kaggle.com/code/surilee/inference-bert-for-uspatents-deepshare, por [Suri_Lee](https://www.kaggle.com/surilee).\n\n---","metadata":{}},{"cell_type":"markdown","source":"----\n----\n----\n## BERT Exemplo\n\n* https://www.kaggle.com/competitions/us-patent-phrase-to-phrase-matching/overview/evaluation\n* https://www.kaggle.com/code/surilee/inference-bert-for-uspatents-deepshare\n* https://www.kaggle.com/code/renokan/2-deberta-1-roberta-analysis-and-using\n\n* https://www.kaggle.com/code/ksork6s4/uspppm-bert-for-patents-baseline-train\n* https://www.kaggle.com/code/gloomychan/pppm-sentence-bert-v0-1\n* https://www.kaggle.com/code/himanshubag/fine-tuning-bert\n\n---\n----\n----","metadata":{}},{"cell_type":"markdown","source":"---\n# Aplicação de Pré Processamento Textual","metadata":{}},{"cell_type":"code","source":"data = pd.read_csv(\"../input/us-patent-phrase-to-phrase-matching/train.csv\")\ntest = pd.read_csv(\"../input/us-patent-phrase-to-phrase-matching/test.csv\")\ncodes = load_data('../input/upppm/titles.csv')\n\ncodes = codes.drop(['subclass','group', 'main_group', 'section', 'class'], axis=1)\n\ndata.head()","metadata":{"papermill":{"duration":0.087299,"end_time":"2022-05-16T21:16:39.515310","exception":false,"start_time":"2022-05-16T21:16:39.428011","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:02:49.290838Z","iopub.execute_input":"2022-07-23T14:02:49.291820Z","iopub.status.idle":"2022-07-23T14:02:50.192317Z","shell.execute_reply.started":"2022-07-23T14:02:49.291782Z","shell.execute_reply":"2022-07-23T14:02:50.191128Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = pre_process_data_codes(data, codes)\ndata.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:50.195177Z","iopub.execute_input":"2022-07-23T14:02:50.195688Z","iopub.status.idle":"2022-07-23T14:02:50.378578Z","shell.execute_reply.started":"2022-07-23T14:02:50.195641Z","shell.execute_reply":"2022-07-23T14:02:50.377532Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pre_process_data_codes(test, codes)\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:50.380226Z","iopub.execute_input":"2022-07-23T14:02:50.380738Z","iopub.status.idle":"2022-07-23T14:02:50.522198Z","shell.execute_reply.started":"2022-07-23T14:02:50.380691Z","shell.execute_reply":"2022-07-23T14:02:50.521203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"---\n## Criação do Modelo","metadata":{}},{"cell_type":"code","source":"class CONFIG_BERT:\n    #model_id = 'microsoft/deberta-v3-large'\n    #model_id = 'bert-base-uncased' #'bert-base-uncased'\n    #model_id = '../input/deberta-v3-large/deberta-v3-large'\n    model_id = '../input/deberta-v2-xlarge'\n    folds = 4\n    batch_size = 2\n    max_input_len = 140\n    num_workers = 2","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:50.523835Z","iopub.execute_input":"2022-07-23T14:02:50.524225Z","iopub.status.idle":"2022-07-23T14:02:50.590268Z","shell.execute_reply.started":"2022-07-23T14:02:50.524153Z","shell.execute_reply":"2022-07-23T14:02:50.589225Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\ndevice","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:50.592528Z","iopub.execute_input":"2022-07-23T14:02:50.593412Z","iopub.status.idle":"2022-07-23T14:02:50.660488Z","shell.execute_reply.started":"2022-07-23T14:02:50.593373Z","shell.execute_reply":"2022-07-23T14:02:50.659410Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tokenizer = AutoTokenizer.from_pretrained(CONFIG_BERT.model_id)\n#model = AutoModelForSequenceClassification.from_pretrained(CONFIG_BERT.model_id).to(device)","metadata":{"papermill":{"duration":18.933208,"end_time":"2022-05-16T21:16:39.417846","exception":false,"start_time":"2022-05-16T21:16:20.484638","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:02:50.662360Z","iopub.execute_input":"2022-07-23T14:02:50.662790Z","iopub.status.idle":"2022-07-23T14:02:51.875112Z","shell.execute_reply.started":"2022-07-23T14:02:50.662751Z","shell.execute_reply":"2022-07-23T14:02:51.874028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class TextDataset(Dataset):\n    def __init__(self, df, tokenizer, max_input_len):        \n        self.text = df.anchor.values + '[SEP]' + df.target.values + '[SEP]'  + df.title.values\n        #self.text = (df.anchor.values + '[sep]' + df.target.values + '[sep]'  + df.title.values).tolist()\n        \n        #self.data = [tokenizer(t) for t in self.text]\n        self.tokenizer = tokenizer\n        self.max_input_length = max_input_len\n    \n    def __len__(self):\n        return len(self.text)\n    \n    def __getitem__(self, i):\n        inputs = self.text[i]\n        \n        inputs = self.tokenizer(inputs,\n                                max_length = self.max_input_length,\n                                padding    = 'max_length',\n                                truncation = True)\n        \n        return torch.as_tensor(inputs['input_ids'], dtype=torch.long),\\\n               torch.as_tensor(inputs['token_type_ids'], dtype=torch.long),\\\n               torch.as_tensor(inputs['attention_mask'], dtype=torch.long)","metadata":{"papermill":{"duration":0.017596,"end_time":"2022-05-16T21:16:39.540191","exception":false,"start_time":"2022-05-16T21:16:39.522595","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:02:51.879322Z","iopub.execute_input":"2022-07-23T14:02:51.879686Z","iopub.status.idle":"2022-07-23T14:02:51.951801Z","shell.execute_reply.started":"2022-07-23T14:02:51.879656Z","shell.execute_reply":"2022-07-23T14:02:51.950812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Model","metadata":{}},{"cell_type":"code","source":"class Custom_Bert_Simple(nn.Module):\n    def __init__(self, model_id):\n        super().__init__()\n        \n        config = AutoConfig.from_pretrained(model_id)\n        config.num_labels = 1\n        \n        self.base = AutoModelForSequenceClassification.from_config(config=config)\n        \n        dim = config.hidden_size\n        self.dropout = nn.Dropout(p=0)\n        self.cls = nn.Linear(dim,1)\n        \n    def forward(self, input_ids, attention_mask, token_type_ids, labels=None):\n        base_output = self.base(input_ids      = input_ids, \n                                attention_mask = attention_mask,\n                                token_type_ids = token_type_ids )\n\n        output = base_output[0]\n        if labels is None:\n            return output\n        else:\n            return (nn.MSELoss()(torch.squeeze(output,1),labels), output)","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:51.954335Z","iopub.execute_input":"2022-07-23T14:02:51.955398Z","iopub.status.idle":"2022-07-23T14:02:52.023028Z","shell.execute_reply.started":"2022-07-23T14:02:51.955352Z","shell.execute_reply":"2022-07-23T14:02:52.021887Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def valid_fn(valid_loader, model, device):\n    model.eval()\n    preds, labels = [], []\n    \n    for step, batch in enumerate(valid_loader):\n        input_ids, token_type_ids, attention_mask = [i.to(device) for i in batch]\n        \n        with torch.no_grad():\n            y_preds = model(input_ids, attention_mask, token_type_ids)\n        preds.append(y_preds.to('cpu').numpy())\n    predictions = np.concatenate(preds)\n    \n    return predictions","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.025627Z","iopub.execute_input":"2022-07-23T14:02:52.026465Z","iopub.status.idle":"2022-07-23T14:02:52.091380Z","shell.execute_reply.started":"2022-07-23T14:02:52.026427Z","shell.execute_reply":"2022-07-23T14:02:52.090428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def predict(df):\n    predictions = []\n    MMscaler = MinMaxScaler()\n    te_dataset = TextDataset(df, tokenizer, CONFIG_BERT.max_input_len)\n\n    te_dataloader = DataLoader(te_dataset,\n                               batch_size  = CONFIG_BERT.batch_size,\n                               shuffle     = False,\n                               num_workers = CONFIG_BERT.num_workers, \n                               pin_memory  = True, \n                               drop_last   = False)\n\n    for fold in tqdm(range(CONFIG_BERT.folds)):\n\n        model = Custom_Bert_Simple(CONFIG_BERT.model_id)\n        \n        #state = torch.load('../input/pppm-debertav3large-baseline/microsoft-deberta-v3-large_fold{}_best.pth'.format(fold))\n        state = torch.load('../input/custom-bert-simple-deberta-v2-xlarge/custom-bert-simple-deberta-xlarge-best{}.pth'.format(fold))\n        \n        model.load_state_dict(state['model'])\n        model.to('cuda')\n\n        outputs = valid_fn(te_dataloader, model, 'cuda')\n        prediction = outputs.reshape(-1)\n        predictions.append(MMscaler.fit_transform(prediction.reshape(-1,1)).reshape(-1))\n        \n    return predictions","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.092663Z","iopub.execute_input":"2022-07-23T14:02:52.093060Z","iopub.status.idle":"2022-07-23T14:02:52.160657Z","shell.execute_reply.started":"2022-07-23T14:02:52.093022Z","shell.execute_reply":"2022-07-23T14:02:52.159665Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Predição de Treinamento","metadata":{}},{"cell_type":"code","source":"'''\ndt = data.head(100)\npred_train = predict(dt)\n\npred_train = np.mean(pred_train, axis=0)\npred_train = np.where(pred_train<=0, 0, pred_train)\npred_train = np.where(pred_train>=1, 1, pred_train)\n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.163191Z","iopub.execute_input":"2022-07-23T14:02:52.163922Z","iopub.status.idle":"2022-07-23T14:02:52.230335Z","shell.execute_reply.started":"2022-07-23T14:02:52.163879Z","shell.execute_reply":"2022-07-23T14:02:52.229232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''\ndt_match = pd.DataFrame({\n    \"id\":      dt[\"id\"],\n    \"anchor\":  dt[\"anchor\"],\n    \"target\":  dt[\"target\"],\n    \"context\": dt[\"context\"],\n    \"score\":   dt[\"score\"],\n    \"match\":   pred_train}\n)\ndt_match\n'''","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.232249Z","iopub.execute_input":"2022-07-23T14:02:52.232980Z","iopub.status.idle":"2022-07-23T14:02:52.302362Z","shell.execute_reply.started":"2022-07-23T14:02:52.232822Z","shell.execute_reply":"2022-07-23T14:02:52.301393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#calcula_correlacao(dt_match.score.values, dt_match.match.values)","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.304070Z","iopub.execute_input":"2022-07-23T14:02:52.304568Z","iopub.status.idle":"2022-07-23T14:02:52.367425Z","shell.execute_reply.started":"2022-07-23T14:02:52.304529Z","shell.execute_reply":"2022-07-23T14:02:52.366409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Calcula os Testes","metadata":{}},{"cell_type":"code","source":"pred_test = predict(test)","metadata":{"execution":{"iopub.status.busy":"2022-07-23T14:02:52.369156Z","iopub.execute_input":"2022-07-23T14:02:52.369557Z","iopub.status.idle":"2022-07-23T14:06:05.982878Z","shell.execute_reply.started":"2022-07-23T14:02:52.369519Z","shell.execute_reply":"2022-07-23T14:06:05.981135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_test = np.mean(pred_test, axis=0)\npred_test = np.where(pred_test<=0, 0, pred_test)\npred_test = np.where(pred_test>=1, 1, pred_test)\n\nsubmission = pd.DataFrame({\n    'id':    test['id'],\n    'score': pred_test,\n})\n\nsubmission","metadata":{"papermill":{"duration":0.023673,"end_time":"2022-05-16T21:16:51.048909","exception":false,"start_time":"2022-05-16T21:16:51.025236","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:06:05.984842Z","iopub.execute_input":"2022-07-23T14:06:05.985161Z","iopub.status.idle":"2022-07-23T14:06:06.113828Z","shell.execute_reply.started":"2022-07-23T14:06:05.985130Z","shell.execute_reply":"2022-07-23T14:06:06.112502Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)","metadata":{"papermill":{"duration":0.011758,"end_time":"2022-05-16T21:16:51.072530","exception":false,"start_time":"2022-05-16T21:16:51.060772","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-23T14:06:06.115357Z","iopub.execute_input":"2022-07-23T14:06:06.115992Z","iopub.status.idle":"2022-07-23T14:06:06.183795Z","shell.execute_reply.started":"2022-07-23T14:06:06.115952Z","shell.execute_reply":"2022-07-23T14:06:06.182759Z"},"trusted":true},"execution_count":null,"outputs":[]}]}