Skip to content

Instantly share code, notes, and snippets.

@pschatzmann
Created December 2, 2018 01:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pschatzmann/beb5fb459b17dce545b9bac048e2680e to your computer and use it in GitHub Desktop.
Save pschatzmann/beb5fb459b17dce545b9bac048e2680e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"cells":[{"metadata":{},"cell_type":"markdown","source":"# DL4J Doc2Vec - Sentiment Analysis using Sentiment140\n\nI am planning to use the DL4J Doc2Vec implementation for a sentiment analysis. \n\nHowever, I dont want to start with an empty network but the staring point should be a pre-trained network: The initial trining should be done with the Sentiment140 dataset which can be found at https://www.kaggle.com/kazanova/sentiment140. It contains 1,600,000 tweets extracted using the twitter api.\n\nIn this Workbook I describe how to train and save a DL4J Doc2Vec. \n\n\n## Setup\nWe install the following libraries with the help of maven\n- DL4J for the Doc2Vec \n- confusion-matrix to evaluate the result"},{"metadata":{"trusted":true,"scrolled":false},"cell_type":"code","source":"%classpath config resolver maven-public http://192.168.1.10:8081/repository/maven-public/\n%%classpath add mvn \norg.deeplearning4j:deeplearning4j-nlp:1.0.0-beta2\norg.deeplearning4j:deeplearning4j-core:1.0.0-beta2\norg.nd4j:nd4j-native-platform:1.0.0-beta2\ncom.github.habernal:confusion-matrix:1.0","execution_count":2,"outputs":[{"output_type":"stream","text":"Added new repo: maven-public\n","name":"stdout"},{"output_type":"display_data","data":{"method":"display_data","application/vnd.jupyter.widget-view+json":{"version_minor":0,"model_id":"","version_major":2}},"metadata":{}},{"output_type":"display_data","data":{"method":"display_data","application/vnd.jupyter.widget-view+json":{"version_minor":0,"model_id":"8a2c286c-8488-40f3-8ea5-7534b859597b","version_major":2}},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"and we import all relevant classes"},{"metadata":{"trusted":true},"cell_type":"code","source":"import org.deeplearning4j.text.documentiterator.LabelledDocument\nimport org.deeplearning4j.text.documentiterator.SimpleLabelAwareIterator\nimport org.deeplearning4j.text.tokenization.tokenizerfactory._\nimport org.deeplearning4j.text.tokenization.tokenizer.TokenPreProcess\nimport org.deeplearning4j.text.tokenization.tokenizer.preprocessor._\nimport org.deeplearning4j.models.embeddings.loader.WordVectorSerializer\nimport org.deeplearning4j.models.paragraphvectors.ParagraphVectors\n\nimport java.io._\nimport scala.io.Source\nimport scala.util.Random\n\nimport com.github.habernal.confusionmatrix.ConfusionMatrix\n","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"data":{"text/plain":"import org.deeplearning4j.text.documentiterator.LabelledDocument\nimport org.deeplearning4j.text.documentiterator.SimpleLabelAwareIterator\nimport org.deeplearning4j.text.tokenization.tokenizerfactory._\nimport org.deeplearning4j.text.tokenization.tokenizer.TokenPreProcess\nimport org.deeplearning4j.text.tokenization.tokenizer.preprocessor._\nimport org.deeplearning4j.models.embeddings.loader.WordVectorSerializer\nimport org.deeplearning4j.models.paragraphvectors.ParagraphVectors\nimport java.io._\nimport scala.io.Source\nimport scala.util.Random\nimport com.github.habernal.confusionmatrix.ConfusionMatrix\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Labelled Documents\nWe will use LabelledDocument objects to feed our network. \n\nThe sentiment in the Sentiment140 file is using the following values\n- 0=negative \n- 2=neutral\n- 4=positive\n\nWe create a new LabelledTwitterDocument class which extends LabelledDocument with the gloal to be able to create new LabelledDocument objects with a simple constructor. We also want to use the correct text labels so we add some label translation logic\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"class LabelledTwitterDocument(txt:String, lbl:String) extends LabelledDocument {\n this.setContent(txt)\n setupLabel(lbl)\n\n // 0=negative 2=neutral 4=positive\n def setupLabel(number:String) = {\n var v = number.trim()\n if (v==\"\\\"0\\\"\") v = \"negative\"\n else if (v==\"\\\"2\\\"\") v = \"neutral\"\n else if (v==\"\\\"4\\\"\") v = \"positive\"\n this.addLabel(v)\n } \n}\n","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":"defined class LabelledTwitterDocument\n"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Loading of the Data\n\nUsually I load the data directly from the internet. In this case however the amout of data is too big and it is much more effient to work with a local file. \n"},{"metadata":{"trusted":true},"cell_type":"code","source":"var labeledDocumentList = Source.fromFile(\"training.1600000.processed.noemoticon.csv\",\"ISO-8859-1\")\n .getLines()\n .map(str => str.split(\",\"))\n .map(sa => new LabelledTwitterDocument(sa(5),sa(0)))\n .toList\n\nprintln(labeledDocumentList.last)\n\nlabeledDocumentList.size","execution_count":5,"outputs":[{"output_type":"stream","text":"LabelledDocument(id=null, content=\"happy #charitytuesday @theNSPCC @SparksCharity @SpeakingUpH4H \", labels=[positive])\n","name":"stdout"},{"output_type":"execute_result","execution_count":5,"data":{"text/plain":"1600000"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import scala.collection.JavaConversions._\n\nlabeledDocumentList = Random.shuffle(labeledDocumentList)\nval split = (0.95 * labeledDocumentList.length).toInt\nval trainingData = labeledDocumentList.slice(0, split)\nval testData = labeledDocumentList.slice(split, labeledDocumentList.length)\n\ntestData.length","execution_count":6,"outputs":[{"output_type":"execute_result","execution_count":6,"data":{"text/plain":"80000"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Stopwords\n\nWe load the stopwords: Here we can use Source.fromFile without issues. DL4J needs java collections so we make sure that we convert the result into a java list."},{"metadata":{"trusted":true},"cell_type":"code","source":"import scala.collection.JavaConversions._\n\nval stopWords:java.util.List[String] = Source.fromFile(\"stopwords.txt\").getLines.toList\n","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"[a, about, above, after, again, against, all, am, an, and, any, are, aren't, as, at, be, because, been, before, being, below, between, both, but, by, can't, cannot, could, couldn't, did, didn't, do, does, doesn't, doing, don't, down, during, each, few, for, from, further, had, hadn't, has, hasn't, have, haven't, having, he, he'd, he'll, he's, her, here, here's, hers, herself, him, himself, his, how, how's, i, i'd, i'll, i'm, i've, if, in, into, is, isn't, it, it's, its, itself, let's, me, more, most, mustn't, my, myself, no, nor, not, of, off, on, once, only, or, other, ought, our, ours\tourselves, out, over, own, same, shan't, she, she'd, she'll, she's, should, shouldn't, so, some, such, than, that, that's, the, their, theirs, them, themselves, then, there, there's, these, they, they'd, they'll, they're, they've, this, those, through, to, too, under, until, up, very, was, wasn't, we, we'd, we'll, we're, we've, were, weren't, what, what's, when, when's, where, where's, which, while, who, who's, whom, why, why's, with, won't, would, wouldn't, you, you'd, you'll, you're, you've, your, yours, yourself, yourselves]"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Tokenization and Preprocessing\nWe use ngrams for the tokenisation. We also want to ignore all words which start with @, # or http and remove the endings: ed, ing, ly, s, so we do this with our custom preprocessor."},{"metadata":{"trusted":true},"cell_type":"code","source":"val tokenizerFactory = new DefaultTokenizerFactory()\n//val ngramTokenizerFactory = new NGramTokenizerFactory(tokenizerFactory,1,3)\n\nclass TwitterPreprocessor extends TokenPreProcess { \n var pp = new CommonPreprocessor()\n var ep = new EndingPreProcessor()\n \n def preProcess(token:String):String = {\n var result = \"\"\n if (token.startsWith(\"@\")||token.startsWith(\"#\")||token.startsWith(\"http\") ){\n result = \"\"\n } else {\n result = ep.preProcess(pp.preProcess(token))\n }\n return result\n }\n}\n\n//ngramTokenizerFactory.setTokenPreProcessor(new TwitterPreprocessor())\ntokenizerFactory.setTokenPreProcessor(new TwitterPreprocessor())\n\n\"\"","execution_count":15,"outputs":[{"output_type":"execute_result","execution_count":15,"data":{"text/plain":""},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"val pp = new TwitterPreprocessor()\n\nprintln(\"- \"+pp.preProcess(\"valid\"))\nprintln(\"- \"+pp.preProcess(\"https://test.com\"))\nprintln(\"- \"+pp.preProcess(\"houses\"))\nprintln(\"- \"+pp.preProcess(\"heavenly\"))\nprintln(\"- \"+pp.preProcess(\"#test\"))\nprintln(\"- \"+pp.preProcess(\"@test\"))\n\n\"\"","execution_count":16,"outputs":[{"output_type":"stream","text":"- valid\n- \n- house\n- heaven\n- \n- \n","name":"stdout"},{"output_type":"execute_result","execution_count":16,"data":{"text/plain":""},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"## Training of the Network\nNow we have everything that we need for the training of our network. We start the training! Please note that we defined the epochs in our ParagraphVectors, we we do not need to call the fit() method in a loop."},{"metadata":{"trusted":true},"cell_type":"code","source":"var iterator = new SimpleLabelAwareIterator(trainingData)\n\nval paragraphVectors = new ParagraphVectors.Builder()\n .learningRate(0.025)\n .minLearningRate(0.001)\n .batchSize(1000)\n .minWordFrequency(10)\n .stopWords(stopWords)\n .epochs(30)\n .iterate(iterator)\n .trainWordVectors(true)\n .tokenizerFactory(tokenizerFactory)\n .build()\n\n// Start model training\nparagraphVectors.fit()\n","execution_count":17,"outputs":[{"output_type":"execute_result","execution_count":17,"data":{"text/plain":"null"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"We save the model with the help of the WordVectorSerializer class:"},{"metadata":{"trusted":true},"cell_type":"code","source":"WordVectorSerializer.writeWord2VecModel(paragraphVectors,\"sentiment140.model\")","execution_count":18,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Validation\n\nAfter the training we want to validate if our Doc2Vec does something useful:"},{"metadata":{"trusted":true},"cell_type":"code","source":"paragraphVectors.predict(new LabelledTwitterDocument(\"Microsoft looses customers\",\"\"))","execution_count":24,"outputs":[{"output_type":"execute_result","execution_count":24,"data":{"text/plain":"positive"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"paragraphVectors.predict(new LabelledTwitterDocument(\"Microsoft wins contract\",\"\"))","execution_count":23,"outputs":[{"output_type":"execute_result","execution_count":23,"data":{"text/plain":"positive"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"var errors = 0;\nvar confusionMatrix = new ConfusionMatrix();\nvar iteratorTest = new SimpleLabelAwareIterator(testData)\nwhile(iteratorTest.hasNext()){\n var doc = iteratorTest.next()\n try { \n var predictedLabel = paragraphVectors.predict(doc)\n if (!doc.getContent().isEmpty){\n confusionMatrix.increaseValue(doc.getLabel, predictedLabel, 1); \n }\n } catch {\n case e: Exception => errors += 1\n }\n}\n\nprintln(\"---------------\")\nprintln(s\"Errors: $errors\")\nprintln(s\"Precision: ${confusionMatrix.getAvgPrecision()}\")\nprintln(s\"Recall: ${confusionMatrix.getAvgRecall()}\")\nprintln(confusionMatrix);\nconfusionMatrix.printNiceResults()\n","execution_count":21,"outputs":[{"output_type":"stream","text":"---------------\nErrors: 1001\nPrecision: 0.7336231169089479\nRecall: 0.733607324851242\n ↓gold\\pred→ negative positive\n negative 29069 10240\n positive 10807 28883\n\n","name":"stdout"},{"output_type":"execute_result","execution_count":21,"data":{"text/plain":"Macro F-measure: 0.734, (CI at .95: 0.003), micro F-measure (acc): 0.734"},"metadata":{}}]}],"metadata":{"kernelspec":{"name":"scala","display_name":"Scala","language":"scala"},"language_info":{"nbconverter_exporter":"","codemirror_mode":"text/x-scala","name":"Scala","mimetype":"","file_extension":".scala","version":"2.11.12"},"widgets":{"application/vnd.jupyter.widget-state+json":{"version_major":2,"version_minor":0,"state":{"0df1e36d-e8d2-4622-8ee6-93b3fd1be40b":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"eb298507-c3bc-4399-b22f-3743a4a6f49d":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"31e553f7-e994-41eb-a2bd-7ea7a2d415e3":{"model_name":"FoldoutModel","model_module":"beakerx","model_module_version":"*","state":{"font_weight":"","visible":true,"color":null,"headerLabel":"Added jars: ","font_size":"","description":"","font_style":"","layout":"IPY_MODEL_eb298507-c3bc-4399-b22f-3743a4a6f49d","background_color":null,"msg_throttle":3,"children":["IPY_MODEL_cae04e24-e205-4d05-afce-a67d48dd5a30"],"disabled":false,"font_family":"","hidePreview":false}},"135e455b-6329-45b4-8fe9-f14add77e6c4":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"cae04e24-e205-4d05-afce-a67d48dd5a30":{"model_name":"BxHTMLModel","model_module":"beakerx","model_module_version":"*","state":{"font_weight":"","visible":true,"color":null,"font_size":"","font_style":"","layout":"IPY_MODEL_135e455b-6329-45b4-8fe9-f14add77e6c4","background_color":null,"msg_throttle":3,"font_family":"","placeholder":"","value":"deeplearning4j-nlp-1.0.0-beta2.jar, nd4j-native-api-1.0.0-beta2.jar, nd4j-buffer-1.0.0-beta2.jar, javacpp-1.4.2.jar, commons-lang-2.6.jar, threadly-4.10.0.jar, objenesis-2.6.jar, nd4j-jackson-1.0.0-beta2.jar, nd4j-base64-1.0.0-beta2.jar, commons-net-3.1.jar, commons-lang3-3.6.jar, deeplearning4j-core-1.0.0-beta2.jar, deeplearning4j-tsne-1.0.0-beta2.jar, nearestneighbor-core-1.0.0-beta2.jar, deeplearning4j-datasets-1.0.0-beta2.jar, deeplearning4j-common-1.0.0-beta2.jar, deeplearning4j-datavec-iterators-1.0.0-beta2.jar, deeplearning4j-modelimport-1.0.0-beta2.jar, hdf5-platform-1.10.2-1.4.2.jar, hdf5-1.10.2-1.4.2.jar, hdf5-1.10.2-1.4.2-linux-x86.jar, hdf5-1.10.2-1.4.2-linux-x86_64.jar, hdf5-1.10.2-1.4.2-linux-ppc64le.jar, hdf5-1.10.2-1.4.2-macosx-x86_64.jar, hdf5-1.10.2-1.4.2-windows-x86.jar, hdf5-1.10.2-1.4.2-windows-x86_64.jar, slf4j-api-1.7.21.jar, deeplearning4j-nn-1.0.0-beta2.jar, deeplearning4j-utility-iterators-1.0.0-beta2.jar, deeplearning4j-util-1.0.0-beta2.jar, nd4j-common-1.0.0-beta2.jar, oshi-core-3.4.2.jar, jna-platform-4.3.0.jar, jna-4.3.0.jar, threetenbp-1.3.3.jar, fastutil-6.5.7.jar, commons-math3-3.5.jar, commons-io-2.5.jar, commons-compress-1.16.1.jar, guava-20.0.jar, nd4j-api-1.0.0-beta2.jar, flatbuffers-1.2.0-3f79e055.jar, protobuf-java-shaded-351-0.9.jar, protobuf-java-util-shaded-351-0.9.jar, gson-2.7.jar, cloning-1.9.3.jar, nd4j-context-1.0.0-beta2.jar, neoitertools-1.0.0.jar, jackson-1.0.0-beta2.jar, snakeyaml-1.12.jar, stax2-api-3.1.4.jar, joda-time-2.2.jar, datavec-api-1.0.0-beta2.jar, annotations-13.0.jar, commons-codec-1.10.jar, freemarker-2.3.23.jar, stream-2.7.0.jar, opencsv-2.3.jar, t-digest-3.2.jar, datavec-data-image-1.0.0-beta2.jar, jai-imageio-core-1.3.0.jar, imageio-jpeg-3.1.1.jar, imageio-core-3.1.1.jar, imageio-metadata-3.1.1.jar, common-lang-3.1.1.jar, common-io-3.1.1.jar, common-image-3.1.1.jar, imageio-tiff-3.1.1.jar, imageio-psd-3.1.1.jar, imageio-bmp-3.1.1.jar, javacv-1.4.2.jar, opencv-3.4.2-1.4.2.jar, ffmpeg-4.0.1-1.4.2.jar, flycapture-2.11.3.121-1.4.2.jar, libdc1394-2.2.5-1.4.2.jar, libfreenect-0.5.3-1.4.2.jar, libfreenect2-0.2.0-1.4.2.jar, librealsense-1.12.1-1.4.2.jar, videoinput-0.200-1.4.2.jar, artoolkitplus-2.3.1-1.4.2.jar, flandmark-1.07-1.4.2.jar, leptonica-1.76.0-1.4.2.jar, tesseract-4.0.0-beta.3-1.4.2.jar, opencv-platform-3.4.2-1.4.2.jar, opencv-3.4.2-1.4.2-android-arm.jar, opencv-3.4.2-1.4.2-android-arm64.jar, opencv-3.4.2-1.4.2-android-x86.jar, opencv-3.4.2-1.4.2-android-x86_64.jar, opencv-3.4.2-1.4.2-ios-arm64.jar, opencv-3.4.2-1.4.2-ios-x86_64.jar, opencv-3.4.2-1.4.2-linux-x86.jar, opencv-3.4.2-1.4.2-linux-x86_64.jar, opencv-3.4.2-1.4.2-linux-armhf.jar, opencv-3.4.2-1.4.2-linux-ppc64le.jar, opencv-3.4.2-1.4.2-macosx-x86_64.jar, opencv-3.4.2-1.4.2-windows-x86.jar, opencv-3.4.2-1.4.2-windows-x86_64.jar, leptonica-platform-1.76.0-1.4.2.jar, leptonica-1.76.0-1.4.2-android-arm.jar, leptonica-1.76.0-1.4.2-android-arm64.jar, leptonica-1.76.0-1.4.2-android-x86.jar, leptonica-1.76.0-1.4.2-android-x86_64.jar, leptonica-1.76.0-1.4.2-linux-x86.jar, leptonica-1.76.0-1.4.2-linux-x86_64.jar, leptonica-1.76.0-1.4.2-linux-armhf.jar, leptonica-1.76.0-1.4.2-linux-ppc64le.jar, leptonica-1.76.0-1.4.2-macosx-x86_64.jar, leptonica-1.76.0-1.4.2-windows-x86.jar, leptonica-1.76.0-1.4.2-windows-x86_64.jar, deeplearning4j-ui-components-1.0.0-beta2.jar, nd4j-native-platform-1.0.0-beta2.jar, openblas-platform-0.3.0-1.4.2.jar, openblas-0.3.0-1.4.2.jar, openblas-0.3.0-1.4.2-android-arm.jar, openblas-0.3.0-1.4.2-android-arm64.jar, openblas-0.3.0-1.4.2-android-x86.jar, openblas-0.3.0-1.4.2-android-x86_64.jar, openblas-0.3.0-1.4.2-ios-arm64.jar, openblas-0.3.0-1.4.2-ios-x86_64.jar, openblas-0.3.0-1.4.2-linux-x86.jar, openblas-0.3.0-1.4.2-linux-x86_64.jar, openblas-0.3.0-1.4.2-linux-armhf.jar, openblas-0.3.0-1.4.2-linux-ppc64le.jar, openblas-0.3.0-1.4.2-macosx-x86_64.jar, openblas-0.3.0-1.4.2-windows-x86.jar, openblas-0.3.0-1.4.2-windows-x86_64.jar, mkl-platform-2018.3-1.4.2.jar, mkl-2018.3-1.4.2.jar, mkl-2018.3-1.4.2-linux-x86.jar, mkl-2018.3-1.4.2-linux-x86_64.jar, mkl-2018.3-1.4.2-macosx-x86_64.jar, mkl-2018.3-1.4.2-windows-x86.jar, mkl-2018.3-1.4.2-windows-x86_64.jar, mkl-dnn-platform-0.15-1.4.2.jar, mkl-dnn-0.15-1.4.2.jar, mkl-dnn-0.15-1.4.2-linux-x86_64.jar, mkl-dnn-0.15-1.4.2-macosx-x86_64.jar, mkl-dnn-0.15-1.4.2-windows-x86_64.jar, nd4j-native-1.0.0-beta2.jar, nd4j-native-1.0.0-beta2-android-arm.jar, nd4j-native-1.0.0-beta2-android-arm64.jar, nd4j-native-1.0.0-beta2-android-x86.jar, nd4j-native-1.0.0-beta2-android-x86_64.jar, nd4j-native-1.0.0-beta2-ios-arm64.jar, nd4j-native-1.0.0-beta2-ios-x86_64.jar, nd4j-native-1.0.0-beta2-linux-x86_64.jar, nd4j-native-1.0.0-beta2-macosx-x86_64.jar, nd4j-native-1.0.0-beta2-windows-x86_64.jar, nd4j-native-1.0.0-beta2-linux-ppc64le.jar, confusion-matrix-1.0.jar"}},"577a91a6-41ed-4442-bdbe-73c3e96550ed":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"b2ff7bac-ff38-4532-8ca7-8e06fc412ad9":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"8a2c286c-8488-40f3-8ea5-7534b859597b":{"model_name":"FoldoutModel","model_module":"beakerx","model_module_version":"*","state":{"font_weight":"","visible":true,"color":null,"headerLabel":"Added jars: ","font_size":"","description":"","font_style":"","layout":"IPY_MODEL_b2ff7bac-ff38-4532-8ca7-8e06fc412ad9","background_color":null,"msg_throttle":3,"children":["IPY_MODEL_c8a2389b-14b7-4c60-80bb-dc836e8ee7f7"],"disabled":false,"font_family":"","hidePreview":false}},"6117b4a2-6c9c-4fc5-8345-f101a0dd98c0":{"model_name":"LayoutModel","model_module":"@jupyter-widgets/base","model_module_version":"*","state":{"overflow_y":"","max_height":"","justify_content":"","overflow_x":"","max_width":"","_model_module_version":"*","align_self":"","overflow":"","msg_throttle":3,"top":"","flex":"","height":"","min_width":"","align_content":"","border":"","padding":"","margin":"","bottom":"","right":"","min_height":"","_view_module_version":"*","left":""}},"c8a2389b-14b7-4c60-80bb-dc836e8ee7f7":{"model_name":"BxHTMLModel","model_module":"beakerx","model_module_version":"*","state":{"font_weight":"","visible":true,"color":null,"font_size":"","font_style":"","layout":"IPY_MODEL_6117b4a2-6c9c-4fc5-8345-f101a0dd98c0","background_color":null,"msg_throttle":3,"font_family":"","placeholder":"","value":"deeplearning4j-nlp-1.0.0-beta2.jar, nd4j-native-api-1.0.0-beta2.jar, nd4j-buffer-1.0.0-beta2.jar, javacpp-1.4.2.jar, commons-lang-2.6.jar, threadly-4.10.0.jar, objenesis-2.6.jar, nd4j-jackson-1.0.0-beta2.jar, nd4j-base64-1.0.0-beta2.jar, commons-net-3.1.jar, commons-lang3-3.6.jar, deeplearning4j-core-1.0.0-beta2.jar, deeplearning4j-tsne-1.0.0-beta2.jar, nearestneighbor-core-1.0.0-beta2.jar, deeplearning4j-datasets-1.0.0-beta2.jar, deeplearning4j-common-1.0.0-beta2.jar, deeplearning4j-datavec-iterators-1.0.0-beta2.jar, deeplearning4j-modelimport-1.0.0-beta2.jar, hdf5-platform-1.10.2-1.4.2.jar, hdf5-1.10.2-1.4.2.jar, hdf5-1.10.2-1.4.2-linux-x86.jar, hdf5-1.10.2-1.4.2-linux-x86_64.jar, hdf5-1.10.2-1.4.2-linux-ppc64le.jar, hdf5-1.10.2-1.4.2-macosx-x86_64.jar, hdf5-1.10.2-1.4.2-windows-x86.jar, hdf5-1.10.2-1.4.2-windows-x86_64.jar, slf4j-api-1.7.21.jar, deeplearning4j-nn-1.0.0-beta2.jar, deeplearning4j-utility-iterators-1.0.0-beta2.jar, deeplearning4j-util-1.0.0-beta2.jar, nd4j-common-1.0.0-beta2.jar, oshi-core-3.4.2.jar, jna-platform-4.3.0.jar, jna-4.3.0.jar, threetenbp-1.3.3.jar, fastutil-6.5.7.jar, commons-math3-3.5.jar, commons-io-2.5.jar, commons-compress-1.16.1.jar, guava-20.0.jar, nd4j-api-1.0.0-beta2.jar, flatbuffers-1.2.0-3f79e055.jar, protobuf-java-shaded-351-0.9.jar, protobuf-java-util-shaded-351-0.9.jar, gson-2.7.jar, cloning-1.9.3.jar, nd4j-context-1.0.0-beta2.jar, neoitertools-1.0.0.jar, jackson-1.0.0-beta2.jar, snakeyaml-1.12.jar, stax2-api-3.1.4.jar, joda-time-2.2.jar, datavec-api-1.0.0-beta2.jar, annotations-13.0.jar, commons-codec-1.10.jar, freemarker-2.3.23.jar, stream-2.7.0.jar, opencsv-2.3.jar, t-digest-3.2.jar, datavec-data-image-1.0.0-beta2.jar, jai-imageio-core-1.3.0.jar, imageio-jpeg-3.1.1.jar, imageio-core-3.1.1.jar, imageio-metadata-3.1.1.jar, common-lang-3.1.1.jar, common-io-3.1.1.jar, common-image-3.1.1.jar, imageio-tiff-3.1.1.jar, imageio-psd-3.1.1.jar, imageio-bmp-3.1.1.jar, javacv-1.4.2.jar, opencv-3.4.2-1.4.2.jar, ffmpeg-4.0.1-1.4.2.jar, flycapture-2.11.3.121-1.4.2.jar, libdc1394-2.2.5-1.4.2.jar, libfreenect-0.5.3-1.4.2.jar, libfreenect2-0.2.0-1.4.2.jar, librealsense-1.12.1-1.4.2.jar, videoinput-0.200-1.4.2.jar, artoolkitplus-2.3.1-1.4.2.jar, flandmark-1.07-1.4.2.jar, leptonica-1.76.0-1.4.2.jar, tesseract-4.0.0-beta.3-1.4.2.jar, opencv-platform-3.4.2-1.4.2.jar, opencv-3.4.2-1.4.2-android-arm.jar, opencv-3.4.2-1.4.2-android-arm64.jar, opencv-3.4.2-1.4.2-android-x86.jar, opencv-3.4.2-1.4.2-android-x86_64.jar, opencv-3.4.2-1.4.2-ios-arm64.jar, opencv-3.4.2-1.4.2-ios-x86_64.jar, opencv-3.4.2-1.4.2-linux-x86.jar, opencv-3.4.2-1.4.2-linux-x86_64.jar, opencv-3.4.2-1.4.2-linux-armhf.jar, opencv-3.4.2-1.4.2-linux-ppc64le.jar, opencv-3.4.2-1.4.2-macosx-x86_64.jar, opencv-3.4.2-1.4.2-windows-x86.jar, opencv-3.4.2-1.4.2-windows-x86_64.jar, leptonica-platform-1.76.0-1.4.2.jar, leptonica-1.76.0-1.4.2-android-arm.jar, leptonica-1.76.0-1.4.2-android-arm64.jar, leptonica-1.76.0-1.4.2-android-x86.jar, leptonica-1.76.0-1.4.2-android-x86_64.jar, leptonica-1.76.0-1.4.2-linux-x86.jar, leptonica-1.76.0-1.4.2-linux-x86_64.jar, leptonica-1.76.0-1.4.2-linux-armhf.jar, leptonica-1.76.0-1.4.2-linux-ppc64le.jar, leptonica-1.76.0-1.4.2-macosx-x86_64.jar, leptonica-1.76.0-1.4.2-windows-x86.jar, leptonica-1.76.0-1.4.2-windows-x86_64.jar, deeplearning4j-ui-components-1.0.0-beta2.jar, nd4j-native-platform-1.0.0-beta2.jar, openblas-platform-0.3.0-1.4.2.jar, openblas-0.3.0-1.4.2.jar, openblas-0.3.0-1.4.2-android-arm.jar, openblas-0.3.0-1.4.2-android-arm64.jar, openblas-0.3.0-1.4.2-android-x86.jar, openblas-0.3.0-1.4.2-android-x86_64.jar, openblas-0.3.0-1.4.2-ios-arm64.jar, openblas-0.3.0-1.4.2-ios-x86_64.jar, openblas-0.3.0-1.4.2-linux-x86.jar, openblas-0.3.0-1.4.2-linux-x86_64.jar, openblas-0.3.0-1.4.2-linux-armhf.jar, openblas-0.3.0-1.4.2-linux-ppc64le.jar, openblas-0.3.0-1.4.2-macosx-x86_64.jar, openblas-0.3.0-1.4.2-windows-x86.jar, openblas-0.3.0-1.4.2-windows-x86_64.jar, mkl-platform-2018.3-1.4.2.jar, mkl-2018.3-1.4.2.jar, mkl-2018.3-1.4.2-linux-x86.jar, mkl-2018.3-1.4.2-linux-x86_64.jar, mkl-2018.3-1.4.2-macosx-x86_64.jar, mkl-2018.3-1.4.2-windows-x86.jar, mkl-2018.3-1.4.2-windows-x86_64.jar, mkl-dnn-platform-0.15-1.4.2.jar, mkl-dnn-0.15-1.4.2.jar, mkl-dnn-0.15-1.4.2-linux-x86_64.jar, mkl-dnn-0.15-1.4.2-macosx-x86_64.jar, mkl-dnn-0.15-1.4.2-windows-x86_64.jar, nd4j-native-1.0.0-beta2.jar, nd4j-native-1.0.0-beta2-android-arm.jar, nd4j-native-1.0.0-beta2-android-arm64.jar, nd4j-native-1.0.0-beta2-android-x86.jar, nd4j-native-1.0.0-beta2-android-x86_64.jar, nd4j-native-1.0.0-beta2-ios-arm64.jar, nd4j-native-1.0.0-beta2-ios-x86_64.jar, nd4j-native-1.0.0-beta2-linux-x86_64.jar, nd4j-native-1.0.0-beta2-macosx-x86_64.jar, nd4j-native-1.0.0-beta2-windows-x86_64.jar, nd4j-native-1.0.0-beta2-linux-ppc64le.jar, confusion-matrix-1.0.jar"}}}}}},"nbformat":4,"nbformat_minor":2}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment