From 3dc3c779017b1456ca7957a260d9a9dafb98b40b Mon Sep 17 00:00:00 2001 From: James Ravenscroft Date: Mon, 28 Dec 2020 11:39:11 +0000 Subject: [PATCH] add wordpress content --- .gitignore | 3 +- .gitmodules | 3 + brainsteam/archetypes/default.md | 6 + brainsteam/config.toml | 51 ++ ...15-06-28-bedford-place-vintage-festival.md | 28 + .../2015-06-28-tidying-up-xml-in-one-click.md | 32 + .../posts/2015-07-15-sssplit-improvements.md | 77 ++ .../2015-08-30-cusp-challenge-week-2015.md | 53 ++ ...5-10-22-a-week-in-austin-tx-watson-labs.md | 62 ++ ...2015-11-01-sapienta-web-service-and-cli.md | 31 + ...ormation-discovery-partridge-and-watson.md | 65 ++ ...2015-11-16-retrieve-and-rank-and-python.md | 125 +++ ...1-17-spellchecking-in-retrieve-and-rank.md | 175 ++++ .../2015-11-21-scrolling-in-elasticsearch.md | 30 + .../2015-11-22-freecite-python-wrapper.md | 25 + .../2015-11-28-watson-home-automation.md | 50 ++ ...turning-analysis-off-and-why-its-useful.md | 52 ++ ...itive-quality-assurance-an-introduction.md | 184 ++++ ...-ibm-watson-its-for-data-scientists-too.md | 25 + ...lity-assurance-pt-2-performance-metrics.md | 816 ++++++++++++++++++ ...-a-raspberry-pi-hack-at-blackgang-chine.md | 47 + ...er-the-salesman-and-the-property-tycoon.md | 113 +++ ...ime-tracking-application-for-developers.md | 27 + ...and-why-i-stopped-wearing-my-smartwatch.md | 58 ++ ...ut-that-doesnt-mean-it-isnt-intelligent.md | 56 ++ .../2016-12-10-timetrack-improvements.md | 23 + ...05-exploring-web-archive-data-cdx-files.md | 114 +++ ...17-07-25-dialect-sensitive-topic-models.md | 100 +++ brainsteam/content/posts/2017-08-03-182.md | 266 ++++++ brainsteam/content/posts/2017-08-06-.md | 68 ++ ...hine-learning-and-hardware-requirements.md | 87 ++ .../posts/2017-11-12-spacy-spark-nlp-big.md | 71 ++ .../posts/2018-01-27-how-i-became-a-gopher.md | 110 +++ .../posts/2018-01-27-ui-router-misery.md | 13 + ...ng-models-and-the-no-free-lunch-theorem.md | 133 +++ brainsteam/content/posts/2018-04-05-.md | 16 + .../posts/2018-04-05-phd-mini-sabbaticals.md | 34 + ...atically-downloading-open-access-papers.md | 31 + ...3-gpus-are-not-just-for-images-any-more.md | 65 ++ brainsteam/content/posts/2018-06-29-.md | 14 + brainsteam/content/posts/2018-08-31-.md | 48 ++ ...deep-at-the-deep-end-with-deep-learning.md | 227 +++++ ...018-10-20-uploading-huge-files-to-gitea.md | 39 + ...018-11-07-why-is-tmux-crashing-on-start.md | 25 + ...f-chatbot-security-and-conversational-hacks.md | 121 +++ .../posts/2019-01-06-applied-ai-in-2019.md | 93 ++ ...ownloading-the-same-files-over-and-over.md | 37 + ...-the-future-of-enterprise-ai-deployment.md | 73 ++ ...actitioners-reduce-our-carbon-footprint.md | 99 +++ ...nd-pipenv-and-specific-versions-of-cuda.md | 35 + ...n-as-part-of-a-healthy-information-diet.md | 107 +++ brainsteam/content/posts/2020-09-11-.md | 29 + ...-for-reliable-reproducible-data-science.md | 161 ++++ brainsteam/content/posts/2020-12-16-.md | 19 + brainsteam/static/images/avatar.png | Bin 0 -> 527302 bytes 55 files changed, 4451 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 100644 brainsteam/archetypes/default.md create mode 100644 brainsteam/config.toml create mode 100644 brainsteam/content/posts/2015-06-28-bedford-place-vintage-festival.md create mode 100644 brainsteam/content/posts/2015-06-28-tidying-up-xml-in-one-click.md create mode 100644 brainsteam/content/posts/2015-07-15-sssplit-improvements.md create mode 100644 brainsteam/content/posts/2015-08-30-cusp-challenge-week-2015.md create mode 100644 brainsteam/content/posts/2015-10-22-a-week-in-austin-tx-watson-labs.md create mode 100644 brainsteam/content/posts/2015-11-01-sapienta-web-service-and-cli.md create mode 100644 brainsteam/content/posts/2015-11-02-keynote-at-yds-2015-information-discovery-partridge-and-watson.md create mode 100644 brainsteam/content/posts/2015-11-16-retrieve-and-rank-and-python.md create mode 100644 brainsteam/content/posts/2015-11-17-spellchecking-in-retrieve-and-rank.md create mode 100644 brainsteam/content/posts/2015-11-21-scrolling-in-elasticsearch.md create mode 100644 brainsteam/content/posts/2015-11-22-freecite-python-wrapper.md create mode 100644 brainsteam/content/posts/2015-11-28-watson-home-automation.md create mode 100644 brainsteam/content/posts/2015-11-29-elasticsearch-turning-analysis-off-and-why-its-useful.md create mode 100644 brainsteam/content/posts/2016-03-29-cognitive-quality-assurance-an-introduction.md create mode 100644 brainsteam/content/posts/2016-05-01-ibm-watson-its-for-data-scientists-too.md create mode 100644 brainsteam/content/posts/2016-05-29-cognitive-quality-assurance-pt-2-performance-metrics.md create mode 100644 brainsteam/content/posts/2016-06-05-blackgangpi-a-raspberry-pi-hack-at-blackgang-chine.md create mode 100644 brainsteam/content/posts/2016-11-12-the-builder-the-salesman-and-the-property-tycoon.md create mode 100644 brainsteam/content/posts/2016-11-23-timetrack-a-simple-time-tracking-application-for-developers.md create mode 100644 brainsteam/content/posts/2016-11-27-we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch.md create mode 100644 brainsteam/content/posts/2016-12-08-ai-cant-solve-all-our-problems-but-that-doesnt-mean-it-isnt-intelligent.md create mode 100644 brainsteam/content/posts/2016-12-10-timetrack-improvements.md create mode 100644 brainsteam/content/posts/2017-06-05-exploring-web-archive-data-cdx-files.md create mode 100644 brainsteam/content/posts/2017-07-25-dialect-sensitive-topic-models.md create mode 100644 brainsteam/content/posts/2017-08-03-182.md create mode 100644 brainsteam/content/posts/2017-08-06-.md create mode 100644 brainsteam/content/posts/2017-08-11-machine-learning-and-hardware-requirements.md create mode 100644 brainsteam/content/posts/2017-11-12-spacy-spark-nlp-big.md create mode 100644 brainsteam/content/posts/2018-01-27-how-i-became-a-gopher.md create mode 100644 brainsteam/content/posts/2018-01-27-ui-router-misery.md create mode 100644 brainsteam/content/posts/2018-03-21-re-using-machine-learning-models-and-the-no-free-lunch-theorem.md create mode 100644 brainsteam/content/posts/2018-04-05-.md create mode 100644 brainsteam/content/posts/2018-04-05-phd-mini-sabbaticals.md create mode 100644 brainsteam/content/posts/2018-04-13-programmatically-downloading-open-access-papers.md create mode 100644 brainsteam/content/posts/2018-05-13-gpus-are-not-just-for-images-any-more.md create mode 100644 brainsteam/content/posts/2018-06-29-.md create mode 100644 brainsteam/content/posts/2018-08-31-.md create mode 100644 brainsteam/content/posts/2018-10-18-dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning.md create mode 100644 brainsteam/content/posts/2018-10-20-uploading-huge-files-to-gitea.md create mode 100644 brainsteam/content/posts/2018-11-07-why-is-tmux-crashing-on-start.md create mode 100644 brainsteam/content/posts/2018-12-09-🤐🤐can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks.md create mode 100644 brainsteam/content/posts/2019-01-06-applied-ai-in-2019.md create mode 100644 brainsteam/content/posts/2019-01-15-spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over.md create mode 100644 brainsteam/content/posts/2019-04-24-why-im-excited-about-kubernetes-google-anthos-the-future-of-enterprise-ai-deployment.md create mode 100644 brainsteam/content/posts/2019-06-20-how-can-ai-practitioners-reduce-our-carbon-footprint.md create mode 100644 brainsteam/content/posts/2020-02-02-pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda.md create mode 100644 brainsteam/content/posts/2020-09-04-dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet.md create mode 100644 brainsteam/content/posts/2020-09-11-.md create mode 100644 brainsteam/content/posts/2020-11-27-dvc-and-backblaze-b2-for-reliable-reproducible-data-science.md create mode 100644 brainsteam/content/posts/2020-12-16-.md create mode 100644 brainsteam/static/images/avatar.png diff --git a/.gitignore b/.gitignore index d89fa7d..b112a40 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ # ---> Hugo # Generated files by hugo /public/ -/resources/_gen/ +/brainsteam/public +/brainstorm/resources/_gen/ # Executable may be added to repository hugo.exe diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1914fe7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "brainsteam/themes/hugo-ink"] + path = brainsteam/themes/hugo-ink + url = https://github.com/knadh/hugo-ink.git diff --git a/brainsteam/archetypes/default.md b/brainsteam/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/brainsteam/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/brainsteam/config.toml b/brainsteam/config.toml new file mode 100644 index 0000000..a49c79e --- /dev/null +++ b/brainsteam/config.toml @@ -0,0 +1,51 @@ +baseURL = "http://brainsteam.co.uk/" +languageCode = "en-us" +title = "Brainsteam" +theme='hugo-ink' + +[markup.goldmark.renderer] +unsafe= true + +[params] + subtitle = "The irregular mental expulsions of a PhD student and CTO of Filament, my views are my own and do not represent my employers in any way." + + avatar = "/images/avatar.png" + +[[menu.main]] +name = "Home" +url = "/" +weight = 1 + +[[menu.main]] +name = "All posts" +url = "/posts" +weight = 2 + +[[menu.main]] +name = "Tags" +url = "/tags" +weight = 4 + +[[menu.main]] +name = "My Home Page" +url = "https://jamesravey.me" +weight = 3 + +[[params.social]] +name = "Twitter" +icon = "twitter" +url = "https://twitter.com/jamesravey/" + +[[params.social]] +name = "Github" +icon = "github" +url = "https://github.com/ravenscroftj" + +[[params.social]] +name = "RSS" +icon = "rss" +url = "/index.xml" + + +[taxonomies] + tag = "tags" \ No newline at end of file diff --git a/brainsteam/content/posts/2015-06-28-bedford-place-vintage-festival.md b/brainsteam/content/posts/2015-06-28-bedford-place-vintage-festival.md new file mode 100644 index 0000000..b6b05d0 --- /dev/null +++ b/brainsteam/content/posts/2015-06-28-bedford-place-vintage-festival.md @@ -0,0 +1,28 @@ +--- +title: Bedford Place Vintage Festival +author: James +type: post +date: 2015-06-28T10:36:28+00:00 +url: /2015/06/28/bedford-place-vintage-festival/ +categories: + - Lindyhop +tags: + - bic + - festival + - lindyhop + - shimsham + - simone + - southampton + - vintage +format: video + +--- +Last week a bunch of my lindyhop group went and performed at the Bedford Place Vintage Festival in Southampton – its an annual event that I’ve been to twice now and we had an absolute ball. + +I think I enjoyed it that much more this year purely because I’ve been dancing twice as long now and I can hold my own on the social dance floor. + +Here’s a video of our crew performing the Shim Sham to “Mama do the hump” + +
+ +
\ No newline at end of file diff --git a/brainsteam/content/posts/2015-06-28-tidying-up-xml-in-one-click.md b/brainsteam/content/posts/2015-06-28-tidying-up-xml-in-one-click.md new file mode 100644 index 0000000..cd3849b --- /dev/null +++ b/brainsteam/content/posts/2015-06-28-tidying-up-xml-in-one-click.md @@ -0,0 +1,32 @@ +--- +title: Tidying up XML in one click +author: James +type: post +date: 2015-06-28T10:24:33+00:00 +url: /2015/06/28/tidying-up-xml-in-one-click/ +categories: + - PhD + - Work +tags: + - processing + - sapienta + - tidy + - xml + +--- +When I’m working on Partridge and SAPIENTA, I find myself dealing with a lot of badly formatted XML. I used to manually run _xmllint –format_ against every file before opening it but that gets annoying very quickly (even if you have it saved in your bash history). So I decided to write a Nemo script that does it automatically for me. + +
#!/bin/sh
+
+for xmlfile in $NEMO_SCRIPT_SELECTED_FILE_PATHS; do
+
+    if [[ $xmlfile == *.xml ]]
+     then
+         xmllint --format $xmlfile > $xmlfile.tmp
+        rm $xmlfile
+        mv $xmlfile.tmp $xmlfile
+    fi
+done
+
+ +Pop that in a file called “Tidy XML” in your ~/.local/share/nemo/scripts directory and when you inspect files with Nemo it should appear in the right click menu. \ No newline at end of file diff --git a/brainsteam/content/posts/2015-07-15-sssplit-improvements.md b/brainsteam/content/posts/2015-07-15-sssplit-improvements.md new file mode 100644 index 0000000..f64f8fb --- /dev/null +++ b/brainsteam/content/posts/2015-07-15-sssplit-improvements.md @@ -0,0 +1,77 @@ +--- +title: SSSplit Improvements +author: James +type: post +date: 2015-07-15T19:33:29+00:00 +url: /2015/07/15/sssplit-improvements/ +categories: + - PhD + - Work +tags: + - demo + - improvements + - java + - partridge + - python + - regex + - sapienta + - split + - sssplit + - test + +--- +## Introduction + +As part of my continuing work on [Partridge][1], I’ve been working on improving the sentence splitting capability of SSSplit – the component used to split academic papers from PLosOne and PubMedCentral into separate sentences. + +Papers arrive in our system as big blocks of text with the occasional diagram, formula or diagram and in order to apply CoreSC annotations to the sentences we need to know where each sentence starts and ends. Of course that means we also have to take into account the other ‘stuff’ (listed above) floating around in the documents too. We can’t just ignore formulae and citations – they’re pretty important! That’s what SSSplit does. It carves up papers into sentence (__) elements whilst also leaving the XML structure of the rest of the document in tact. + +The original SSSplit utility was written a number of years ago in Java and used Regular Expressions to parse XML (something that readers of [this StackOverflow article][2] will already know has a propensity to summon eldrich abominations from the otherworld). Due to the complex regular expressions, the old splitter was not particularly performant . Especially given the complex nature of some of the expressions (if you’re interested, check out one of the _simpler_ ones [here][3]). + +Now, I can definitely see what the original authors were going for here. Regular expressions are very good for splitting sentences but not sentences inside complex XML documents. XML parsers are not particularly good for splitting sentences but are obviously good at parsing XML. I also understand that the original splitter was designed and then new bits glued on to make it suitable for new and different standards of XML leading to the gargantuan expressions like the one linked to above. I think they did a pretty good job given the information available to them at the time of writing. + +I decided that the splitter needed a rewrite and went straight to my comfort zone to get it done: Python. I’m very familiar with the language – to the point now that I can write a fairly complicated program in it in a day if I’ve had enough coffee and sugar. + +## Writing SSSplit 2.0 + +I decided that we needed to try and minimise excessive uses of regular expressions for both performance and maintainence/readability reasons.  I decided to try and do as much of the parsing of the document structure as possible using a traditional XML parser. I’d heard good things about [etree][4] which is part of the standard Python library and provides an informal dom-like interface. I used etree to inspect what I dubbed ‘P-level’ xml elements first. These are elements that I consider to be at a “paragraph” level. Any sentences inside these elements are completely contained – they do not cross the boundaries into the next container (unless the author is a poet/fiction writer/doesn’t do English very well I think its a safe bet that they wouldn’t finish a paragraph mid-sentence). Within the p-level containers, I sweep for any sort of XML node – we’re interested in text nodes but also any sort of formatting like bold () elements. + +When a text node is encountered, that’s when regular expressions start to kick in. We do a very simple match for punctuation just in front of a space and a capital letter and run it over the text node – these are “potential” splits. We also look for full stops at the very end of the text. + +
pattern = re.compile('(\.|\?|\!)(?=\s*[A-Z0-9$])|\.$')
+
+        m = pattern.search(txt)
+
+ +Of course this generates lots of false positives – what if we’ve found a decimal point inside a number? What if it’s an abbreviation like e.g. or i.e. or an initial like J. Ravenscroft? There is another regular expression check for decimal points and the string around the punctuation is checked against a list of common abbreviations. There’s also a list of authors both the writers of the paper in question and those who are cited in the paper too. The function checks that the full stop is not part of one of these authors’ names. + +There’s an important factor to remember: Text node does not imply finished sentence – they are interspersed with formulae and references as explained above. Therefore we can’t just finish the current sentence when we reach the end of a text node – only when we encounter a full stop (not part of an abbreviation or number), question mark or explanation mark. We also know that we can complete the current sentence at the end of a p-level container as I explained above. + +Every time we start parsing a sentence, text nodes and other ‘stuff’ deemed to be inside that sentence is accumulated into a list. Once we encounter the end of the sentence, the list is glued together and turned into an XML element. + +The next step was to see how effective the new splitter was against the old splitter and also manual annotation by professional scientific literature readers. + +## Testing the splitter + +To test the system I originally wrote a simple script that takes a set of manually annotated papers – strips them of their annotations so that the new splitter doesn’t get any clues – runs the new routine over them and then compares the output. This was very rudimentary as I was in a rush and didn’t tell me much about the success rate of my splitter. It did display the first and last words of each “detected” sentence for both manual and automatic annotation so I could at least see how well (if at all) the two lined up. I had to run the script on a paper-by-paper basis. + +I managed to get the splitter working really well on a number of papers (we’re talking a 100% match) using this tool. However I realised that the majority of papers were still not being matched and it was becoming more and more of a chore to find which ones weren’t matching. + +That’s why I decided to write a web-based visualisation tool for checking the splitter. The idea is that it runs on all papers giving an overall percentage of how well the automated splitter is working vs the manual splitter but also gives a per-paper figure. If you want to see which papers the system is really struggling with you can inspect them by clicking on them. This brings up a list of all the sentences and whether or not they align. + +The tool is pretty useful as it gives me a clue as to which papers I need to tune the splitter with next. + +Here’s a quick demo video of me using the tool to find papers that don’t match very well. + +
+ +
+ +## Next steps + +A lot of tuning has been done on how this system works but there’s still a long way to go yet. I’ll probably post another article talking about what further changes had to be made to make the parser effective! + + [1]: http://papro.org.uk + [2]: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 + [3]: https://www.debuggex.com/r/vEyxqRg6xgN9ui_P + [4]: https://docs.python.org/2/library/xml.etree.elementtree.html \ No newline at end of file diff --git a/brainsteam/content/posts/2015-08-30-cusp-challenge-week-2015.md b/brainsteam/content/posts/2015-08-30-cusp-challenge-week-2015.md new file mode 100644 index 0000000..07b9ab5 --- /dev/null +++ b/brainsteam/content/posts/2015-08-30-cusp-challenge-week-2015.md @@ -0,0 +1,53 @@ +--- +title: CUSP Challenge Week 2015 +author: James +type: post +date: 2015-08-30T16:52:59+00:00 +url: /2015/08/30/cusp-challenge-week-2015/ +categories: + - Lindyhop +tags: + - cdt + - cusp + - phd + - warwick + +--- +
[][1]
Warwick CDT intake 2015: From left to right – at the front Jacques, Zakiyya, Corinne, Neha and myself. Rear: David, John, Stephen (CDT director), Mo, Vaggelis, Malkiat and Greg
+ +Hello again readers – those of you who follow me on other social media (twitter, instagram, facebook etc) probably know that I’ve just returned from a week in New York City as part of my PhD. My reason for visiting was a kind of ice-breaking activity called the CUSP (Centre for Urban Science + Progress) Challenge Week. This consisted of  working with my PhD cohort (photographed) as well as the 80-something NYU students starting their Urban Science masters courses at CUSP to tackle urban data problems. + +We were split into 20 random teams of 4 or 5 people and assigned an ‘Urban Science’ task. These tasks involved taking data sets – usually collected by CUSP staff members – and doing analysis on them. Our group had to investigate “Street Quality in New York City” which turned out to be analysing data on the city’s potholes. The problem may sound a little dull but once you get going it actually gets quite exciting! Potholes cost NYC millions of dollars per year in litigation and getting them fixed before someone falls into one or damages their car could save the city lots of money. + +
[An amusing image found by one of my pothole challenge teammates][2]
An amusing image found by one of my pothole challenge teammates
+ +We were given a set of accelerometer readings tied to photographs captured by a device designed by our mentors [Varun][3] and [Graham][4]. The device is fitted to the dashboard of a car and takes 3D accelerometer readings every second as well as a photo as you drive along. The result is a dataset that roughly records where the driver encounters the most “bumpy” roads in the city. The dataset only covered one neighbourhood in Brooklyn known as Cobble Hill. However, it was still extensive enough to give us an idea of how you might identify poor quality roads in other areas of the city. + +The other dataset we were given was the GPS coordinates of 311 complaints made about street quality during 2015. For those unfamiliar, 311 is a non-emergency hotline you can call in NYC to have a moan about some aspect of the city – noone’s been to pick up my rubbish, there’s a pothole in the road by my house, someone’s graffitied the bus stop – that sort of thing. I think the closest parallel we have to 311 in the UK is NHS direct – i.e. you call 111 if you have a cold and 999 if you’re having a heart attack. Thanks to New York’s open data initiative, we had geo-plots for all ‘street quality’ related queries right at our finger tips. + +It was time to get stuck in. The team had a brainstorm about what questions we should try and answer based on the data available – we came up with around 20 but since we only had about 10 hours to investigate in total – decided to restrict ourselves to 3: + + 1. Can we find a correlation between the accelerometer data and 311 complaints in order to show that 311 complaints could be used as a proxy for potholes? + 2. Do the number of 311 complaints correlate to population density or average salary of nearby residents – we hypothesised that more prosperous, well travelled areas of the city might be more eager to complain about the road quality? + 3. Can we train a machine learning system to recognise the presence or lack of potholes given input images and accelerometer data? + +Linfeng – a teammate and budding applied mathematician – answered question three first. Using the accelerometer data and associated images he set about building a binary classifier – a system that could take an X,Y,Z reading from the accelerometer and spit out a “yes thats a pothole” or “no that’s not a pothole” reading. He did this by manually eye-balling all 843 images that the sensor snapped and putting each of the accelerometer readings into one or the other of the two categories.  After training using 5-folds cross validation – the final classifier worked with something like a 73% accuracy. We felt that this was pretty good for a first run and that there may be other features that could help this classification. However, our initial finding was – yes – it is definitely possible to train a machine learning classifier to detect potholes. + +
[Potholes and 311 complaints in cobble hills.][5]
Potholes(blue) and 311 complaints(orange) in cobble hills. Click to open interactive map.
+ +The next task was to see if there was any correlation between 311 complaints and the pothole data. We used our classifier to only consider points determined to be potholes. The sensor data was recorded on the 3rd of May. Therefore, we also decided to filter 311 complaints by time of report. We thought it was reasonable to assume that potholes found in May would have been reported at earliest – April and fixed by June. Including 311 complaints from too far in the past or future would add noise to our investigation and slow things down. + +We overlayed the 311 data onto the map of potholes to see how well they lined up. There was some loose correlation but the maps did not correlate brilliantly well. Upon reflection we realised that the GPS location associated with the 311 complaints represent where the call was made from rather than the location of the pothole the call was about. It is a fair assertion that most people would wait to make such a call from a safe location rather than stopping in the road as soon as they encounter a hole. We also realised that multiple calls could also be made regarding the same pothole but from different locations. These two assertions validate the need for a more granular data capture system like Graham and Varun’s. + +
[complaints and population density. Click for an interactive map][6]
complaints and population density. Click for an interactive map
+ +Finally we looked into the issue of Population Denisy vs. Potholes. I struggled for a while to find a map of population density and ended up having to make my own. New York City has a map of what it calls Neighbourhood Tabulation Areas (NTA). These are small geographical areas used to tabulate statistics for census data i.e. each NTA has its own population density figure. I found a dataset for NTAs covering New York City and another dataset for population density by NTA. I was able to ‘wrangle’ the two datasets together and plot them on a map. I then did some geo-SQL – summing 311 pothole complaints for each NTA and storing it in a database table. This allowed me to plot a map showing both population density and 311 complaint ‘density’ for the whole of new york. Interestingly (but perhaps not surprisingly) the map shows strong positive correlation of population to 311 complaints. However, Statten Island as a borough serves as an outlier – having a lower population but a large number of complaints. I read that Statten Island has a larger vehicle ownership per capita and that this might explain the discrepancy. However, I did not have time to investigate this further. The population density and pothole complaint density correlation serves to further validate the need for more granular data collection. More people are complaining but are they all complaining about the same potholes or are they just better at finding potholes? Are there more potholes in the road or just more people to complain about them? These are questions that could be answered with more data. + +I had a great week at CUSP and would like to thank all of their staff for hosting (and putting up with) us. + + [1]: https://i1.wp.com/brainsteam.co.uk/wp-content/uploads/2015/08/Warwick-1.jpg?ssl=1 + [2]: https://i1.wp.com/brainsteam.co.uk/wp-content/uploads/2015/08/20150830084943.jpg?ssl=1 + [3]: https://www.linkedin.com/pub/varun-adibhatla/3/356/b60 + [4]: https://www.linkedin.com/profile/view?id=AAIAAApppTwBBKcswj9pC3ehsTLjnd_POJHUgro&authType=name&authToken=IJJp&trk=Skyline_click_NBM&sl=NBM%3B152521238%3A1440949464555%3B0%3B9820152%3B + [5]: https://i1.wp.com/brainsteam.co.uk/wp-content/uploads/2015/08/cobble_hill_potholes.png?ssl=1 + [6]: http://cdb.io/1Jlmpfn \ No newline at end of file diff --git a/brainsteam/content/posts/2015-10-22-a-week-in-austin-tx-watson-labs.md b/brainsteam/content/posts/2015-10-22-a-week-in-austin-tx-watson-labs.md new file mode 100644 index 0000000..d550cba --- /dev/null +++ b/brainsteam/content/posts/2015-10-22-a-week-in-austin-tx-watson-labs.md @@ -0,0 +1,62 @@ +--- +title: A week in Austin, TX – Watson Labs +author: James +type: post +date: 2015-10-22T18:10:57+00:00 +url: /2015/10/22/a-week-in-austin-tx-watson-labs/ +categories: + - Uncategorized +tags: + - alchemy + - austin + - labs + - questions + - rank + - retrieve + - taxonomy + - watson + +--- +At the beginning of the month, I was lucky enough to spend a month embedded in the Watson Labs team in Austin, TX. These mysterious and enigmatic members of the Watson family have a super secret bat-cave known as “The Garage” located on the IBM Austin site – to which access is prohibited for normal IBMers unless accompanied by a labs team member. + +During the week I was helping out with a couple of the internal projects but also got the chance to experiment with some of the new Watson Developer Cloud APIS to create some new tools for internal use. However, I can share with you a couple of the general techniques that I used since I think they might be useful for a number of applications + +## Technique number 1: query expansion using Part-of-speech tagging and the Concept Expansion API. + +### Introduction + +The idea here was to address the fact that a user might phrase their question using language synonymous in nature but different to the data being searched for or queried. + +Our [Retrieve And Rank][1] service makes use of Apache [SOLR][2] which already offers [synonym expansion within queries][3]. However I found adding this further capability using the [Concept Expansion][4] (service that builds a thesaurus from large corpuses discussing related concepts) service came up with some synonyms that SOLR didn’t. This might be because the SOLR query expansion system uses [MeSH][5] which is a formal medical ontology and Concept Expansion (or at least the demo) uses a corpus of twitter data which offers a lot more informal word pairings and implicit links. For example, feeding “[Michael Jackson][6]” into Concept Expansion will give you outputs like “[Stevie Nicks][7]” and “[Bruce Springsteen][8]” who are both musicians who released music around the same sort of era of Michael Jackson. By contrast Michael Jackson is (perhaps unsurprisingly) not present in the MeSH ontology. + +Although “Stevie Nicks” might not be directly relevent to those who are looking for “Michael Jackson” – and those of you who are music fans might know where I’m going next – the answer to the question “Who did Michael Jackson perform alongside with at Bill Clinton’s 1993 inaugural ball?” – is [Fleetwood Mac][9] – for whom Stevie Nicks sings (that said, my question is specific enough that the keywords “bill clinton, 1993, inaugural ball, michael jackson” get you the right answer in google – albeit at position 2 in the results). So there is definitely some value in using Concept Expansion for this purpose even if you have to be very clever and careful about matching up context around queries. + +### Implementation + +The first problem you face using this approach is in choosing which words to send off to concept expansion and which ones not to bother with. We’re not interested in [stopwords ][10] or personal pronouns (putting “we” into concept expansion comes back with interesting results like “testinitialize” “usaian” and “linux preinstallation” because of the vast amount of noise around pronouns on twitter). We are more interested in nouns like “Chair”, entities and people like “Michael Jackson”, adjectives like “enigmatic” and verbs like “going”. All of these words and phrases are things that could be expanded upon in some way to make our information retrieval query more useful. + +To Screenshot from 2015-10-19 16:57:25get around this problem – I used the [Stanford Part of Speech Tagger ][11]to annotate the queries and only sent words labelled as one of the above mentioned types to the service. Asking “how much does the CEO earn?” yields something like the output to the right. + +Another problem I ran into very quickly was dealing with nouns consisting of multiple words. For example “Michael Jackson”. In my code, I assume that any words tagged Noun that reside next to each other are the same object and should be treated as such. This assumption seems to have worked so far for my limited set of test data + +## Alchemy API and Taxonomy Distance + +Another small piece of work I carried out was around measuring how “similar” two documents are from a very high level based on their distance in the alchemy API taxonomy. If you didn’t know already, Alchemy has an API for classifying a document into a high level taxonomy. This can often give you a very early indication of how likely that document is to contain information relevent to your use case or requirements. For example a document tagged “automotive manufacturers” is unlikely to contain medical text or instructions on sewing and embroidery. + +[Screenshot from 2015-10-22 19:04:56][12]The taxonomy is a tree structure which contains a huge list of [different categories and subcategories.][13] The idea here was to walk the tree between the category “node” assigned to one document to the category assigned to the second document and count the steps – more steps means further away.  So for each document I made an Alchemy API call to get its taxonomy class. Then I split on “/” characters and count how far away A is from B. It’s pretty straight forward. To the left you can see that a question about burgers and a question about salad dressings are roughly “2” categories away from each other – moving up to food from fast food counts as one jump and moving back down to condiments and dressing counts as another. + +Screenshot from 2015-10-22 18:58:15Interestingly the API did seem to struggle with some questions. I used “What was the market share of Ford in Australia?” for my first document and “What type of car should I buy?” as my second doc and got /automative and vehicle/vehicle brands/ford for my first classification and /finance/personal finance/insurance/car for my second. I have a suspicion that this API is not set up for dealing with short documents like questions and that confused it but I need to do some further testing. + + [1]: http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/ + [2]: http://lucene.apache.org/solr/ + [3]: http://nolanlawson.com/2012/10/31/better-synonym-handling-in-solr/ + [4]: http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/concept-expansion.html + [5]: http://www.ncbi.nlm.nih.gov/mesh + [6]: https://en.wikipedia.org/wiki/Michael_Jackson + [7]: https://en.wikipedia.org/wiki/Stevie_Nicks + [8]: https://en.wikipedia.org/wiki/Bruce_Springsteen + [9]: https://www.youtube.com/watch?v=h91glweLuBw + [10]: https://en.wikipedia.org/wiki/Stop_words + [11]: http://nlp.stanford.edu/software/tagger.shtml + [12]: https://i0.wp.com/brainsteam.co.uk/wp-content/uploads/2015/10/Screenshot-from-2015-10-22-190456.png?ssl=1 + [13]: http://www.alchemyapi.com/products/alchemylanguage/taxonomy \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-01-sapienta-web-service-and-cli.md b/brainsteam/content/posts/2015-11-01-sapienta-web-service-and-cli.md new file mode 100644 index 0000000..a1ee20e --- /dev/null +++ b/brainsteam/content/posts/2015-11-01-sapienta-web-service-and-cli.md @@ -0,0 +1,31 @@ +--- +title: SAPIENTA Web Service and CLI +author: James +type: post +date: 2015-11-01T19:50:52+00:00 +url: /2015/11/01/sapienta-web-service-and-cli/ +categories: + - PhD +tags: + - docker + - partridge + - sapienta + - script + - web + - websockets + +--- +Hoorah! After a number of weeks I’ve finally managed to get SAPIENTA running inside docker containers on our EBI cloud instance. You can try it out at . + +The project was previously running via a number of very precarious scripts that had a habit of stopping and not coming back up. Hopefully the new docker environment should be a lot more stable. + +Another improvement I’ve made is to create a websocket interface for calling the service and a Python-based commandline client. If you’re interested I’m using [socket.io][1] and the relevent python libraries ([server][2] and [client][3]). This means that anyone who needs to can now request annotations in large batches. I’m planning on using socket.io to interface Partridge with SAPIENTA since they are hosted on separate servers and this approach avoids any complicated firewall issues. + +This is also very good news for some of the data scientists who have wanted to use SAPIENTA but haven’t wanted (or been able) to take on the 2-3 hour installation process that the full blown server and pipeline require (and that’s on a good day). The websocket CLI is a very simple python script with a low number of dependencies so it should be up and running in 5 minutes or your money back. + +To get your hands on this tool – see [this bitbucket][4]. + + [1]: http://socket.io/ + [2]: https://github.com/miguelgrinberg/Flask-SocketIO/ + [3]: https://pypi.python.org/pypi/socketIO-client + [4]: https://bitbucket.org/partridge/sapienta_wsclient \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-02-keynote-at-yds-2015-information-discovery-partridge-and-watson.md b/brainsteam/content/posts/2015-11-02-keynote-at-yds-2015-information-discovery-partridge-and-watson.md new file mode 100644 index 0000000..a54e244 --- /dev/null +++ b/brainsteam/content/posts/2015-11-02-keynote-at-yds-2015-information-discovery-partridge-and-watson.md @@ -0,0 +1,65 @@ +--- +title: 'Keynote at YDS 2015: Information Discovery, Partridge and Watson' +author: James +type: post +date: 2015-11-02T21:07:28+00:00 +url: /2015/11/02/keynote-at-yds-2015-information-discovery-partridge-and-watson/ +categories: + - PhD + - Work +tags: + - extraction + - ibm + - information + - papers + - partridge + - retrieval + - scientific + - watson + - yds + +--- +
+ Here is a recording of my recent keynote talk on the power of Natural Language processing through Watson and my academic/PhD topic – Partridge – at York Doctoral Symposium. +
+ +
+
+ +
+
+ +
+
+ +
  • + 0-11 minutes – history of mankind, invention and the acceleration of scientific progress (warming people to the idea that farming out your scientific reading to a computer is a much better idea than trying to read every paper written) +
  • +
  • + 11-26 minutes – My personal academic work – scientific paper annotation and cognitive scientific research using NLP +
  • +
  • + 26- 44 minutes – Watson – Jeopardy, MSK and Ecosystem +
  • +
  • + 44 – 48 minutes Q&A on Watson and Partridge +
  • + +Please don’t cringe too much at my technical explanation of Watson – especially those of you who know much more about WEA and the original DeepQA setup than I do! This was me after a few days of reading the original 2011 and 2012 papers and making copious notes! + +
    +
    + +
    + (Equally please don’t cringe too much about my history of US Presidents @ 37:30- I got Roosevelt and Reagan mixed up in my head!) +
    + +
    +
    + +
    +
    + +  + +  \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-16-retrieve-and-rank-and-python.md b/brainsteam/content/posts/2015-11-16-retrieve-and-rank-and-python.md new file mode 100644 index 0000000..e9a3219 --- /dev/null +++ b/brainsteam/content/posts/2015-11-16-retrieve-and-rank-and-python.md @@ -0,0 +1,125 @@ +--- +title: Retrieve and Rank and Python +author: James +type: post +date: 2015-11-16T18:25:39+00:00 +url: /2015/11/16/retrieve-and-rank-and-python/ +categories: + - Work +tags: + - api + - cloud + - custom + - developer + - ecosystem + - fcselect + - ibm + - python + - query + - rank + - ranker + - retrieve + - services + - solr + - train + - watson + - wdc + +--- +## Introduction + +Retrieve and Rank (R&R), if you hadn’t already heard about it, is IBM Watson’s new web service component for information retrieval and question answering. My colleague Chris Madison has summarised how it works in a high level way [here][1]. + +R&R is based on the Apache SOLR search engine with a machine learning result ranking plugin that learns what answers are most relevant given an input query and presents them in the learnt “relevance” order. + +Some of my partners have found that getting documents in and out of retrieve and rank is a little bit cumbersome using CURL and json files from the command-line. Here I want to demonstrate a much easier way of managing your SOLR documents with [solrpy][2] – a wrapper around Apache SOLR in Python. Since R&R and SOLR are API compatible (until you start using and training the custom ranker) it is perfectly fine to use solrpy – in R&R with a few special tweaks. + +## Getting Started + +**You will need + +** An R&R instance with a cluster and collection already configured. I’m using a schema which has three fields fields – id, title and text. + +Firstly you’ll want to install the library -normally you could do this with pip. Unfortunately I had to make a small change to get the library to work with retrieve and rank so you’ll need to install it from my github repo: + +
    $ git clone git@github.com:ravenscroftj/solrpy.git
    + $ python setup.py install
    + +The next step is to run python and initialise your connection. The URL you should use to initialise your SOLR connection has the following structure: + +
    https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/<CLUSTER_ID>/solr/<COLLECTION_NAME>
    + +You will also need the credentials from your bluemix service which should look something like this: + +
    {
    + "credentials": {
    + "url": "https://gateway.watsonplatform.net/retrieve-and-rank/api",
    + "username": "<USERNAME>",
    + "password": "<PASSWORD>"
    + }
    +}
    + +In python you should try running the following (I am using the interactive python shell [IDLE][3] for this example) + +
    >>> import solr
    +>>> s = solr.Solr("https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/<CLUSTER_ID>/solr/<COLLECTION_NAME>", http_user="<USERNAME>", http_pass="<PASSWORD>")
    +>>> s.search("hello world")
    +<solr.core.Response object at 0x7ff77f91d7d0>
    + +If this worked then you will see something like _** **_as output here. If you get an error response – try checking that you have substituted in valid values for , , and . + +From this point onwards things get very easy. solrpy has simple functions for creating, removing and searching items in the SOLR index. + +To add a document you can use the code below: + +
    >>> s.add({"title" : "test", "text" : "this is a test", "id" : 1})
    +'<?xml version="1.0" encoding="UTF-8"?>\n<response>\n<lst name="responseHeader"><int name="status">0</int><int name="QTime">167</int></lst>\n</response>\n'
    +>>> s.commit()
    +'<?xml version="1.0" encoding="UTF-8"?>\n<response>\n<lst name="responseHeader"><int name="status">0</int><int name="QTime">68</int></lst>\n</response>\n'
    + +The XML output shows that the initial add and then commit operations were both successful. + +## Content Management + +You can also add a number of documents – this is specifically useful if you have a large number of python objects to insert into SOLR: + +
    >>> s.add_many( [ { "title" : x['title'], "text" : x['text'], "id" : i } for i,x in enumerate(my_list_of_items) ] )
    +'<?xml version="1.0" encoding="UTF-8"?>\n<response>\n<lst name="responseHeader"><int name="status">0</int><int name="QTime">20</int></lst>\n</response>\n'
    + +Of course you can also delete items via their ID from python too: + +
    >>> s.delete(id=1)
    +'<?xml version="1.0" encoding="UTF-8"?>\n<response>\n<lst name="responseHeader"><int name="status">0</int><int name="QTime">43</int></lst>\n</response>\n'
    + +## Querying SOLR (unranked results) + +And you can use SOLR queries too (but importantly note that this does not use the retrieve and rank rankers – this only gives you access to the SOLR rankers.) + +
    >>> r = s.select("test")
    +>>> r.numFound
    +1L
    +>>> r.results
    +[{u'_version_': 1518020997236654080L, u'text': [u'this is a test'], u'score': 0.0, u'id': u'1', u'title': [u'test']}]
    +
    +
    + +## Querying Rankers + +Provided you have [successfully trained a ranker ][4] and have the ranker ID handy, you can also query your ranker directly from Python using solrpy too. + +
    >>> import solr
    +>>> s = solr.Solr("https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/<CLUSTER_ID>/solr/<COLLECTION_NAME>", http_user="<USERNAME>", http_pass="<PASSWORD>")
    +>>> fcselect = solr.SearchHandler(s, "/fcselect")
    +>>> r = fcselect("my query text", ranker_id="<RANKER-ID>")
    + +in this case **r **is the same type as in the above non-ranker example, you can access the results via **r.results.** + +## More information + +For more information on how to use solrpy, visit their documentation page [here][5] + + [1]: http://cmadison.me/2015/10/23/introducing-ibms-retrieve-and-rank-service/ + [2]: https://github.com/edsu/solrpy + [3]: https://en.wikipedia.org/wiki/IDLE_(Python) + [4]: http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/get_start.shtml#create-train + [5]: http://pythonhosted.org/solrpy/ \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-17-spellchecking-in-retrieve-and-rank.md b/brainsteam/content/posts/2015-11-17-spellchecking-in-retrieve-and-rank.md new file mode 100644 index 0000000..c5a1b09 --- /dev/null +++ b/brainsteam/content/posts/2015-11-17-spellchecking-in-retrieve-and-rank.md @@ -0,0 +1,175 @@ +--- +title: Spellchecking in retrieve and rank +author: James +type: post +date: 2015-11-17T21:41:09+00:00 +url: /2015/11/17/spellchecking-in-retrieve-and-rank/ +categories: + - Work +tags: + - checker + - improvements + - rank + - retrieve + - search + - solr + - spell + - spelling + - suggestions + - tuning + - watson + +--- +### Introduction + +Being able to deal with typos and incorrect spellings is an absolute must in any modern search facility. Humans can be lazy and clumsy and I personally often search for things with incorrect terms due to my sausage fingers. In this article I will explain how to turn on spelling suggestions in retrieve and rank so that if your users ask your system for something with a clumsy query, you can suggest spelling fixes for them so that they can submit another, more fruitful question to the system. + +Spellchecking is a standard feature of Apache SOLR which is turned off by default with Retrieve and Rank. This post will walk through the process of turning it on for your instance and enabling spell checking suggestions to be returned as part of calls rankers through fcselect. Massive shout out to David Duffett on Stack Overflow who posted [this answer][1] from which most of my blog post is derived. + +### Enabling spell checking in your schema + +The first thing we need to do is set up a spell checker field in our SOLR schema. For the sake of simplicity, the example schema used below only has a title and text field which are used in indexing and querying. However, this methodology can easily be extended to as many fields as your use case requires. + +### Set up field type + +The first thing you need to do is define a “textSpell” field type which SOLR can use to build a field into which it can dump valid words from your corpus that have been preprocessed and made ready for use in the spell checker. Create the following element in **your schema.xml** file: + +
    <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
    + <analyzer type="index">
    + <tokenizer class="solr.StandardTokenizerFactory" />
    + <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    + <filter class="solr.LowerCaseFilterFactory" />
    + <filter class="solr.StandardFilterFactory" />
    + </analyzer>
    + <analyzer type="query">
    + <tokenizer class="solr.StandardTokenizerFactory" />
    + <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
    + <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    + <filter class="solr.LowerCaseFilterFactory" />
    + <filter class="solr.StandardFilterFactory" />
    + </analyzer>
    + </fieldType>
    + +This field type runs a lower case filter over the words provided in the input and also expands any synonyms defined in synonyms.txt and ignores any stopwords defined in stopwords.txt before storing the output in the field. This should give us a list of lower case words that are useful in search and spell checking. + +### Create a spellcheck copy field in your schema + +The next step is to create a “textSpell” field in your SOLR schema that stores the “suggestions” from the main content to be used by the spellchecker API. + +The following XML defines the field in your schema and should be copied **into schema.xml.** It assumes that you have a couple of content fields called “title” and “text” from which content can be copied and filtered for use in the spell checker. + +
    <field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true" />
    + 
    + <copyField source="title" dest="spell"/>
    + <copyField source="text" dest="spell"/>
    + +### Defining the spellcheck search component + +Once you have finished setting up your schema, you can define the spellchecker parameters **in solrconfig.xml.** + +The following XML defines two spelling analysers. The DirectSolrSpellChecker which pulls search terms directly from the index adhoc – this means that it does not need to be regularly reindexed/rebuilt and always has up to date spelling suggestions. + +[`WordBreakSolrSpellChecker` offers suggestions by combining adjacent query terms and/or breaking terms into multiple words.][2] This means that it can provide suggestions that DirectSolrSpellChecker might not find where, for example, a user has a spelling mistake in one of the words in a multi-word search term. + +Notice that both lst elements contain a spell attribute. This must map to at the spell field we defined in the above step so if you used a different name for your field, substitute this in here. + +[The documentation][2] provides more detail on how to configure the individual spell check components as well as some alternatives to Direct and Wordbreak which might be more useful depending on your own use case. **Your mileage may vary.** + +
    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    +<lst name="spellchecker">
    + <str name="name">default</str>
    + <str name="field">spell</str>
    + <str name="classname">solr.DirectSolrSpellChecker</str>
    + <str name="distanceMeasure">internal</str>
    + <float name="accuracy">0.5</float>
    + <int name="maxEdits">2</int>
    + <int name="minPrefix">1</int>
    + <int name="maxInspections">5</int>
    + <int name="minQueryLength">4</int>
    + <float name="maxQueryFrequency">0.01</float>
    + <float name="thresholdTokenFrequency">.01</float>
    + </lst>
    + 
    + <lst name="spellchecker">
    + <str name="name">wordbreak</str>
    + <str name="classname">solr.WordBreakSolrSpellChecker</str>
    + <str name="field">spell</str>
    + <str name="combineWords">true</str>
    + <str name="breakWords">true</str>
    + <int name="maxChanges">10</int>
    + </lst>
    +</searchComponent>
    + +### Add spelling suggestions to your request handlers + +The default SOLR approach is to add a new request handler that deals with searches on the **/spell** endpoint. However, there is no reason why you can’t add spelling suggestions to any endpoint including **/select** and perhaps more relevently in retrieve and rank **/fcselect**. Below is a snippet of XML for a custom /spell endpoint: + +
    <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    + <lst name="defaults">
    + <!-- Solr will use suggestions from both the 'default' spellchecker
    + and from the 'wordbreak' spellchecker and combine them.
    + collations (re-written queries) can include a combination of
    + corrections from both spellcheckers -->
    + <str name="spellcheck.dictionary">default</str>
    + <str name="spellcheck.dictionary">wordbreak</str>
    + <str name="spellcheck">on</str>
    + <str name="spellcheck.extendedResults">true</str> 
    + <str name="spellcheck.count">10</str>
    + <str name="spellcheck.alternativeTermCount">5</str>
    + <str name="spellcheck.maxResultsForSuggest">5</str> 
    + <str name="spellcheck.collate">true</str>
    + <str name="spellcheck.collateExtendedResults">true</str> 
    + <str name="spellcheck.maxCollationTries">10</str>
    + <str name="spellcheck.maxCollations">5</str> 
    + </lst>
    + <arr name="last-components">
    + <str>spellcheck</str>
    + </arr>
    + </requestHandler>
    + +The following snippet adds spellchecking suggestions to the **/fcselect** endpoint. Simply append the XML inside the _** **_markup area. + +
    <requestHandler name="/fcselect" class="com.ibm.watson.hector.plugins.ss.FCSearchHandler">
    + <lst name="defaults">
    + <str name="defType">fcQueryParser</str>
    + <str name="spellcheck.dictionary">default</str>
    + <str name="spellcheck.dictionary">wordbreak</str>
    + <str name="spellcheck.count">20</str>
    + </lst>
    + <arr name="last-components">
    + <str>fcFeatureGenerator</str>
    + <str>spellcheck</str>
    + </arr>
    +</requestHandler>
    + +### Create and populate your SOLR index in Retrieve and Rank + +If you haven’t done this before, you should really read the [official documentation][3] and may want to read [my post about using python to do it too.][4] + +You should also [train a ranker][5] so that you can take advantage of the fcselect with spelling suggestions example below. + +### Test your new spelling suggestor + +Once you’ve got your collection up and running you should be able to try out the new spelling suggestor. First we’ll inspect **/spell:** + +
    $ curl -u $USER:$PASSWORD "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/$CLUSTER_ID/solr/$COLLECTION_NAME/spell?q=businwss&wt=json
    +
    +{"responseHeader":{"status":0,"QTime":4},"response":{"numFound":0,"start":0,"docs":[]},"spellcheck":{"suggestions":["businwss",{"numFound":1,"startOffset":0,"endOffset":8,"origFreq":0,"suggestion":[{"word":"business","freq":3}]}],"correctlySpelled":false,"collations":["collation",{"collationQuery":"business","hits":3,"misspellingsAndCorrections":["businwss","business"]}]}}
    +
    +
    + +As you can see, the system has not found any documents containing the word **businwss. **However, it has identified **businwss **(easily misspelt because ‘e’ and ‘w’ are next to each other) as a typo of **business**. It has also suggested business as a correction. This can be presented back to the user so that they can refine their search and presented with more results. + +Now lets also look at how to use spellcheck with your ranker results. + +
    $ curl -u $USER:$PASSWORD "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/$CLUSTER_ID/solr/$COLLECTION_NAME/fcselect?ranker_id=$RANKER_ID&q=test+splling+mstaek&wt=json&fl=id,title,score&spellcheck=true&spellcheck=true"
    +
    +{"responseHeader":{"status":0,"QTime":4},"response":{"numFound":0,"start":0,"maxScore":0.0,"docs":[]},"spellcheck":{"suggestions":["businwss",{"numFound":1,"startOffset":0,"endOffset":8,"suggestion":["business"]}]}}
    + +You should see something similar to the above.  The SOLR search failed to return any results for the ranker to rank. However it has come up with a spelling correction which should return more results for ranking next time. + + [1]: http://stackoverflow.com/questions/6653186/solr-suggester-not-returning-any-results + [2]: https://cwiki.apache.org/confluence/display/solr/Spell+Checking + [3]: http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/get_start.shtml + [4]: https://brainsteam.co.uk/2015/11/16/retrieve-and-rank-and-python/ + [5]: https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/retrieve-rank/plugin_overview.shtml#generate_queries \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-21-scrolling-in-elasticsearch.md b/brainsteam/content/posts/2015-11-21-scrolling-in-elasticsearch.md new file mode 100644 index 0000000..faf02db --- /dev/null +++ b/brainsteam/content/posts/2015-11-21-scrolling-in-elasticsearch.md @@ -0,0 +1,30 @@ +--- +title: Scrolling in ElasticSearch +author: James +type: post +date: 2015-11-21T09:41:19+00:00 +url: /2015/11/21/scrolling-in-elasticsearch/ +categories: + - PhD +tags: + - elasticsearch + - lucene + - python + - results + - scan + - scroll + +--- +I know I’m doing a lot of flip-flopping between SOLR and Elastic at the moment – I’m trying to figure out key similarities and differences between them and where one is more suitable than the other. + +The following is an example of how to map a function _**f **_onto an entire set of indexed data in elastic using the scroll API. + +If you use elastic, it is possible to do paging by adding a size and a from parameter. For example if you wanted to retrieve results in pages of 5 starting from the 3rd page (i.e. show results 11-15) you would do: + +
    GET /_search?size=5&from=10
    + +However this becomes more expensive as you move further and further into the list of results. Each time you make one of these calls you are re-running the search operation – forcing Lucene to go off and re-score all the results, rank them and then discard the first 10 (or 10000 if you get that far). There is an easier option: the scan and scroll API. + +The idea is that you run your actual query once and then Elastic caches the result somewhere gives you an “access token” to go back in and get them. Then you call the scroll API endpoint with said token to get each page of results (a caveat of this is that each time you make a call your token updates and you need to use the new one. My code sample deals with this but it took me a while to figure out what was going on). + +The below code uses the python elasticsearch library to make a scan and scroll call to an index and continues to load results until there are no more hits. For each page it maps a function _**f**_** **onto the results. It would not be hard to modify this code to work on multiple threads/processes using the Python multiprocessing API. Take a look! \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-22-freecite-python-wrapper.md b/brainsteam/content/posts/2015-11-22-freecite-python-wrapper.md new file mode 100644 index 0000000..761a194 --- /dev/null +++ b/brainsteam/content/posts/2015-11-22-freecite-python-wrapper.md @@ -0,0 +1,25 @@ +--- +title: Freecite python wrapper +author: James +type: post +date: 2015-11-22T19:20:19+00:00 +url: /2015/11/22/freecite-python-wrapper/ +categories: + - PhD +tags: + - citations + - freecite + - python + - rcuk + - ref + - references + +--- +I’ve written a simple wrapper around the Brown University Citation parser [FreeCite][1]. I’m planning to use the service to pull out author names from references in REF impact studies and try to link them back to investigators listed on RCUK funding applications. + +The code is [here][2] and is MIT licensed. It provides a simple method which takes a string representing a reference and returns a dict with each field separated. There is also a parse_many function which takes an array of reference strings and returns an array of dicts. + +  + + [1]: http://freecite.library.brown.edu/ + [2]: https://github.com/ravenscroftj/freecite \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-28-watson-home-automation.md b/brainsteam/content/posts/2015-11-28-watson-home-automation.md new file mode 100644 index 0000000..ead2314 --- /dev/null +++ b/brainsteam/content/posts/2015-11-28-watson-home-automation.md @@ -0,0 +1,50 @@ +--- +title: Home automation with Raspberry Pi and Watson +author: James +type: post +date: 2015-11-28T10:57:14+00:00 +url: /2015/11/28/watson-home-automation/ +categories: + - Work +tags: + - automation + - home + - iot + - jasper + - pi + - raspberry + - speech + - speech-to-text + - stt + - text + - watson + +--- +I’ve recently been playing with trying to build a Watson powered home automation system using my Raspberry Pi and some other electronic bits that I have on hand. + +There are already a lot of people doing work in this space. One of the most successful projects being [JASPER][1] which uses speech to text and an always on background listening microphone to talk to you and carry out actions when you ask it things in natural language like “What’s the weather going to be like tomorrow?” and “What is the meaning of life?” Jasper works using a library called [Sphinx][2] developed by Carnegie Mellon University to do speech recognition. However the models aren’t great – especially if you have a british accent. + +Jasper also allows you to use other speech to text libraries and services too such as the [Google Speech service][3] and the [AT&T speech service][4]. However there is no currently available code for using the Watson speech to text API – until now. + +The below code snippet can be added to your stt.py file in your jasper project. + + + +Then you need to create a Watson speech-to-text instance in bluemix add the following to your JASPER configuration: + +
    stt_engine: watson
    +stt_passive_engine: sphinx
    +watson-stt:
    + username: "<Text-to-speech-credentials-username>"
    + password: "<Text-to-speech-credentials-password>"
    + +This configuration will use the local Sphinx engine to listen out for “JASPER” or whatever you choose to call your companion (which it is actually pretty good at) and then send off 10-15s of audio to Watson STT to be analysed more accurately once the trigger word has been detected. Here’s a video of the system in action: + +
    + +
    + + [1]: http://jasperproject.github.io + [2]: http://cmusphinx.sourceforge.net/ + [3]: http://jasperproject.github.io/documentation/configuration/#google-stt + [4]: http://jasperproject.github.io/documentation/configuration/#att-stt \ No newline at end of file diff --git a/brainsteam/content/posts/2015-11-29-elasticsearch-turning-analysis-off-and-why-its-useful.md b/brainsteam/content/posts/2015-11-29-elasticsearch-turning-analysis-off-and-why-its-useful.md new file mode 100644 index 0000000..956a7e7 --- /dev/null +++ b/brainsteam/content/posts/2015-11-29-elasticsearch-turning-analysis-off-and-why-its-useful.md @@ -0,0 +1,52 @@ +--- +title: 'ElasticSearch: Turning analysis off and why its useful' +author: James +type: post +date: 2015-11-29T14:59:06+00:00 +url: /2015/11/29/elasticsearch-turning-analysis-off-and-why-its-useful/ +categories: + - PhD +tags: + - analysis + - elasticsearch + - indexing + - python + - schema + +--- +I have recently been playing with Elastic search a lot for my PhD and started trying to do some more complicated queries and pattern matching using the DSL syntax. I have an index on my local machine called impact_studies which contains all 6637 REF 2014 impact case studies in a JSON format. One of the fields is “UOA” which contains the title of the unit of impact that the case study belongs to. We recently identified the fact that we do not want to look at all units of impact (my PhD is around impact in science so domains such as Art History are largely irrelevent to me). Therefore I started trying to run queries like this: + +
    {  
    +   "query":{  
    +      "filtered":{  
    +         "query":{  
    +            "match_all":{  
    +
    +            }
    +         },
    +         "filter":{  
    +            "term":{  
    +               "UOA":"General Engineering"
    +            }
    +         }
    +      }
    +   }
    +}
    + +For some reason this returns zero results. Now it took me ages to find [this page][1] in the elastic manual which talks about the exact phenomenon I’m running into above. It turns out that the default analyser is tokenizing every text field and so Elastic has no notion of UOA ever containing “General Engineering”. Instead it only knows of a UOA field that contains the word “general” and the word “engineering” independently of each other in the model somewhere (bag-of-words). To solve this you have to + + * Download the existing schema from elastic: + *
    curl -XGET "http://localhost:9200/impact_studies/_mapping/study" master [4cb268b] untracked
    +{"impact_studies":{"mappings":{"study":{"properties":{"CaseStudyId":{"type":"string"},"Continent":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"Country":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"Funders":{"type":"string"},"ImpactDetails":{"type":"string"},"ImpactSummary":{"type":"string"},"ImpactType":{"type":"string"},"Institution":{"type":"string"},"Institutions":{"properties":{"AlternativeName":{"type":"string"},"InstitutionName":{"type":"string"},"PeerGroup":{"type":"string"},"Region":{"type":"string"},"UKPRN":{"type":"long"}}},"Panel":{"type":"string"},"PlaceName":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"References":{"type":"string"},"ResearchSubjectAreas":{"properties":{"Level1":{"type":"string"},"Level2":{"type":"string"},"Subject":{"type":"string"}}},"Sources":{"type":"string"},"Title":{"type":"string"},"UKLocation":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"UKRegion":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"UOA":{"type":"string"},"UnderpinningResearch":{"type":"string"}}}}}}
    + + * Delete the schema (unfortunately you can’t make this change on the fly) and then turn off the analyser which tokenizes the values in the field: + +
    $ curl -XDELETE "http://localhost:9200/impact_studies"
    + + * Then recreate the schema with “index”:”not_analyzed” on the field you are interested in: + +
    curl -XPUT "http://localhost:9200/impact_studies/" -d '{"mappings":{"study":{"properties":{"CaseStudyId":{"type":"string"},"Continent":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"Country":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"Funders":{"type":"string"},"ImpactDetails":{"type":"string"},"ImpactSummary":{"type":"string"},"ImpactType":{"type":"string"},"Institution":{"type":"string"},"Institutions":{"properties":{"AlternativeName":{"type":"string"},"InstitutionName":{"type":"string"},"PeerGroup":{"type":"string"},"Region":{"type":"string"},"UKPRN":{"type":"long"}}},"Panel":{"type":"string"},"PlaceName":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"References":{"type":"string"},"ResearchSubjectAreas":{"properties":{"Level1":{"type":"string"},"Level2":{"type":"string"},"Subject":{"type":"string"}}},"Sources":{"type":"string"},"Title":{"type":"string"},"UKLocation":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"UKRegion":{"properties":{"GeoNamesId":{"type":"string"},"Name":{"type":"string"}}},"UOA":{"type":"string", "index" : "not_analyzed"},"UnderpinningResearch":{"type":"string"}}}}}'
    + +Once you’ve done this you’re good to go reingesting your data and your filter queries should be much more fruitful. + + [1]: https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_text \ No newline at end of file diff --git a/brainsteam/content/posts/2016-03-29-cognitive-quality-assurance-an-introduction.md b/brainsteam/content/posts/2016-03-29-cognitive-quality-assurance-an-introduction.md new file mode 100644 index 0000000..3deef14 --- /dev/null +++ b/brainsteam/content/posts/2016-03-29-cognitive-quality-assurance-an-introduction.md @@ -0,0 +1,184 @@ +--- +title: Cognitive Quality Assurance – An Introduction +author: James +type: post +date: 2016-03-29T08:50:29+00:00 +url: /2016/03/29/cognitive-quality-assurance-an-introduction/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"e20dc490dab8";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"22a2beb5a88a";s:6:"status";s:5:"draft";s:3:"url";s:43:"https://medium.com/@jamesravey/e20dc490dab8";}' +categories: + - Uncategorized + - Work +tags: + - assurance + - cognitive + - cqa + - machine learning + - qa + - quality + - watson + +--- + +***EDIT: Hello readers, these articles are now 4 years old and many of the Watson services and APIs have moved or been changed. The concepts discussed in these articles are still relevant but I am working on 2nd editions of them.*** + +
    +
    This article has a slant towards the IBM Watson Developer Cloud Services but the principles and rules of thumb expressed here are applicable to most cognitive/machine learning problems.
    +
    + +## Introduction + +
    +

    + imagebot-com-2012042714194724316-800pxQuality assurance is arguably one of the most important parts of the software development lifecycle. In order to release a product that is production ready, it must be put under, and pass, a number of tests – these include unit testing, boundary testing, stress testing and other practices that many software testers are no doubt familiar with. The ways in which traditional software are relatively clear.In a normal system, developers write deterministic functions, that is – if you put an input parameter in, unless there is a bug, you will always get the same output back. This principal makes it.. well not easy… but less difficult to write good test scripts and know that there is a bug or regression in your system if these scripts get a different answer back than usual. +

    + +

    + Cognitive systems are not deterministic in nature. This means that you can receive different results from the same input data when training a system. Such systems tend to be randomly initialised and learn in different, nuanced ways every time they are trained. This is similar to how identical twins who may be biologically identical still learn their own preferences, memories and  skillsets. +

    + +

    + Thus, a traditional unit testing approach with tests that pass and fail depending on how the output of the system compares to an expected result is not helpful. +

    + +

    + This article is the first in a series on Cognitive Quality Assurance. Or in other words, how to test and validate the performance of non-deterministic, machine learning systems. In today’s article we look at how to build a good quality ground truth and then carrying out train/test/blind data segmentation and how you can use your ground truth to verify that a cognitive system is doing its job. +

    + +

    + Ground Truth +

    + +

    + Let’s take a step back for a moment and make sure we’re ok with the concept of ground truth. +

    + +

    + In machine learning/cognitive applications, the ground truth is the dataset which you use to train and test the system. You can think of it like a school textbook that the cognitive system treats as the absolute truth and first point of reference for learning the subject at hand. Its structure and layout can vary depending on the nature of the system you are trying to build but it will always abide by a number of rules. As I like to remember them: R-C-S! +

    + +

    + Representative of the problem +

    + +
      +
    • + The ground truth must accurately reflect the problem you are trying to solve. +
    • +
    • + If you are building a question answering system, how sure are you that the questions in the ground truth are also the questions that end users will be asking? +
    • +
    • + If you are building an image classification system, are the images in your ground truth of a similar size and quality to the images that you will need to tag and classify in production? Do your positive and negative examples truly represent the problem (i.e. if you only have black and white images in positive but are learning to find cat, the machine might learn to assume that black and white implies cat). +
    • +
    • + The proportions of each type is an important factor. If you have 10 classes of image or text and one particular class occurs 35% of the time in the field, you should try and reflect this in your ground truth too. +
    • +
    + +

    +

    vitruvian-man-800px
    Like Da Vinci when he drew the anatomically correct Vitruvian man, strive to represent the data as clearly and accurately as possible – errors make learning harder!
    +

    + + +
    + +### Consistent + + * The data in your ground truth must follow a logical set of rules – even if these are + a bit “fuzzy” – after all if a human can’t decide on how to classify a set of data consistently, how can we expect a machine to do this? + * Building a ground truth can often be a very large task requiring a team of people. When working in groups it may be useful to build a set of guidelines that detail which data belongs to which class and lists some examples. I will cover this in more detail on my article on working in groups. + * Humans ourselves can be inconsistent in nature so if at all possible, try to automate some of the classification – using dictionaries or pattern matching rules. + +** + +Warning-2400px + +**Important: never use cognitive systems to generate ground truth or you run the risk of introducing compounding learn errors.** + +### **Statistically Significant** – + + * The ground truth should be as large as is affordable. When you were a child and learned the concept of dog or cat, the chances are you learned that from seeing a large number of these animals and were able to draw up mental rules for what a dog entails (4 legs, furry, barks, wags tail) vs what cat entails (4 legs, sometimes furry, meows, retractable claws). The more  diverse examples of these animals you see, the better you are able to refine your mental model for what each animal entails. The same applies with machine learning and cognitive systems. + * Some of the  Watson APIs list minimal ground truth quality requirements and these vary from service to service. You should always be aiming as high as possible but as an absolute minimum, for at least 25% more than the service requirement so that we have some data for our blind testing (all will be revealed) + + +
    More data points means that the cognitive system has more to work with - don't skimp on ground truth - it will cost you your accuracy!
    More data points means that the cognitive system has more to work with – don’t skimp on ground truth – it will cost you your accuracy!
    + +There are some test techniques for dealing with testing smaller corpuses that I will cover in a follow up article. + +## Training and Testing – Concepts + + +Once we are happy with our ground truth, we need to decide how best to train and test the system. In a standard software environment, you would want to test every combination of every function and make sure that all combinations work. It may be tempting to jump to this conclusion with Cognitive systems too. However, this is not the answer. + + +Taking a step back again, let’s think remember when you were back at school. Over the course of a year you would learn about a topic and at the end there was an exam. We knew that the exam would test what we had learned during the year but we did not know: + +* The exact questions that we would be tested on – you have some idea of the sorts of questions you might be tested on but if you knew what the exact questions were you could go and find out what the answers are ahead of time +* The exact exam answers that would get us the best results before we went into the exam room and took the test. That’d be cheating right? +* With machine learning, this concept of learning and then blind testing is equally important. If we train the algorithm on all of the ground truth available to us and then test it, we are essentially asking it questions we already told it the answers to. We’re allowing it to cheat. +* By splitting the ground truth into two datasets, training on one and then asking questions with the other – we are really demonstrating that the machine has learned the concepts we are trying to teach and not just memorised the answer sheet. + +## Training and Testing – Best Practices + +SteveLambert-Dumbell-Lifter-800pxGenerally we split our data set into 80% training data and 20% testing data – this means that we are giving the cognitive system the larger chunk of information to learn from and testing it on a small subset of those concepts (in the same way that your professor gave you 12 weeks of lectures to lean from and then a 2 hour exam at the end of term). + + + +It is important that the test questions are well represented in the train data (it would have been mean of your professors to ask you questions in the exam that were never taught in the lectures). Therefore, you should make sure to sample ground truth pairs from each class or concept that you are trying to teach. + + +You should not simply take the first 80% of the ground truth file and feed it into the algorithm and use the last 20% of the file to test the algorithm – this is making a huge assumption about how well each class is represented in the data. For example, you might find that all of the questions about car insurance come at the end of your banking FAQ ground truth resulting in: + + * The algorithm never seeing what a car insurance question looks like and not learning this concept. + * The algorithm fails miserably at the test because most of the questions were on car insurance and it didn’t know much about that. + * The algorithm has examples of mortgage and credit card questions but is never tested on these – we can’t make any assertions about how well it has learned to classify these concepts. + + +The best way to divide test and training data for the above [NLC](http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/nl-classifier.html) problem is as follows: + +* Iterate over the ground truth – separating out each example into groups by class/concept +* Randomly select 80% of each of the groups to become the training data for that group/class +* Take the other 20% of each group and use this as the test data for that group/class +* Recombine the subgroups into two groups: test and train + + +With some of the other Watson cognitive APIs (I’m looking at you, Visual Recognition and Retrieve & Rank) you will need to alter this process a little bit. However the key here is making sure that the test data set is a fair representation (and a fair test) of the information in the train dataset. + + +### Testing the model + + +Once you have your train set and test set, the next bit is easy. Train a classifier with the train set and then write a script that loads in your test set, asks the question (or shows the classifier the image) and then compare the answer that the classifier gives with the answer in the ground truth. If they match, increment a “correct” number. If they don’t match, too bad! You can then calculate the accuracy of your classifier – it is the percentage of the total number of answers that were marked as correct. + + +### Blind Testing and Performance Reporting + +

    + Blindfolded-Darts-Player-800pxIn a typical work flow you may be training, testing, altering your ground truth to try and improve performance and re-training.  This is perfectly normal and it often takes some time to tune and tweak a model in order to get optimal performance. +

    + +

    + However, in doing this, you may be inadvertently biasing your model towards the test data – which in itself may change how the model performs in the real world. When you are happy with your test performance, you may wish to benchmark against another third dataset – a blind test set that the machine has not been ‘tweaked’ in order to perform better against. This will give you the most accurate view, with respect to the data available, of how well your classifier is performing in the real world. +

    + +

    + In the case of three data sets (test, train, blind) you should use a similar algorithm/work flow as describe in the above section.  The important thing is that the three sets must not overlap in any way and should all be representative of the problem you are trying to train on. +

    + +

    + There are a lot of differing opinions on what proportions to separate out the data set into. Some folks advocate 50%, 25%, 25% for test, train, blind respectively, others 70, 20, 10. I personally start at the latter and change these around if they don’t work – your mileage may vary depending on the type of model you are trying to build and the sort of problem you are trying to model. +

    + +

    +
    Warning-2400pxImportant: once you have done your blind test to get an accurate idea of how well your model performs in the real world, you must not do any more tuning on the model.
    If you do, your metrics will be meaningless since you are now biasing the new model towards the blind data set. You can of course, start from scratch and randomly initialise a new set of test, train and blind data sets from your ground truth at any time. +

    + +

    + Conclusion +

    + +

    + Hopefully, this article has given you some ideas about how best to start assessing the quality of your cognitive application. In the next article, I cover some more in depth measurements that you can do on your model to find out where it is performing well and where it needs tuning beyond a simple accuracy rating. We will also discuss some other methods for segmenting test and train data for smaller corpuses in a future article. +

    + \ No newline at end of file diff --git a/brainsteam/content/posts/2016-05-01-ibm-watson-its-for-data-scientists-too.md b/brainsteam/content/posts/2016-05-01-ibm-watson-its-for-data-scientists-too.md new file mode 100644 index 0000000..c4a8324 --- /dev/null +++ b/brainsteam/content/posts/2016-05-01-ibm-watson-its-for-data-scientists-too.md @@ -0,0 +1,25 @@ +--- +title: IBM Watson – It’s for data scientists too! +author: James +type: post +date: 2016-05-01T11:28:13+00:00 +url: /2016/05/01/ibm-watson-its-for-data-scientists-too/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Work +tags: + - data science + - ibm + - watson + +--- +Last week, my colleague Olly and I gave a talk at a data science meetup on how [IBM Watson can be used for data science applications][1]. + +We had an amazing time and got some really great feedback from the event. We will definitely be doing more talks at events like these in the near future so keep an eye out for us! + +I will also be writing a little bit more about the experiment I did around Core Scientific Concepts and Watson Natural Language Classifier in a future blog post. + +  + + [1]: https://skillsmatter.com/skillscasts/8076-ibm-watson-it-s-for-data-scientists-too \ No newline at end of file diff --git a/brainsteam/content/posts/2016-05-29-cognitive-quality-assurance-pt-2-performance-metrics.md b/brainsteam/content/posts/2016-05-29-cognitive-quality-assurance-pt-2-performance-metrics.md new file mode 100644 index 0000000..eb617c6 --- /dev/null +++ b/brainsteam/content/posts/2016-05-29-cognitive-quality-assurance-pt-2-performance-metrics.md @@ -0,0 +1,816 @@ +--- +title: 'Cognitive Quality Assurance Pt 2: Performance Metrics' +author: James +type: post +date: 2016-05-29T09:41:26+00:00 +url: /2016/05/29/cognitive-quality-assurance-pt-2-performance-metrics/ +featured_image: /wp-content/uploads/2016/05/Oma--825x510.png +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"1f1de4b3132e";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:96:"https://medium.com/@jamesravey/cognitive-quality-assurance-pt-2-performance-metrics-1f1de4b3132e";}' +categories: + - Work +tags: + - cognitive + - cqa + - evaluation + - learning + - machine + - rank + - retrieval + - retrieve + - supervised + - watson + +--- + +***EDIT: Hello readers, these articles are now 4 years old and many of the Watson services and APIs have moved or been changed. The concepts discussed in these articles are still relevant but I am working on 2nd editions of them.*** + +[Last time][1] we discussed some good practices for collecting data and then splitting it into test and train in order to create a ground truth for your machine learning system. We then talked about calculating accuracy using test and blind data sets. + +In this post we will talk about some more metrics you can do on your machine learning system including **Precision**, **Recall**, **F-measure** and **confusion matrices.** These metrics give you a much deeper level of insight into how your system is performing and provide hints at how you could improve performance too! + +## A recap – Accuracy calculation + +This is the most simple calculation but perhaps the least interesting. We are just looking at the percentage of times the classifier got it right versus the percentage of times it failed. Simply: + + 1. sum up the number of results (count the rows), + 2. sum up the number of rows where the predicted label and the actual label match. + 3. Calculate percentage accuracy: correct / total * 100. + +This tells you how good the classifier is in general across all classes. It does not help you in understanding how that result is made up. + +## Going above and beyond accuracy: why is it important? + +target with arrow by AnonymousImagine that you are a hospital and it is critically important to be able to predict different types of cancer and how urgently they should be treated. Your classifier is 73% accurate overall but that does not tell you anything about it’s ability to predict any one type of cancer. What if the 27% of the answers it got wrong were the cancers that need urgent treatment? We wouldn’t know! + +This is exactly why we need to use measurements like precision, recall and f-measure as well as confusion matrices in order to understand what is really going on inside the classifier and which particular classes (if any) it is really struggling with. + +## Precision, Recall and F-measure and confusion matrices (Grandma’s Memory Game) + +Grandma's face by frankesPrecision, Recall and F-measure are incredibly useful for getting a deeper understanding of which classes the classifier is struggling with. They can be a little bit tricky to get your head around so lets use a metaphor about Grandma’s memory. + +Imagine Grandma has 24 grandchildren. As you can understand it is particularly difficult to remember their names. Thankfully, her 6 children, the grandchildren’s parents all had 4 kids and named them after themselves. Her son Steve has 3 sons: Steve I, Steve II, Steve III and so on. + +This makes things much easier for Grandma, she now only has to remember 6 names: Brian, Steve, Eliza, Diana, Nick and Reggie. The children do not like being called the wrong name so it is vitally important that she correctly classifies the child into the right name group when she sees them at the family reunion every Christmas. + +I will now describe Precision, Recall, F-Measure and confusion matrices in terms of Grandma’s predicament. + +### Some Terminology + +Before we get on to precision and recall, I need to introduce the concepts of true positive, false positive, true negative and false negative. Every time Grandma gets an answer wrong or right, we can talk about it in terms of these labels and this will also help us get to grips with precision and recall later. + +These phrases are in terms of each class – you have TP, FP, FN, TN for each class. In this case we can have TP,FP,FN,TN with respect to Brian, with respect to Steve, with respect to Eliza and so on. + +This table shows how these four labels apply to the class “Brian” – you can create a table will + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + Brian + + Not Brian +
    + Grandma says “Brian” + + True Positive + + False Positive +
    + Grandma says + + False Negative + + True Negative +
    + + * If Grandma calls a Brian, Brian then we have a true positive (with respect to the Brian class) – the answer is true in both senses- Brian’s name is indeed Brian AND Grandma said Brian – go Grandma! + * If Grandma calls a Brian, Steve then we have a false negative (with respect to the Brian class). Brian’s name is Brian and Grandma said Steve. This is also a false positive with respect to the Steve Class. + * If Grandma calls a Steve, Brian then we have a false positive (with respect to the Brian class). Steve’s name is Steve, Grandma wrongly said Brian (i.e. identified positively). + * If Grandma calls an Eliza, Eliza, or Steve, or Diana, or Nick – the result is the same – we have a true negative (with respect to the Brian class). Eliza,Eliza would obviously be a true positive with respect to the Eliza class but because we are only interested in Brian and what is or isn’t Brian at this point, we are not measuring this. + +When you are recording results, it is helpful to store them in terms of each of these labels where applicable. For example: + +Steve,Steve (TP Steve, TN everything else) + +Brian,Steve (FN Brian, FP Steve) + +### Precision and Recall + +Grandma is in the kitchen, pouring herself a Christmas Sherry when three Brians and 2 Steves come in to top up their eggnogs. + +Grandma correctly classifies 2 Brians but slips up and calls one of them Eliza. She only gets 1 of the Steve’ and calls the other Brian. + +In terms of TP,FP,TN,FN we can say the following (true negative is the least interesting for us): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + TP + + FP + + FN +
    + Brian + + 2 + + 1 + + 1 +
    + Eliza + + + 1 + +
    + Steve + + 1 + + + 1 +
    + + * She has correctly identified 2 people who are truly called Brian as Brian (TP) + * She has falsely named someone Eliza when their name is not Eliza (FP) + * She has falsely named someone whose name is truly Steve something else (FN) + +**True Positive, False Positive, True Negative and False negative are crucial to understand before you look at precision and recall so make sure you have fully understood this section before you move on.** + +#### Precision + +Precision, like our TP/FP labels, is expressed in terms of each class or name. It is the proportion of true positive name guesses divided by true positive + false positive guesses. + +Put another way, precision is how many times Grandma correctly guessed Brian versus how many times she called other people (like Steve) Brian. + +For Grandma to be precise, she needs to be very good at correctly guessing Brians **and also** never call anyone else (Elizas and Steves) Brian. + +_**Important: If Grandma came to the conclusion that 70% of her grandchildren were named Brian and decided to just randomly say “Brian” most of the time, she could still achieve a high overall accuracy. However, her Precision – with respect to Brian would be poor because of all the Steves and Elizas she was mis-labelling. This is why precision is important.**_ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + TP + + FP + + FN + + Precision +
    + Brian + + 2 + + 1 + + 1 + + 66% +
    + Eliza + + + 1 + + + N/A +
    + Steve + + 1 + + + 1 + + 100% +
    + +The results from this case are displayed above. As you can see, Grandma uses Brian to incorrectly label Steve so precision is only 66%. Despite only getting one of the Steves correct, Grandma has 100% precision for Steve simply by never using the name incorrectly. We can’t calculate for Eliza because there were no true positive guesses for that name ( 0 / 1 is still zero ). + +So what about false negatives? Surely it’s important to note how often Grandma is inaccurately calling  Brian by other names? We’ll look at that now… + +#### Recall + +Continuing the theme, Recall is also expressed in terms of each class. It is the proportion of true positive name guesses divided by true positive + false negative guesses. + +Another way to look at it is given a population of Brians, how many does Grandma correctly identify and how many does she give another name (i.e. Eliza or Steve)? + +This tells us how “confusing” Brian is as a class. If Recall is high then its likely that Brians all have a very distinctive feature that distinguishes them as Brians (maybe they all have the same nose). If Recall is low, maybe Brians are very varied in appearance and perhaps look a lot like Elizas or Steves (this presents a problem of its own, check out confusion matrices below for more on this). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + TP + + FP + + FN + + Recall +
    + Brian + + 2 + + 1 + + 1 + + 66.6% +
    + Eliza + + + 1 + + + N/A +
    + Steve + + 1 + + + 1 + + 50% +
    + +You can see that recall for Brian remains the same (of the 3 Brians Grandma named, she only guessed incorrectly for one). Recall for Steve is 50% because Grandma guessed correctly for 1 and incorrectly for the other Steve. Again Eliza can’t be calculated because we end up trying to divide zero by zero. + +**F-Measure** + +F-measure effectively a measurement of how accurate the classifier is per class once you factor in both precision and recall. This gives you a wholistic view of your classifier’s performance on a particular class. + +In terms of Grandma, f-measure give us an aggregate metric of how good Grandma is at dealing with Brians in terms of both precision AND accuracy. + +It is very simple to calculate if you already have precision and recall: + +![F_1 = 2 \cdot \frac{\mathrm{precision} \cdot \mathrm{recall}}{\mathrm{precision} + \mathrm{recall}}][2] + +Here are the F-Measure results for Brian, Steve and Eliza from above. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + TP + + FP + + FN + + Precision + + Recall + + F-measure +
    + Brian + + 2 + + 1 + + 1 + + 66.6% + + 66.6% + + 66.6% +
    + Eliza + + + 1 + + + N/A + + N/A + + N/A +
    + Steve + + 1 + + + 1 + + 1 + + 0.5 + + 0.6666666667 +
    + +As you can see – the F-measure is the average ([harmonic mean][3]) of the two values – this can often give you a good overview of both precision and recall and is dramatically affected by one of the contributing measurements being poor. + +### Confusion Matrices + +When a class has a particularly low Recall or Precision, the next question should be why? Often you can improve a classifier’s performance by modifying  the data or (if you have control of the classifier) which features you are training on. + +For example, what if we find out that Brians look a lot like Elizas? We could add a new feature (Grandma could start using their voice pitch to determine their gender and their gender to inform her name choice) or we could update the data (maybe we could make all Brians wear a blue jumper and all Elizas wear a green jumper). + +Before we go down that road, we need to understand where there is confusion between classes  and where Grandma is doing well. This is where a confusion matrix helps. + +A Confusion Matrix allows us to see which classes are being correctly predicted and which classes Grandma is struggling to predict and getting most confused about. It also crucially gives us insight into which classes Grandma is confusing as above. Here is an example of a confusion Matrix for Grandma’s family. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + Predictions +
    + + + Steve + + Brian + + Eliza + + Diana + + Nick + + Reggie +
    +Actual

    + +

    +Class

    + Steve + + 4 + + 1 + + + 1 + + +
    + Brian + + 1 + + 3 + + + + 1 + + 1 +
    + Eliza + + + + 5 + + 1 + + +
    + Diana + + + + 5 + + 1 + + +
    + Nick + + 1 + + + + + 5 + +
    + Reggie + + + + + + + 6 +
    + +

    + Ok so lets have a closer look at the above. +

    + +

    + Reading across the rows left to right these are the actual examples of each class – in this case there are 6 children with each name so if you sum over the row you will find that they each add up to 6. +

    + +

    + Reading down the columns top-to-bottom you will find the predictions – i.e. what Grandma thought each child’s name was.  You will find that these columns may add up to more than or less than 6 because Grandma may overfit for one particular name. In this case she seems to think that all her female Grandchildren are called Eliza (she predicted 5/6 Elizas are called Eliza and 5/6 Dianas are also called Eliza). +

    + +

    + Reading diagonally where I’ve shaded things in bold gives you the number of correctly predicted examples. In this case Reggie was 100% accurately predicted with 6/6 children called “Reggie” actually being predicted “Reggie”. Diana is the poorest performer with only 1/6 children being correctly identified. This can be explained as above with Grandma over-generalising and calling all female relatives “Eliza”. +

    + +

    +

    Steve sings for a Rush tribute band - his Geddy Lee is impeccable.
    Steve sings for a Rush tribute band – his Geddy Lee is impeccable.
    +

    + +

    + Grandma seems to have gender nailed except in the case of one of the Steves (who in fairness does have a Pony Tail and can sing very high).  She is best at predicting Reggies and struggles with Brians (perhaps Brians have the most diverse appearance and look a lot like their respective male cousins). She is also pretty good at Nicks and Steves. +

    + +

    + Grandma is terrible at female grandchildrens’ names. If this was a machine learning problem we would need to find a way to make it easier to identify the difference between Dianas and Elizas through some kind of further feature extraction or weighting or through the gathering of additional training data. +

    + +

    + Conclusion +

    + +

    + Machine learning is definitely no walk in the park. There are a lot of intricacies involved in assessing the effectiveness of a classifier. Accuracy is a great start if until now you’ve been praying to the gods and carrying four-leaf-clovers around with you to improve your cognitive system performance. +

    + +

    + However, Precision, Recall, F-Measure and Confusion Matrices really give you the insight you need into which classes your system is struggling with and which classes confuse it the most. +

    + +

    + A Note for Document Retrieval (Watson Retrieve & Rank) Users +

    + +

    + This example is probably directly relevant to those building classification systems (i.e. extracting intent from questions or revealing whether an image contains a particular company’s logo). However all of this stuff works directly for document retrieval use cases too. Consider true positive to be when the first document returned from the query is the correct answer and false negative is when the first document returned is the wrong answer. +

    + +

    + There are also variants on this that consider the top 5 retrieved answer (Precision@N) that tell you whether your system can predict the correct answer in the top 1,3,5 or 10 answers by simply identifying “True Positive” as the document turning up in the top N answers returned by the query. +

    + +

    + Finally… +

    + +

    + Overall I hope this tutorial has helped you to understand the ins and outs of machine learning evaluation. +

    + +

    + Next time we look at cross-validation techniques and how to assess small corpii where carving out a 30% chunk of the documents would seriously impact the learning. Stay tuned for more! +

    + + [1]: https://brainsteam.co.uk/2016/03/29/cognitive-quality-assurance-an-introduction/ + [2]: https://upload.wikimedia.org/math/9/9/1/991d55cc29b4867c88c6c22d438265f9.png + [3]: https://en.wikipedia.org/wiki/Harmonic_mean#Harmonic_mean_of_two_numbers \ No newline at end of file diff --git a/brainsteam/content/posts/2016-06-05-blackgangpi-a-raspberry-pi-hack-at-blackgang-chine.md b/brainsteam/content/posts/2016-06-05-blackgangpi-a-raspberry-pi-hack-at-blackgang-chine.md new file mode 100644 index 0000000..671ac10 --- /dev/null +++ b/brainsteam/content/posts/2016-06-05-blackgangpi-a-raspberry-pi-hack-at-blackgang-chine.md @@ -0,0 +1,47 @@ +--- +title: '#BlackgangPi – a Raspberry Pi Hack at Blackgang Chine' +author: James +type: post +date: 2016-06-05T07:59:40+00:00 +url: /2016/06/05/blackgangpi-a-raspberry-pi-hack-at-blackgang-chine/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"360de275805d";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:94:"https://medium.com/@jamesravey/blackgangpi-a-raspberry-pi-hack-at-blackgang-chine-360de275805d";}' +categories: + - Work +tags: + - cognitive + - hackathon + - ibm + - watson + +--- +I was very excited to be invited along with some other IBMers to the Blackgang Pi event run by Dr Lucy Rogers on a semi regular basis at the Blackgang Chine theme park on the Isle of Wight. + +[Blackgang Chine ][1]is a theme park on the southern tip of the Isle of Wight and holds the title of oldest theme park in the United Kingdom. We were lucky enough to be invited along to help them modernise some of their animatronic exhibits, replacing some of the aging bespoke PCBs and controllers with Raspberry Pis running Node-RED and communicating using MQTT/Watson IOT. + +Over the course of two days, my colleague [James Sutton][2] and I built a talking moose head using some of the IBM Watson Cognitive services. + +We got it talking fairly quickly using IBM text to speech and had it listening for intents like “tell joke” or “check weather” via NLC. + + + + + +I also built out a dialog that would monitor the state of the conversation and make the user comply with the knock knock joke format (i.e. if you say anything except “who’s there” it will moan and call you a spoil-sport). + +Video we managed to capture before we had to pack up yesterday below + +
    + +
    + + [1]: http://www.blackgangchine.com/ + [2]: https://jsutton.co.uk/ \ No newline at end of file diff --git a/brainsteam/content/posts/2016-11-12-the-builder-the-salesman-and-the-property-tycoon.md b/brainsteam/content/posts/2016-11-12-the-builder-the-salesman-and-the-property-tycoon.md new file mode 100644 index 0000000..af363eb --- /dev/null +++ b/brainsteam/content/posts/2016-11-12-the-builder-the-salesman-and-the-property-tycoon.md @@ -0,0 +1,113 @@ +--- +title: The builder, the salesman and the property tycoon +author: James +type: post +date: 2016-11-12T11:43:24+00:00 +url: /2016/11/12/the-builder-the-salesman-and-the-property-tycoon/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"45839adb0b2d";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:92:"https://medium.com/@jamesravey/the-builder-the-salesman-and-the-property-tycoon-45839adb0b2d";}' +categories: + - Uncategorized +tags: + - buzzwords + - funny + - machine learning + +--- +A testament to marketers around the world is the myth that their AI platform X, Y or Z can solve all your problems with no effort. Perhaps it is this, combined with developers and data scientists often being hidden out of sight and out of mind that leads people to think this way. + +Unfortunately, the truth of the matter is that ML and AI involve blood sweat and tears – especially if you are building things from scratch rather than using APIs. If you are using third party APIs there are still challenges. The biggest players in the API space also have large pools of money. Pools of money that can be spent on marketing literature to convince you that their product will solve all your problems with no effort required. I think this is dishonest and is one of the reasons I have so many conversations like the one below. + +The take home message is clear! We need to do way more to help clients to understand AI tech and what it can do in a more transparent way. Simply getting customers excited about buzzwords without explaining things in layman’s terms is a guaranteed way to lose trust and build a bad reputation. + +At [Filament][1], we pride ourselves on being honest and transparent about what AI can do for your business and are happy to take the time to explain concepts and buzzwords in laymans’ terms. + +**The following is an amusing anecdote about what happens when AI experts get their messaging wrong.** + +## The builder, the salesman and the property tycoon + +Imagine that a property tycoon is visiting an experienced builder for advice on construction of a new house. _**This is a hugely exaggerated example and all of the people in it are caricatures. No likeness or similarity intended. Our ‘master builders’ are patient, understanding and communicative and thankfully, have never met a ‘Mr Tycoon’ in real life.**_ + +
    Salesman(SM): Welcome Mr Tycoon, please allow me to introduce to you our master builder. She has over 25 years in the construction industry and qualifications in bricklaying, plumbing and electrics.
    +
    +Master Builder (MB): Hi Mr Tycoon, great to meet you *handshake*
    +
    +Tycoon(TC): Lovely to meet you both. I'm here today because I want some advice on my latest building project. I've been buying blocks of apartments and letting them out for years. My portfolio is worth £125 Million. However, I want to get into the construction game. 
    +
    +MB: That's exciting. So how can we help?
    +
    +TC: Ok I'm a direct kind of guy and I say things how I see them so I'll cut to the chase. I want to build a house. What tools shall I use?
    +
    +MB: Good question... what kind of house are you looking to build?
    +
    +TC: Well, whatever house I can build with tools.
    +
    +MB: ok... well you know there are a lot of options and it depends on budget. I mean you must have something in mind? Bungalow? 2-Story family house? Manor house?
    +
    +TC: Look, I don't see how this is relevant. I've been told that the tools can figure all this stuff out for me.
    +
    +SM: Yes MB, we can provide tools that  will help TC decide what house to build right?
    +
    +MB: That's not really how it works but ok... Let's say for the sake of argument that we're going to help you build a 2 bedroom townhouse.
    +
    +TC: Fantastic! Yes, great initiative MB, a townhouse. Will tools help me build a townhouse?
    +
    +MB: Yeah... tools will help you build a townhouse...
    +
    +TC: That's great!
    +
    +MB: TC, do you have any experience building houses? You said you mainly buy houses, not build them.
    +
    +T: No not really. However, SM told me that with the right tools, I don't need any experience, the tools will do all the work for me.
    +
    +MB: Right... ok... SM did you say that?
    +
    +SM: Well, with recent advances in building techniques and our latest generation of tools, anything is possible!
    +
    +MB: Yes... that's true tools do make things easier. However, you really do need to know how to use the tools. They're not 'magic' - you should understand which ones are useful in different situations
    +
    +TC: Oh, that's not the kind of answer I was looking for. SM, you said this wouldn't be a problem.
    +
    +SM: It's not going to be a problem is it MB? I mean we can help TC figure out which tools to use?
    +
    +MB: I suppose so...
    +
    +SM: That's the attitude MB... Tell TC about our services
    +
    +MB: Sure, I have had many years of experience building townhouses, we have a great architect at our firm who can design the house for you. My team will take care of the damp coursing, wooden frame, brickwork and plastering and then I will personally oversee the installation of the electrics and pipework.
    +
    +TC: Let's not get bogged down in the detail here MB, I just want a townhouse... Now I have a question. Have you heard of mechanical excavators - I think you brits call them "diggers".
    +
    +MB: Yes... I have used diggers a number of times in the past.
    +
    +TC: Oh that's great. MB, do you think diggers can help me build a house faster?
    +
    +MB: Urm, well maybe. It depends on the state of the terrain that you want to build on.
    +
    +TC: Oh that's great, some of our potential tenants have heard of diggers and if I tell them we used diggers to build the house they will be so excited.
    +
    +MB: Wonderful...
    +
    +TC: I've put an order in for 25 diggers - if we have more that means we can build the house faster right?
    +
    +MB: Are you serious?
    +
    +SM: Of course TC is serious, that's how it works right?
    +
    +MB: Not exactly but ok, if you have already ordered them that's fine *tries to figure out what to do with 24 spare diggers*
    +
    +TC: Great, it's settled then. One more thing, I don't know if I want to do a townhouse. Can you use diggers to build townhouses? I'm only interested in building things that diggers can build.
    +
    +MB: Yes don't worry, you can build townhouses with diggers. I've done it personally a number of times
    +
    +TC: I'm not so sure. I've heard of this new type of house called a Ford Mustang. Everyone in the industry is talking about how we can drive up ROI by building Ford Mustangs instead of Townhouses. What are your thoughts MB?
    +
    +MB: That's not a... diggers... I... I'm really sorry TC, I've just received an urgent text message from one of our foremen at a building site, I have to go and resolve this. Thanks for your time, SM can you wrap up here? *calmly leaves room and breathes into a paper bag*
    +
    +SM: Sorry about that TC, anyway yes I really love the Ford mustang idea, what's your budget?
    +
    +-FIN-
    + +This post is supposed to raise a chuckle and it’s not supposed to offend anyone in particular. However, on a more serious note, there is definitely a problem with buzzwords in machine learning and industry. Let’s try and fix it. + + [1]: http://filament.uk.com/ \ No newline at end of file diff --git a/brainsteam/content/posts/2016-11-23-timetrack-a-simple-time-tracking-application-for-developers.md b/brainsteam/content/posts/2016-11-23-timetrack-a-simple-time-tracking-application-for-developers.md new file mode 100644 index 0000000..2ed3b26 --- /dev/null +++ b/brainsteam/content/posts/2016-11-23-timetrack-a-simple-time-tracking-application-for-developers.md @@ -0,0 +1,27 @@ +--- +title: timetrack – a simple time tracking application for developers +author: James +type: post +date: 2016-11-23T14:43:58+00:00 +url: /2016/11/23/timetrack-a-simple-time-tracking-application-for-developers/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Open Source +tags: + - phd + - projects + - python + - time + - tracking + +--- +I’ve written a small command line application for tracking my time on my PhD and other projects. We use Harvest at Filament which is great if you’ve got a huge team and want the complexity (and of course license charges) of an online cloud solution for time tracking. + +If, like me, you’re just interested to see how much time you are spending on your different projects and you don’t have any requirement for fancy web interfaces or client billing, then [timetrack][1] might be for you. For me personally, I was wondering how much of my week is spent on my PhD as opposed to Filament client work. I know its a fair amount but I want some clear cut numbers. + +[timetrack][1] is a simple application that allows you to log what time you’ve spent and where from the command line with relative ease. It logs everything to a text file which is relatively easy to read by !machines. However it also provides filtering and reporting functions so that you can see how much time you spend on your projects, how much time you used today and how much of your working day is left. + +It’s written in python with minimal dependencies on external libraries (save for progressbar2 which is used for the live tracker). The code is open source and available under an MIT license. Download it from [GitHub][1] + + [1]: https://github.com/ravenscroftj/timetrack \ No newline at end of file diff --git a/brainsteam/content/posts/2016-11-27-we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch.md b/brainsteam/content/posts/2016-11-27-we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch.md new file mode 100644 index 0000000..e6b9893 --- /dev/null +++ b/brainsteam/content/posts/2016-11-27-we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch.md @@ -0,0 +1,58 @@ +--- +title: We need to talk about push notifications (and why I stopped wearing my smartwatch) +author: James +type: post +date: 2016-11-27T12:59:22+00:00 +url: /2016/11/27/we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch/ +featured_image: /wp-content/uploads/2016/11/IMG_20161127_130808-e1480252170130-576x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"3a1b15a3f469";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:124:"https://medium.com/@jamesravey/we-need-to-talk-about-push-notifications-and-why-i-stopped-wearing-my-smartwatch-3a1b15a3f469";}' +categories: + - Uncategorized +tags: + - multi-tasking + - notifications + - phd + - planning + - work + +--- +I own a Pebble Steel which I got for Christmas a couple of years ago. I’ve been very happy with it so far. I can control my music player from my wrist, get notifications and a summary of my calender. Recently, however I’ve stopped wearing it. The reason is that constant streams of notifications stress me out, interrupt my workflow and not wearing it makes me feel more calm and in control and allows me to be more productive. + +As you can imagine, trying to do a PhD and be a CTO at the same time has its challenges. I struggle with the cognitive dissonance between walling off my research days to focus on my PhD and making sure that the developers at work are getting on ok and being productive without me. I have thus far tended to compromise by leaving slack running and fielding the odd question from colleagues even on my off days. + +Conversely, when I’m working for [Filament,][1] I often get requests from University colleagues to produce reports and posters, share research notes and to resolve problems with [SAPIENTA][2] or [Partridge][3] infrastructure (or even run experiments on behalf of other academics). Both of these scenarios play havoc with my prioritisation of todos when I get notified about them. + +## Human Multitasking + +Human Multitasking is something of a myth – as is [the myth that women can multitask and men can’t][4]. It turns out that we are all ([except for a small group of people scientists call “supertaskers”][5]) particularly rubbish at multi-tasking. I am no exception, however much I wish I was. + +When we “multitask” we are actually context switching. Effectively, we’re switching between a number of different tasks very quickly, kind of like how a computer is able to run many applications on the same CPU core by executing different bits of each app – it might deal with an incoming email, then switch to rendering your netflix movie, then switch to continuing to download that email. It does this so quickly that it seems like both activities are happening at once. That’s obviously different for dual or quad core CPUs but that’s not really the point here since our brains are not “quad core”. + +CPUs are really good at context switching very quickly. However, the human brain is really rubbish at this. [Joel Spolsky has written a really cool computer analogy on why][6] but if you don’t want to read a long article on it, lets just say that where a computer can context-switch in milliseconds, a human needs a few minutes. + +It also logically follows that the more cognitively intensive a job is, the more time a brain needs to swap contexts. For example, you might be able to press the “next” button on your car stereo while driving at 70 MPH down the motorway, but (aside from the obvious practical implications) you wouldn’t be able to perform brain surgery and drive at the same time . If you consider studying for a PhD and writing machine learning software for a company to be roughly as complex as the above example, you can hopefully understand why I’d struggle. + +## Push Notifications + +The problem I find with “push” notifications is that they force you to context switch. We, as a society, have spent the last couple of decades training ourselves to stop what we are doing and check our phones as soon as that little vibration or bling noise comes through. If you are a paramedic or surgeon with a pager, that’s the best possible use case for this tech, and I’m not saying we should stop push notifications for emergency situations like that. However, when the notification is “check out this dank meme dude” but we are still stimulated into action this can have a very harmful effect on our concentration and ability to focus on the task at hand. + +Mobile phone notifications are bad enough but occasionally, if your phone buzzes in your pocket and you are engrossed in another task, you won’t notice and you’ll check your phone later. Smartwatch notifications seem to get my attention 9 times out of 10  – I guess that’s what they’re designed for. Having something strapped directly to the skin on my wrist is much more distracting than something buzzing through a couple of layers of clothing on my leg. + +I started to find that push notifications forcibly jolt me out of whatever task I’m doing and I immediately feel anxious until I’ve handled the new input stimulus. This means that I will often prioritise unimportant stuff like responding to memes that my colleague has posted in slack over the research paper I’m reading. Maybe this means I miss something crucial, or maybe I just have to go back to the start of the page I’m looking at. Either way, time is a’wastin’. + +## The Solution + +For me, it’s obvious. Push notifications need a huge re-think. I am currently reorganising the way I work, think and plan and ripping out as many push notification mechanisms as I can. [I’ve also started keeping track of how I’m spending my time using a tool I wrote last week.][7] + +I can definitely see a use case for “machine learning” triage of notifications based on intent detection and personal priorities. If a relative is trying to get hold of me because there’s been an emergency, I wouldn’t mind being interrupted during a PhD reading session. If a notification asking for support on Sapienta or a work project comes through, that’s urgent but can probably wait half an hour until I finish my current reading session. If a colleague wants to send me a video of grumpy cat, that should wait in a list of things to check out after 5:30pm. + +Until me, or someone with more time to do so builds a machine learning filter like this one, I’ve stopped wearing my smart watch and my phone is on silent. If you need me and I’m ignoring you, don’t take it personally. I’ll get back to you when I’m done with my current task. If it’s urgent,  you’ll just have to try phoning and hoping I notice the buzz in my pocket (until I find a more elegant way to screen urgent calls and messages). + + [1]: http://filament.uk.com + [2]: http://sapienta.papro.org.uk + [3]: http://farnsworth.papro.org.uk/ + [4]: http://link.springer.com/article/10.3758%2FPBR.17.4.479 + [5]: http://link.springer.com/article/10.3758/PBR.17.4.479 + [6]: http://www.joelonsoftware.com/articles/fog0000000022.html + [7]: https://brainsteam.co.uk/2016/11/23/timetrack-a-simple-time-tracking-application-for-developers/ \ No newline at end of file diff --git a/brainsteam/content/posts/2016-12-08-ai-cant-solve-all-our-problems-but-that-doesnt-mean-it-isnt-intelligent.md b/brainsteam/content/posts/2016-12-08-ai-cant-solve-all-our-problems-but-that-doesnt-mean-it-isnt-intelligent.md new file mode 100644 index 0000000..d6e2468 --- /dev/null +++ b/brainsteam/content/posts/2016-12-08-ai-cant-solve-all-our-problems-but-that-doesnt-mean-it-isnt-intelligent.md @@ -0,0 +1,56 @@ +--- +title: AI can’t solve all our problems, but that doesn’t mean it isn’t intelligent +author: James +type: post +date: 2016-12-08T10:08:13+00:00 +url: /2016/12/08/ai-cant-solve-all-our-problems-but-that-doesnt-mean-it-isnt-intelligent/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"e3e315592001";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";s:117:"https://medium.com/@jamesravey/ai-cant-solve-all-our-problems-but-that-doesn-t-mean-it-isn-t-intelligent-e3e315592001";}' +categories: + - PhD + - Work +tags: + - AI + - machine learning + - philosophy + +--- +
    Thomas Hobbes, perhaps most famous for his thinking on western politics, was also thinking about how the human mind “computes things” 500 years ago.
    + +[A recent opinion piece I read on Wired][1] called for us to stop labelling our current specific machine learning models AI because they are not intelligent. I respectfully disagree. + +AI is not a new concept. The idea that a computer could ‘think’ like a human and one day pass for a human has been around since Turing and even in some form long before him. The inner workings the human brain and how we carry out computational processes have even been discussed by great philosophers such as Thomas Hobbes who wrote in his book, De Corpore in 1655 that _“by reasoning, I understand computation. And to compute is to collect the sum of many things added together at the same time, or to know the remainder when one thing has been taken from another. To reason therefore is the same as to add or to subtract.”_ Over the years, AI has continued to capture the hearts and minds of great thinkers, scientists and of course creatives and artists. + +
    The Matrix: a modern day telling of [Rene Descartes’ “Evil Demon”][2] theorem
    + +Visionary Science Fiction authors of the 20th century: Arthur C Clarke, Isaac Asimov and Philip K Dick have built worlds of fantasy inhabited by self-aware artificial intelligence systems and robots, [some of whom could pass for humans unless subject to a very specific and complicated test][3].  Endless films have been released that “sex up” AI. The Terminator series, The Matrix, Ex Machina, the list goes on. However, like all good science fiction, these stories that paint marvellous and thrilling visions of futures that are still in the future even in 2016. + +The science of AI is a hugely exciting place to be too (_I would say that, wouldn’t I). _In the 20th century we’ve mastered speech recognition, optical character recognition and machine translation good enough that I can visit Japan and communicate, via my mobile phone, with a local shop keeper without either party having to learn the language of their counterpart. We have arrived at a point where we can train machine learning models to do some specific tasks better than people (including drive cars and [diagnostic oncology][4]). We call these current generation AI models “weak AI”. Computers that can solve any problem we throw at them (in other words, ones that have generalised intelligence and known as “strong AI” systems) are a long way off. However, that shouldn’t detract from what we have solved already with weak AI. + +One of the problems with living in a world of 24/7 new cycles and clickbait titles is that nothing is new or exciting any more. Every small incremental change in the world is reported straight away across the globe. Every new discovery, every fractional increase in performance from AI gets a blog post or a news article. It makes everything seem boring. _Oh Tesla’s cars can drive themselves? So what? Google’s cracked Go? Whatever… _ + +
    If you lose 0.2Kg overnight, your spouse probably won’t notice. Lose 50 kg and I can guarantee they would
    + +If you lose 50kgs in weight over 6 months, your spouse is only going to notice when you buy a new shirt that’s 2 sizes smaller or notice a change in your muscle when you get out of the shower. A friend you meet up with once a year is going to see a huge change because last time they saw you you were twice the size. In this day and age, technology moves on so quickly in tiny increments that we don’t notice the huge changes any more because we’re like the spouse – we constantly see the tiny changes. + +What if we did see huge changes? What if we could cut ourselves off from the world for months at a time? If you went back in time to 1982 and told them that every day you talk to your phone using just your voice and it is able to tell you about your schedule and what restaurant to go to, would anyone question that what you describe is AI? If you told someone from 1995 that you can [buy a self driving car][5] via a small glass tablet you carry around in your pocket, are they not going to wonder at the world that we live in? We have come a long long way and we take it for granted. Most of us use AI on a day to day basis without even questioning it. + +Another common criticism of current weak AI models is the exact lack of general reasoning skills that would make them strong AI. + +> DEEPMIND HAS SURPASSED the human mind on the Go board. Watson has crushed America’s trivia gods on _Jeopardy_. But ask DeepMind to play Monopoly or Watson to play _Family Feud_, and they won’t even know where to start. + +That’s absolutely true. The AI/compsci definition of this constraint is the “no free lunch for optimisation” theorem. That is that you don’t get something for nothing when you train a machine learning model. In training a weak AI model for a specific task, you are necessarily hampering its ability to perform well at other tasks. I guess a human analogy would be the education system. + +
    If you took away my laptop and told me to run cancer screening tests in a lab, I would look like this
    + +Aged 14 in a high school in the UK, I was asked which 11 GCSEs I wanted to take. At 16 I had to reduce this scope to 5 A levels, aged 18 I was asked to specify a single degree and aged 21 I had to decide which tiny part of AI/Robotics (which I’d studied at degree level) I wanted to specialise in at PhD level. Now that I’m half way through a PhD in Natural Language Processing in my late 20s, would you suddenly turn around and say “actually you’re not intelligent because if I asked you to diagnose lung cancer in a child you wouldn’t be able to”? Does what I’ve achieved become irrelevant and pale against that which I cannot achieve? I do not believe that any reasonable person would make this argument. + +The AI Singularity has not happened yet and it’s definitely a few years away. However, does that detract from what we have achieved so far? No. No it does not. + +  + + [1]: https://www.wired.com/2016/12/artificial-intelligence-artificial-intelligent/ + [2]: https://en.wikipedia.org/wiki/Brain_in_a_vat + [3]: https://en.wikipedia.org/wiki/Do_Androids_Dream_of_Electric_Sheep%3F + [4]: https://www.top500.org/news/watson-proving-better-than-doctors-in-diagnosing-cancer/ + [5]: https://www.tesla.com/en_GB/models \ No newline at end of file diff --git a/brainsteam/content/posts/2016-12-10-timetrack-improvements.md b/brainsteam/content/posts/2016-12-10-timetrack-improvements.md new file mode 100644 index 0000000..eb6437b --- /dev/null +++ b/brainsteam/content/posts/2016-12-10-timetrack-improvements.md @@ -0,0 +1,23 @@ +--- +title: timetrack improvements +author: James +type: post +date: 2016-12-10T09:33:41+00:00 +url: /2016/12/10/timetrack-improvements/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Open Source + - PhD +tags: + - python + - timetrack + +--- +I’ve just added a couple of improvements to timetrack that allow you to append to existing time recordings (either with an amount like 15m or using live to time additional minutes spent and append them). + +You can also remove entries using timetrack rm instead of remove – saving keystrokes is what programming is all about. + +You can find the [updated code over at github.][1] + + [1]: https://github.com/ravenscroftj/timetrack \ No newline at end of file diff --git a/brainsteam/content/posts/2017-06-05-exploring-web-archive-data-cdx-files.md b/brainsteam/content/posts/2017-06-05-exploring-web-archive-data-cdx-files.md new file mode 100644 index 0000000..1fc49e9 --- /dev/null +++ b/brainsteam/content/posts/2017-06-05-exploring-web-archive-data-cdx-files.md @@ -0,0 +1,114 @@ +--- +title: Exploring Web Archive Data – CDX Files +author: James +type: post +date: 2017-06-05T07:24:22+00:00 +url: /2017/06/05/exploring-web-archive-data-cdx-files/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - PhD +tags: + - cdx + - python + - webarchive + +--- +I have recently been working in partnership with [UK Web Archive][1] in order to identify and parse large amounts of historic news data for an NLP task that I will blog about in the future. The NLP portion of this task will surely present its own challenges, but for now there is the small matter of identifying news data amongst the noise of 60TB of [web archive dumps of the rest of the .UK top level domain.][1] + +## WARC and CDX Files + +The web archive project have produced standardized file formats for describing historic web resources in a compressed archive. The website is scraped and the content is stored chronologically in a [WARC][2] file. A CDX index file is also produced describing every URL scraped, the time it was retrieved at and which WARC file the content is in, along with some other metadata. + +Our first task is to identify news content in order to narrow down our search to a subset of WARC files (in order not to fill 60TB of storage or have to traverse that amount of data). The CDX files allow us to do this. These files are available for [free download from the Web Archive website.][3] They are compressed using Gzip compression down to around 10-20GB per file. If you try to expand these files locally, you’re looking at 60-120GB of uncompressed data – a great way to fill up your hard drive. + +## Processing Huge Gzip Files + +Ideally we want to explore these files without having to uncompress them explicitly. This is possible using Python 3’s gzip module but it took me a long time to find the right options. + +Python file i/o typically allows you to read a file in line by line. If you have a text file, you can iterate over the lines using something like the following: + +
    with open("my_text_file.txt", "r") as f:
    +    for line in f:
    +        print(line)
    +
    + +Now clearly trying this approach with a .gz file isn’t going to work. Using the [gzip][4] module we can open and uncompress gz as a stream – examining parts of the file in memory and discarding data that we’ve already seen. This is the most efficient way of dealing with a file of this magnitude that won’t fit into RAM on a modern machine and would will a hard drive uncompressed. + +I tried a number of approaches using the gzip library, trying to run the gzip command line utility using [subprocess][5] and combinations of [TextIOWrapper][6] and [BufferedReader][7] but to no avail. + +## The Solution + +The solution is actually incredibly simple in Python 3 and I wasn’t far off the money with [TextIOWrapper.][6] The gzip library offers a file read/write flag for accessing gzipped text in a buffered line-by-line fashion as above for the uncompressed text file. Simply passing in “rt” to the gzip.open() function will wrap the input stream from Gzip in a TextIOWrapper and allow you to read the file line by line. + +
    import gzip
    +
    +with gzip.open("2012.cdx.gz","rt") as gzipped:
    +
    +    for i,line in enumerate(gzipped):
    +        print(line)
    +        # stop this thing running off and printing the whole file.
    +        if i == 10: 
    +            break
    + +If you’re using an older version of Python (2.7 for example) or you would prefer to see what’s going on beneath the covers here explicitly, you can also use the following code: + +
    import io
    +import gzip
    +
    +with io.TextIOWrapper(gzip.open("2012.cdx.gz","r")) as gzipped:
    +    
    +    for i,line in enumerate(gzipped):
    +        print(line)
    +        # stop this thing running off and printing the whole file.
    +        if i == 10:
    +            break
    + +And its as simple as that. You can now start to break down each line in the file using tools like [urllib][8] to identify content stored in the archive from domains of interest. + +## Solving a problem + +We may want to understand how much content is available in the archive for a given Domain. To put this another way, which are the domains with the most pages that we have stored in the web archive. In order to answer this, we can run a simple script that parses all of the URLs, examines the domain name and counts instances of each. + +
    import io
    +import gzip
    +from collections import Counter
    +from urllib.parse import urlparse
    +
    +with gzip.open("2012.cdx.gz","rt") as gzipped:
    +
    +
    +    for i,line in enumerate(gzipped):
    +        
    +        parts = line.split(" ")
    +        
    +        urlbits = urlparse(parts[2])
    +        
    +        urlcounter[urlbits.netloc] += 1
    +
    +#at the end we print out the top 10 URLs
    +print(urlcounter.most_common(10))
    + +Just to quickly explain what is going on here: + + 1. We load up the CDX file in compressed text mode as described above + 2. We split each line using space characters. This gives us an array of fields, the order and content of which are described by the WebArchive team [here.][3] + 3. We parse the URL (which is at index 2) using the [urlparse][9] function which will break the URL up into things like domain, protocol (HTTP/HTTPS), path, query, fragment. + 4. We increment the counter for the current domain (described in the ‘netloc’ field of the parsed url. + 5. After iterating we print out the domains with the most URLs in the CDX file. + +This will take a long time to complete since we’re iterating over ~60TB of text. I intend to investigate parallel processing of these CDX files as a next step. + +## Conclusion + +We’ve looked into how to dynamically unzip and examine a CDX file in order to understand which domains host the most content. The next step is to identify which WARC files are of interest and request access to them from the Web Archive. + + [1]: https://www.webarchive.org.uk/ukwa/ + [2]: http://commoncrawl.org/2014/04/navigating-the-warc-file-format/ + [3]: http://data.webarchive.org.uk/opendata/ukwa.ds.2/cdx/ + [4]: https://docs.python.org/3.6/library/gzip.html + [5]: https://docs.python.org/3/library/subprocess.html + [6]: https://docs.python.org/3/library/io.html#io.TextIOWrapper + [7]: https://docs.python.org/3/library/io.html#io.BufferedReader + [8]: https://docs.python.org/3/library/urllib.html + [9]: https://docs.python.org/3/library/urllib.parse.html \ No newline at end of file diff --git a/brainsteam/content/posts/2017-07-25-dialect-sensitive-topic-models.md b/brainsteam/content/posts/2017-07-25-dialect-sensitive-topic-models.md new file mode 100644 index 0000000..25e33f6 --- /dev/null +++ b/brainsteam/content/posts/2017-07-25-dialect-sensitive-topic-models.md @@ -0,0 +1,100 @@ +--- +title: Dialect Sensitive Topic Models +author: James +type: post +date: 2017-07-25T11:02:42+00:00 +url: /2017/07/25/dialect-sensitive-topic-models/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Open Source + - PhD +tags: + - lda + - machine learning + - python + - topic model + +--- +As part of my PhD I’m currently interested in topic models that can take into account the dialect of the writing. That is, how can we build a model that can compare topics discussed in different dialectical styles, such as scientific papers versus newspaper articles. If you’re new to the concept of topic modelling then [this article][1] can give you a quick primer. + +## Vanilla LDA + +
    A diagram of how latent variables in LDA model are connected
    + +Vanilla topic models such as [Blei’s LDA][2] are great but start to fall down when the wording around one particular concept varies too much. In a scientific paper you might expect to find words like “gastroenteritis”, “stomach” and “virus” whereas in newspapers discussing the same topic you might find “tummy”, “sick” and “bug”.  A vanilla LDA implementation might struggle to understand that these concepts are linked unless the contextual information around the words is similar (e.g. both articles have “uncooked meat” and “symptoms last 24 hours”). + +  + +We define a set of toy documents that have 3 main topics around sickness and also around health and going to the gym. Half of the documents are written in “layman’s” english and the other half “scientific” english. The documents are shown below + +
    doc1 = ["tummy", "ache", "bad", "food","poisoning", "sick"]
    +doc2 = ["pulled","muscle","gym","workout","exercise", "cardio"]
    +doc3 = ["diet", "exercise", "carbs", "protein", "food","health"]
    +doc4 = ["stomach", "muscle", "ache", "food", "poisoning", "vomit", "nausea"]
    +doc5 = ["muscle", "aerobic", "exercise", "cardiovascular", "calories"]
    +doc6 = ["carbohydrates", "diet", "food", "ketogenic", "protein", "calories"]
    +doc7 = ["gym", "food", "gainz", "protein", "cardio", "muscle"]
    +doc8 = ["stomach","crunches", "muscle", "ache", "protein"]
    +doc9 = ["gastroenteritis", "stomach", "vomit", "nausea", "dehydrated"]
    +doc10 = ["dehydrated", "water", "exercise", "cardiovascular"]
    +doc11 = ['drink', 'water', 'daily','diet', 'health']
    + +Using a normal implementation of LDA with 3 topics, we get the following results after 30 iterations: + +
    Vanilla LDA results
    + +It is fair to say that Vanilla LDA didn’t do a terrible job but it did make end up with some strange decisions like putting poisoning (as in ‘food poisoning’ in with cardio and calories). The other two topics seem fairly consistent and sensible. + +  + +## DiaTM + +Crain et al. 2010 paper [_**“Dialect topic modeling for improved consumer medical**_ search.”][3] proposes a modified LDA that they call “DiaTM”. + +
    A diagram showing how the latent variables in DiaTM are linked together
    + +DiaTM works in the same way as LDA but also introduces the concept of collections and dialects. A collection defines a set of documents from the same source or written with a similar dialect – you can imagine having a collection of newspaper articles and a collection of scientific papers for example. Dialects are a bit like topics – each word is effectively “generated” from a dialect and the probability of a dialect being used is defined at collection level. + +The handy thing is that words have a probability of appearing in every dialect which is learned by the model. This means that words common to all dialects (such as ‘diet’ or ‘food’) can weighted as such in the model. + +Running DiaTM on the same corpus as above yields the following results: + +
    Results of DiaTM on the sickness/exercise corpus
    + +You can see how the model has effectively identified the three key topics in the documents above but has also segmented the topics by dialect. Topic 2 is mainly concerned with food poisoning and sickness. In dialect 0 the words “sick” and “bad” appear but in dialect 1 the words “vomit” and “gastroenteritis” appear. + +## Open Source Implementation + +I have tried to turn my experiment into a Python library that others can make use of. It is currently early stage and a little slow but it works. The code is [available here][4] and pull requests are very welcome. + +The library offers a ‘Scikit-Learn-like’ interface where you fit the model to your data like so: + +
    doc1 = ["tummy", "ache", "bad", "food","poisoning", "sick"] 
    +doc2 = ["pulled","muscle","gym","workout","exercise", "cardio"] 
    +doc3 = ["diet", "exercise", "carbs", "protein", "food","health"] 
    +doc4 = ["stomach", "muscle", "ache", "food", "poisoning", "vomit", "nausea"] 
    +doc5 = ["muscle", "aerobic", "exercise", "cardiovascular", "calories"] 
    +doc6 = ["carbohydrates", "diet", "food", "ketogenic", "protein", "calories"] 
    +doc7 = ["gym", "food", "gainz", "protein", "cardio", "muscle"] 
    +doc8 = ["stomach","crunches", "muscle", "ache", "protein"] 
    +doc9 = ["gastroenteritis", "stomach", "vomit", "nausea", "dehydrated"] 
    +doc10 = ["dehydrated", "water", "exercise", "cardiovascular"] 
    +doc11 = ['drink', 'water', 'daily','diet', 'health']
    +
    +collection1 = [doc1,doc2,doc3, doc7, doc11]
    +# 'scientific' documents
    +collection2 = [doc4,doc5,doc6, doc8, doc9, doc10]
    +
    +collections = [collection1, collection2]
    +
    +dtm = DiaTM(n_topic=3, n_dialects=2)
    +dtm.fit(X)
    +
    + +Fitting the model to new documents using transform() will be available soon as will finding the log probability of the current model parameters. + + [1]: http://www.kdnuggets.com/2016/07/text-mining-101-topic-modeling.html + [2]: http://dl.acm.org/citation.cfm?id=2133826 + [3]: http://www.ncbi.nlm.nih.gov/pubmed/21346955 + [4]: https://github.com/ravenscroftj/diatm \ No newline at end of file diff --git a/brainsteam/content/posts/2017-08-03-182.md b/brainsteam/content/posts/2017-08-03-182.md new file mode 100644 index 0000000..bdd7060 --- /dev/null +++ b/brainsteam/content/posts/2017-08-03-182.md @@ -0,0 +1,266 @@ +--- +title: Why I keep going back to Evernote +author: James +type: post +date: 2017-08-03T08:27:53+00:00 +url: /2017/08/03/182/ +featured_image: /wp-content/uploads/2017/08/cahier-spirale-825x510.png +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"5ce618eb3174";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:139:"https://medium.com/@jamesravey/as-the-cto-for-a-london-machine-learning-startup-and-a-phd-student-at-warwick-institute-for-the-5ce618eb3174";}' +categories: + - PhD + - Work +tags: + - evernote + - filament + - knowledge management + - markdown + - phd + +--- +
    + As the CTO for a London machine learning startup and a PhD student at Warwick Institute for the Science of Cities, to say I’m busy is an understatement. +
    + +
    +
    + +
    + At any given point in time, my mind is awash with hundreds of ideas around Filament tech strategy, a cool app I’d like to build, ways to measure scientific impact, wondering what the name of that new song I heard on the radio was or some combination thereof. +
    + +
    +
    + +
    + To be effective at my job (and to stay sane in general), I really have to stay on top of what I know and how I manage my knowledge. My brain just doesn’t have enough room for everything I need to know and I’ll be the first to admit that I’m one of those stereotypical absent minded academic types, like Harry Hill’s portrayal of Professor BraneStawm. That’s why I spend so much time trying trying to perfect the art of building a “second brain”. +
    + +
    +
    + +
    + There are so many different ways I could be keeping my notes but they all have their flaws. That’s why I keep coming back to Evernote. It is certainly not amazing, it just happens to be the best of a bad lot. Here are some strategies I’ve tried and why they failed. +
    + +
    +
    + +## Approach 1: Keeping paper notebooks + +
    + I love stationary. There’s nothing quite like writing your name on the front page of a brand new moleskin notebook. I accumulate notebooks like some kind of eccentric collector. Last count I had something like 28 of them under my desk. The sad thing is that most of them are at about 25% usage if that. I am well aware of how wasteful that sounds because it is wasteful and I am kind of ashamed. Here’s the key problem though. Physical paper notebooks are easy to forget. +
    + +### Downside 1: Forgetting your notebook + +
    + As I said above, I’m a real stereotype absent minded professor type. As my girlfriend often tells me, and my parents many years before her, I’d forget my head if it wasn’t screwed on. Its a miracle I leave the house fully dressed with my wallet and my mobile phone. A miracle or years of conditioning and last minute “pat checks” anyway. +
    + +
    +
    + +
    + Joking aside, I am pretty well organised most of the time but every time I go through a physical notebook phase I really struggle to get into a routine of remembering to put my notebook in my bag on the way out of the door. +
    + +
    +
    + +### Downside 2: Practicality + +
    + If I am able to remember to bring it, it doesn’t take me long to run into obstacle number 2 to notebook adoption: practicality. I spent a great deal of times on busy London commuter trains. Extracting your notebook and pen from your satchel and having enough room to move your arms around when you’re packed like a sardine on the 8.05 to Waterloo is particularly difficult and even on the miraculous occasion when get a seat, there usually isn’t room to swing an amoeba, nevermind a cat. +
    + +
    +
    + +### Downside 3: Organising and Searching + +
    + Assuming I remember it and I have room to open it and read it, the next problem with a physical notebook is finding information in it. Given my two jobs and my general curiosity, I am always making notes, having ideas and context switching. If I carry only one physical notebook then organising things by idea or context becomes very difficult. I’ve tried a couple of approaches here: carrying a wedge of coloured sticky notes and sticking a different one to my notebook each time I context switch seems like a great idea until you realise it makes things even less practical and there are only so many colours. I also tried carrying different notebooks for different projects or even just 2: one for Filament and one for my PhD. Again this is not overly practical and if I can’t remember one, remembering 2 is even less likely. +
    + +
    +
    + +### Downside 4: Security and Backup + +
    + The last big flaw with paper is that it is easy to lose or steal and once its gone its gone. Say what you will about people snooping and hacking on the internet, at least I can’t leave “the cloud” on a train or in a restaurant. Again, thanks to years of conditioning, I am much less prone to leave big ticket items like mobile phones and laptops lying around in public places but even if I did, my devices are encrypted, password protected and enabled for remote wipe (assuming enough battery life and connectivity). You just can’t remote wipe a slither of tree. +
    + +
    +
    + +## Approach 2: Personal Wiki + +
    + While I was at Uni, a friend of mine started keeping a personal wiki which was locked down and only readable to them. I thought that was a great idea. An online notebook, accessible from anywhere. I’ve been keeping a personal wiki for years (off and on) using DokuWiki and I highly rate the software as wikis come. However, there are a couple of reasons I struggle with personal wiki maintenance. +
    + +### Downside 1: Connectivity + +
    + One of the biggest problems with the personal wiki approach is offline access. The trains I typically catch don’t have great wifi and even when I can get online, it is often very slow or patchy and unreliable. I have tried my hand at hosting dokuwiki on my laptop and using the XML-RPC sync plugin to mirror everything to my personal web server but the plugin (while amazingly and lovingly maintained by volunteers whose time I am incredibly grateful for) is not particularly reliable and I have sometimes lost notes using this process. I also can’t run a full LAMP stack on my phone which brings me to my next point… +
    + +
    +
    + +### Downside 2: Mobile Usability + +
    + When I’m crammed into a sardine tin or just want to make a quick 30 second note, the last thing I want to be doing is booting up my laptop to edit my personal wiki. Yes, I know I can edit my wiki from Chrome for Android and I have done on numerous occasions. However, I just don’t find the experience to be particularly pleasant or even practical. What dokuwiki et al are missing is a really good mobile app for making quick adjustments to content and ideally syncing sections of the wiki offline for reference on the go. +
    + +
    +
    + +### Downside 3: Dashboard or “making wikis sticky” + +
    + When I’m trying to build a new habit, what I really need is for whatever the tool I am trying to get used to to be in my face as much as possible. That’s one of the reasons dokuwiki on its own just isn’t sticky. Evernote is in your face on your desktop and phone and offers notifications. Physical notebooks are in your phase because they are physical books (if you remember to take them with you). Remembering to log into dokuwiki and read your todos is a bit like remembering to take your notebook in your bag. If its not muscle memory, it just doesn’t stick. +
    + +
    +
    + +## Approach 3: Markdown Notes + +
    +
    + +
    + Similarly to dokuwiki, I’ve been evangelised by techie friends who use markdown notes and dropbox or owncloud a few times. Its a great idea in principle – using open source markdown <-> html <-> pdf programs like pandoc to make my notes readable. Unfortunately markdown notes share a number of shortcomings with physical notebooks and personal wikis. +
    + +
    +
    + +
    + You’ll see from my below notes that my main gripe with this workflow is that it requires me to configure lots of different moving parts and write bespoke tools where existing open (or even paid) ones don’t do what I need. +
    + +
    +
    + +### Downside 1: Usability + +
    + Ok so I’m a geek and arguably I should just feel happy writing and maintaining my notes from the command line. The problem for me is that its not tremendously usable or “in your face” as I touched on above. I mean sure I love command lines as much as the next Linux power user, I do most of my development in vim and most of my source code management using git cli (as opposed to the GUIs that you can get for Eclipse and Atom etc). Personal knowledge management is one of the few places where I’d much rather just have an all in one tool that does everything I need and well than have to faff about with loads of moving parts and utilities. A few of cases where this is particularly poignant: +
    + +
    +
    + + 1. Searching for notes in evernote or dokuwiki is as easy as typing into a search box and hitting enter. Searching for notes in markdown requires me to read the grep man pages for the umpteenth time because I’ve forgotten which flag to set to turn on or off regex in the particular flavour I need. + 2. Inserting images into markdown notes is a pain because I need to download the image, place it in a folder relatively near to my content and add an image markup section to my code. My assets tend to get very fragmented in this case too because I might use the same image in multiple notes and end up storing multiple copies of it in different “assets” folders. There is a [really good atom plugin][1] for this that allows you to “paste” images in your clipboard buffer into your notes and will automatically save it to disk and generate a link. That one plugin, as good as it is, doesn’t solve all my other gripes though. + 3. Rendering my markdown is a pain – the Atom plugins for this are not perfect and due to different flavours of markdown and rendering engines, I can render the notes in one tool and find that they render completely different in another. The best combo I’ve found so far has been [Atom][2] + [Pandoc Markdown Plugin][3] + [Pandoc][4]. + +### Downside 2: Mobile Usability + +
    + Exactly the same problem as with personal wikis. There are no good apps for a holistic markdown-notes-based workflow for Android. Sure there are a few good markdown editors and the best one I’ve found is Epsilon notes. However, I need something that has a widget for my home screen and notifications and lights and bells and whistles to keep my absent minded academic brain on track. Epsilon is great if you remember to open it and check it (anyone else see a theme here?) but suffers from some of the same usability issues that desktop markdown editors do (inserting images etc).It is still great though, if you’re looking for a markdown editor for android and don’t have crazy demands like me, check them out! +
    + +## Major Common Downside: Web Clipper (or lack thereof) + +
    +
    + +
    + All of the approaches I’ve listed above are great in different ways and each has its own drawbacks but one thing that they are all missing is a good Web Clipper. A web clipper is typically a browser plugin or bookmarklet that allows you to save a web page’s content offline for reading later. Think of it like bookmarking on steroids. I suppose the real world simile would be instead of putting a bookmark in Game of Thrones when you put it down to go and have a cup of tea, you photocopy the whole chapter in case someone steals your copy of the book. This is super useful for me as I travel on the train a lot with no wifi but offers other amazing advantages too. For example, I can annotate/highlight and comment on content in the page directly and if the author of the original page takes their content down or forgets to pay their hosting bill, I can still read it. +
    + +
    +
    + +
    + Evernote are by no means the only people on the market with one of these babies. There are a few standalone tools that do this too and Microsoft’s impressive-but-lets-be-honest-less-usable-and-more-clunky Evernote competitor, OneNote has a web clipper too. The web clipper is an absolutely crucial part of my workflow and I’ve never found a replacement for Evernote’s implementation that is quite as good. Honestly, I could probably live without and overlook some of the other things I moaned about earlier in this post but web clipper really is the be-all-and-end-all feature that I am looking for in a knowledge management suite. +
    + +## Downsides of Evernote + +
    +
    + +
    + As I said at the beginning, I am not an evernote ‘fan boy’ and this is supposed to be a fair and representative posting. Therefore let’s talk about Evernote’s warts. +
    + +### Downside 1: Pricing Model + +
    + Look, I’m a professional, I know how much time and effort people put into software development and I am happy to pay for high quality products if they offer a genuine advantage to me. That’s why I think that for £30 a year for the ‘Plus’ option, Evernote is a steal. What I don’t like is the idea of artificially turning off some of the features just so that I drop another £20 for their ‘Premium’ tier. 1GB of storage per month? Fine! I only need that. 99% of the time I don’t need to scan business cards and to be perfectly honest, I can live without indexing text in pdfs too. However, those are all “nice to have” things that I’m not going to drop £20 for. I actually prefer Microsoft’s OneNote pricing model over Evernote’s. They don’t charge for the tooling, they charge for the disk space you’re using. +
    + +### Downside 2: No Math Markup + +
    + As a machine learning specialist, I spend a lot of time reading and writing mathematical formulae. Therefore it kind of sucks that Evernote still doesn’t have any support for math. I can write math in my paper notebooks (or anything else for that matter) and I can use MathJax in dokuwiki and LaTeX math syntax in markdown. I mean jeez, even OneNote has math formulae. If Evernote had maths markup I think it’d be pretty difficult to get me to leave their platform. +
    + +### Downside 3: The Cloud is just someone else’s computer + +
    + Perhaps one of the biggest drawbacks of Evernote (and OneNote) is that they both require you to trust that they are not doing naughty things with your data and I don’t. Call me what you will: conspiracy theorist, foil hat wearer – I can take it, I was chubby, spotty and wore thick glasses at high school, I can take it. However, the point still stands that if you are putting data in someone else’s “black box” then you either have to take their promises at face value or just assume that they can see everything you are sending. Evernote make all the right noises about securing your data against attackers and hackers and that’s good news but as a “tin foil hat wearing conspiracy theorist” I would rather just keep all my private data in my own private network. I would much rather pay a monthly license cost to run Evernote’s server stack software on my own hardware (yes I know running software compiled by someone else is scary but its still less scary than trusting them blindly with my data and I could always wireshark the machine its running on and see if its sending any mysterious packets back to the mothership). +
    + +
    +
    + +## So why \*do\* I keep going back? + +
    +
    + +
    + Despite all its flaws and warts, in terms of pricing, features and security, Evernote keeps enticing me back because: +
    + + 1. The user experience is great. The desktop app is clear and well designed, it works well and it does notifications and “in your face-ness” really well. + 2. It doesn’t let me forget it – kind of the same point as 1. but specifically Evernote stays front of mind and in a mind like mine, that’s a real feat. + 3. Mobile integration is really good and the Evernote android app is fantastic. + 4. The web clipper is so great on both desktop and mobile. I can glance at websites and “download” them for later then I can read them when I’m not busy – signal or not. + 5. While the pricing tiers are obnoxious, the Plus plan isn’t unreasonable given how much I spend on coffee. + +
    +
    + +## What would entice me away? + +
    + If the open source community rallied around dokuwiki or markdown to create a high quality web scraper and a decent mobile app I would SO be there. Or if ownCloud/NextCloud notes was a bit more mature and had these features. +
    + +
    +
    + +
    +
    + +## Concluding thoughts + +
    +
    + +
    + Evernote is by no means perfect and I have deep concerns about my personal data when I use it. However, it seems to be the best option for keeping me organised on a practical day-to-day level and that’s why I keep going back. Here’s hoping that we get some good open source alternatives in this space sooner rather than later. If anyone has any suggestions for alternatives I could try, I’d love to hear about them in the comments section. +
    + +
    +
    + +
    +
    + +
    +
    + + [1]: https://atom.io/packages/markdown-image-assistant + [2]: https://atom.io/ + [3]: https://atom.io/packages/search?q=pandoc + [4]: http://johnmacfarlane.net/pandoc/installing.html \ No newline at end of file diff --git a/brainsteam/content/posts/2017-08-06-.md b/brainsteam/content/posts/2017-08-06-.md new file mode 100644 index 0000000..4ec0d4a --- /dev/null +++ b/brainsteam/content/posts/2017-08-06-.md @@ -0,0 +1,68 @@ +--- +title: 'Cython: Some Top Tips' +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=191 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";N;}' +categories: + - Uncategorized + +--- +This week I’ve been using [Cython][1] to build “native” Python extensions. For the uninitiated, Cython is the secret love-child programming language of C and Python. A common misconception is that Cython is “an easy way for Python developers to write fast code using C”. Really using Cython requires familiarity with both Python and C and makes use of concepts from both languages. Therefore I’d highly recommend reading up on C a little bit before you start working on Cython code. + +During the last few days I’ve been running into some interesting problems and solving a few problems. I’m hoping that this blog post will provide much needed google results for those who don’t want to waste hours on these issues like I did. + +## Using Cython modules from Python + +Cython compiles into a binary library that can be loaded natively with an import statement. However, getting it compiled is the tricky bit. + +When you’re doing quick and dirty dev work and re-running your code to see if it will work every few minutes, I’d recommend making use of the _**pyximport**_ library that comes with Cython. This module makes importing cython libraries really convenient by wrapping the build process and making the import statement look for and build .pyx files. All you need to do to get it working is run: + +
    import pyximport; pyximport.install()
    + +Then you can literally just import your library. Imagine your Cython file is called test.pyx, you can just do: + +
    import test
    + +and off you go. + +If, like me, you’re a big fan of Jupyter notebooks and using importlib reload to bring in new versions of models you’re developing, Cython and pyximport offer a hack that supports this. When you import pyximport, add reload_support=True to the install function call to enable this. + +
    import pyximport; pyximport.install(reload_support=True)
    + +I found this to be very hacky and that reloading often failed with this method unless preceeded by another import statement. Something like this usually works: + +
    from importlib import reload
    +import test
    +reload(test)
    +
    + +## Optimising and Understanding Cython Code + +Remember that Cython code is first “re-written” or “transpiled” to C code and then is compiled to machine readable binary by your system’s C compiler. Well written C is still one of the fastest languages you can write an application in (but also complex and easy to cause a crash from). Since Python is an interpreted language that lives inside a virtual environment, each operation – such as adding together two numbers – actually translates to several C expressions. + +Well written Cython code can be compiled down to a small number of instructions but badly optimised Cython will just result in lines and lines of C code. In these cases, the benefit you’re going to be getting from having written the module in Cython is likely to be negligible over standard interpreted Python code. + +Cython comes with a handy tool which generates a HTML report showing how well optimised your code is. You can run it on your code by doing + +
    cython -a test.pyx
    + +What you should now have is a test.c file and a test.html file in the directory. IF you open the HTML file in the browser you’ll see your Cython code and yellow highlights. It’s pretty simple: the brighter/more intense the yellow colouring, the more likely it is that your code is interacting with normal Python objects rather than pure C ones and ergo the more likely it is that you can optimise that code and speed things up*. + +*Of course this isn’t always the case. In some cases you will want to be interacting with the Python world like in code that passes the output from a highly optimised C function back into the world of the Python interpreter so that it can be used by normal Python code. + +If you’re trying to squeeze loads of performance out of Cython, what you should be aiming for is to get to a point where all your variables have a C type (by using **cde****f** to declare them before you use them) and by only applying C operations and functions wherever possible. + +For example the code: + +
    i = 0
    +while i < 99:
    +    i += 1
    +
    + +will result in + + [1]: http://cython.org/ \ No newline at end of file diff --git a/brainsteam/content/posts/2017-08-11-machine-learning-and-hardware-requirements.md b/brainsteam/content/posts/2017-08-11-machine-learning-and-hardware-requirements.md new file mode 100644 index 0000000..86dfac8 --- /dev/null +++ b/brainsteam/content/posts/2017-08-11-machine-learning-and-hardware-requirements.md @@ -0,0 +1,87 @@ +--- +title: Machine Learning and Hardware Requirements +author: James +type: post +date: 2017-08-11T17:22:12+00:00 +draft: true +url: /?p=195 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"6e9abb882f26";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:86:"https://medium.com/@jamesravey/machine-learning-and-hardware-requirements-6e9abb882f26";}' +categories: + - Uncategorized + +--- +_**With recent advances in machine learning techniques, vendors like [Nvidia][1], [Intel][2], [AMD][3] and [IBM][3] are announcing hardware offerings specifically tailored around machine learning. In this post we examine the key differences between “traditional” software and machine learning software and why those differences necessitate a new type of hardware stack.**_ + +Most readers would certainly be forgiven for wondering why NVidia (NVDA on the stock market), a company that rose to prominence for manufacturing and distributing graphics processing chips to video games enthusiasts, are suddenly being mentioned in tandem with machine learning and AI products. You would also be forgiven for wondering why machine learning needs its own hardware at all. Surely a program is a program right? To understand how these things are connected, we need to talk a little bit about how software runs and the key differences between a procedural application that you’d run on your smart phone versus a deep neural network. + +## How Traditional (Procedural) Software Works + + 
    + +Cake by freephile
    An algorithm is a lot like a cake recipe
    + +You can think of software as a series of instructions. In fact, that’s all an algorithm is. A cooking recipe that tells you how to make a cake step-by-step is a real world example of an algorithm that you carry out by hand every day. + +Traditional software is very similar to a food recipe in principle. + + 1. First you define your variables (a recipe tells you what ingredients you need and how much you’ll need for each). + 2. Then you follow a series of instructions. (Measure out the flour, add it to the mixing bowl, measure out the sugar, add that to the bowl). + 3. Somewhere along the way you’re going to encounter conditions (mix in the butter until the mixture is smooth or whip the cream until it is stiff). + 4. At the end you produce a result (i.e. you present the cake to the birthday girl or boy). + +A traditional Central Processing Unit (CPU) that you’d find in your laptop, mobile phone or server is designed to process one instruction at a time. When you are baking a cake that’s fine because often the steps are dependent upon each other. You wouldn’t want to beat the eggs, put them in the oven and start pouring the flour all at the same time because that would make a huge mess. In the same way, it makes no sense to send each character in an email at the same time unless you want the recipient’s message to be garbled. + +## Parallel Processing and “Dual Core”
    + +Conveyor Belt by markroth8
    CPUs have been getting faster at processing like more and more efficient cake making production lines
    + +Over the last 2 decades, processing speed of CPUs has got faster and faster which effectively means that they are able to do more and more instructions one at a time. Imagine moving from one person making a cake to a machine that makes cakes on a conveyer belt. However, consumer computing has also become more and more demanding and with many homes globally connected to high speed internet, multitasking, running more than one application on your laptop at the same time or looking at multiple tabs in your browser, is becoming more and more common. + +Before Parallel Processing (machines that advertise being “dual core”, and more recently “quad core” and even “octo-core”), computers appeared to be running multiple applications at the same time by doing little bits of each of the applications and switching around. Continuing our cake analogy, this would be like putting a chocolate cake in the oven and then proceeding to mix the flour and eggs for a vanilla sponge all the time, periodically checking that the chocolate cake isn’t burning. + +Multi-processing (dual/quad/octo core) allows your computer really run multiple programs at the same time, rather than appearing to. This is because each chip has 2 (duo) 4 (quad) or 8 (octo) CPUs all working on the data at the same time. The cake analogy is that we now have 2 chefs or even 2 conveyer belt factory machines. + +## How [Deep] Neural Networks Work + +Neural Networks are modelled around how the human brain processes and understands information. Like a brain, they consist of neurons which get excited under certain circumstances like observing a particular word or picture and synapses which pass messages between neurons. Training a neural network is about strengthening and weakening the synapses that connect the neurons to manipulate which neurons get excited based on particular inputs. This is more or less how humans learn too! + +The thing about human thinking is that we don’t tend to process the things we see and hear in small chunks, one at a time, like a traditional processor would. We process a whole image in one go, or at least if feels that way right? Our brains do a huge amount of parallel processing. Each neuron in our retinas receives a small part of the light coming in through our eyes and through communication via the synapses connecting our brain cells, we assemble a single coherent image. + + + +Simulated neural networks work in the same way. In a model learning to recognise faces in an image, each neuron receives a small part of the picture – usually a single pixel – carries out some operation and passes the message along a synapse to the next neuron which carries out an operation. The calculations that each neuron makes is largely independent unless it is waiting for the output from a neuron the next layer up. That means that while it is possible to simulate a neural network on a single CPU, it is very inefficient because it has to calculate what each neuron’s verdict about it’s pixel is independently. It’s a bit like the end of the Eurovision song contest where each country is asked for its own vote over the course of about an hour. Or if you’re unfamiliar with our wonderful but[ obscure european talent contest][4], you could say its a bit like a government vote where each representative has to say “Yea” or “Ney” one after another. Even with a dual, quad or octo core machine, you can still only simulate a small number of neurons at a time. If only there was a way to do that… + +## Not Just for Gaming: Enter NVidia and GPUs + + 
    + +Video card by jhnri4
    GPUs with sporty go-faster stripes are quite common in the video gaming market.
    + +GPUs or Graphical Processing Units are microprocessors that were historically designed for running graphics-based workloads such as rendering 3D models in video games or animated movies like Toy Story or Shrek. Graphics workloads are also massively parallel in nature. + +An image on a computer is made up of a series of pixels. In order to generate a coherent image, a traditional single-core CPU has to calculate what colour each pixel should be one-by-one. When a modern (1280×1024) laptop screen is made up of 1310720 pixels – that’s 1.3 million pixels. If we’re watching a video, which usually runs at 30 frames per second, we’re looking at nearly 40 million pixels per second that have to be processed. That is a LOT of processing. If we’re playing a video game, then on top of this your CPU has to deal with all the maths that comes with running around a virtual environment and the behaviours and actions of the in-game characters. You can see how things could quickly add up and your machine grind to a halt. + +GPUs, unlike CPUs are made up of thousands – that’s right, not duo or octo but thousands of processing cores so that they can do a lot of that pixel rendering in parallel. The below video, which is also hosted on the [NVidia website,][5] gives an amusing example of the differences here. + +
    + +
    + +GPUs trade off their massively parallel nature with their speed at handling sequential functions. Back to the cake analogy, a GPU is more like having 10 thousand human chefs versus a CPU which is like having 2 to 8 cake-factory-conveyer-machines. This is why traditional CPUs remain relevant for running traditional workloads today. + +## GPUs and Neural Networks + +In the same way that thousands of cores in a GPU can be leveraged to render an image by rendering all of the pixels at the same time, a GPU can also be used to simulate a very large number of neurons in a neural network at the same time. This is why NVidia et al., formally famous for rendering cars and tracks in your favourite racing simulation to steering real self-driving cars via a simulated deep neural network. + +You don’t always need a GPU to run a Neural Network. When building a model, the training is the computationally expensive bit. This is where we expose the network to thousands of images and change the synapse weights according to whether the network provided the correct answer (e.,g. is this a picture of a face? Yes or no?). Once the network has been trained, the weights are frozen and typically the throughput of images is a lot lower. Therefore, it can sometimes be feasible to train your neural network on more expensive GPU hardware and then query or run it on cheaper commodity CPUs. Again, this all depends on the amount of usage that your model is going to be getting. + +## Final Thoughts + +In a world where machine learning and artificial intelligence software are transforming the way we use computers, the underlying hardware is also shifting. In order to stay relevant, organisations must understand the difference between CPU and GPU workloads and as they integrate machine learning and AI into their businesses, they need to make sure that they have the right hardware available to run these tasks effectively. + + [1]: http://www.nvidia.com/object/machine-learning.html + [2]: https://software.intel.com/en-us/ai-academy/training + [3]: https://medium.com/intuitionmachine/building-a-50-teraflops-amd-vega-deep-learning-box-for-under-3k-ebdd60d4a93c + [4]: https://www.youtube.com/watch?time_continue=45&v=hfjHJneVonE + [5]: http://www.nvidia.com/object/what-is-gpu-computing.html \ No newline at end of file diff --git a/brainsteam/content/posts/2017-11-12-spacy-spark-nlp-big.md b/brainsteam/content/posts/2017-11-12-spacy-spark-nlp-big.md new file mode 100644 index 0000000..2216d5e --- /dev/null +++ b/brainsteam/content/posts/2017-11-12-spacy-spark-nlp-big.md @@ -0,0 +1,71 @@ +--- +title: Spacy, Spark and BIG NLP +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=212 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";N;}' +categories: + - Uncategorized + +--- +Recently I have been working on a project that involves trawling full text newspaper articles from the JISC UK Web Domain Dataset – covering all websites with a .uk domain suffix from 1996 to 2013. As you can imagine, this task is pretty gargantuan and the archives themselves are over 27 Terabytes in size (that’s enough space to store 5000 high definition movies). + +I’ll be writing more about my work with the JISC dataset another time. This article focuses on getting started with Apache Spark and Spacy which has the potential to be a bit of a pain. + +## **Installing Spark + Hadoop ** + +Installing Spark + Hadoop is actually relatively easy. Apache ship tar balls for [Windows, Mac and Linux][1] which you can simply download and extract (on Mac and Linux I recommend extracting to /usr/local/spark as a sensible home. + +You’ll need Java and although Spark seems to ship with Python (in the bin folder you’ll find a script called pyspark which launches spark with a python 2.7 session and a SparkContext object already set up) I tend to use standalone Python and findspark which I’ll explain now. + +## FindSpark + +[findspark][2] is a python library for finding a spark installation and adding it to your PYTHONPATH during runtime. This means you can use your existing python install with a newly created Spark setup without any faff. + +Firstly run + +
    pip install findspark
    + +Then you’ll want to export SPARK_HOME environment variable so that findspark knows where to look for the libraries (if you don’t do this, you’ll get an error in your python session. + +
    export SPARK_HOME=/usr/local/spark
    + +Obviously you’ll want to change this if you’re working with a Spark install at a different location – just point it to the root directory of the Spark installation that you unzipped above. + +a pro-tip here is to actually add this line to your .bashrc or .profile files so that every time you start a new terminal instance, this information is already available. + +## Python and Findspark first steps + +If you did the above properly you can now launch python and start your first Spark job. + +Try running the following: + +import findspark<br /> +findspark.init()</p> +<p>import pyspark #if the above didn't work then you'll get an error here</p> +<p>from pyspark.sql import SQLContext</p> +<p>if <strong>name</strong> == "<strong>main</strong>":<br /> + """<br /> + Usage: pi [partitions]<br /> + """<br /> + sc = pyspark.SparkContext()<br /> + partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2<br /> + n = 100000 * partitions</p> +<pre><code>def f(_): + x = random() * 2 - 1 + y = random() * 2 - 1 + return 1 if x ** 2 + y ** 2 <= 1 else 0 + +count = sc.parallelize(range(1, n + 1), partitions).map(f).reduce(add) +print("Pi is roughly %f" % (4.0 * count / n)) + +sc.stop() + + + + + [1]: https://spark.apache.org/downloads.html + [2]: https://pypi.python.org/pypi/findspark \ No newline at end of file diff --git a/brainsteam/content/posts/2018-01-27-how-i-became-a-gopher.md b/brainsteam/content/posts/2018-01-27-how-i-became-a-gopher.md new file mode 100644 index 0000000..096d7a1 --- /dev/null +++ b/brainsteam/content/posts/2018-01-27-how-i-became-a-gopher.md @@ -0,0 +1,110 @@ +--- +title: How I became a gopher over christmas +author: James +type: post +date: 2018-01-27T10:09:34+00:00 +url: /2018/01/27/how-i-became-a-gopher/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"452cd617afb4";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:95:"https://medium.com/@jamesravey/how-i-became-a-gopher-and-learned-myself-an-angular-452cd617afb4";}' +categories: + - Uncategorized +tags: + - chatbots + - filament + - go + +--- +Happy new year to one and all. It’s been a while since I posted and life continues onwards at a crazy pace. I meant to publish this post just after Christmas but have only found time to sit down and write now. + +If anyone is wondering what’s with the crazy title – a gopher is someone who practices the Go programming language (just as those who write in Python refer to themselves as pythonistas. There’s an interesting list of labels that programmers self-assign [here][1] if you’re interested). + +Over Christmas I decided I was going to have a break from working as a [CTO][2] and a [PhD student][3] in order to do something relaxing. That’s why I thought I’d teach myself a new programming language. I also taught myself how to use Angular.js too but I’ll probably write about that separately. + +## Go Go Gadget… keyboard? + +First on my list is the Go programming language. I decided that I would spend 2 weeks over xmas (in between playing with my nintendo switch and of course spending time with my lovely fiancee and our families) building something useful and practical in the language because if there’s one thing I can’t stand its trying to learn to use a programming language by writing yet another [todo list.][4] + +
    Chatty Cathy – she’s still very much a work in progress
    + +At Filament, we are fast becoming one of the UK’s leading chat-bot providers, working with brands like T-Mobile and Hiscox insurance. We have an excellent team of chat-bot builders run by our very own Mr Chat-bot, [Rory][5] and supported by  a very stringent but also very manual QA process. I decided I was going to try and help the team work smarter by building a PoC chatbot testing framework. + +The general gist of my tool, named Chatty Cathy, is that I can “record” a conversation with a bot, go make some changes to the intents and flows and then “playback” my conversation to make sure the bot still responds in the way I’d like. + +## Why Go? + +
    Gophers are pretty cool!
    + +If you hadn’t gathered, I’m in to performance-sensitive compute applications: AI, statistical modelling, machine learning, natural language processing. All of these things need a lot of juice. We’re also in the business of writing large-scale web applications that serve these kinds of machine learning models to huge numbers of users. I love python and node.js as much as the next man but most machine learning applications that have interfaces in those languages are written in something low level (C or C++) and bound to these higher level languages for ease of use. I know that Go is still higher level than C or something like Rust* but it outperforms all of the interpreted languages and Java in the [Benchmark Games][6] and is very easy to learn (see below). It is this trade-off relatively-high-performance-versus-ease-of-use that has me so excited. + +*Incidentally I spent some time last year working in Rust and even though I loved it, found it very hard going  – I’ve been following [Julia Evans’ Ruby Profiler][7] project and it’s got me excited about Rust again so maybe I’ll dive back in some day soon. + +### Pros of Working with Go + +
  • +
      +
    • + Go-lang is like a pared down, simplistic dialect of C. You could also think about it as a much simplified Java spin off. +
    • +
    • + The build tool is amazingly simple to use. Everything is done based on filenames and locations. No more over-engineered pom.xml or package.json files. +
    • +
    • + Like Python and node.js, Go has a huge number of “batteries included” modules and functions available as part of its standard library. Web applications and JSON are first class citizens in Go-lang and you can build an app that serves up serialized json in ~30 lines of code. (compare that to the 300 lines of code you need just to define your POJOs and your DTOs in Java and you can already see why this is so awesome). +
    • +
    • + Also like Python and node.js Go has a brilliant ecosystem. One of the perks of coming into existence in the golden age of the internet I guess. Go’s build tool can automatically grab other projects from git repositories without needing a centralised server like pip/npm/maven which in my eyes makes it even more awesome (no more left pad chaos). +
    • +
    • + Unit testing is also a core part of the language and build tool. Simply adding some files to your library with the suffex _tests.go  running go test is all you need. +
    • +
    • + Go’s goroutine interface for parallelism is a super exciting feature. Again, having been designed very recently in the age of multi-core processors, the language treats multi-core processing as a first class citizen. Compared to Python which is held back from multi-processing bliss by the GIL and node.js which uses a single event loop. +
    • +
    • + Biggest pro: learning curve. For someone who’s written in any kind of imperative programming language before and has some level of understanding around pointers and referencing, Go is SOOO easy to pick up. I reckon the java developers at our company could be effective in Go within a week or less. (If you’re reading Rob, Max, Alex, that’s a challenge). It truly is like Java without the bulls***! +
    • +
    +
  • + +### Cons of working with Go + + * I still find workspaces kind of a strange concept. Instead of checking out one git project and popping it in your $HOME/workspace directory (yes this is a hangover from years of Eclipse development when I was back at big blue), code is stored hierarchically based on where you got it from. For example my workspace looks a bit like this: + +
    go
    +└── src
    + ├── github.com
    + │ ├── author1
    + │ │ └── project1
    + │ │ ├── LICENSE.txt
    + │ │ ├── README.md
    + │ │ ├── somefile.go
    + │ │ ├── more.go
    + │ ├── author2
    + │ │ └── project2
    + │ │ ├── LICENSE.txt
    + │ │ ├── README.md
    + │ │ ├── somefile.go
    + │ │ ├── more.go
    + +Basically, each project gets stored somewhere hierarchically in the tree and all dependencies of your project end up somewhere in here. This can make it a little bit confusing when you’re working on really large projects but then perhaps this is no more confusing than a python virtualenv or the node_modules directory of a mature node.js app and I’m being silly? + + * Some of the libraries are still a little bit immature. I don’t mean to be disparaging in any way towards the authors of these open source libraries that are doing a fantastic job for absolutely zero payment. However, a lot of the java tooling we use at work has been in development for 2 (in some cases nearly 3) decades and a lot of the crazier use cases I want to try and do are supported out of the box. + * I’m still not a massive fan of the way that [struct tag][8] syntax works. Again, perhaps this is because I am a programming luddite but I definitely prefer Java Annotations and Python Decorators a lot more. + +### Summary + +Go is a really exciting language for me personally but also for many of us still plagued by nightmarish visions of java boilerplate in our sleep. It has a fantastic ecosystem and first-class support for parallel programming and building web services via a really nice set of REST server libraries and JSON serialization libraries that are already built in. There are a few small issues that probably still need addressing but I’m sure they will come out in the wash. + +The most exciting thing for me is how well Go slots into the toolbox of any competent imperative language programmer (e.g. C, C++, Java, Python, Javascript, C#, PHP etc.). Whichever language you come from there are likely to be a few minor changes to get used to but the syntax and concepts are familiar enough that you can be up and running in no time at all! + +Is Go ready to be used in prime-time production-ready systems? I definitely think so but if you don’t believe me, why don’t you ask [the Docker Foundation?][9] + + [1]: https://gist.github.com/coolaj86/9256619 + [2]: http://filament.uk.com/ + [3]: https://www.wisc.warwick.ac.uk/people/student-profiles/2015-intake/james-ravenscroft/ + [4]: https://github.com/search?l=JavaScript&q=todo&type=Repositories&utf8=%E2%9C%93 + [5]: https://disruptionhub.com/whats-crappy-chatbots/ + [6]: http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=node + [7]: https://jvns.ca/blog/2017/12/02/taking-a-sabbatical-to-work-on-ruby-profiling-tools/ + [8]: https://golang.org/ref/spec#Tag + [9]: https://www.slideshare.net/jpetazzo/docker-and-go-why-did-we-decide-to-write-docker-in-go \ No newline at end of file diff --git a/brainsteam/content/posts/2018-01-27-ui-router-misery.md b/brainsteam/content/posts/2018-01-27-ui-router-misery.md new file mode 100644 index 0000000..04b2105 --- /dev/null +++ b/brainsteam/content/posts/2018-01-27-ui-router-misery.md @@ -0,0 +1,13 @@ +--- +title: Upgrading from legacy ui-router +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=231 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized + +--- diff --git a/brainsteam/content/posts/2018-03-21-re-using-machine-learning-models-and-the-no-free-lunch-theorem.md b/brainsteam/content/posts/2018-03-21-re-using-machine-learning-models-and-the-no-free-lunch-theorem.md new file mode 100644 index 0000000..b703024 --- /dev/null +++ b/brainsteam/content/posts/2018-03-21-re-using-machine-learning-models-and-the-no-free-lunch-theorem.md @@ -0,0 +1,133 @@ +--- +title: Re-using machine learning models and the “no free lunch” theorem +author: James +type: post +date: 2018-03-21T11:26:27+00:00 +url: /2018/03/21/re-using-machine-learning-models-and-the-no-free-lunch-theorem/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"dd5196577b34";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:106:"https://medium.com/@jamesravey/re-using-machine-learning-models-and-the-no-free-lunch-theorem-dd5196577b34";}' +categories: + - Uncategorized + +--- +## Why re-use machine learning models? + +
    +

    +

    Model re-use can be a huge cost saver when developing AI systems. But how well will your models perform in their new environment?
    +

    + +

    + You can get a lot of value out of training a machine learning model to solve a single use case, like predicting emotion in your customer chatbot transcripts and putting the angry ones through to real humans. However, you might be able to extract even more value out of your model by using it in more than one use case. You could use an emotion model to prioritise customer chat sessions but also to help monitor incoming email inquiries and social media channels too. A model can often be deployed across multiple channels and use cases with significantly less effort than creating a new, complete training set for each problem your business encounters. However there are some caveats that you should be aware of. In particular, the “No Free Lunch Theorem” which is concerned with the theoretical drawbacks of deploying a model across multiple use cases. +

    +
    + +## No free lunch? What has food got to do with it? + +
    + Anyone who’s familiar with Artificial Intelligence and Machine Learning should probably be familiar with the “No Free Lunch Theorem”. +
    + +
    +

    +

    You can’t get something for nothing but maybe you can get a massive discount!
    +

    +
    + +
    + The theorem, posited by David Wolpert in 1996 is based upon the adage “there’s no such thing as a free lunch”, referring to the idea that it is unusual or even impossible to to get something for nothing in life. Wolpert’s theorem states that no one machine learning model can be best for all problems. Another way of thinking about this is that there are no “silver bullets” in machine learning. A lot of the time when Filament consult on an ML problem we have to try a number of approaches depending on the type and quality of data we’re given to train the system as well as the sorts of output that our client is expecting. In traditional programming you can write an algorithm once and (assuming it is bug free) apply it to any number of new use cases. Hypothetically speaking, a good developer could build a bank accounting tool and deploy it for a bank in the UK and a bank in China with minimal changes. This is not necessarily the case in machine learning. +
    + +
    +
    + +
    + So what are the deeper implications of this theorem on modern machine learning use cases? According to Wolpert, there can be no guarantee that an algorithm trained on dataset A (10000 product reviews on amazon labelled with positive/negative sentiment) will work well on dataset B (1000 social media posts that mention your company,  also labelled with positive/negative sentiment). You could find that it works really well or you could find that it’s a flop. There’s just no theoretical way to know! That’s scary right? Well in practice, with sensible reasoning, evaluation and by using approaches to adapt models between use cases (known as  domain adaptation) maybe it’s not all that bad… +
    + +
    +
    + +## So No Free Lunch means I can’t reuse my models? + +
    +

    +

    A doctor knows how to operate on people but would need additional training to be able to work with animals.
    +

    + +

    + Not exactly. The theorem says that there’s no correlation between your model’s performance in its intended environment and its performance in a completely new environment. However, it doesn’t rule out the possibility of be correlations if we know the nature of the new problems and data. You can think about it in terms of human expertise and specialisation. Humans learn to specialise as they work their way through the education system.  A medical doctor and a veterinarian both go through extensive training in order to be able to carry out medical procedures on humans and animals respectively. A veterinarian might be excellent at operating on different species of animals. However, a veterinarian would not be able to operate on an injured human to the same level of professionalism as a medical doctor without some additional training. +

    +
    + +
    +
    + +
    + Intuitively, machines operate in a similar way. A model trained on sentiment in the context of customer inquiries will learn the vocabulary that customers use to describe how happy they are with the service they received from your company. Therefore it follows that you could deploy this model across a number of channels where customers are likely to communicate with your company. On the other hand, the language that a film critic uses when reviewing a movie is quite different to that of a customer complaining about their shopping experience. This means that your customer inquiries model probably shouldn’t be re-used for sentiment analysis in product reviews without some evaluation and potentially some domain adaptation.  A model trained to detect a person’s age from high-definition digital images might work well running in a phone app where the phone has a suitably high quality camera but may struggle with low quality images from webcams. +
    + +
    +
    + +## How do I know whether my model will work well for a new problem? + +
    + The first step in understanding the suitability of a model to a new domain is to try and understand how well the model performs on the new domain without any modification. We can build a small (but not too small) ground truth for our new domain and see how well the old model does at predicting the correct labels. +
    + +
    +
    + +
    + A good way to accelerate this process is to run your model on the new data and have humans mark the results like a teacher scores test results. As the number of possible labels in your model increases, the mental load of annotation increases. Asking the human “is this correct?” is a much easier task than making them label the data from scratch. Explosion.ai have some really good thoughts on data collection that suggest a similar viewpoint. +
    + +
    +
    + +
    + Once we have a dataset in the new domain we can measure accuracy, recall and precision and make a judgement on whether our old model is performing well enough that we want to simply deploy it into the new environment without modification. Of course, if we do choose to go down this path, it is still good practice to monitor your model’s performance over time and retrain it periodically on examples where classification failed. +
    + +
    +
    + +
    + If the model didn’t do well, we’ve got another trick up our sleeve. Domain adaptation. +
    + +
    +
    + +## What can domain adaptation do for model reuse? + +
    +

    +

    A communication block between teams working in imperial and metric measurements caused an expensive accident. Sometimes when the science is right but the language is wrong, all you need is a common dialect.
    +

    + +

    + On September 23rd, 1999, a $125 Million Mars lander burned up in orbit around the red planet, much to the dismay of the incredibly talented engineering teams who worked on it. The theory was sound. Diligent checks had been carried out. So why, then, had the mission gone up in flames? A review panel meeting showed that a miscommunication between teams working on the project was the cause. One set of engineers expressed  force in pounds, the other team preferred to use newtons. Neither group were wrong but this small miscommunication had everything grinding to a half.

    + +
    +
    + +
    + The point here is that the machine learning model that you trained for sentiment in one environment may not be that far off. It might just need “tweaking” to make it work well for the new domain. This exercise, known as “domain adaptation” is about mapping features (words) that help the classifier understand sentiment in one domain onto features (words) that help the it to understand the other domain. For example a model trained on reviews for mobile phones might learn to use negative words like “unresponsive, slow, outdated” but reviews for movies might use negative words like “cliched, dull, slow-moving”. This mapping of features is not an exact science but good mappings can be found using approaches like that of Glorot, Bordes and Bengio (2011). +
    + +

    + Conclusion +

    + +
    + Building machine learning models is a valuable but time consuming activity. It makes sense to build and reuse models where possible. However, it is important to be aware of the fact that models can become ultra-specialised at the task that they’re trained on and that some adaptation may be required to get them working in new environments.  We have given some tips for evaluating a model’s performance on new tasks as well as some guidance on when re-using a model in a new environment is appropriate. We have also introduced the concept of domain adaptation, sometimes referred to as “transfer learning” which allows your existing model to learn the “language” of the new problem space. +
    + +
    +
    + +
    + No Free Lunch theorem can sound pretty scary when it comes to model reuse. We can’t guarantee that a model will work in a new space given what we know about its performance on an existing problem. However,  using some of the skills and techniques discussed above, you can have a certain level of confidence that a model will work on a new problem and you can always “domain adapt” to make it better.  Ultimately the proof that these techniques are effective lies with suppliers like IBM, Microsoft and Google. These titans of tech have developed widely used and respected general models for families of problems that are relevant across many sectors for NLP, Voice Recognition and Image Processing. Some of them are static, some trainable (although ‘trainable’ often means domain-adaptation ready) but most of them work very well with little to no modification on a wide range of use cases. The most important thing is to do some due diligence around checking that they work for you and your business. +
    \ No newline at end of file diff --git a/brainsteam/content/posts/2018-04-05-.md b/brainsteam/content/posts/2018-04-05-.md new file mode 100644 index 0000000..42e3474 --- /dev/null +++ b/brainsteam/content/posts/2018-04-05-.md @@ -0,0 +1,16 @@ +--- +title: HarriGT and news coverage of science +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=255 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Uncategorized + +--- +A major theme of my PhD is around how scientific work is portrayed in the media. News articles that report on scientific papers serve a number of purposes for the research community. Firstly, they broadcast academic work to a much wider audience. + +A scientific paper’s purpose is to be read and understood by scientists, engineers and other specialists who are interested in reproducing, rebutting or building atop of the work (or heck, maybe they’re just curious and have a spare half hour). News articles are supposed to inform and entertain (a cynic might place the latter before the former) the general public with regard to current affairs. This difference in purpose and target audience can lead to news articles and scientific papers that refer to the same study but use very different vocabularies and writing styles. \ No newline at end of file diff --git a/brainsteam/content/posts/2018-04-05-phd-mini-sabbaticals.md b/brainsteam/content/posts/2018-04-05-phd-mini-sabbaticals.md new file mode 100644 index 0000000..c37f9a9 --- /dev/null +++ b/brainsteam/content/posts/2018-04-05-phd-mini-sabbaticals.md @@ -0,0 +1,34 @@ +--- +title: 'Part time PhD: Mini-Sabbaticals' +author: James +type: post +date: 2018-04-05T13:08:51+00:00 +url: /2018/04/05/phd-mini-sabbaticals/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"78e62379c12b";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:74:"https://medium.com/@jamesravey/part-time-phd-mini-sabbaticals-78e62379c12b";}' +categories: + - PhD +tags: + - phd + - productivity + - sabbatical + +--- +Avid readers amongst you will know that I’m currently in the third year of my PhD in Computational Linguistics at the University of Warwick  whilst also serving as CTO at [Filament][1]. An incredibly exciting pair of positions that certainly have their challenges and would be untenable without an incredibly supportive set of PhD supervisors ([Amanda Clare][2] and [Maria Liakata][3]) and an equally supportive and understanding pair of company directors ([Phil and Doug][4]). Of course I have to shout out to my fiancee Amy who also puts up with a lot when I’m stressed out or I have to work weekends. + +Until recently, I’d been working 3 days a week at Filament and 2 days a week (plus weekends where necessary) on my PhD. However I found that the context switching back and forth between my PhD and work life was incredibly disruptive and I was wasting a huge amount of time simply switching between projects. There’s a really good [article on human context switching][5] by Joel Spolsky that explains the harm it can cause. + +Just after Christmas, I had an idea (in no small part inspired by Julia Evans’ [rust sabbatical][6]). What if I could minimise context switching but maintain the same ratio of PhD to Work time? My plan was simple: work for Filament for 4 days a week, 4 weeks at a time. This still gives me at least day a week (sometimes I PhD on saturdays too) to focus on smaller tasks, read papers, reply to emails and usually get half a day of productive coding done. Then there’s the clever bit: every 5th week, I take a mini-sabbatical from Filament. I block out my calendar, turn on my email auto responder and mute slack. This means I can be super productive for a whole week and really get to grips with the more complex challenges of my PhD that take more than 1 or 2 days of focus.  From Filament’s point of view, this arrangement is better too. Instead of lots of sporadic, short term absences, everyone knows what my schedule is well in advance and we can plan around it. + +I was incredibly grateful to Phil and Doug who welcomed this idea and let me trial it for the first time at the end of Feburary when I was putting together a submission to ACL 2018 (paper’s in review, fingers crossed). The trial was a success as far as both parties were concerned and today I’m 4 days into my 2nd mini-sabbatical, having spent 3 very productive days on part of my current mini-project (details will be revealed soon)  and today getting organised and starting to figure out where I need to go next. + +It’s difficult to explain just how productive these mini-sabbs are compared to ad-hoc days off every week. I’ve decided that I’m going to start writing a blog summary each time I have a mini-sabb to remind myself just how much I can get done in a week of solid, focused PhD time. + +If you’re already doing a part-time PhD or considering it, finding the perfect balance between work, play and study is a tricky task. If you’re in a fortunate enough position to have a great working relationship with your company and your phd support staff (and make no mistake, I am aware how incredibly lucky I am in this respect), you might want to think about whether there’s a more efficient way to be splitting your time and if its feasible to give it a go! + + [1]: https://filament.ai/ + [2]: https://www.aber.ac.uk/en/cs/staff-list/staff_profiles/?login=afc + [3]: https://warwick.ac.uk/fac/sci/dcs/people/maria_liakata/ + [4]: https://filament.ai/about-us/ + [5]: https://www.joelonsoftware.com/2001/02/12/human-task-switches-considered-harmful/ + [6]: https://jvns.ca/blog/2017/12/02/taking-a-sabbatical-to-work-on-ruby-profiling-tools/ \ No newline at end of file diff --git a/brainsteam/content/posts/2018-04-13-programmatically-downloading-open-access-papers.md b/brainsteam/content/posts/2018-04-13-programmatically-downloading-open-access-papers.md new file mode 100644 index 0000000..325a423 --- /dev/null +++ b/brainsteam/content/posts/2018-04-13-programmatically-downloading-open-access-papers.md @@ -0,0 +1,31 @@ +--- +title: Programmatically Downloading Open Access Papers +author: James +type: post +date: 2018-04-13T16:04:47+00:00 +url: /2018/04/13/programmatically-downloading-open-access-papers/ +featured_image: /wp-content/uploads/2018/04/6216334720_54e29fc13c_o-825x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"9cbbb57ab932";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:91:"https://medium.com/@jamesravey/programmatically-downloading-open-access-papers-9cbbb57ab932";}' +categories: + - Open Source + - PhD +tags: + - open access + - scientific papers + - unpaywall + +--- +_(Cover image “Unlocked” by Sean Hobson)_ + +If you’re an academic or you’ve got an interest in reading scientific papers, you’ve probably run into paywalls that demand tens or even hundreds of £ just to read a scientific paper. It’s ok if you’re affiliated with a university that has access to that journal but it can sometimes be luck of the draw as to whether your institute has access and even if they do, sometimes the SAML login processes don’t work and you still can’t see the paper. Thankfully, the guys at[ Unpaywall][1] (actually built by [Impact Story][2]) have been doing a fantastic job of making open access papers much more easily available to interested academics in the browser. If you end up at a publisher paywall and Unpaywall know about a legitimate free copy of the paper you’re trying to read, they’ll link you straight to it for direct download. Problem solved. + +For me, as someone interested in text mining on large volumes of scientific papers, getting hold of high quality, peer reviewed open access papers that I can analyse can be a pain. I previously wrote about [downloading batches of papers from PLOS One][3] for data mining purposes but I’m currently interested in downloading papers that get mentioned and linked to in the news and although that can sometimes include PLOS journals, it also includes many other publishers, both open access and closed. Thankfully, Unpaywall come to the rescue again. + +Unpaywall.org provide a free API that takes in a DOI and spits out any and all known free versions of that paper. That makes my life a lot easier: all I have to do is find a long list of DOIs that I’m interested in analysing and run them through the API. + +I’ve provided a gist of the python function I’ve written that wraps this API. I’ve been using it in a Jupyter notebook (which I’m not ready to publish just yet). Feel free to use it in your project. It might save you an hour or two of development time (it took me a while to work out what errors I needed to try and catch). + + [1]: http://unpaywall.org/ + [2]: http://impactstory.org/ + [3]: https://papro.org.uk/2013/02/26/plosget-py/ \ No newline at end of file diff --git a/brainsteam/content/posts/2018-05-13-gpus-are-not-just-for-images-any-more.md b/brainsteam/content/posts/2018-05-13-gpus-are-not-just-for-images-any-more.md new file mode 100644 index 0000000..7f3d6c4 --- /dev/null +++ b/brainsteam/content/posts/2018-05-13-gpus-are-not-just-for-images-any-more.md @@ -0,0 +1,65 @@ +--- +title: GPUs are not just for images any more… +author: James +type: post +date: 2018-05-13T07:26:12+00:00 +url: /2018/05/13/gpus-are-not-just-for-images-any-more/ +featured_image: /wp-content/uploads/2018/05/Video-card-825x510.png +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"9ce53222d3c0";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";s:81:"https://medium.com/@jamesravey/gpus-are-not-just-for-images-any-more-9ce53222d3c0";}' +categories: + - Uncategorized +tags: + - gpu + - machine learning + +--- +As a machine learning professional specialising in computational linguistics (helping machines to extract meaning from human text), I have confused people on multiple occasions by suggesting that their document processing problem could be solved by neural networks trained using a Graphics Processing Unit (GPU). You’d be well within your rights to be confused. To the uninitiated what I just said was “Let’s solve this problem involving reading lots of text by building a system that runs on specialised computer chips designed specifically to render images at high speed”. + +### _**“In the age of the neural network, Graphics Processing Unit (GPU) is one of the biggest misnomers of our time.”**_ + +Well it turns out that GPUs are good for more than playing Doom in high definition or rendering the latest Pixar movie. GPUs are great for doing maths. As it happens, they’re great for the kind of maths needed for training neural networks and [other kinds][1] of [machine learning][2] [models][3]. So what I’m trying to say here is that in the age of the neural network, Graphics Processing Unit is one of the biggest misnomers of our time. Really they should be called “Tensor-based linear algebra acceleration unit” or something like that (this is probably why I’m a data scientist and not a marketer). + +## Where did GPUs come from? + +One of the earliest known uses of the term GPU is from a 1986 book called “Advances in Computer Graphics”.  Originally, GPUs were designed to speed up the process of rendering computer games to the user’s display. Traditional processor chips used for running your computer’s operating system and applications process one instruction at a time in sequence. Digital images are made up of thousands or millions of pixels in a grid format. Traditional CPUs have to render images by running calculations on each pixel, one at a time: row by row, column by column. GPUs accelerate this process by building an image in parallel. The below video explains the key difference here quite well: + +
    + +
    + +So I know what you’re thinking… “If GPUs are so magical and can do all this cool stuff in parallel, why don’t we just use them all the time instead of CPUS?” – am I right? + +Well here’s the thing… GPUs are specialised for high speed maths and CPUs are generalised for many tasks. That means that GPUS are actually pretty rubbish at a lot of things CPUs are good at – they’ve traded flexibility for speed. Let me try and explain with a metaphor. + +## The Patisserie Chef and the Cake Factory + +Let’s away from the computer for a second and take a few moments to think about a subject very close to my heart… food. + +  + + + +A patisserie chef is highly efficient at making yummy cakes and pastries to delight their customers. They can only really pay attention to one cake at a time but they can switch between tasks. For example, when their meringue is in the oven they can focus on icing a cake they left to cool earlier. Trained chefs are typically very flexible and talented and they can make many different recipes – switching between tasks when they get time. + +  + + + +At some point in history, [Mr Kipling][4] and [those guys who make twinkies][5] got so many orders that human bakers would never be able to keep up with demand. They had to add cake machines. A factory contains machines that spit out thousands of cakes in parallel. The key difference is that these machines are not flexible in the way that a human chef would be. What if we’re churning out a batch of 10,000 [french fancies][6] when we get a call to stop production and make [country slices][7] instead? Imagine how long it would take to go around and stop all the machines, put the new ingredients in and then start the process again! A human chef could just throw out the contents of their oven and get started on the new order right away! The factory probably can’t even handle doing lots of different jobs. I bet they have different machines for the different products or at the very least have to significantly alter the production line. In contrast, the patisserie chef can just change what they do with their hands! _**By the way, this post is not in any way sponsored by Hostess or Mr Kipling. I just like cake.**_ + +Did you spot the metaphor here? The slower but more flexible chef is a CPU – plodding along one order at a time, switching when he gets some availability. The cake factory is a GPU – designed to churn out thousands of similar things as quickly as possible at the cost of flexibility. This is why GPUs aren’t a one size fits all solution for all of our computing needs. + +## Conclusion + +Like I said earlier, GPUs are great at maths. They can be employed to draw really pretty pictures but they can also be used for all sorts of real world, mathematical operations where you need to run the same calculations on large batches of data. Training a neural network uses a lot of these streamlined mathematical operations regardless of whether they are trained to [detect cats,][8] play Go or [detect nouns, verbs and adjectives in text][9]. Using a trained neural network to make predictions is less computationally expensive but you might still benefit from running it on a GPU if you are trying to make a lot of predictions very quickly! + + [1]: https://devblogs.nvidia.com/gradient-boosting-decision-trees-xgboost-cuda/ + [2]: https://github.com/zeyiwen/thundersvm + [3]: https://github.com/vincentfpgarcia/kNN-CUDA + [4]: http://www.mrkipling.co.uk/ + [5]: http://hostesscakes.com/products + [6]: http://www.mrkipling.co.uk/range/favourites/french-fancies + [7]: http://www.mrkipling.co.uk/range/favourites/country-slices + [8]: https://medium.com/@curiousily/tensorflow-for-hackers-part-iii-convolutional-neural-networks-c077618e590b + [9]: https://ai.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html \ No newline at end of file diff --git a/brainsteam/content/posts/2018-06-29-.md b/brainsteam/content/posts/2018-06-29-.md new file mode 100644 index 0000000..915ea7f --- /dev/null +++ b/brainsteam/content/posts/2018-06-29-.md @@ -0,0 +1,14 @@ +--- +title: What next for AI in the UK? +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=287 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized + +--- +In light of the ever-evolving AI landscape globally and within the UK, last year the House of Lords in the UK formed a Select Committee who were appointed to assess the UK’s ability to support Artificial Intelligence in the near and medium term. They spent the best part of a year collecting evidence and speaking to experts in the field and myself and some colleagues were lucky enough to have some evidence accepted and taken into consideration. \ No newline at end of file diff --git a/brainsteam/content/posts/2018-08-31-.md b/brainsteam/content/posts/2018-08-31-.md new file mode 100644 index 0000000..ff3a490 --- /dev/null +++ b/brainsteam/content/posts/2018-08-31-.md @@ -0,0 +1,48 @@ +--- +title: 'Unhashing LSH: Addressing the gap between theory and practice' +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=308 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized + +--- +

    + I’ve recently been trying to become intimately familiar with how LSH works in theory and practice in order to solve some prickly comparison problems with O(n²) comparisons. +

    + +

    + For the uninitiated, LSH or Locally Sensitive Hashing is a method frequently used for “sketching” large data structures in a way that allows quick comparison and grouping of similar items without having to compare every item with every other item in the dataset. It’s often mentioned in the same breath as “the curse of dimensionality”: the problem of dealing with complex data structures like documents and images that must be represented in terms of the words or pixels that they contain which quickly add up and require enormous amounts of memory and compute time for processing. +

    + +

    + The literature on LSH is factually accurate and mathematically complete but at the same time it’s really hard going. At the other end of the spectrum are some incredibly helpful blog posts that tell you how LSH works in practice. This post aims to explain the connections between the two. +

    + +## Nearest-Neighbour (NN) Problem + +The nearest neighbour problem is the issue of finding data points or items “most similar” to a particular starting point or “query”. For example, we are building a music recommendation system and we know that the user likes song **q.   **We want to find artists similar to song **q** to recommend to the user. We can represent each song as a vector of their attributes – let’s say for simplicity that we’re using 3 dimensions on a scale 1-10: Tempo of music (slow to fast), Singer Pitch (deep to high) and Heaviness (Pop Rock to Death Metal). If you plot all of the song  in your catalogue in this way, the ones with a similar sound should end up clustered together.
    + +
    Steve Tyler, David Lee Roth and Freddie Mercury all have relatively high vices and Aerosmith, Queen and Van Halen are of a similar “heaviness” but but Aerosmith’s DWTMAT is a slow ballad compared to upbeat Jump and most of Boh-Rhap is speedy too.
    + +In order to find the nearest neighbours for a given data point, for example **q is “Van Halen – Jump” **– we have to loop over all items, find the [euclidean distance][1] between the points and then take the point with the smallest distance as the most similar, in this case, its Queen’s Boh-rhap! In this case there are 6 songs and therefore only 5 comparisons. What if we have a music library of millions of songs? That’s an awful lot of comparisons! + +It’s also reasonable to assume that we’d be interested in comparing more than 3 attributes of a song – we can’t render more than 3 dimensions on a diagram but as you can imagine if there are 1000 or even 10,000 attributes then working out the euclidean distance becomes much harder. How can we reduce the number of comparisons needed? + +## Approximate Nearest-Neighbour (NN) Problem + +In order to speed up the recommendation process, we need to artificially reduce the number of comparisons that our system has to make. What if we had some prior knowledge about which part of the feature space song **q** is in and chose only to compare it with other songs from that space? + +Drawing on from the example above, let’s imagine that we divide our space into two buckets: ‘rock’ and ‘metal’ – if we already know that Van Halen – Jump is a rock song then we can immediately discount Dragonforce, Slipknot and System of a Down as possible nearest neighbours and compare only with Aerosmith and Queen. + +You may have already noticed that there’s a catch here. We’re at risk of missing potential nearest neighbours that sit on the border of our divisions. Metallica – Nothing Else Matters is an unusually slow balladic number from the thrash metal heavyweights and many people who don’t otherwise like Metallica might enjoy it – especially if they like Aerosmith’s Don’t Wanna’ Miss a Thing and other pop-rock ballads. The trade-off here is one of speed versus accuracy. By drawing lines of division down through our collection, we reduce the number of comparisons we usually need to make but risk missing near neighbours that are “on the edge” in the process. We can somewhat address this problem that by dividing our collection up into buckets in a few different ways and checking a handful of them. For example Queen – Bohemian Rhapsody could belong to “singers with high voices” and “rock ballads”. + +  + +  + + [1]: https://en.wikipedia.org/wiki/Euclidean_distance \ No newline at end of file diff --git a/brainsteam/content/posts/2018-10-18-dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning.md b/brainsteam/content/posts/2018-10-18-dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning.md new file mode 100644 index 0000000..7a4b0c0 --- /dev/null +++ b/brainsteam/content/posts/2018-10-18-dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning.md @@ -0,0 +1,227 @@ +--- +title: 'Don’t forget your life jacket: the ‘dangers’ of diving in deep at the deep end with deep learning' +author: James +type: post +date: 2018-10-18T14:35:05+00:00 +url: /2018/10/18/dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning/ +featured_image: /wp-content/uploads/2018/10/livesaver-825x510.png +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"735db0cf9d14";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";s:137:"https://medium.com/@jamesravey/dont-forget-your-life-jacket-the-dangers-of-diving-in-deep-at-the-deep-end-with-deep-learning-735db0cf9d14";}' +categories: + - PhD + - Work +tags: + - deep learning + - filament + - machine learning + - neural networks + +--- +
    +

    + Deep Learning is a powerful technology but you might want to try some “shallow” approaches before you dive in. +

    +
    + +
    +

    +

    Neural networks are made up of neurones and synapses
    +

    + +

    + It’s unquestionable that over the last decade, deep learning has changed machine learning landscape for the better. Deep Neural Networks (DNNs), first popularised by Yan LeCunn, Yoshua Bengio and Geoffrey Hinton, are a family of machine learning models that are capable of learning to see and categorise objects, predict stock market trends, understand written text and even play video games.

    + +
    +
    + +
    +

    + Buzzwords like “LSTM” and “GAN” sound very cool but are they the right fit for purpose for your business problem? +

    +
    + +
    + Neural Networks are (very loosely) modelled on the human brain. A series of neurones that pass signals to each other through synapses. Given recent news about deep learning and AI, you’d be forgiven for thinking that Deep Learning can do anything and everything and make humans all but obsolete. However, there are still lots of things they can’t master.  Buzzwords like “LSTM” and “GAN” sound very cool but are they the right fit for purpose for your business problem? +
    + +
    +
    + +

    + Why is Training Data Important for Deep Learning? +

    + +
    + Neural Networks learn by backpropagation: this is an iterative process whereby the system makes a prediction and gets feedback about whether it was right or not. Over time and with many examples, the system is able to learn the correct answer by adjusting its internal model. It’s actually very similar to how children learn over time. Over time, an infant will learn to associate noises to sights. The more a parent says “Mummy” or “Daddy”, the more the child’s brain learns that these are important words. If the child points at their father and says “Mummy”, they will likely be corrected – “no that’s your Daddy” and over time they start to learn the correct association. +
    + +
    +
    + +
    +

    +

    machines learn by example – just like babies.
    +

    +
    + +
    +
    + +
    + The thing about neural network back-propagation (and human learning) is that it takes time and it takes lots of experience – just like human brains! Imagine if humans took everything we heard as the absolute truth the first time we heard it. We’d be a race stuck with some terrible, incorrect opinions and assumptions OR we’d flip-flop between different points of view as they are presented to us. We learn by sampling experiences from many different sources and trying to generalise across them. Babies need to hear “mummy” and “daddy” hundreds or even thousands of times before it starts to sink in that the noisy signals that their ears are receiving have some higher significance. It takes the average human 10-15 months to learn to walk and 18-36 months to learn to talk. We don’t just “pick things up” after one exposure to a concept, it takes our brains time to connect the dots and to understand correlations. The same is true of deep neural networks. This “thirst” for data and its associated drawbacks, like the need for huge amounts of compute power, can make deep learning the sub-optimal solution in a number of cases. +
    + +
    +
    + +
    + But never fear! Classical machine learning approaches like SVM, Random Decision Forest or Bayesian Classifiers may have fallen out of vogue but they often present a viable and appropriate solution in cases where “deep learning” won’t work. +
    + +
    +
    + +

    + Deep Learning or Classical Learning? +

    + +
    + Deciding whether to use deep learning ultimately comes down to a trade-off between how much data and compute power you can get your hands on vs how much time your engineers have to spend on the problem and how well they understand the problem. +
    + +

    + Most data scientists will prefer to KISS than to charge in with a deep learning model.  +

    + +
    +
    + +
    + Here are 3 rules of thumb for deciding whether to use deep learning or not. You should consider classical models if at least one of these is true: +
    + +
    +
    + +
      +
    1. +
      + You have an experienced data science team who understand feature engineering and the data they’re being asked to model or at the very least can get hold of people that understand the data. +
      +
    2. + +
    3. +
      + You don’t have access to GPUs and large amounts of compute power or hardware and computing power are at a premium +
      +
    4. + +
    5. +
      + You don’t have lots of data (i.e. you have 100 or 1000 examples rather than 100k or 1 million) +
      +
    6. +
    + +
    + Before we dive into those, I also have a rule zero: KISS – keep it simple stupid. Most data scientists will prefer to KISS than to charge in with a deep learning model. If you start with a classical model and don’t get the performance that you need, a neural network could be a great secondary avenue. Google’s data science community hold the same point of view. If you are considering DNNs then now’s the time to consider our other rules of thumb. +
    + +
    +
    + +
    +
    + +

    + 1: Data Scientists, Feature Engineering and Understanding the data +

    + +
    + Features are fundamental properties of data. Think of an apple: features include colour e.g. red/green/brown(eww), size and sweetness (granny smiths are bitter, golden delicious is sweet). In traditional machine learning, a huge amount of manual work is invested in feature engineering. The data scientist needs to understand a) the problem the model is trying to solve b) the data being fed into the system and c) the attributes or ‘features’ of that data that are relevant for solving the problem. For example a model that predicts house price may need to know about the number of bedrooms that the house has and the year that the house was built in but may not care about which way around the toilet roll holder was installed in the bathroom. The data scientist needs to tweak the data that the model receives, turning features on and off in order to generate the most accurate results. +
    + +

    + …a deep learning model may be able to learn features of the data that data scientists can’t but if a hand-engineered model gets you to 90% accuracy, is the extra data gathering and compute power worth it…? +

    + +
    +
    + +
    + Traditionally, feature engineering is a very manual process that requires experienced data scientists who understand the data and can make good inferences about how the model might react to data changes. Even with experienced data scientists, this activity can be more of an art than a science and often very time consuming. It is also really important that the data scientist understands the classifier’s purpose and is able to make good intuitions about which parts of the input might have a bigger effect on model accuracy. If the data scientist doesn’t have this information then they typically work very closely with a domain expert. For example, Filament doesn’t employ aerospace logistics specialists or private equity investors but we were able to create useful models for our clients by working collaboratively their teams of experts.  For some problems it is possible to guess the most effective features and use software to automatically tune the model iteratively. +
    + +
    +
    + +
    +

    +

    feature engineering is traditionally a very manual process
    +

    + +

    + Conversely, one of the most exciting things about “deep learning” is that these models are able to learn complex features for themselves over time. Just like a human brain slowly assigns meaning to the seemingly random photons that hit our retinas, deep networks are able to receive series of pixels from images and slowly learn which patterns of pixels are interesting or predictive. The caveat is that automatically deriving these features requires huge volumes of data to learn from (see point 3). Ultimately a deep learning model may be able to implicitly learn features of the data that human data scientists are unable to isolate but if a classical, hand-engineered model gets you to 90% accuracy, is the extra data gathering and compute power worth it for that 5-7% boost? +

    +
    + +
    +
    + +

    + 2. Compute Power Requirements  +

    + +
    + Deep learning models usually consist of a vast number of neurons and synapses connected together in layers stacked on top of each other (hence the ‘deep’). The more neurones, the more connections between them and the more calculations the neural network has to make during training and usage. Classical models are typically orders of magnitude simpler and thus much faster to train and use. DNNs are often so complex and resource intensive that they require special hardware  in order to train and run. +
    + +
    +
    + +
    +

    +

    Deep Neural Networks tend to rely on GPUs for their computational requirements
    +

    + +

    + It often makes sense to prefer simpler models in cases where compute resource is at a premium or even not available and where classical models give “good enough” accuracy. For example in an edge computing environment in a factory or in an anti-fraud solution at a retail bank where millions of transactions must be examined in real-time. It would either be impossible or obscenely expensive to run a complex deep learning model on millions of data records in real time. Or, it might not be practical to install a cluster of whirring servers into your working environment. On the other hand, if accuracy is what you need and you have lots of data then maybe its time to buy those GPUs… +

    +
    + +
    +
    + +

    + 3: Lack of data and difficulty gathering data +

    + +
    + One of the biggest challenges in supervised machine learning is gathering training data. In order to train a classification or regression model (deep neural network or otherwise) we need to have loads of examples of inputs and their desired matching outputs. For example “Here’s a picture of a cat, when you see it I want you to say ‘cat’”. I’ve previously written about some best practices for gathering these kinds of datasets. For a classical machine learning model you need to collect a few hundred or thousand examples of representative, consistent data points. +
    + +
    +
    + +
    + To train a deep learning model from scratch you need a lot, lot more. We’re not talking hundreds or even thousands. Academic state-of-the-art image recognition models like AlexNet are typically trained on millions of examples of images. NLP models for sentiment analysis and chatbots rely on word vectors trained on the entirety of wikipedia or Google News’ 3-billion-word news article corpus (thankfully word2vec is an unsupervised algorithm so you don’t need to manually annotate those billions of words but you do need to label documents for downstream tasks like sentiment analysis or topic classification). These are the sorts of datasets that only digital behemoths like Google and Facebook who collect millions of documents per day over many years are able to build and curate. +
    + +
    +
    + +
    + Recent benchmarks show that manually feature-engineered “classical” machine learning models like those mentioned above sometimes outperform deep learning systems where datasets are relatively small. In other cases, DNNs offer a slight uplift in performance of the order of a few percent. +
    + +
    +   +
    + +

    + Conclusion +

    + +
    + Deploying a machine learning product is a complex and multi-faceted problem with many trade-offs and decisions to be made. Deep Learning and DNNs are a very exciting family of technologies that truly are revolutionising the world around us but they’re not always the best approach to a machine learning problem. You should always consider the complexity of the problem you’re trying to solve, the amount of data you have, the human expertise and the compute power you have access to. If a simpler model works well then go with it and potentially plan to swap in a more complex deep learning model when you have enough data to make it worthwhile. Don’t use Deep Learning, Recurrent Networks, LSTMs, Convolutional Networks or GANS because its cool. Use them because simple methods didn’t work. Use them because manual feature engineering isn’t giving optimal results. Use them because even though your simple SVM model has been producing great results for the last 10 years, you think that the 10 million rows of data that you’ve collected could potentially feed a more powerful model that will increase performance by 30%. +
    \ No newline at end of file diff --git a/brainsteam/content/posts/2018-10-20-uploading-huge-files-to-gitea.md b/brainsteam/content/posts/2018-10-20-uploading-huge-files-to-gitea.md new file mode 100644 index 0000000..21f06f8 --- /dev/null +++ b/brainsteam/content/posts/2018-10-20-uploading-huge-files-to-gitea.md @@ -0,0 +1,39 @@ +--- +title: Uploading HUGE files to Gitea +author: James +type: post +date: 2018-10-20T10:09:41+00:00 +url: /2018/10/20/uploading-huge-files-to-gitea/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - PhD + - Work +tags: + - devops + - docker + - git + - lfs + +--- +I recently stumbled upon and fell in love with [Gitea][1] – a lightweight self-hosted Github and Gitlab alternative written in the Go programming language. One of my favourite things about it – other than the speed and efficiency that mean [you can even run it on a raspberry pi][2] – is the built in LFS support. For the unfamiliar, [LFS is a protocol initially introduced by GitHub][3] that allows users to version control large binary files – something that Git is traditionally pretty poor at. + +Some of my projects have huge datasets that I want to store somewhere safe and keep under version control. LFS is not perfect but it is a reasonable solution for this particular problem. + +When I installed Gitea I was initially disappointed that uploading large files to LFS seemed to result in errors. I was getting: + +
    api error: Authentication required: Authorization error: <REPO_URL>/info/lfs/objects/batch
    +Check that you have proper access to the repository
    +batch response: Authentication required: Authorization error: <REPO_URL>/info/lfs/objects/batch
    +Check that you have proper access to the repository
    + +Irritatingly I couldn’t find any references to this particular error message or documentation. But, I had a hunch that the authentication on the LFS upload was timing out because I was able to upload smaller files that don’t take as long to send. + +It turns out that this is exactly what was happening. When you push to a Gitea SSH repository, the server gives your local machine an authorization token that it can use to upload the LFS files. This token has an expiry time which defaults to 20 minutes in the future. If you’re uploading 5GB of data over 100Mb/down 10Mb/up DSL line then you’re gonna have a bad time… + +I had a dig through the Gitea github repository and came across an example [config file][4] which includes a variable called LFS\_HTTP\_AUTH_EXPIRY with a default value of 20m. In your gitea config file you can set this to 120m then you have 2 hours to get that file uploaded. Adjust as you see fit/require. + + [1]: https://gitea.io/en-us/ + [2]: https://pimylifeup.com/raspberry-pi-gitea/ + [3]: https://git-lfs.github.com/ + [4]: https://github.com/go-gitea/gitea/blob/master/custom/conf/app.ini.sample \ No newline at end of file diff --git a/brainsteam/content/posts/2018-11-07-why-is-tmux-crashing-on-start.md b/brainsteam/content/posts/2018-11-07-why-is-tmux-crashing-on-start.md new file mode 100644 index 0000000..9e149b3 --- /dev/null +++ b/brainsteam/content/posts/2018-11-07-why-is-tmux-crashing-on-start.md @@ -0,0 +1,25 @@ +--- +title: Why is Tmux crashing on start? +author: James +type: post +date: 2018-11-07T07:40:45+00:00 +url: /2018/11/07/why-is-tmux-crashing-on-start/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:4:"none";s:3:"url";N;}' +categories: + - Open Source +tags: + - linux + - script + - tmux + +--- +I spent several hours trying to get to the bottom of why tmux was crashing as soon as I ran it on Fedora. It turns out there’s a simple fix. When tmux starts it uses /dev/ptmx to create a new TTY (virtual terminal) that the user can interact with. If your user does not have permission to access this device then tmux will silently die. A good way to verify this is to try running [screen][1] too. + +In my case I realised that my user was not a member of the user group “tty” on my system. The answer was therefore simple: + +
    sudo usermod -a -G tty james
    + +I hope this helps someone avoid spending hours searching for the right incantation. + + [1]: https://en.wikipedia.org/wiki/GNU_Screen \ No newline at end of file diff --git a/brainsteam/content/posts/2018-12-09-🤐🤐can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks.md b/brainsteam/content/posts/2018-12-09-🤐🤐can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks.md new file mode 100644 index 0000000..57e6a9d --- /dev/null +++ b/brainsteam/content/posts/2018-12-09-🤐🤐can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks.md @@ -0,0 +1,121 @@ +--- +title: 🤐🤐Can Bots Keep Secrets? The Future of Chatbot Security and Conversational “Hacks” +author: James +type: post +date: 2018-12-09T10:36:34+00:00 +url: /2018/12/09/🤐🤐can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:3:"yes";s:2:"id";s:12:"8be78d43ff66";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";s:121:"https://medium.com/@jamesravey/can-bots-keep-secrets-the-future-of-chatbot-security-and-conversational-hacks-8be78d43ff66";}' +categories: + - Work +tags: + - bots + - chatbots + - nlu + - security + +--- +**As adoption of chatbots and conversational interfaces continues to grow, how will businesses keep their brand safe and their customer’s data safer?** + +From [deliberate infiltration of  systems][1] to[ bugs that cause accidental data leakage][2], these days, the exposure or loss of personal data is a large part of what occupies almost every self-respecting CIO’s mind. Especially since [the EU has just slapped its first defendant with a GDPR fine.][3] + +Over the last 10-15 years, through the rise of the “interactive” web and social media, many companies have learned the hard way about the importance of techniques like [hashing passwords][4] stored in databases and [sanitising user input before it is used for querying databases][5]. However as the use of chatbots continues to grow, conversational systems are almost certain to become an attractive method of attack for discerning hackers. + +In this article I’m going to talk about some different types of chatbot attacks that we might start to see and what could be done to prevent them. + +## Man in the Middle Attack + +In a man in the middle attack, the adversary intercepts traffic in between the many components that make up a chatbot. Baddies might be able to [inject something into a library][6] that your beautiful UX uses that logs everything that your user is saying or they might not need to change the code at all [if you are not using HTTPS][7].
    + +
    The chat interface on your device communicates (hopefully securely over HTTPS) with a server that the developer operates and may in term communicate with an external NLU provider. If someone was able to build a man-in-the-middle attack between any of these components it could be a big problem.
    + +These sorts of attacks are clearly a serious problem for any chatbot that will be talking to users about personal information. Even if your chatbot is designed to answer frequently asked questions without any specific link to personal accounts, vulnerability to this attack could give away personal information that the user has inadvertently shared (From “Do you have kids meals?” and “Do you deliver to Example Street” we can infer that the user has children and lives on Example Street).   + +### Mitigation + +Developers of chatbots should make sure that bots are using the [latest security standards][8] – at a minimum [all communication should be encrypted at the transport layer (e.g. HTTPS)][9] but you might also consider [encrypting the actual messages][10] before they are transmitted as well. If you’re reliant on external open source libraries then make sure you [regularly run security checks on your codebase][11] to make sure that those external libraries can be trusted. If you are deploying a bot in a commercial context then you should definitely have independent security/penetration testing of chatbots as a key part of your quality assurance process. + +## Exploitation of Third Party Services + +The chatbot has often been seen as the “silver bullet” for quickly acquiring usage. No longer do you need to build an app that users have to install on their devices, simply integrate with the platforms that people already use e.g. Facebook, Google Home, Alexa and others. However, it’s important to remember the security consequences of this approach, especially in use cases with sensitive personal information and high stakes if there was ever a data leak.
    + +
    Facebook, Alexa, WhatsApp, Telegram, Google Home and other bots use this pattern: your device communicates with the chat service you are engaging with which in turn sends messages back to your service via a “WebHook” + +
    + +In this scenario your bot’s security is heavily reliant on the security of the messaging platform that you deploy your system onto. For the most part,  these platforms typically have[ sensible security procedures][12]. However it’s important to consider that large companies and platforms are desirable targets for hackers due to the huge potential personal data pay off from a successful breach.  + +Of course it’s not just the “Messenger Platform” part of this system that’s of interest to attackers. The “External NLU provider” in our diagram above could also be the target of an attack and user utterances stolen. Remember that any external service, whilst useful in many use cases, should be regarded with a healthy scepticism where security is concerned. + +### Mitigation + +If you are building chatbots tied to third party platforms then you can try to mitigate risks by coding defensively and sharing information sparingly. For example, never have your chatbot ask the user for things like passwords or credit card numbers through one of these portals. Instead use your companion app or website to gather this information securely and tie the user’s Messenger ID to their user account within your infrastructure. + +When it comes to using external NLU a good practice is to run some [anonymisation, removing things like names, addresses, phone numbers etc,][13] on input utterances before passing them on to the service. You might also consider using on-premise NLU solutions so that chat utterances never have to leave your secure environment once they’ve been received. + +## Webhook Exploits + +When your bot relies on an external messaging platform as in the above scenario, the WebHook can be another point of weakness. If hackers can find the URL of your webhook then [they can probe it and they can send it messages][14] that look like they’re from the messaging platform.  + +### Mitigation + +Make sure that your webhook requires authentication and make sure that you follow the guidelines of whichever messenger platform you are using in order to authenticate all incoming messages. Never process messages that fail these checks.  + +## Unprotected Device Attacks + +Have you ever left your computer unlocked and gone to the water cooler? How about handing your mobile phone to a friend in order to make a call or look at a funny meme? Most people have done this at least once and if you haven’t, well done! + +You should [be prepared for opportunistic attackers posing as other users when using your chatbot][15]. They might ask probing questions in order to get the user’s information “What delivery address do you have for me again?” or “What credit card am I using?”  + +### Mitigation + +Remember to code and design defensively. Responding with something like “I’m sorry I don’t know that but you can find out by logging in to the secure preferences page [URL Here]” would be a relatively good response. + +Of course there’s not much you can do if the user leaves their passwords written down on a sticky note next to the terminal or leaves their password manager app unlocked but by requiring users log in to get access to sensitive personal info we’ve taken some sensible precautions. + +## Brand Poisoning Attacks {#mce_12} + +
    +
    Microsoft Tay is one of the most famous examples of a brand poisoning attack
    +
    + +User data and proprietary information are clearly a high priority but there are other risks to your chatbot that you should also be mindful of. An adversary could poison the way that your chatbot responds in order to screen capture it saying something controversial and start a defamation campaign, poisoning your brand and putting you in a sticky situation.  + +In March 2016, Microsoft brought online an experimental chatbot called “Tay” which was designed to learn to respond in new ways by interacting with its users over time. From a technical perspective, Tay was an incredible piece of kit combining state of the art Natural Language Processing with Online Machine Learning. However, the developers didn’t bank on swathes of twitter trolls poisoning Tay’s memory bank and [turning her into a Holocaust denying racist.][16] + +This attack was able to happen because of Tay’s state-of-the-art architecture that allowed her to learn over time and change her vocabulary and responses over time.  In 2018 most bots still  use a combination of intent detection and static rules in order to work out how to reply to users.  This means that most bots probably isn’t susceptible to this kind of attack.  + +
    +
    +
    + + However, there are still ways that this kind of attack can trip you up. It all hinges on how your bot reacts to abusive messages and whether it’s allowed to reiterate stuff that the user has said. + +Take the example conversation to the left here. It’s not exactly undeniable proof of wrongdoing by Joe’s Shoe Emporium but a well timed social media post or BuzzFeed article with “#NotADenial #BoycottJoes #ChildLabour” or could be enough to really do a number on Joe’s brand. + + + +## Mitigation + +So how can we avoid this kind of thing? Well a good start would be to check the user input for profanity as part of validation and then refuse to continue the conversation if things turn hairy. Think of this a bit like a real contact centre handler who has been trained to hang up the phone if the customer gets angry or aggressive. IBM advocate for [all chatbots being able to detect and react to profanity][17] and there’s a great post [here][18] about some approaches to doing that. Ultimately the way that your bot reacts to rude input – whether passive, humorous or a simple shut down – will depend on how you want your brand to come across. + +I’d advocate for “dealing with aggressive/subversive user interactions” being high on the chatbot QA team’s todo list. + + [1]: https://www.bbc.co.uk/news/technology-46401890 + [2]: https://www.eurogamer.net/articles/2018-12-06-bethesda-has-leaked-fallout-76-customer-names-addresses-contact-details + [3]: https://www.lexology.com/library/detail.aspx?g=d8d0c69a-620e-4f26-ab30-f44e270a0d2e + [4]: https://appleinsider.com/articles/18/05/03/twitter-urges-all-336m-users-to-reset-passwords-due-to-hashing-bug + [5]: https://nakedsecurity.sophos.com/2018/02/19/hackers-sentenced-for-sql-injections-that-cost-300-million/ + [6]: https://char.gd/recharged/daily/npm-as-an-attack-vector + [7]: https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https + [8]: https://chatbotsmagazine.com/5-tips-for-securing-conversational-apps-a-security-guide-to-the-innovative-cio-b55128e3bc89 + [9]: https://dev.to/chiangs/theres-no-excuse-not-to-have-ssl-anymore-76f + [10]: https://jwt.io/ + [11]: https://medium.com/intrinsic/common-node-js-attack-vectors-the-dangers-of-malicious-modules-863ae949e7e8 + [12]: https://cloud.google.com/security/ + [13]: https://medium.com/@dudsdu/named-entity-recognition-for-unstructured-documents-c325d47c7e3a + [14]: https://chatbotsmagazine.com/how-to-kill-a-bot-with-10-http-requests-ca7eb57c2ad1 + [15]: https://www.securityroundtable.org/chatbots-rage-something-risk/ + [16]: https://gizmodo.com/here-are-the-microsoft-twitter-bot-s-craziest-racist-ra-1766820160 + [17]: https://www.ibm.com/blogs/watson/2017/10/the-code-of-ethics-for-ai-and-chatbots-that-every-brand-should-follow/ + [18]: https://medium.com/@steve.worswick/the-curse-of-the-chatbot-users-b8af9e186d2e \ No newline at end of file diff --git a/brainsteam/content/posts/2019-01-06-applied-ai-in-2019.md b/brainsteam/content/posts/2019-01-06-applied-ai-in-2019.md new file mode 100644 index 0000000..8fb669f --- /dev/null +++ b/brainsteam/content/posts/2019-01-06-applied-ai-in-2019.md @@ -0,0 +1,93 @@ +--- +title: Applied AI in 2019 +author: James +type: post +date: 2019-01-06T09:52:35+00:00 +url: /2019/01/06/applied-ai-in-2019/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:3:"yes";s:2:"id";s:12:"d1473c0a48ca";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";s:62:"https://medium.com/@jamesravey/applied-ai-in-2019-d1473c0a48ca";}' +categories: + - Uncategorized +tags: + - AI + - futurism + - nlp + - vision + +--- +

    + Looking back at some of the biggest AI and ML developments from 2018 and how they might influence applied AI in the coming year. +

    + +2018 was a pretty exciting year for AI developments. It’s true to say there is still a lot of hype in the space but it feels like people are beginning to really understand where AI can and can’t help them solve practical problems. + +In this article we’ll take a look at some of the AI innovation that came out of academia and research teams in 2018 and how they might affect practical AI use cases in the coming year. + +## More Accurate and Faster-to-Train NLP Models with Pre-trained Language Models + +Imagine if instead of going to school and university you could be given a microchip implant that teaches you most things you need to know about your subject of choice. You’d still need to learn-by-doing when you landed a job with your “instant” degree and fine tune the knowledge that had been given to you but hey, we’re talking about 6-12 months of learning instead of 12-18 years. That’s the essence of what Transfer Learning is all about within the Machine Learning and Deep Learning space. + +BERT is a state-of-the-art neural NLP model [unveiled by Google][1] in November 2018. It, like a number of other models unveiled in 2018 like [ELMo][2] and [ULMFiT][3] can be pre-trained on unlabelled text (think news articles, contracts and legal terms, research papers or even wikipedia) and then used to support supervised/labelled tasks that require much smaller volumes of training data than an end-to-end supervised task. For example we might want to automate trading of stocks and shares based on sentiment about companies in the news. In the old days we’d have to spend weeks having armies of annotators read news articles and highlight companies and indicators of sentiment. A pre-trained language model may already have captured the underlying semantic relationships needed to understand company sentiment so we only need to annotate a fraction of the data that we would if we were training from scratch. + +Of course another benefit of using pre-trained models is reduced training time, compute resources (read: server/energy usage costs). Like half-baked bread, the model still needs some time in the oven to make the connections it needs to perform its final task but this is a relatively short amount of time compared to training from empty. + +In 2019 we’ll be training lots of NLP models a lot more quickly and effectively thanks to these techniques. + + +## Photo-realistic Image Creation + +For those unfamiliar with GANs, we’re talking about unsupervised neural models that can learn to generate photo-realistic images of people, places and things that don’t really exist. Let that sink in for a moment! + +Originally invented by [Ian Goodfellow in 2014][4], GANs back then were able to generate small, pixelated likenesses but they’ve come a long way. [StyleGAN][5] is a paper published by a research team at NVIDIA which came out in December and might have slipped under your radar in the festive mayhem of that month. However StyleGAN represents some serious progress in generated photo-realism. + +Firstly StyleGAN can generate images up to 1024×1024 pixels. That’s still not huge in terms of modern photography but instagram pictures are 1080×1080 and most social media networks will chop your images down to this kind of ballpark in order to save bandwidth so we’re pretty close to having GANs that can generate social-media-ready images. + +The second major leap represented by StyleGAN is the ability to exercise tight control over the style of the image being generated. Previous GAN implementations generated their images at random. StyleGAN uses parameters to control the styles of the output images, changing things like hair colour, whether or not the person is wearing glasses, and other physical properties. + +
    +
    Figure 8 from the StyleGan paper published here shows how manipulating one of the model parameters can give fine-grained control over the appearance of the output.
    +
    + +Brands and digital marketing agencies are already seeing huge success with [CGI brand influencers][6] on instagram. GANs that can be tightly controlled in order to position items, clothing and products in the image could be the next logical evolution of these kinds of accounts. + +In 2019 we think fake photos could be the next big thing in digital media. + + +## Hyper-Realistic Voice Assistants + +In May 2018 Google showed us a glimpse of Google Duplex, an extension of their assistant product that used hyper-realistic speech recognition and generation [to phone a hair dresser and schedule an appointment][7]. There were a few pretty well argued and important [ethical concerns about having AIs pretend to be humans.][8] However, hyper-realistic voice assistant tech is coming. + +There are huge advantages of these approaches, not just to end consumers, but to businesses too. Many businesses already have chatbots that allows users to chat to them via WhatsApp or Facebook and there are early-adopters building voice skills for Google Home and Amazon Alexa. Humans are always going to be a necessary and important part of customer interaction handling since machines will always make mistakes and need re-training. Nonetheless, automation can help reduce the stress and strain on contact-center operators at peek times and allow humans to deal with the more interesting enquiries by handling the most common customer questions on their behalf. + +In 2019 we expect the voice interface revolution to continue to pick up pace. + +## GDPR and Model Interpretability + +Ok so I’m cheating a bit here since GDPR was not a technical AI/ML development but a legal one. In May 2018, GDPR was enacted across Europe and since the internet knows no borders, most web providers internationally started to adopt GDPR best practices like asking you if its ok to track your behavior with cookies and telling you what data they store on you. + +GDPR also grants individuals the following right: + +
    +

    + not to be subject to a decision, which may include a measure, evaluating personal aspects relating to him or her which is based solely on automated processing and which produces legal effects concerning him or her or similarly significantly affects him or her, such as automatic refusal of an online credit application or e-recruiting practices without any human intervention. +

    + + GDPR Recital 71 +
    + +This isn’t a clear cut right to an explanation for all automated decisions but it does mean that extra dilligence should be carried out where possible in order to understand automated decisions that affect users’ legal rights. As the provision says this could massively affect credit scoring bureaus and e-recruitment firms but could also affect car insurance firms who use telemetrics data as part of their decision making process when paying out for claims or retailers that use algorithms to decide whether to accept returned digital or physical goods. + +In 2018 the best practices for model interpretability lay in training a “meta model” that sits on top of your highly accurate deep neural network and tries to guess which features of the data caused it to make a particular decision. These meta-models are normally simple in implementation (e.g. automated decision trees) so that they themselves can be directly inspected and interpreted. + +Whether spurred on by the letter of the law or not, understanding why your model made a particular decision can be useful for diagnosing flaws and undesirable biases in your systems anyway. + +In 2019 we expect that model interpretability will help providers and developers of AI to improve their approach and offer their users more transparency about decisions made. + + [1]: https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html + [2]: https://arxiv.org/abs/1802.05365 + [3]: https://arxiv.org/abs/1801.06146 + [4]: https://arxiv.org/abs/1406.2661 + [5]: https://arxiv.org/abs/1812.04948 + [6]: https://www.thecut.com/2018/05/lil-miquela-digital-avatar-instagram-influencer.html + [7]: https://ai.googleblog.com/2018/05/duplex-ai-system-for-natural-conversation.html + [8]: https://uk.pcmag.com/opinions/94828/google-duplex-is-classist-heres-how-to-fix-it \ No newline at end of file diff --git a/brainsteam/content/posts/2019-01-15-spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over.md b/brainsteam/content/posts/2019-01-15-spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over.md new file mode 100644 index 0000000..cf6f31d --- /dev/null +++ b/brainsteam/content/posts/2019-01-15-spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over.md @@ -0,0 +1,37 @@ +--- +title: Spacy Link or “How not to keep downloading the same files over and over” +author: James +type: post +date: 2019-01-15T18:14:16+00:00 +url: /2019/01/15/spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"11a44e1c247f";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:114:"https://medium.com/@jamesravey/spacy-link-or-how-not-to-keep-downloading-the-same-files-over-and-over-11a44e1c247f";}' +categories: + - Uncategorized + +--- +If you’re a frequent user of spacy and virtualenv you might well be all too familiar with the following: + +
    +

    + python -m spacy download en_core_web_lg
    Collecting en_core_web_lg==2.0.0 from https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-2.0.0/en_core_web_lg-2.0.0.tar.gz#egg=en_core_web_lg==2.0.0
    Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-2.0.0/en_core_web_lg-2.0.0.tar.gz (852.3MB)
    5% |█▉ | 49.8MB 11.5MB/s eta 0:01:10 +

    +
    + +If you’re lucky and you have a decent internet connection then great, if not it’s time to make a cup of tea. + +Even if your internet connection is good. Did you ever stop to look at how much disk space your python virtual environments were using up? I recently found that about 40GB of disk space on my laptop was being used by spacy models I’d downloaded and forgotten about. + +Fear not – spacy link offers you salvation from this wasteful use of disk space. + +Spacy link essentially allows you to link your virtualenv copy of spacy to a copy of the model you already downloaded. Say you installed your desired spacy model to your global python3 installation – somewhere like** _/usr/lib/python3/site-packages/spacy/data_**** __** + +Spacy link will let you link your existing model into a virtualenv to save redownloading (and using extra disk space). From your virtualenv you can do: + +python -m spacy link ** _/usr/lib/python3/site-packages/spacy/data/ _** + +For example if we wanted to make the **en\_core\_web_lg** the default english model model in our virtualenv we could do + +python -m spacy link ** _/usr/lib/python3/site-packages/spacy/data/en\_core\_web_lg en_** + +Presto! Now when we do **spacy.load(‘en’)** inside our virtualenv we get the large model! \ No newline at end of file diff --git a/brainsteam/content/posts/2019-04-24-why-im-excited-about-kubernetes-google-anthos-the-future-of-enterprise-ai-deployment.md b/brainsteam/content/posts/2019-04-24-why-im-excited-about-kubernetes-google-anthos-the-future-of-enterprise-ai-deployment.md new file mode 100644 index 0000000..0d8e962 --- /dev/null +++ b/brainsteam/content/posts/2019-04-24-why-im-excited-about-kubernetes-google-anthos-the-future-of-enterprise-ai-deployment.md @@ -0,0 +1,73 @@ +--- +title: 'Why I’m excited about Kubernetes + Google Anthos: the Future of Enterprise AI deployment' +author: James +type: post +date: 2019-04-24T10:33:24+00:00 +url: /2019/04/24/why-im-excited-about-kubernetes-google-anthos-the-future-of-enterprise-ai-deployment/ +featured_image: /wp-content/uploads/2019/04/cargo-cargo-container-city-262353-825x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:3:"yes";s:2:"id";N;s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:12:"6fc55de34f53";s:6:"status";s:6:"public";s:3:"url";N;}' +categories: + - Uncategorized +tags: + - devops + - docker + - filament + - google + - kubernetes + +--- +### _Filament build and deploy enterprise AI applications on behalf of incumbent  institutions in finance, biotech, facilities management and other sectors. James Ravenscroft, CTO at Filament, writes about the challenges of enterprise software deployment and the opportunities presented by Kubernetes and Google’s Anthos offering._ + +It is a big myth that bringing a software package to market starts and ends with developers and testers. One of the most important, complex and time consuming parts of enterprise software projects is around packaging up the code and making it run across lots of different systems: commonly and affectionately termed “DevOps” in many organisations. + +## The Role of Devops in B2C and B2B Software companies + +DevOps engineers for consumer-facing software have a pretty tough job. They engineer and maintain complex pipelines of automation that take the latest version of the developers code, run tests on it and then build a smorgasbord of installers and self-extracting packages  to work on Android, iOS, Mac and Windows (and probably some common flavours of Linux). There are sometimes platform-specific tricks that need to be carried out in order to get things running smoothly but thankfully these are less common when you’re supporting a limited set of operating systems. + + +DevOps for enterprise software is a different ballgame. Most enterprise software will need to interact with a number of external systems such as a relational-database-server for data storage or an enterprise directory service for company-wide security. Furthermore, these systems are often configured differently or running completely different products from organisation to organisation.  When deploying enterprise software there are very real legal and internal/organisational rules about which systems can access each other, the flow of data between components and even whether new systems can be installed at all. Sometimes it takes months or years for DevOps to work with the customer and the development team to ensure that each environment is supported. + + +## Docker and Kubernetes: A step in the right direction. + +Docker + Kubernetes have gone a long way towards fixing this problem. Docker allows you to pack away your application code and all its dependencies into a self-contained, neatly packed little shipping container that is pretty much plug-and-play on any other system running the docker environment. If docker provides shipping containers, Kubernetes is the crew of the cargo ship that makes sure all the cargo gets to its destination and [keeps the fox from eating the goose][1]. Kubernetes organises containers so that those that need to communicate can do so and those that need to be kept isolated are secured. + + +Just as a consumer software package can be shipped as an installer package, Kubernetes + Docker allow multi-faceted enterprise applications with a number of moving parts to be shipped and deployed in a standard way too. Anyone running a compatible Kubernetes engine cluster can easily deploy self-contained applications to their systems and flexibly swap out components as per company policy (for example, they might switch the packaged database system for one already provided by their organisation). + + +Unfortunately customizability and configurability are something of a catch 22 in this scenario. Kubernetes configurations can vary widely from organisation-to-organisation and even vary quite significantly between cloud providers (Google Kubernetes Engine and Amazon’s Elastic Kubernetes Engine are vastly different in implementation and configuration). + + +At Filament we follow the [Kubernetes community guidelines][2] but many organisations still benefit from running Kubernetes without conforming to these guidelines. Some organisations may modify their setup due to governance and internal policies, others may be early adopters who started using Kubernetes before best practices were established and for whom changing their process may be an expense they’d rather not bear. + + +So, aside from making enterprise application deployment easier, why should organisations standardise their Kubernetes implementations? + +## Anthos: a great reason to standardise. + +[Anthos][3] is Google’s new hybrid/multi cloud system that promises to allow developers to build and package enterprise apps once then run them in a hybrid cloud environment. + + +The benefits of a hybrid cloud are numerous. One of the biggest is that you can centralise and coordinate the management of your on-premise and cloud-based IT resources – reducing overhead in IT project implementations.Your high-volume systems can leverage rapid and dynamic scaling in the cloud whilst securely communicating with secure systems that keep sensitive data safely on premise. + + +With Google’s Cloud offering you get access to the Kubernetes marketplace with instant access to a vast number of instantly deployable enterprise solutions. Of course, as long as your kubernetes setup is roughly in line with the community best practices. + + +Google have also mentioned that Anthos [will support other cloud providers such as AWS and Azure][4] which is really exciting. Although the specific details of this statement aren’t clear yet, it may mean that even if your organisation uses AWS you might be able to leverage Google Kubernetes Marketplace applications. Of course the flip-side of this being that organisations that provide Google-Marketplace compatible applications **_might_** get deployment onto AWS and Azure for free. + + +Open Kubernetes standardisation, likely driven by Anthos uptake, is an exciting opportunity for enterprise software vendors and enterprise software consumers.  With a standard Kubernetes deployment you’ll be able to quickly deploy vastly complex enterprise applications with ease across a number of cloud and on-premise environments and save days or weeks of headaches. + + +Filament are standardising all of our applications to use Kubernetes for deployment and we’ve seen some incredible time savings that we only anticipate getting bigger! + + +I think we’re likely to see most of the enterprise IT sector work towards standard Kubernetes deployment strategies in the next 5 years. + + [1]: https://en.wikipedia.org/wiki/Fox,_goose_and_bag_of_beans_puzzle + [2]: https://kubernetes.io/docs/concepts/configuration/overview/ + [3]: https://cloud.google.com/anthos/ + [4]: https://techcrunch.com/2019/04/09/googles-anthos-hybrid-cloud-platform-is-coming-to-aws-and-azure/ \ No newline at end of file diff --git a/brainsteam/content/posts/2019-06-20-how-can-ai-practitioners-reduce-our-carbon-footprint.md b/brainsteam/content/posts/2019-06-20-how-can-ai-practitioners-reduce-our-carbon-footprint.md new file mode 100644 index 0000000..4d7d112 --- /dev/null +++ b/brainsteam/content/posts/2019-06-20-how-can-ai-practitioners-reduce-our-carbon-footprint.md @@ -0,0 +1,99 @@ +--- +title: How can AI practitioners reduce our carbon footprint? +author: James +type: post +date: 2019-06-20T09:18:40+00:00 +url: /2019/06/20/how-can-ai-practitioners-reduce-our-carbon-footprint/ +featured_image: /wp-content/uploads/2019/06/ash-blaze-burn-266487-825x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized +tags: + - AI + - climate catastrophe + - climate change + - machine learning + - nlp + +--- +In recent weeks and months the impending global climate catastrophe has been at the forefront of many peoples’ minds. Thanks to movements like [Extinction Rebellion][1] and high profile environmentalists like [Greta Thunberg][2] and [David Attenborough][3] as well as damning reports from the [IPCC][4], it finally feels like momentum is building behind significant reduction of carbon emissions. That said, knowing how we can help on an individual level beyond driving and flying less still feels very overwhelming. + +### The Energy Issue + +A recent study by [Strubel et al. (2019)][5] gave insight into exactly how much energy certain neural architectures require to train. Their findings show that training some of the largest and most complex neural models and neural architecture search (in which multiple models are trained and measured against a fitness function to find the most performant model for a given task) consumes huge amounts of energy. Assuming that energy came from fossil-fuel power plants, a fair assumption since most researchers are using cloud providers like AWS and GCP which rely largely on carbon-generated electricity, the models are producing more CO2 pollution than a car produces in its lifetime. + +Predictably, mainstream media misconstrued the findings and articles proposing abandonment of deep learning as a field started to surface (see Charles Radclyffe’s Forbes article: [AI’s Dirty Secret][6], [“][6]if AI really does burn this much electricity, then maybe we should just pull the plug if we’re serious about climate change?”). + +My biggest objection to this conclusion is that it is based upon the notion that all AI is this power hungry. As I said above, Strubel’s study is based on some of the biggest and most complex models in the field today. My intuition would be that most data scientists and AI researchers are not training models anywhere near this big and for many data problems it is not even necessary to use deep learning (as I discuss below). + +My second objection to this notion that we should scrap AI is that we necessarily dismiss any and all potential benefits of continuing to develop models that reduce energy consumption by optimising [data centres][7], [logistics routes][8] and even [energy grids][9]. In the future the mass adoption of self driving tech could save vast amounts of energy by removing erratic human drivers from the road with their fuel-hungry acceleration and braking behaviours. No more human drivers? Less need for traffic control measures which force millions of us to slow down and speed up every day – burning large amounts of fuel that wouldn’t be needed if we maintained a steady speed. None of this would be possible if we just stop trying to improve deep learning approaches overnight. + +The BERT language model, one of Strubel’s worst offenders is, at the time of writing, the state of the art approach for a number of natural language processing tasks. What if BERT-based models powering chatbots and smart speakers could help consumers to make better purchasing decisions and prevent thousands of packages from being shipped and then returned on gas guzzling lorries, planes and cargo ships? + +20 years ago most of us had power hungry CRT monitors and TVs that we’ve since replaced with [more efficient LCD and LED displays][10]. We were using incandescent lightbulbs that [use 6x more electricity than a modern bulb and need replacing a order of magnitude more frequently][11]. Our renewable generation technology has come on leaps and bounds with solar panels becoming [significantly cheaper and more efficient over the last 20 years.][12] My point here is that humans are pretty good at improving the energy efficiency of our inventions. I’m sure most readers who frequently sit in their electrically lit living room at 10pm at night watching a flat screen TV or scrolling on an OLED touch screen on their smartphone are glad that we didn’t give up on these technologies because CRT screens and incandescent bulbs are to energy hungry. + +### What can the AI community do? + +There are a number of things that the AI community can do to help reduce their carbon footprint. Some are simpler and more straight forward, others are a little more involved. + +#### KISS – Keep it simple stupid! + +When you’re building ML models always start with a simple model first. It may be tempting to charge in with a deep learning model immediately but these models are slow to train, prone to overfitting due to their complexity and of course energy hungry. Aside from apeasing the marketing department, there is absolutely no advantage to using a deep learning model before you’ve even tried Logistic Regression or, whoa don’t go too crazy now, a random decision forest! + +Even if you train a few different ‘simple’ models with different data folds and hyper parameters you’ll probably find it quicker and a less energy hungry starting point. Of course if simple models don’t work, deep learning is a good option. + +#### Pre-trained models and transfer learning + +This could apply to both simple models (well kinda) and deep learning models. + +It is well known by now that the best way to get near state of the art performance for classification tasks in NLP and computer vision is to take a pre-trained model like [BERT][13] or [ResNet][14] and “continue” training by updating the last few layers of the neural model with new weights. + +Unless you’re a multi-national or a top tier research institute with lots of money and data to throw at training then trying to train one of these systems from scratch may be a waste of time and energy anyway (I said ‘may be,’ not ‘always’. If you’re working on new state-of-the-art models then I salute you! We should always strive to better ourselves!). + +You can also combine the KISS approach with pre-trained weights. You can achieve some [really great text classification results][15] by using pre-trained word embeddings like [GloVe][16], [word2vec][17] or [fastText][18] with a linear classification model like SVM. + +#### **Scale down big data** + +If you’re developing a model and working with a massive dataset, you might consider training on a small but representational subset of the data. You’ll need to be very careful about this, especially if your dataset is not well balanced or has very rare features (in NLP this could be words that are important but only occur in a tiny proportion of documents). However, if you know that you’re likely to need to change the model 10 more times before you calculate your final performance metrics, it might (but won’t always) makes sense to train it on 10,000 samples instead of 100,000 samples. + +If you’re building models that use a gradient descent or evolutionary training approach then you could also limit the number of epochs during development of your model. + +#### Give patronage to “green” hosting providers + +Big companies are not always the most transparent so this suggestion could be trickier. That said, taking your money where the ethical hosting is could be a good way to reduce your model’s carbon footprint. Especially if you are one of the pioneers working on massive models that use a lot of electricity. Hardware is an important consideration too. GPUs have been a key tool in the evolution of deep learning over the last 10 years but it turns out that [TPUs are better suited to deep learning and much less energy][19] hungry with that. + +#### Controversial Suggestion: Carbon Reporting in AI and ML Scientific Publications + +This one’s probably going to be a divisive suggestion but what if we could get all the big ML academic conferences to require some basic calculation of energy usage with all new model architecture submissions? The idea is to introduce a race to the bottom for AI model power consumption. A model that uses 100x less electricity and achieves near state-of-the-art performance would be much more interesting than one that improves state-of-the-art performance by 0.1% + +I’m well aware that this solution is far from perfect given cloud hosting transparency concerns (see above) and conference organisers would have to think carefully about how to set up peer reviews in a way that avoids always rewarding energy efficiency at the expense of model task performance. + +I guess another approach could be an international conference for energy efficient machine learning systems. I’d be interested in whether there’s enough interest in such a conference from the academic community that I’d seriously consider organising such an event. Also if one already exists I’d be interested in participating. + +If you’d like to discuss the above I’m on twitter [@jamesravey][20] + +## Conclusion + +In closing, I’m really glad that Strubel et al have brought this issue to the forefront of our minds and that the work has picked up so much attention. Rather than panicking and downing our tools, I think it’s important that we remain optimistic about AI and the huge advantages that it can bring and that we try to be as considerate as possible of environmental factors whenever we develop new approaches. + + [1]: https://www.standard.co.uk/news/london/extinction-rebellion-activists-block-major-roads-in-north-london-in-latest-stunt-a4171456.html + [2]: https://www.theguardian.com/world/2019/mar/11/greta-thunberg-schoolgirl-climate-change-warrior-some-people-can-let-things-go-i-cant + [3]: https://www.bbc.co.uk/news/entertainment-arts-47988337 + [4]: https://www.theguardian.com/environment/2018/oct/08/global-warming-must-not-exceed-15c-warns-landmark-un-report + [5]: https://arxiv.org/abs/1906.02243 + [6]: https://www.forbes.com/sites/charlesradclyffe/2019/06/10/ais-dirty-secret/#3ba5ac665331 + [7]: https://www.datacenterdynamics.com/analysis/the-machine-itself-the-state-of-ai-in-the-data-center/ + [8]: https://www.logistics.dhl/content/dam/dhl/global/core/documents/pdf/glo-artificial-intelligence-in-logistics-trend-report.pdf + [9]: https://www.newtonx.com/insights/2018/08/21/ai-machine-learning-power-grid/ + [10]: http://energyusecalculator.com/electricity_lcdleddisplay.htm + [11]: http://energyusecalculator.com/electricity_ledlightbulb.htm + [12]: http://sitn.hms.harvard.edu/flash/2019/future-solar-bright/ + [13]: https://github.com/google-research/bert + [14]: https://github.com/tensorflow/models/tree/master/official/resnet + [15]: https://arxiv.org/abs/1805.09843 + [16]: https://nlp.stanford.edu/projects/glove/ + [17]: https://code.google.com/archive/p/word2vec/ + [18]: https://fasttext.cc/docs/en/english-vectors.html + [19]: https://cloud.google.com/blog/products/gcp/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu + [20]: https://twitter.com/jamesravey \ No newline at end of file diff --git a/brainsteam/content/posts/2020-02-02-pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda.md b/brainsteam/content/posts/2020-02-02-pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda.md new file mode 100644 index 0000000..6fc9e17 --- /dev/null +++ b/brainsteam/content/posts/2020-02-02-pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda.md @@ -0,0 +1,35 @@ +--- +title: PyTorch 1.X.X and Pipenv and Specific versions of CUDA +author: James +type: post +date: 2020-02-02T14:40:46+00:00 +url: /2020/02/02/pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda/ +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:2:"no";s:2:"id";s:12:"8e038847a808";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:98:"https://medium.com/@jamesravey/pytorch-1-x-x-and-pipenv-and-specific-versions-of-cuda-8e038847a808";}' +categories: + - Uncategorized +tags: + - developer + - projects + - python + +--- +I recently ran into an issue where the newest version of Torch (as of writing 1.4.0) requires a newer version of CUDA/Nvidia Drivers than I have installed. + +Last time I tried to upgrade my CUDA version it took me several hours/days so I didn’t really want to have to spend lots of time on that. + +As it happens PyTorch has an archive of compiled python whl objects for different combinations of Python version (3.5, 3.6, 3.7, 3.8 – heck even 2.X which is no longer officially supported), CUDA Version (9.2, 10.0, 10.1) and Torch version (from 0.1 to 1.4). You can specify which you want to install if you know the right incantation. The full index is available [here][1] + +If you’re using pip and virtualenvs to manage your python environment you can just run: + +
    pip install  torch==1.4.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html 
    + +This will install torch 1.4.0 with cuda 10.0 support and it’ll work out which version of Python you’re running for you. + +Now if you’re using Pipenv which tries to simplify virtualenv management and package versioning, you’ll quickly see that there is no way to run the above with `pipenv install`. Currently the only solution I can find is to manually run the above command prefixed with `pipenv run` + +So far I’ve only found one other person who’s asked about this particular issue on [stackoverflow][2]. I’ve also [opened a github ticket][3] in the pipenv project. I am curious to know if anyone else has run into this issue or has a solution + + [1]: https://download.pytorch.org/whl/torch_stable.html + [2]: https://stackoverflow.com/questions/59752559/how-to-specify-pytorch-cuda-version-in-pipenv + [3]: https://github.com/pypa/pipenv/issues/4121 \ No newline at end of file diff --git a/brainsteam/content/posts/2020-09-04-dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet.md b/brainsteam/content/posts/2020-09-04-dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet.md new file mode 100644 index 0000000..1707fc2 --- /dev/null +++ b/brainsteam/content/posts/2020-09-04-dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet.md @@ -0,0 +1,107 @@ +--- +title: '‘Dark’ Recommendation Engines: Algorithmic curation as part of a ‘healthy’ information diet.' +author: James +type: post +date: 2020-09-04T15:30:19+00:00 +url: /2020/09/04/dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet/ +featured_image: /wp-content/uploads/2020/09/maxresdefault-825x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:3:"yes";s:2:"id";s:12:"2969b63de7ec";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:130:"https://medium.com/@jamesravey/dark-recommendation-engines-algorithmic-curation-as-part-of-a-healthy-information-diet-2969b63de7ec";}' +categories: + - Uncategorized + +--- +### In an ever-growing digital landscape filled with more content than a person can consume in their lifetime, recommendation engines are a blessing but can also be a a curse and understanding their strengths and weaknesses is a vital skill as part of a balanced media diet. + +If you remember when connecting to the internet involved a squawking modem and images that took 5 minutes to load then you probably discovered your favourite musician after hearing them on the radio, reading about them in NME being told about them by a friend. Likewise you probably discovered your favourite TV show by watching live terrestrial TV, your favourite book by taking a chance at your local library and your favourite movie at a cinema. You only saw the movies that had cool TV ads or rave reviews – you couldn’t afford to take a chance on a dud when one ticket, plus bus fare plus popcorn and a drink cost more than two weeks pocket money. + +In the year 2020 you can plug your phone into your car, load up Spotify and instantly access over 40 million songs at the touch of a button. You can watch almost any TV show or movie from the last 60 years from your couch. You can read almost any book ever written for free or next to nothing online (especially if your library has free ebook access [like mine][1]). In the space of a few years, our media consumption habits have COMPLETELY changed and that is wonderful and amazing in a kind of utopian star trek “land of plenty” kind of way. + +Unfortunately there’s a downside to having access to the entirety of humanity’s collective knowledge at the click of a button. With so much choice and [3 weeks of video content being added to youtube every minute][2] it is easy to become overwhelmed. Humans aren’t good at choices that have too many options. We are overcome with [analysis paralysis][3] and if it is left unchecked, we can waste hours of our lives scrolling netflix, reading show synopses but never watching any shows. After all, time is precious and a 90 minute movie is a sizeable, non-refundable investment. What if you don’t like it when there’s thousands of hours of other movies that you could be watching instead that could be better? Solving this problem across all sorts of media (news articles, movies, songs, video games) was the original motivation behind recommendation systems. + +## Recommender Systems 101 + +Recommendation engines are all about driving people towards a certain type of content – in the use case above, it’s about driving people towards stuff they’ll like so that they feel like they’re getting value out of the platform they’re paying for and they continue to use the platform. There are a few different ways that recommender systems work but here are the basics: + +#### Collaborative Recommendation + +**_If Bob buys nappies (diapers) and Fred buys diapers AND powdered milk then_ maybe we should recommend powdered milk to Bob** + +The above sentence summarises the underlying theory behind collaborative recommenders. We can build a big table of all of our customers and the products that they bought (or movies that they watched) and we can use a technique called [matrix factorization][4] to find sets of products that commonly get consumed together and then finding users who already consumed a subset of these products and recommending the missing piece. The below video explains this concept in more detail.
    + +
    + +
    + +Collaborative filtering has a neat little surprise up its sleeve: emergent novelty. The chances are that someone you don’t know who has similar taste to you is in a good position to introduce you to new content that you didn’t know you liked. If Bob buys a coffee machine and we recommend it to Fred, the latter user might go “oh wow, I am pretty tired, I hadn’t considered a coffee machine – neat!” Of course this can have the opposite effect too. + +#### Content-based Recommendation + +**_Bob likes Terminator 2 which has the properties: ‘science fiction’, ’80s movie’_,’directed-by-James-Cameron’ he might also therefore like “Aliens”**, + +Content-based recommenders, as the summary above suggests, are all about taking properties of the content and using them to draw similarities with other content that might interest the user. Content-based recommendation is more computationally expensive than collaborative filtering since you need to extract ‘features’ of the things you’re recommending at scale (e.g. you might build an algorithm that looks at every frame of every movie in your collection and checks for cyborgs). It’s also very hard to do feature extraction on physical products and e-commerce sites tend to stick to collaborative approaches. + +Content-based recommenders can sometimes get stuck in an echo-chamber mode of recommending very ‘samey’ stuff all the time – there’s no element of surprise or novelty like you’d get with collaborative filtering. + +#### Hybrid Content-Collaborative Recommendation + +**Bob likes Terminator – an 80s sci-fi movie, Fred likes Terminator- an 80s sci-fi movie and Aliens, Janet likes Ghostbusters, an 80s sci-fi comedy. Recommend Aliens and Terminator to Janet and Ghostbusters to Bob and Fred.** + +In this mode of operating, we get the best of both worlds. Terminator and Aliens have a very different tone to Ghostbusters but there’s a decent chance that Bob and Fred would like it and there’s some ‘feature’ overlap between the three movies (80s, sci-fi). + +Hybrid recommendation is also pretty useful when you have limited information about your users because they only just joined or they didn’t use your system very much yet (This is known as the cold start problem). For example, if a new user, Rachael, comes along we can’t use collaborative filtering because we don’t know what films she likes and what other users with her taste have watched. However, we could give her an on-boarding questionnaire and if she tells us she likes 80s sci-fi but not comedy then we can recommend Aliens, Terminator and not Ghostbusters. The more we learn about her, the better these recommendations will get. + +## Manipulation and ulterior motive: the dark side of recommendation engines + +Recommendation engines are a great way to introduce people to movies, songs, news articles and even physical products that they might be interested in. But what if the motivation behind your recommendation system is no longer to make the user happy? As long as we have a large, consistent set of data relating products (movies/songs/books etc) to users we can train a recommendation engine to optimise itself towards that end. We could train a recommender that always makes terrible recommendations by flipping the dataset we collected about what users like – not a particularly useful exercise but it could be fun. + +What if the recommendation engine serving up your news articles isn’t optimised to show you what you like but in fact is optimised to show you more of what keeps you engaged? There may be some overlap here but the distinction is **key**. All the system’s owner would need to do is collect a table of content that the user likes or comments on or shares. + +The phrase “there’s no such thing as bad press” is a lot older than social media but has never been more relevant. For decades, traditional print media outlets have used bad news and emotive content to sell more papers. Journalists have become experts at politicising and polarising everything from [avocados][5] to [gen z][6]. Online news outlets use a similar mechanism. + +Online news outlets don’t make money from selling print media but from selling space on their websites for showing adverts and they get paid for every person who clicks on an advert. It’s probably only 1 in 1000 people that clicks on an ad but if 100,000 people read your article then maybe you’ll get 100 clicks. This has given rise to [“clickbait”][7] headlines that use misleading exaggeration to pull users in to what is more often than not an article of dubious or no interest. Clickbait, at least, is usually fairly easy to detect since the headlines are pretty formulaic and open ended (that’s my one neat trick that journalists hate me for). + +Social networks, like online news outlets, also make money from driving users towards adverts. Most people would read a news article once and close the page, 1 in 1000 of them might click a relevant advert while they’re at it. However, users typically spend a lot more time on a social network site, liking their neighbour’s cat picture, wishing their great aunt a happy birthday, getting into arguments and crucially clicking adverts. The longer you spend on the social network site, the more adverts you’re exposed to and maybe, just maybe, if you see the picture of the new coffee machine enough times you’ll finally click buy. + +So how can social networks keep users clicking around for as long as possible? Maybe by showing them content that piques their interest, that they respond emotionally to, that they want to share with their friends and comment on. How can they make sure that the content that they show is relevant and engaging? Well they can use recommendation engines! + +#### A recipe for a “dark” recommendation engine + +In order to train a pretty good hybrid recommendation engine that can combine social recommendations with “features” of the content to get relevant data we need: + + 1. Information about users – what they like, what they dislike – what they had for breakfast (they know it was a muffin and a latte from that cute selfie you uploaded at Starbucks this morning), what your political alignment is (from when you joined “Socialist memes for marxist teens” facebook group) – **CHECK** + + 2. Information about the content – what’s the topic? Does it use emotive words/swears? Does it have a strong political alignment either way? – using Natural Language Processing they can automatically find all of this information for millions of articles at a time – **CHECK** + + 3. Information about users who interact with certain content – they know who commented on what. They know that the photo of your breakfast got 25 likes 2 comments and that the news article in the Washington Post about Trump got 1500 likes, 240 angry reacts and 300 comments. They also know that 250 of the 300 comments were left by people from the left-wing of politics – **CHECK** + +That’s all they need to optimise for “engagement”. A hybrid recommendation engine can learn that putting pro-Trump articles in front of people who like “Bernie 2020” is going to drive a lot of “engagement” and it can learn that displaying articles branding millenials as lazy and workshy in front of 20-to-30-somethings is going to drive a lot of “engagement” too. + +Recommendation engines can learn to only ever share left wing content with left wing people, likewise for right-wingers – creating an echo-chamber effect. Even worse, articles containing misinformation can be promoted to the top of everyone’s “to read” list because of the controversial response they will receive. + +These effects contribute to the often depressing and exhausting experience of spending time on a social media site in 2020. You might come away miserable but the algorithm has done its job – it’s kept a large number of people engaged with the site and exposed them to lots of adverts. + +## Good news everyone! + +Let’s face it – its not all bad – I love pictures of cats sat in boxes and the algorithms have learned this. Spotify has exposed me to a number of bands that absolutely love and that would never get played on the local terrestrial radio station I periodically listen to in the car. I’ve found shows and books I adore on Netflix and Kindle. I’ve found loads of scientific papers that were very relevant for my research into NLP using sites like [Semantic Scholar][8] + +I guess its also worth noting that the motivation of media platforms like Netflix and Spotify is to help you enjoy yourself so that you pay your subscription as opposed to ‘free’ social sites that are happy to make you miserable if it means that you’ll use them for longer. + +The aim of this article was to show you how recommendation engines work and why the motivation for building them is **SO IMPORTANT.** Secondly, I wanted to show you that it’s important for us to diversify our information intake beyond what the big social media platforms spoon feed us. + +You can use sites like reddit where content is aggregated by human votes rather than machines (although fair warning, controversial material can still be disproportionately represented and certain subreddits might depress you more than your social media feed). + +You can use chronological social media systems like [mastodon][9] that don’t shuffle content around hoping to get you to bite on something juicy. I can also recommend the use of RSS reader systems like [Feedly][10] which aggregate content from blog sites in chronological order with minimal interference. + +Finally I want to issue a rallying cry to fellow machine learning engineers and data scientists to really think about the recommendation systems that you’re building and the optimisation mission you’ve been set. Would you let your family use it or would it make them miserable? Be responsible and be kind. + + [1]: https://www.hants.gov.uk/librariesandarchives/library/whatyoucanborrow/ebooksaudiobooks + [2]: https://tubularinsights.com/youtube-300-hours/ + [3]: https://www.ted.com/talks/barry_schwartz_the_paradox_of_choice + [4]: https://en.wikipedia.org/wiki/Matrix_factorization_(recommender_systems) + [5]: https://www.theguardian.com/lifeandstyle/2017/may/15/australian-millionaire-millennials-avocado-toast-house + [6]: https://www.benzinga.com/fintech/20/09/17377335/the-pandemic-is-contributing-to-financial-scams-and-generation-z-is-especially-vulnerable + [7]: https://www.merriam-webster.com/dictionary/clickbait + [8]: http://semanticscholar.org/ + [9]: https://mastodon.social/about + [10]: https://feedly.com/ \ No newline at end of file diff --git a/brainsteam/content/posts/2020-09-11-.md b/brainsteam/content/posts/2020-09-11-.md new file mode 100644 index 0000000..eff92a5 --- /dev/null +++ b/brainsteam/content/posts/2020-09-11-.md @@ -0,0 +1,29 @@ +--- +title: Do more than ‘kick the tires’ of your NLP model +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=498 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized + +--- +### _We’ve known for a while that ‘accuracy’ doesn’t tell you much about your machine learning models but now we have a better alternative!_ + +“So how accurate is it?” – a phrase that many data scientists like myself fear and dread being asked by business stakeholders. It’s not that I fear I’ve done a bad job but that evaluation of model performance is complex and multi-faceted and that summarising it with a single number usually doesn’t do it justice. Accuracy can also be a communications hurdle – it is not an intuitive concept and it can lead to friction and misunderstanding if you’re not ‘in’ with the AI crowd. 50% model accuracy across a model that has 1500 possible answers could be considered pretty good. 80% accuracy in a task setting where data is split 80:10 across two classes is meaningless (that means that randomly guessing is more effective than the model). + +I’ve written before about [how we can use finer-grained metrics like Recall, Precision and F1-score to evaluate machine learning models][1]. However, many of us in the AI/NLP community still feel that these metrics are too simplistic and do not adequately describe the characteristics of trained ML models. Unfortunately, we didn’t have many other options for evaluating model performance… until now that is… + +## Checklist – When machine learning met test automation + +At the Annual Meeting of the Association for Computational Linguistics 2020 – a very popular academic conference on NLP – [Ribeiro et al presented a new method for evaluating NLP models,][2] inspired by principles and techniques that software quality assurance (QA) specialists have been using for years. + +The idea is that we should design and implement test cases for NLP models that reflect the tasks that the model will be required to perform “in the wild”. Like software QA, these test cases should include tricky edge cases that may trip the model up in order to understand the practical limitations of the model. + +For example, we might train a named entity recognition model that + + [1]: https://brainsteam.co.uk/2016/03/29/cognitive-quality-assurance-an-introduction/ + [2]: https://www.aclweb.org/anthology/2020.acl-main.442.pdf \ No newline at end of file diff --git a/brainsteam/content/posts/2020-11-27-dvc-and-backblaze-b2-for-reliable-reproducible-data-science.md b/brainsteam/content/posts/2020-11-27-dvc-and-backblaze-b2-for-reliable-reproducible-data-science.md new file mode 100644 index 0000000..9b133ca --- /dev/null +++ b/brainsteam/content/posts/2020-11-27-dvc-and-backblaze-b2-for-reliable-reproducible-data-science.md @@ -0,0 +1,161 @@ +--- +title: 'DVC and Backblaze B2 for Reliable & Reproducible Data Science' +author: James +type: post +date: 2020-11-27T15:43:48+00:00 +url: /2020/11/27/dvc-and-backblaze-b2-for-reliable-reproducible-data-science/ +featured_image: /wp-content/uploads/2020/11/pexels-panumas-nikhomkhai-1148820-825x510.jpg +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";s:69:"https://cdn-images-1.medium.com/fit/c/200/200/0*naYvMn9xdbL5qlkJ.jpeg";s:10:"author_url";s:30:"https://medium.com/@jamesravey";s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";s:3:"yes";s:2:"id";s:12:"d44d231b648f";s:21:"follower_notification";s:3:"yes";s:7:"license";s:19:"all-rights-reserved";s:14:"publication_id";s:2:"-1";s:6:"status";s:6:"public";s:3:"url";s:103:"https://medium.com/@jamesravey/dvc-and-backblaze-b2-for-reliable-reproducible-data-science-d44d231b648f";}' +categories: + - Uncategorized +tags: + - data science + - devops + - machine learning + +--- +## Introduction + +When you’re working with large datasets, storing them in git alongside your source code is usually not an optimal solution. Git is famously, not really suited to large files and whilst general purpose solutions exist ([Git LFS][1] being perhaps the most famous and widely adopted solution), [DVC][2] is a powerful alternative that does not require a dedicated LFS server and can be used directly with a range of cloud storage systems as well as traditional NFS and SFTP-backed filestores all listed out [here.][3] + +It’s also worth pointing out that another point in DVC’s favour is its [powerful dependency system][4] and [being able to precisely recreate data science projects down to the command line flag][5] – particularly desirable in academic and commercial R&D settings. + +I use data buckets like S3 and Google Cloud Storage at work frequently and they’re very useful as an off-site backup large quantities of training data. However, in my personal life my favourite S3-like vendor is [BackBlaze][6] who offer a professional, reliable service with [cheaper data access rates than Amazon and Google][7] and [offer an S3-compatible API][8] which you can use in many places – including DVC. If you’re new to remote storage buckets or you want to try-before-you-buy, BackBlaze offer 10GB of remote storage free – plenty of room for a few hundred thousand pictures of [dogs and chicken nuggets][9] to train your classifier with. + +## Setting up your DVC Project + +Configuring DVC to use B2 instead of S3 is actually a breeze once you find the right incantation in the documentation. Our first step, if you haven’t done it already is to install dvc. You can download an installer bundle/debian package/RPM package from [their website][2] or if you prefer you can install it inside python via `pip install dvc[all]` – the [all] on the end pulls in all the various DVC remote storage libraries – you could swap this for [s3] if you just want to use that. + +Next you will want to create your data science project – I usually set mine up like this: + +
    - README.md  
    +- .gitignore  <-- prefilled with pythonic ignore rules
    +- environment.yml   <-- my conda environment yaml
    +- data/
    +  - raw/   <-- raw unprocessed data assets go here
    +  - processed/ <-- partially processed and pre-processed data assets go here
    +- 
    +
    + +Now we can initialize git and dvc: + +
    git init
    +dvc init
    + +## Setting up your Backblaze Bucket and Credentials + +Now we’re going to create our bucket in backblaze. Assuming you’ve registered an account, you’ll want to go to “My Account” in the top right hand corner, then click “Create a new bucket”
    + +
    + +Enter a bucket name (little gotcha: the name must be unique across the whole of backblaze – not just your account) and click “Create a Bucket” taking the default options on the rest of the fields.
    + +
    + +Once your bucket is created you’ll also need to copy down the “endpoint” value that shows up in the information box – we’ll need this later when we set up DVC.
    + +
    + +We’re also going to need to create credentials for accessing the bucket. Go back to “My Account” and then “App Keys” and go for “Add a New Application Key”
    + +
    + +Here you can enter a memorable name for this key – by convention I normally use the name of the experiment or model that I’m training.
    + +
    + +You can leave all of the remaining options with default/empty values or you can use these to lock down your security if you have multiple users accessing your account (or in the event that your key got committed to a public github repo) – for example we could limit this key to only the bucket we just created or only folders with a certain prefix within this bucket. For this tutorial I’m assuming you left these as they were and if you change them, your mileage may vary.
    + +
    + +Once you create the key you will need to copy down the keyID and applicationKey values – heed the warning – they will only appear once and as soon as you move off this page it will be gone forever unless you copy the values somewhere safe. It’s not the end of the world since we can create more keys but still a bit annoying to have to go through again. + +If you’ve got the name of your bucket, your endpoint, your keyID and applicationKey values stored somewhere safe then we’re done here and we can move on to the next step. + +## Configuring your DVC ‘remote’ + +With our bucket all set up, we can configure DVC to talk to backblaze. First we add a new remote to DVC. The `-d` flag sets this as the default (so that when we push it will send the data to this location by default without being told explicitely). + +
    dvc remote add b2 s3://your-bucket-name/
    + +So DVC knows about our bucket but unless we tell it otherwise it will assume that it’s an Amazon S3 bucket rather than a B2 bucket. We need to tell it our endpoint value: + +
    dbc remote modify b2 endpointurl https://s3.us-west-002.backblazeb2.com
    + +You’ll see that I’ve copied and pasted my endpoint from when I set up my bucket and stuck “https://” on the front which dvc needs to know about to form a valid URL. + +## Authenticating DVC + +Next we need to tell DVC about our auth keys. [In the DVC manual][10] they show you that you can use the `dvc remote modify` command to permanently store your access credentials in the DVC config file. However this stores your super-duper secret credentials in plain text in a file called `.dvc/config` which gets stored in your git repository meaning that if you’re storing your work on GitHub then Joe Public could come along and start messing with your private bucket. + +Instead I advocate the following approach. Firstly, in our `.gitignore` file at the top level of our project (create one if it doesn’t exist) add a line that says `.env` + +Now we’re going to create a new file – again in the top level of our project directory called `.env` and paste in the following: + +
    export AWS_ACCESS_KEY_ID='<keyID>'
    +export AWS_SECRET_ACCESS_KEY='<applicationKey>'
    + +Replace and with the values from the BackBlaze web UI that we copied earlier. + +What we’ve just done is create a local file that contains our credentials that git is not permitted to store in your repository and it’s easy enough to use these credentials with DVC from the terminal by running `source .env` first – don’t worry I’ll show you now. + +Finally we can run `git add .dvc` followed by a `git commit` to lock in our dvc configuration in this git repository. + +## Adding files to DVC + +Ok so imagine you have a folder full of images for your neural model to train on. stored in `data/raw/training-data`. We’re going to add this to DVC with: + +
    dvc add data/raw/training-data
    + +After you run this, you’ll get a message along these lines: + +
    100% Add|████████████████████████████████████████████████████████████|1/1 [00:01,  1.36s/file]
    +
    +To track the changes with git, run:
    +
    +        git add data/raw/.gitignore data/raw/training-data/001.jpg
    + +Go ahead and execute the git command now. This will update your git repository so that the actual data (the pictures of dogs and chicken nuggets) will be gitignored but the .dvc files which contain metadata about those files and where to find them will be added to the repository. When you’re ready you can now `git commit` to save the metadata about the data to git permanently. + +## Storing DVC data in backblaze + +Now we have the acid test: this next step will push your data to your backblaze bucket if we have everything configured correctly. Simply run: + +
    source .env
    +dvc push
    + +At this point you’ll either get error messages or a bunch of progress bars that will populate as the images in your folder are uploaded. Once the process is finished you’ll see a summary that says `N files pushed` where N is the number of pictures you had in your folder. If that happened then congratulations you’ve successfully configured DVC and backblaze. + +## Getting the data back on another machine + +If you want to work on this project with your friends on this project or you want to check out the project on your other laptop then you or they will need to install git and dvc before checking out your project from github (or wherever your project is hosted). Once they have a local copy they should be able to go into the `data/raw/training-data` folder and they will see all of the `*.dvc` files describing where the training data is. + +Your git repository should have all of your dvc configuration in it already including the endpoint URL for your bucket. However, In order to check out this data they will first need to create a `.env` file of their own containing a key pair (ideally one that you’ve generated for them that is locked down as much as possible to just the project that you’d like to collaborate with them on). Then they will need to run: + +
    source .env
    +dvc checkout
    + +This should begin the process of downloading your files from backblaze and making local copies of them in `data/raw/training-data`. + +## Streamlining Workflows + +One final tip I’d offer is using `dvc install` which will add hooks to git so that every time you push and pull, dvc push and pull are also automatically triggered – saving you from manually running those steps. It will also hook up dvc checkout and git checkout in case you’re working with different data assets on different project branches. + +## Final Thoughts + +Congratulations, if you got this far it means you’ve configured DVC and Backblaze B2 and have a perfectly reproducible data science workflow at the tips of your fingers. This workflow is well optimised for teams of people working on data science experiments that need to be repeatable or have large volumes of unwieldy data that needs a better home than git. + +_If you found this post useful please leave claps and comments or follow me on twitter [@jamesravey][11] for more._ + + [1]: https://git-lfs.github.com/ + [2]: https://dvc.org/ + [3]: https://dvc.org/doc/command-reference/remote/add + [4]: https://dvc.org/doc/command-reference/dag + [5]: https://dvc.org/doc/command-reference/run + [6]: https://www.backblaze.com/ + [7]: https://www.backblaze.com/b2/cloud-storage.html + [8]: https://www.backblaze.com/b2/docs/s3_compatible_api.html + [9]: http://www.mtv.com/news/2752312/bagel-or-dog-or-fried-chicken-or-dog/ + [10]: https://dvc.org/doc/command-reference/remote/modify#example-customize-an-s3-remote + [11]: https://twitter.com/jamesravey \ No newline at end of file diff --git a/brainsteam/content/posts/2020-12-16-.md b/brainsteam/content/posts/2020-12-16-.md new file mode 100644 index 0000000..e6f580d --- /dev/null +++ b/brainsteam/content/posts/2020-12-16-.md @@ -0,0 +1,19 @@ +--- +title: Easy MLFlow Server Hosting with Docker-Compose +author: James +type: post +date: -001-11-30T00:00:00+00:00 +draft: true +url: /?p=532 +medium_post: + - 'O:11:"Medium_Post":11:{s:16:"author_image_url";N;s:10:"author_url";N;s:11:"byline_name";N;s:12:"byline_email";N;s:10:"cross_link";N;s:2:"id";N;s:21:"follower_notification";N;s:7:"license";N;s:14:"publication_id";N;s:6:"status";N;s:3:"url";N;}' +categories: + - Uncategorized + +--- +At Filament we’re really big fans of MLFlow for managing our ML model lifecycle from experiment to deployment. I won’t go into the [many advantages][1] of using this software since [many others][2] have done a good job of this before me. + +If you’re bought in + + [1]: https://towardsdatascience.com/tracking-ml-experiments-using-mlflow-7910197091bb + [2]: https://towardsdatascience.com/5-tips-for-mlflow-experiment-tracking-c70ae117b03f \ No newline at end of file diff --git a/brainsteam/static/images/avatar.png b/brainsteam/static/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c27f919296ecb15c1734df58980f55818034d5 GIT binary patch literal 527302 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

    Y-tkEY&s^|Jy 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 z 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 z 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%0Ac-|Ekr#Q*H$-?rH<6IZa3q-d0K(w!R%U% z;?$)X3i#C{!gAo|o&=-AF0wiukx{GIRV`aS7u}V3@}EI%%#@%$EaN~E8F?b4bP%H$0 zw7JQmh4q_F+g5(6t!SIfq>JY{eA2fPSieVYAMb!=Gm-QSCm2T_NaWqcn!~!%+$er8 z*RsZU8^{?S-$v^mV$L>w%GGys*zp{Z%&aoa#seUd-qBW~Og1*JoQP~+LPV`T*OQK8 z-9JmW9a1%nYqtcn>a@B&R26jbiKPcRstA8DpF)(A%RB3B|> zG4Sdl^rZqy8e>%4h%r)w0%&^a+TOCVvn>;;KlFy{1TUs0m*8ACJdyaoQN{IsWjqRz z1}8i`rV+9hnQpWu)I=Z?^kOL>0^p!yG5y6ac;zt`vc0vw9&Y{OMX%~+5%%|IJQcsj zTD{KBnxDrk^GpZesho~t@AJ^Ywxg^o;}=U(-D(1{7DJ4^YTGc2cv)Tv5uKpVPQ3XSO({~lPr2U1fIbx#*EJ^Mn1=j1P;x64&V`>vj3tiB$8U?%$5_iS9SBoJc#PZA(8F z(?J$0ThyD*v6>%O-^dbk5RvE#;q$u_#2zm{7Kc{>5OIBBU_eS+eK9Lurpu72EpMzJ zqyBK4aBXjg#s|$2=>Rv3;iMHAW2x!FSB;uksTDks#Q0c=9LB1usPyxRko){(`!9B9 ztMg^MuA4`PK#9&7J(A0d-&J}WbN5A0H;uH*A2dw!2T~?AQgF~i+wDC4fIMtgr>2~X zL5g<^?R;Two>Yu{ZA*9WGdEIQ?cz1-A(4r!_99k$-sH5I{lQCX$1#VLmzZlB1c5w& zGcGA^sBZXV2rb=Kc)qX*eo}PpA~!BNR)earEbq^PPg#pJAPFVy;vjq2JLPzHSx2Gs zGhj>*3#bm&h!NOC1u3U}gV6bviYHjsLI?V@F?+kgJzHOa2X+pLd-*zL%Rx004%qV2 zI>v8h9Img?wTgcKtZ~{WChnz}qBQ-|sjOUlO=Yl9rPt{_Ea$d6k#Fa5!o8L=Bs$~! zuLWbWic~_E5BX-7nh8Kh+W6CnCm{Xr>Sg_0VLOToqf*|X%E`7;;$+aSp5U=vDe@~?BqcgKPyOid#tOP(Dr*%ovWb|mQ1t7A5KppQEjbaaUU1lQDS~-YQCo?2dZkW zUbWUgx$%hdfla<0v$o5cLCJk68(Mgd z$mUHiAImyLKyLkY! zBJ6sMH{6`q%#Cq!sJ2Ri;7KdrFr;=RrXsd|l#6?!ESz4bxTj_t*{c?fuk57|ZG=zq zr0xb!PeRdQuQbl9I){cLz3Cn2BG5&xj#iUhGZ>Em!E_#LbxxBAGpkCGkk;#z!R{SP z=vlv=;eCMqbB-Iyhy0iC10gp&zFgQ^%I=My*S>lD`3%{wsi7Sj=4uF>{Y>f=@$xWq zxz7S12}#Wx96&JDGkRyYLK^E!i(Cso*huVDdYltlOR8d*f-yRazi6FL?_ z$T9{DJ{IXuNj;wDxZ1Bpg&o90YHJCkJ{3MgLL5o#zRVvt*4?ISucP@aYBW;>J+Kkq zp^;yBVO~C^3`WOit#6Dwj*A5J_HsWHGCea{JEKS=BP)Jnw9*0I`H0qTZe}&-1o*~n z*emlJioJlt3H~Byzq{%@^|3cFptfh+(r~8*FR5eX!^pTaK1`h`G7+_vbo7nD0n=CC zBCUDPM0d`7fa$ah=TzI-`{@yQd_%=FC-RZ8Hm7u&%u(TCrA=apg3J^W8k2ig` z1*Jus+0f6-k2)qS^~lRGFkWIiSx;ZX27*;@OgraPEIIqZz9hWnd$glNpN-ucz`eR? zNO4GIBqXoBiXv|KZ@RjA=48ap_X2a9tKV<+^cWZ@+kb+QK1a?d9B(7Y5kx+_!N5vU z=Wk^5f5`A1GqaGHLyR@u&U(cvd~GL!e(zduHLNbonUM1%x+tmuzRD5M2w%mVzKbrC z`?|CB(_=Yat*9_4r~CRL31I6Km6x9@jTRV4R{?#SNJa<~5vh=#6GvIYmb4IX_yHi8 z>~eAWPi&F0I~zwoK5Mm#f5~7WHK#1ZgHDtbDaTpU*UuuS>m2-JQWpFhZ3K)*k6-f; zzh7@$9*aCp8)`@ zoGoH;@T;sh$)V4&g$mxD9_qtLQ*YPI{N=1_j^&;Eka>yluTF|CIbzJfAxO`8zn#O0 zowlG6b|fF(%_$k%K!+yhT~7fs!%oy1AhW4|*#h*Fat<7{iMpZJAbjK-aL-kLoY1@7 z8Cy}*(d>p0`^z#1Cnw+mq)4WVGsYYsZ{HtipC}5$s|5^KmC=upq*{kFJNw9~h5XW| zIW#kCmN{dg*jHOq)9Hdz#J~k~7vN~oGxXF;D~ArABUSP#%f(%tOxME4W6#$?I3=zl z`$Ays*ZJ6U+?77;5e>3Cd~wS=Bigu#;6Hm*C@$sW?OG07)OADu)~f536Q$zD1RuGJ z7D`-gRmCHRmG;U;gjwm8mfw2uNh>WVn0R>4_};FrFbVu&3>-$(Ydga)OXLIQREr|) z4RX%Re7Q+CmhP(#dpw^xsQ0?>DLwq}<_@`Uo8UlY$SO`WNK;`*t(u!h88gkmPw?!N z>oYJ1VGT8Hq=UwnIB2Ckbk}{V$}9F4^TrV{ML}@54w2mBRayT%Fi9g1t5Yj~BaJu! zy?FlWGOmDbrp;hzy%;{z^fyl=!o=85U#P*#9wW&Io7sMRSweyliZ1a>e5hiSqQJgD zjsvf@f2lT`DEP&=^k_ev(NZ^i=Hu<4=dcp4_t2c}w_!4i3!wS4u%tIe&$ivQ?K#jd z7FdasOH>C8{&E{l(B<)uOm9zpeJ{qE{DY6uQ-2hln7_)}d2G%3o}D#XKVlqwz{2yl z#arsk-q!YiT%8g0gX9$Q+44*eIend_ta1Lez1S*l;%v_Q2Q6h&@!&c|t}~_XB@z-( z6DN7P?_ak*u~@bZj7=47EDFeRy8P`!7%A&|wH0%^^fSSIT2g?yO3dh+wQ{GsXsKQ6 zsu}Q%8tKfrXKJo0-Yo!sr)33oRm?%?5nfJWj4*vWJHQF&il&Z{fOHI2G=yaLT0rzY ztIOWKnY7Et?&s+_f_Nu8rQ3F~kWA@8xni=;V;dgvm3IBsnFcVO)fa2Ik3Td^^uK9; zrE8E4st-XYNu;LY2)4zT>|fIOadVRL^O5UhBY$kA@0ZjRxpKoPM9LKXa3?|oE68xb zn`iYTQdjJ{_Qc+2DdG0Gl;(7GM9lyIU$KYNfzxxdnK?@SK$FM<^?>|vv!egqY)?tr z@56$eYx_{Swe88ZyP1q#yLt_KQe`#0$i8LWA6jW%S|x{{5Xf^5*mq3z@$gKWpC+FK zEGQ>tMK#qe9*k)6ka3B|Rg!%i@%I`Bxws7eU{ORVJ-AHbNUb|LP6VKPzf!931qp+B z7jmK@#D(P?C7f4j%88x6-LRsUDpnSqG5>DS_O3>CRa0aCP$yFgAm((o6<@NpmUy+P zU#K)n4ve=E)9fW}zYpt4yTK*5eYkPEZZIA9?#GujnvS1Qtf(IRd#XR2$WFk*+=$`p zQ~!1^xmEmrJMQ+$f9LE_aPHgvU-HwN>*=R=IWl}6+=v`NS0^`-%qqp~)>c+;tWW96 zT(+I^=i{Pnj0ObDp@EqyxkCGa>FvDp>s75%$7pFbzR_FNq27Cg8O`v9WAYRQo>mKb zpj_xP84bvPcaj*nnz0=^ZxA-$$sTV#1hE>{O$){`FS7nC`U~7VRT$_c1Fp%lB+V&~ z2Fq<|1)vMQ5`;mS{_n|M`p1zJ#Erkwva`7dItk`c3k;-&3m=`I@1@M7;?v|FG3(L_ zE``h2@8e;O*2%`CM2*xTn5PF<5y_Mh2Tth;1zs`3PDAo*I zd-7NxEzbXTr|fEYp=O(9c2W+m+U9tyzBCtT(HAlaCk@i~C4JWWRR*o8c+lTU|9!bS zBso~412l1j|>Jypfs;o4kyEi`ewn1AI@nRnlqe*2;4>C?WP7vM0G zYSGc((gJ7{(0JI^3h4^-2qxDZT%vm*hu=@N4=IQjJc@?LpVOUmw4gcXOlyLr8AW|L zmPHAY1-J0z@UQXZ61&ByO8VB0Jq@_B<2Nwt#BvlW{teiBCD6MZbMl2Fw^O-JSHR~0{^j(=+Csbe3Xp@OWiD=S4%X|6 z3)2;mK&>I93HVh;Ni`+#6?)QeL|@;)Rr?gLs`^Pu>6_kwJW8W_9F4WLpvA#qMk<*- z*f@?0oT}MQaow<(2z+l%MS~eP4Z!h9zI$z?5DfItudc}YfGm3WE0gKych^oq1oniU zec&EW2R8dgH2Quj_U`r+FAZVtq3dK0PB>FY>Cr!w@?Th_=4q7GMjT5^(v8e<{}5ee z_x)#NY{Y;%kj(L6%C?K#^7(bL`MCg`bBe6FtcyVo(%=o5PJGgs z6czv-)XEShlv~~=oWBN^Z>1vP_GIM9H98fMLTvK(i61c2HhWWD1_a;SsqRq3Ekam) zW*6jTTiL%CS0P3H$g8`{L{jMf_eL<~Y`ld0cBdyf>iXcI;NJ`K^W(K4qsQr|@FYIu z4#9iTG8^ZbPGsVWc_ zN!p5<5P1ko!!Kn<2F-0&@=p-b4BeHn=_F+E5&bHM;@e$YM$8prt20bBo?sirT{G&V9;Bf71&vsp2^-kr|*-JzFuP8tZbC`yaJvw9t<~8y`!p6OZ zFc&w6}9z%yuvID%s#AB4!gAaV)`{bMf2(*?&!{T-I{jO)J^(CNaSGv$UZNiys&QY?jA{ zf&>H#fs3oTisgNf20r5<>_y352~+B5!Q*8=f`tzHsM)Z_018H%`?9?22u2)>(SBA4P!=rW=c%eKck3VPpna^tk^?XhTXoB}Jt0vreWciu?m=RC@Z zs+2e1d%do+Ir>*{9>t+4({A^7GaO*p-KB%{qnsPHlMP1Bwt5%b+$NnAxL#9*jNrD}nNE$%J8vNiA(cWa*t7fm;$6ZU;U0}$UC&3G#?$G<6qsEZndD%XxVg#Y zE-n?tMKQV3qv^ks5==)V7BQqpsXEgW6XL1M%y+@z{gk9CVaMSnF=DF8aV5COyho}( z9skm?jY`oWGD|!6DQYSSY~@hW;SH2-kMjXqrHfs@o`F8+i){{hf-j9*nn{9Qtfr6w z;jCCeYsSQ*%BeFZC3$+c^ZS04?9|bSt0uHBQyoa79xh8UEaMQuI{Q50^{4d{w0{z6 zsjf&TFd$G17V%@A_O~Sg_hNq#Au)aA7B5%+~9iH&XX-$@P~swcenHnN5ok zCd!b)+WYYKgNs0}=ckSY)ydW_6kyNqj`WoGcQsOA@FQ0g=6pPcns>l(-*q!q5y?P~ zq&klurLdomXh7%~GPe9-Uc{L-T0Xn{7jzwk>0zkoz~f3^ET$FBQ4KSa+iPuyzIk5c zaEj~z<}}vCDs>7)gUo9_h!bbc7tfp2m5?XtK|vq_z~ci|ULcu6J6a zMA5$r|Ee^>HaEDXE2Udv28vHk9{0PpXyYkT+3si{(C)mi&}}$#%avM6;5Hzjz3boh z7{uXyO4HcCGp;~>x6RaK{_kHo;G`#M!fCyzqH{XgySwM~hVQXbG6lyDv;>?UIAp;5 z7KbB|(VnMZz%2U}SeP1&m(_S-zv~9*+92zr=RF*AM2Y1)B7q1fr83)6kC>-M{ob0X zeU`bkp0ti%P0xq>P{}XdYcylhhpQ!;^5}|Og5Y2$56`P&Cezkdax#hx0%fqgLsgro z1Lh8m;PN9T$fu7RR>q(wBo1O+9&MJV>m9ORJvv9gdn&z2yx)uF@l`>DEKE(zi>p0t zezGvLSrY_)!Zdd)jwsM(b5#`T)SX|R2W#ye-h~oN>jSg#*Chj*QajFHZ@a8DGI7RO zCI$t)m(H4sLEL-lvq>`#Y21SB*_SI(|$QIeAXs_~bg~01pCrQ0q>0aT(abK=`t%=om`r zu?3tnRtLV!S_#YI-U)o<^tm^(rt9nb+<^tkJtyD-UBbXAfSy>BWlil6Km<7Q!THWj z^aWMOG;8B^d9$a?*S{%4hd-s=KBP)*PTMJdsh7n)dR`nx<=4f!TnoIo0_HXmFSrI$WwXzv01NU1*z2YyP6f`$o4V1TI52I|4%8(Ry(7rGea zuQqlaL;eQrHmQY^8vz?_ItB5BMu&3pJK{7lyQ>kB{oQkW+~y=|w73~gM;C!&hBOM$ zMkfK6$cr5ga)z(zIWCBE(5T80TflxKv-;0Y3_YlWMp!Cok&hQSVuaw4T+K`A(8U!~ zmOk7sj1uxkYwzcHI)-=yaIn4_w|L&bP80fEO@|Sg&lz)2J2Xs`#lJBS)>x^xU$yB=(b)eUog3b$df?OyH6ZU$HH{k znS;{gdHiVdXJHevJNF1vrq!{+7jdrft?56|p5cl^BAXTs7_ z6#}Gg`&S#mwh7M1c70=Ohorm!<=PUpEztl1Qu4zO-Z@K$efc!iDx7sUjm^R^bYrcY%4D-~1sCJC^Ie^`; zT)x#grIg|nph%7RYczW**+g+Dg-Cf-WyY%%=tpz5pDkhO3*@-6wzg+-$b$2BJqGs4 z?w!23numkP5=tg10fQT+SVDelh-m#DRZog}4F2cm@;U$w0PCOH-peRjfFBj*XjTti zN;QfeMM@JO223457vzWKRyhE$lXeVt;czhiO!##mGEH5(9u>8nu~`)b)FRS>B|<8T znL0=gGE)Zwr>qd1FleC(o?_0&qVbr>knT|aMRDW>rF7WOAfr`@)_C^lxBZhuBW2`z z^W>Ni6EA!0(@6c+;H0Aq@YL@lcTYa|H%&6&sWO>7h1Ff7vT$rD8CeTf&J8Ljk-P=A3%{yR}0Gvk!RhA zT^wOU&`Z9;UZMcr=^aJc917YMsV7bgaBiwz(V@aA^~%mF~L}W>1yhLoh-{o zzx{`*cffaLxy?6vw>MWbA>TXrl1&o}*sxmr9U(pyjjlv)W6IvCe;EF}{AoSkVpcBJ zdHpNQD!O8JHO(>McD&VDJ!l~dH5MDFfURx5+PV?oCp*nu@Aj&?VvZ#i+{f1t@8`Dn zvbMAaW5LTG9-W2kyZUJ?WqA1$nb_heK<%1bA}avC7!Tt`^Nppjm2ffzWf+@inYl(0 zSq=oj4u;0ZCsKtzax;pda84xgYI9rK!6~?#e<13i7Q_)iyv}J2LxJE1`XBR?Ez4?}=Jj>*J^b2+HO+R|1pq zj@IqXZs3XuE>0ES?>blzH4ajmnBvgdg6e2>VQ#TMCe{?#|HouOrzF4SFPi7BsVUx{ za@57GNNFYZ^6ZNxDXCUs-)?u3@y*|XGHi>vk5(m{SV!fpTeO+c4LvkE6r*l-2ki#TudUMxSaJ!?mbFZMzN>FCZs#iea%xls@6*3kMWfU_(yL*$ zZz-0d${X!@a?be&ofz2DaGRmBCnEEy{$@sksN|mcGe&uSjg1-JGdySEak+0EQB@oE9T;`C1jZv6h<>_~m}?`jA~Ypss|qC^ed$Hf({vnG#LO={k|z-mrvU~9Y^f*ba^Z=RldF=R zUhpOXk)^3UU;jtau}kCaicdy!x4UbC@5XU}OcdEExWhy@NM428*9+hIoj8qeVvR13 zX+^0QLs9ily()3aVl1lOlcf*sT|*S>}9V@`2+s^+$g|nt(qiM z9l~KPP-6+q(C(uKG*7CF&mc3*>^-mu9rp~~U z7t+!t$^SiObHv?hjTH*BivMcFKL!pVxs2bT>e^>SfwpqO7hTx{bMrdyqqd<>e)von zfp%+1d0om<9#+1-RQ8ZO2|SnwLzllEN8zkltO?oUNBjX$I3R4OtV|1zek$IE;)|Mx z3X-xIrs&|`gHz6uYup<~q7JtUT=T4STcKm3T z_X7xc44pGq=}eBm>aNd!vh{Y5reU3~C(d=gVllg&=0Tw-%$+t%U^}R-Bg>eFO z5w+?4Q_7G^7ol{Caxo`oJv&ioc_Pu}-Kh5F_*o0N^roHn5pygw)lPdYE|vV$CQzo|5~|PI5Q>wuBh65u43~>5$}$+Ym>5#u0BQzAtHaO zcu+h^gkL~o9S8^q!!CpxDX61RrTi|e|AL(4kT){c)=ddVZ^Y`M(Wn!)fOvpJlZLbj z$GpehwX>ML1U*i!E|rCuJ)gB? zEWrn@9aGyw6MCe!zM}Qs`y;Cx%u~{b-$%6M&C8P`3qPy5LLmGZ4wnE zl7P8h&5wBuR0sn$M-6}f8q`HGk=OFeNJO_qb`rKp@CzW0#y;EP@)}pWGzn03^YXp{ z>a4$dxVjxNJyuzn^eK*zIB1eUjeBPsZV>PZ=2y@S-*{y9ZhPa^Ew3YDooWj$UelH; z8dJNspuU)B(^2WPenb%Ke+OU{jSGNQzHgz*EDl}Wq75=urS{G@D;#I#07GiJwygV$30OG|66>L=waZGg(SjRPKIm8; zBWD6t!H**M<%}#poTNAEI)}=z84>h-Ibdfz=e4lTL{}qGey9qdmZ(RQl5emnARv#^{8A9y1`M4qbNDiT+EWJ0 zvD=lTXh&8niLVLS4xZOO)0eE^>nZlQB>x?+03}sm%-`IbC>O}z7-(C;2GmheUegV^ zuLpziEzQ=!Amz7&bP|05dJj4wz(R1(Kxw|_0ql1OhH;pi1 zOAu(h&JHb14x_e5=H~snWuiAv9oOPcb&4@H&nbu*Jb1u;p3dIrV zo@~Mk3i_V8inxlO_kgQKnKchk1@e;ASU|GSsnEb*Mf@vbdA!>?G)+T`?W+n$y2=XT)jyp#6s;;ArU+~F@uWJ34Lo9OAO;D>ow2cii0^%XK_tNNv^6uzk zy-*4$1F=@jnSaA-K}&qZdTnJQrxsU%5F%E1{Fl@h*E$0B@7h43emGlTrP3)S7=Znp z?89*N*HC#r6~&PcK)xP`Wm_PGaT%yaBuX8o>rJ{+dJp$w|LGu~@x;9T*AkFBB~Pa~ zZ&Psd!aoeYCitG#&%wM%BL%;APjk}O)1j!&Wx)m|I)`RgP7^;%jZ=u@QdUY~#u%Xb9psVg(h*bP<4OftSmVuGHUIMVdBm<6ON%Rb z(B!DCpN4|>8aYjjr&e84n~VR@NXX=$Og)@JXW3*73mFjXu1C^1e^OYZXCER>c?zp` zgPUN;8U@T_DH>k<@|F8gcOfus621@V+(6~zovS~IQN zPn-i+HG8LKvAMI7-pS4O{%&{^0}kQP%ZM1YQ4{EMXANmZH>e ziU1gpzCJN+dDbX1i)lxd1{1z1UwdO?BN$0R4S&UT9MvAst@-K+<{zX?R|Z@E(Ag=r zx%{Fb$6@LnGprh34ZDjr`v(TL?!Ps?C`MM$DcYRAI%#2Rx|D%(`VN7r6afWgfV z2PjbCfc1DsCj}#xzRcqR2Qj`zM;$v?t0ay#*LN|wA%#>C_OPIXLv%G36;FJ6f~>EO zIl{eESO4J02?98$RfN8ZOoQ#c32qcn2169SIZer5g5|&uHBvspH4_v3IY`k4zV9_T z3%{ODuk`TJF(+pKHTgNw^VQSfX3f9LB=^(&8V-5ZDk4avt<~|4mq>graYI5$lyu26 z1t{go7@wHB&FZ^i(EHV!rh3gxOHzSyN!ND|;J<(r8{i4$H!;J2uzs1|9}WPb`?tM3 zz+KD9C@LJ0Cdl`*xgK~A(m7C;1Yq8v3o}GfJHFR<0~}UA`U8go%;oSgbQoL_cp%N? z>bJZrs2RY~PlroyHz$+BS%)GUoPQgj0yS8Sl9#OPB{-oB#p8km%v<=n7S{e`gaMJ+ zar8!JXkbY=;0h*;{%%(sOQEB6BS0rOIo*_$-n}_?XPcA{ubp}`u~bOQ6T|TuVwS$) z3E(*9IP&eEZeA6soK6FkYRkdy`DE7BJ21bli?n_VEb7;~FNR^kRnNQtWJE_VF^44r z{_1=7={6|CFe>S2X<{$;=$!@cR8Y`pwm8@%Jyf==->HtB&;Ff~qbH5&TBXLru~lrG zQLJA+K5;sQl#$FXi4^z`Ycn!OlQbIL7(hOa=Rf$`F+nDx;$kHogV44QjZ_o-0m{V` zT@hG5r34Boug_itZ3v$@tl^PZ-Sorri3LFXi70duoAWfjB~F7+(u7mMH_!Lgx}J+3 zo4epDx}>Cmcx$zC)n`FW`2f)ICVqBduL;0ic z5jGj8Q?=tX6N6}vuEgB_p3)J#fR=EekiSxdVl{Q5;mx?R25T%Ofd=++U}8KsTHIIj z;(j2XzTt5_$8WsO;s6u6;VBR*k6cCDpYh_gKWfouws++(>23IZw$ zP@;FYKHC9j1ql$+rDg++qKBh+TNiay6=qQS@IHtuD|;eCmZaBXc;9f<6mX7?8b!xK zYysey+n}A&Q~Ub}kh|{DR!xYJz}dM-8@FD>`qx7S?0o#n(;>f#((kVM_C_m@m5oCp zeAE22=lw*^*R|)YnqQxiZ&payGM-gecI}oCw)MUyh0tBy<{kZA;oT*U;H78*R=U z49ZY8_$QjvyMUN(i+Td(dcOFjs<3vOJFa*BN_o@Jg&<#Fj=j&OBSv2# zJiCMU!)8UGnpY^WFCcFj>5%M~r!ygGdz#a*8iS#Qm@hT&`+K9Qz-H=dC}enc^HJLDJv#rIRk0=Ebc@HMnKyhNbyQ1L&j zdw`c0RLP{qkFK3N6X~5&=1_{;VDs z`G7D<=An}z5d$o!J4+{bZAk#^Bj$u;Lm>*GIC}JPMv7ydlyB>%ZA6>B6dGk_peh@) zxfa!e;FZqX|E_AUXFr#k{FI;qI{Ibe2+}um+W~cPEV-sXI``nlC!z0#Nj@Zc^$*5#$&oFrCCHBWd zU5cP95|i(qBK>gaKNKbq2;IG@i_s03w*jZ%v96ZSCxbomUFe9um_`9|!t;!4a_y_! zH~UmW1UDM@wI2iYwpX~=GlH=F@9Aey5RahysM*H>@I?T~;I|;vA06njMy1ws8@J7X z#ig_TG*j0mSzFKOhl0!oxl}(IOJU-)pUUB9xJLUs2j~op^6w%(U@pTYF*RK~z6D^j z+OO14GS6pP_e-U7N)9PuH$^9x_FV%<4i2+bB1l?f2tTG@cC%IsUr-ea5$!qYhW(C3 zHcfM)0K%k}1!TH(MzG4|dE1)5ii-siq~&Z1qIb9f zwi}fN4C*aJ`dD`Zo|PM0;K!Oqe?Yu1h^;d!en`>iu-q)?XCwD$R&i~1YPQY#cJW&t zlaykq(kK^i9DzGI?!l0QlaHUQSUUj{vNw`>jh55+YmLg{c=xO8ri%NZH6K@Nyxx)I zJ+yfU$&qMhc+{mZn8>denBwNA4x?iCp@E6RH!JE>jA}J_50*Y`e4HvAHmMok$ zGdB|iRJs&dm@5~r7T$=G4kUIf9&%i9EU?6flM04sk6TM5(15=GUN<-Un6MuwcJyXYcivr%dQY<Za`eP$B^%sDv0hBD$n1AN*k_!EG^=@Wix8| z6inl-*^=#-y`08Zv#O}7GDc5 z6u<-vnqWTq6#|G)OdtnBf+oe0mA8|d19gra_CxsenpC*{fE3z^XOp?vEENwZ92b%hf}!Uh-ouDDgQU5aq^Fu z5JGb?B>X^Hw)b)a4jqsk4fm14KE3uO$ii0f%3qkDy;fgmUGC9%#k<{5XfN(o=L^Qc zHF1t0j(21zLM*LQqgAiis0X!BUsQk}%?zB

    z3;izpd!+FPzhftCgj3doWG$_UZx zRnfej>Zc>(Og**4afKV{knnv?uGgwm-u7CRQ%M=b^SzhX<7CjiATMw~*`LJ>FNRPS z*XiLc!Y7h)XIOk(q_p;NMqFfiJs5*<4yNGjes{}x`E!qK&&lJXUH5Mpth}idz_}2o zl>p~5D8nw_5fjBHfVk1wOz8YnD+ny%`*NtgOW*y;PiKH_+8#F;R5*BW>x^IhI3SX3 z%q31koc4NMvXXe(6Z`%nKrP23 zPP;UjXjFoFB&4j8$&m7JF$3hCqTRX!JP>+1IyHIliC>p3i)oVlrkeobv6)<3Q|&rY z>+hT*9z4C3$vib6uGVucb}r-QsrI=_Ivd%#g^6`=CI7Lz{WvcYj@lnbKn@>cIWP%j z@rE8KFM(tOJ<^}ryPAAawO(cPG7wPrJ={IU<^r5V01>+R94XU>yQ$>zC%J0;P(WKe zSvrzA;I6TGdj8+%8%+Q=)QkXO5nEt_j{jeB2q%Ol|Hk<$f+!G;;^;Crwzz}kyRrlNiTpWXG77N59C_rDWJ$nN*JxX?L&$@W~=JrQhx zjhbfxNELq$ggCRNrR}|SMgd&MF=QPd&o_zA?Aw%9(T`l?6MpFgy=Z9VtA&L%5iX=v z_&^20w{@f3$3|==q}>*`uQ^S3Y}Z6|8F!WqK1da8w>L(I;cLVo|J4a*BRON(fH>eb zzNCzA9dkFfI_ilehzw{m-cjvbxg z{kW|BFBx4}BI*^hC_w=pQs2t3q(+o5Z-iHITutorsm5V%DK!rPzB~J^gc$Vw*qO5~8juxxX7O$f z%0ATr7}WVvT);7qR1S}q@u8eRo$;C_lc@&hi4D#=q& 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

    AZFQUBg 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

    XEWqRb}JZv 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 LP`6n7?xX(!-MF$e literal 0 HcmV?d00001