It demonstrated what can happen very quickly to an entire community and that is an experience that we just don't want to see going on around the country and around the world. Climate change is here, it's happening, it's real. All we have to do is look around at the weather phenomenon. We're constantly setting records across the globe, hottest days, hottest years, hottest average temperatures. It's impacting all of us. It's hard to imagine a dimension of human health that climate change doesn't touch. It deepens poverty, it threatens our food and water supply, it tears people from their homes. It makes large parts of the world uninhabitable. If you care about climate change you have to care about health and if you care about health you have to care about climate change. As a pediatrician my job is not only to take care of the children that I'm seeing in my practice but also to advocate for a healthy environment for the children I'm taking care of. The health effects of climate change disproportionately affect children, people of color, people living in poverty, the elderly, people living with chronic disease and as climate change worsens the health outcomes caused by climate change in these populations will worsen as well. There's been a coalition of hospital systems all around the world working to address the environmental footprint especially the climate footprint of healthcare so that the mission of healthcare is actually expanding to go beyond treating individual patients to supporting healthier communities and healthier planet. I think this is where we have the real opportunity of creating public-private partnerships and it's that synergy that I think will help us to really get at this problem and work on it together towards resolutions. I truly believe that if our policymakers and the public were able to understand better that climate change is an urgent human health issue, we'd be able to get to where we need to be to act on climate as a society. We need to take steps because this is impacting all of our health. Not everybody cares about energy. Not everybody cares about climate change but everybody cares about health. It's personal. Climate change is fundamentally a global health issue. It's about health. It's all about health. It's about health and we have the power to change the dynamic to advocate for health on behalf of all people.


Good afternoon, ladies and gentlemen, honourable guests and participants. My name is Christoph Legutka from Intel Germany. Many thanks for this opportunity to share with you some views on broadband policy role for transformation of education. The delivery of education is moving fast from blackboard and chalk towards digital content and multimedia. Broadband policy should pave the way for this transformation. Effective education transformation brings economic and social benefits. Students develop 21st century skills and competencies, better preparing them for success in the global economy. Teachers are better able to unlock student potential and help all students contribute to society to the best of their ability. Businesses benefit from better educated citizenry and workforce. Unemployment rates may decline according to OVCD. Unemployment rates are nearly three times higher among people without an upper secondary education in OVCD nations. As education quality improves, it creates a better social climate, narrowing the digital divide, creating opportunities for a better life and preparing students to lead their communities as 21st century citizens. ICT and education will increase the demand for broadband usage and applications. Therefore, we need to connect all schools and classrooms with broadband, as well as donate schools, classrooms, students, teachers with the ICT technologies. Students will teach digital skills to their friends and families, and the whole society will benefit, not just the students. Education transformation is in the reality an ICT-based education transformation process. Why do we care about the broadband policing context of education? Widespread, affordable and high quality broadband connectivity is a key for education transformation success. Therefore, the modern broadband policing should enable and promote robust content and application ecosystems, facilities-based competition and targeted and efficient subsidies in high-cost areas. On 14th September 2016, the European Commission has published legislative proposals to establish the European Electronic Communication Code, an action plan, to deploy 5G across the European Union as from 2018 and to promote internet connectivity in local communities and public spaces. It is presented in the document called Connectivity for a Competitive Digital Single Market, the words a European Gigabit Society. Current European Telecoms framework is successful in bringing competition to the market, but less successful in promoting investments in ultra-fast broadband in the last mile. In our view, the new European Telecoms framework must foster incentive-based competition and favour exposed oversight over ex-ante control. Remedies must balance the impact on incentives to make risky, expensive broadband investments as well as on static competitive benefits. End-users' interests and rights must continue to be observed. Meanwhile, it is commonly recognised that the optical fibre is the only future-proven base technology for 5G or fibre-to-the-X broadband networks. Supporting services like e-education, e-government, e-medicine, vehicle-to-X communication, multimedia delivery, cloud computing, big data processing and much more. Following this demand, Intel is proposing policy modification to support risky and discretionary investments in ultra-fast broadband networks in the last mile. The basic postulate is that no access requirements unbundling should be imposed on incumbents' fibre networks where there is an effective competition. Competitors have access to ducts, conduits and poles, as well as regulator continues to monitor market performance. Concluding, please let me say that to support educational transformation, schools and students together with their families should be equipped with modern ICT tools like digital content or multimedia devices, as well as having access to the widespread, affordable and high-quality broadband. To accelerate this transformational process, the regulatory framework should be modified to foster investments and financing of broadband access networks in the last mile. One of the basic measures is a liberalisation of access requirements to the networks. It means no unbundling obligations for optical fibre in the last mile. Ladies and gentlemen, let's work together on success of the educational transformation and of accompanying broadband policy reforms. Many thanks for your attention.


At 1.27pm Pacific time on the 27th of February 2017, SpaceX announced that they would be sending two private citizens to the moon and back by the end of next year. What a time to be alive. And this is your space pod for the 28th of February 2017. This whole event started after a cryptic tweet from Elon Musk at 5pm on Sunday the 26th of February stating that SpaceX would have an announcement at 1pm Pacific time the following day. Many people started to speculate about what this announcement would be, theorising it might have to do with SpaceX's spacesuits for their Crew Dragon to counter the recent release from Boeing of images of their spacesuits for their CST-100 Starliner. Others speculated that it would be a date confirmation for the first flight of Falcon 9. Or maybe the first reused Falcon 9 booster flight. And in the usual Elon fashion, 1pm came and went and there was no news. The reliable space journalist Jeff Faust was one of the first to break the news via Twitter. He'd been listening in on a media teleconference. A statement was released on the SpaceX website. It said the plan was to launch two humans around the moon in a free return trajectory, landing they won't land on the surface. They are targeting a launch date of the last quarter of 2018. The web post stated that this mission won't launch until Crew Dragon has successfully started delivering astronauts to the International Space Station first. But the question that's on everyone's mind is who's going? Well speculation is rife but a few potential names have been mentioned. Flight director James Cameron has previously expressed interest in going to the moon on a board of Russian Soyuz. But this has never officially been set in stone. Maybe it's Google founders Larry Page and Sergey Brin. Or maybe it's US President Donald Trump. Until the names are announced we just don't know. According to Jeff Faust, Elon has stated that the price will be in the ballpark of what it costs to send an astronaut to the International Space Station. After upwards of $30 million or more. So it has to be someone that has that kind of money. Which unfortunately isn't me. While I'm really really excited about this announcement, so many things have to fall into place before this historic mission can occur. Falcon Heavy, the vehicle that will be launching this mission, is yet to have its first test flight. The Crew Dragon capsule is also yet to fly and will have to send astronauts to the space station first before this mission. We'll also need to get more information about SpaceX's spacesuits too. All of these things need to happen without significant delays before this mission, which people are now calling Grey Dragon, can even launch. There's also the issue of Launchpad 39A, which is where this mission will be launching from. It's only just recently come back online. So anything that's not listed on the SpaceX website or through reputable sources like journalist Jeff Faust is simply just speculation. And speculation usually doesn't help. But it can be fun. Something interesting to consider is the recent NASA announcement that the Space Launch System, or SLS, First Mission, Exploration Mission 1, will possibly carry astronauts on board. It was originally scheduled to be an uncrewed test flight. So I wonder if the timing of these two announcements is related. Let me know what you think in the comments below or via social media. And of course, this video would not be possible without the generous support of our crowdfunding Patreon patrons. Without their generosity, we would not be 100% crowdfunded. So thank you so much, so, so much to our Patreon founders, architects, ambassadors, engineers and dreamers of tomorrow for all of your support. We could not do this without you. So thank you. My name is Lisa Stajinowski and whether you're moon first or Mars first. Until next time, keep on discovering.


Okay so good afternoon everyone and obviously I wish to thank you the organizers because this is a very nice opportunity for me to join this this course and to present something that is somehow parallel to the topics we are we will hear during the week. I will talk about machine learning and neural network applications and I will introduce these topics but I will focus mainly on artificial neural networks because they are probably the most useful simple ready-to-use tools you can you can find and there are some close relationships to other methods you will discover and you will learn during this week. What is machine learning, artificial intelligence and how they relate to other disciplines in similar areas. Well in this in this scheme you can see that basically we have data somewhere and we have sciences that deal with the extraction of knowledge and discovery of knowledge in large data set but different approaches are possible and statistics is probably the the most popular the most widespread. Somehow when you need to recognize patterns you are partly dealing with statistics and partly dealing with something else and something else is in the field of artificial intelligence and machine learning. It is not something that everyone agrees upon but usually machine learning is considered as a kind of subset of artificial intelligence that is a broader field. A broader field because it also deals with something that is not related to computational issues that is related with cognitive or philosophy whatever you can think about intelligence and the way we interact with machine. If we look at computational issues only then we are dealing with machine learning and artificial neural network are part of this of this latter group so they are both tools useful for artificial intelligence and they were developed as tools for understanding intelligence but then they became something that is closely related to machine learning so solving problems. All the activities we can carry out using data as a whole are something we can call data science while computer science involves also the way we manage data that is a broader context. As for the relationship within statistics and machine learning in the slide we just saw there was no overlap between the two but actually the relationship are a little bit more complex. Leo Breiman was a statistician and a machine learning specialist. He was convinced that statistics deals with data modeling and machine learning is something that deals with algorithmic modeling. Statistic focus on data properties of data takes that we can do with data. Machine learning deals with the way we can use data process data and the way we can exploit algorithms to solve problems. The situation we are facing is that the amount of data we have to deal with every day is increasing very rapidly and the knowledge we have to deal with this data is also increasing but not as fast as the data amount. So the real problem is that our expectation are increasing much faster and everyone thinks that we have a solution, reason, a good idea about just about everything. This is of course not true, it's not possible because our knowledge is limited. So we have a difference that is increasing and in order to bridge this gap we need some help and this help can be provided by machine learning and artificial intelligence. Let's think about these two definitions as more or less the same thing, more or less. Okay, what is machine learning and what are the main technique in this field? The real list of techniques is much longer. So what you see here is just a few main types of technique. Classification regression trees, I mean binary or not even binary trees with multiple split. If there are taxonomists among you, when you need to identify a species you have a key and you have to answer a number of questions sequentially and this is exactly what a classification tree does. Artificial neural network is what we will be discussing today. Support vector machine, genetic algorithms, case-based reasoning are other techniques. If you are curious about them I think we will have the opportunity to discuss after this talk maybe this evening so I would be very happy to answer all your questions. But we have limited time so we must focus on our topic. I want to mention however the ensemble methods among which random forests are probably the most popular and the most useful because they are probably now the most useful algorithm we can use for classification tasks. I'm not saying the best algorithm because there is a nice point of view that I will mention later on about what is the best algorithm. Random forests are basically a combination of classification trees. So we accept the idea that if we can develop something that learns more or less good enough but not really very well and then we can combine a large number of these weak learners then the combination of the weak learners will be much more effective than the individual learners. So 100 classification trees are able to provide much better prediction classification than a single classification then the very best you can train. And there are other methods that are not based only on let's say averaging the result of a single method. Other methods are based on a kind of sequential processing. You develop a first model and then you get some residuals between your prediction and the true result your targets and then you develop a second models that try to narrow the gap between what you predict and the true data and so on. But even in this case I would be happy to answer all the questions after our talk. So let's focus on artificial neural network. What is a neural network? I guess that you probably already saw something like this or maybe just read something about neural networks on a newspaper scientific review even in some scientific papers. But basically a neural network is a set of very simple processing units and these processing units are connected with each other in a very complex way and this is what makes a neural network a powerful tool. What is the history of neural network? The concept is very old, more than a century, because the idea of the way in the human brain is able to learn is something that dates back to the last decades of the 19th century. But more or less during the Second World War and after that the first practical implementation was obtained. I mean practical implementation of a theoretical idea. So it was something that was not really able to tackle a real problem, something that was just kind of concept demonstration, not more than that. But the first rules for functioning of artificial neural networks, the first kind of very, very, very simple neural network, dates back to the 60s. But something happened during the 60 and two very influential authors, they showed that these perceptrons, these very simple architectures of neural network had limitations. They were not able, with the knowledge of that time, to solve practical problems. And the consequence was that during the 70s most people abandoned the study of neural networks. In the 80s, there was a new start. And it was not exactly a fresh start, because under the ashes there was still some activity. So there was a new start based on previous knowledge. Tevo Kohnen first published a paper about self-organizing maps, and we will discuss about self-organizing map today. In 82 and in 86, Ruhmelart and his co-worker published a paper about the error-back propagation algorithm that was finally able to make a neural network work, solve problems. And that was the start of a new era in neural network applications. In 1991, Kola Santi, that was not an ecologist, wrote in a paper that he was sure that there will be ecological application of neural network. And I guess that no ecologist read that paper. But in the mid 90s, the first ecological application, I would say the first biological application, or the first application in old field of neural network, appeared. And since then, the number of applications is constantly increasing. The next milestone I want to mention is in 2006, when deep learning appeared. Deep learning is something related to more, I would say, different learning algorithms, able to train much more complex structure that mimic the functioning of human brain more closely than the neural network that almost everyone is using now. So this is our future, but it's something that already exists. Okay. Of course, there is a close analogy between the nervous systems and artificial neural networks. What makes them similar to each other is that both are comprised of many units, and these units are connected in a very complex way. But if we think about the most complex neural network that we have at the time of our talk, the most complex neural network is probably less complex than the nervous system of a fly. So there is still much, much, much, much work to do. Okay. The kind of problems we can tackle with neural networks, most common is function approximation at, say, empirical modeling. If you can do something using a general in a model or something like that, you can do probably better with the neural network. Pattern recognition, classification, clustering, forecasting. I mean classification. It's more or less like pattern recognition from my viewpoint. Here you know the categories you want to recognize. You don't know whether there are different categories or not in your data. Forecasting just another way of modeling and so on. The learning procedure can be supervised if you already have the answers you are expecting from a neural network. You can teach the neural network the right answers. Unsupervised is when you want to discover the structure in your data. And based on reinforcements is something that is more useful in industrial application. It's something that deals with, let's say, you know, the Google car that drives by itself. That is probably a good example of reinforcement learning because the car learns to get the highest reward from the possible choices. If we focus on the most popular, the most typical applications, pattern recognition is something that deals with groups of different objects, observations, samples. And you want to, for instance, to define the species of an individual, of a specimen. You want to detect the species or you want to detect some other property of your data. Clustering is when you want to find the best way to separate homogeneous group and obtain homogeneous subsets of a larger set of observations. And this can be done in unsupervised way. Here we don't have the right answer. For pattern recognition we must have the right answers and we have to teach to the neural network how to recognize our object in a proper way. Another category is regression. You know the values for one, two or many independent variables and you want to get estimates for one or many dependent ones. You want to fit a series of data and extract a more general way to relate these variables. And then this is also a supervised way of learning. But the search for an optimal behavior is based on reinforcement, as I was just saying. Okay, I will skip my own application because I think it's not really relevant and we are running out of time. It was just to get you a broader idea. But let's see how a neural network is designed. This is a three-layer perceptron. So a multi-layer perceptron and this is three-layered. We have some nodes or neurons that are the input nodes. Here we put the values for the variables that we use as predictors for others. Usually the data are scaled into a 0 to 1 or minus 1 to 1 interval because we want to normalize our data. The output is the rightmost node that outputs a normalized value that must be converted back to the original units if you want. Here in the middle, we have a number of connection, of synaptic connection, and each connection is associated to a weight. There are two in this case because we have three layers and so we have n minus 1 bias nodes. These nodes work as the intercept in our regression. So it's something that we only need to move up and down the output of the network. Okay, now let's have a closer look at the so-called hidden layer, what is between input and output? The hidden layer is something that contains nodes, neurons, that collect all the inputs, sum all the inputs, and use this sum as the argument for an activation function that turns this linear combination of inputs into the output of the node. Okay, so into the response of the node. And actually this combination of linear, combination of inputs, and non-linear transformation is what makes a neural network work. The activation function is usually a sigmoid function like this. This is not the only way you can use an activation function, there are others, and in some cases the output unit has a linear activation function, just makes a linear transformation. What has been demonstrated is that if you have a neural vector like this, provided that the number of nodes in the hidden layer is large enough, and provided that you have enough data to train the network, then you can approximate every function to the accuracy level you desire. It was proved in 1989, but then in 1991 it was proved that this property was not related to the activation functions, but on the three-layered structure. So it was the hidden layer, the root for this property, provided that the hidden layer had a non-linear activation function. Okay, how does a neural network like this learn? We pass to the neural network examples, and we know the answers. And our goal is to make the artificial neural network learn, but learn to generalize, not learn by heart. And this is the most relevant problem. And we will discuss this in a minute. Testing data, so a data set that is used only to test whether the neural network works properly is always needed. And this is something we should use independently of the method we are dealing with, if we want to compare different methods in order to avoid circular references. I won't go into the detail of the back-reparation algorithms, because we don't have enough time. But basically, we initialize the weights randomly, or almost randomly. I mean, almost randomly, it means that we can narrow the random range of the values. Then we pass a pattern to the neural network using these random weights, and we obtain an output value. Then we compare the output value with the known target value. And on the basis of the difference between the two, this is in red, and on the basis of the derivative of the improvement in learning in the output, we can define how large must be the change of the weight that we can use, and so on. When the error is small enough, we can exit the procedure. This is in theory. In practice, this is what happens. Imagine you have independent variable elevation and dependent variable species richness, a very simple model. One input, one output, only two neurons in the middle. Bias nodes are not shown here. Let's start the training. It may be a jump, but we can probably start over. But you can see that the red line is the output. Okay, now it works. This is the output of one of the hidden nodes. This is the blue is the output of the other hidden node, and the red is the output of the network. As you can see, the weights that connect the hidden layer to the output are negative, and in fact the shape of the curve is reversed. But basically, you can see that the longer you train, the better the red curve fits the data. This is a very simple example. It seems that everything works very nicely, but there are problems. There are problems because in order to get the best weight, we have to look for a minimum in the error surface. In a surface that is the relationship between an error measurement, let's say mean squared error, and the weights. This is only a line, but you can imagine that in two dimensions, this is a surface. In more dimensions, this is a hyper surface. But the problem is always the same. You have to start with a random guess, and you can find yourself in a local minimum. This is not going to work, so we have to try again. And you can be a little bit more lucky. This is a better solution, but still not the best one. So the training procedure needs some tricks to help the network learn. For instance, if you add some noise to the weights in the neural network, when the training stops, when you are stuck in this point, if you add some noise, you are basically shaking your neural network, and the learning can start again. And if you're lucky enough, you can find the true minimum, the best solution, but it's not so easy. This means that when you train a neural network, you always have to train again and again and again as long as you can, and you will find the best solution if you have enough time and computational power. During the training procedure, if you look at the error relative to the training set, to the data you passed to the network for teaching, then the error decreases steadily. The longer you train, the better you get. But if you look at the error in a validation set that is not passed to the neural network as an example, then this error will decrease and then will start increasing. Why? Because somewhere there is a minimum, but up to this point, you are training a model. From this point on, you are training a memory, something that learns only the pattern you show them. Imagine you have a person who is in a large library, can learn everything that is in that library, but that person is never being in the real world. The knowledge he can collect is probably part of the knowledge you can get if he compares theory, examples, and real-world validation. So we have to combine these two kinds of information, and we have to stop the training when we optimize the learning relative to the validation set. There are some tricks that can help to avoid this problem. For instance, imagine you have this kind of B-variate problem, more or less like the same we just saw, and we expect to train a model that has this kind of shape. But if we overfit the model, if we train too much the neural network, then what we obtain is like this. It's like using a very high-degree polynomial. You can fit whatever you want, but it doesn't have a meaning. So what we can do? We can use something that we call jittering, and so we add some noise to the data we have. So we use not a single point, but we use a kind of interval, and we fit those intervals, and fitting the intervals makes the response much more smoother and smarter than fitting the points. This is a practical consequence of overfitting. This is a typical problem, primary production at different levels of phatoplankton biomass, and this surface shows the relationship between irradiance, photic zone depth, so kind of transparency, and production. Obviously, a shape like this is not likely to happen. You can't have two maxima in primary production for the same level of irradiance. There is no reason for that. It depends on transparency, but you cannot have two maxima. Just one. Two maxima is not possible. You can have two minima in that curve because you can have the optimum for intermediate level of transparency. It doesn't make much sense, but in theory it can happen. But for sure, you cannot have surfaces like this, two complex, no biological milling in them. So this is what happens when we overfit a neural network. To avoid the overfitting, we discuss about early stopping, to jittering, but we can, for instance, pass the patterns for the training in random order. So the neural network does not learn the sequence of the examples you provided to it. Or we can use weight decay. This is a smart trick that involves some steady decrease of the weight. So basically it's like slowing down with your car. It's easier to drive the car if you slow down. And this makes the same trick with the training. And the last, and from my point of view the most interesting, is that you can add to the training procedure some penalties if the solution you obtain is not ecologically or biologically sound. If you recall the picture I just showed you, those surfaces representing primary production as a function of irradiance and transparency, that surface must have only one maximum. There are no other possibilities. So if you compute a partial derivative of that function, of that surface, and you apply a penalty to a network that does not comply with the shape you are expecting, you can drive the learning using a biological constraint. This is very interesting for ecologists. In general, the first point is somehow trivial, but it's important. So we don't want to have to deal with variables that are not at all in relationship, not even nonlinear relationship with our targets. If we have this kind of problem, there are other methods in machine learning that are not sensitive to non-relevant inputs, but neural networks are sensitive. If we want to model a continuous response, we want to process something that must be smooth, continuous, and we want it as more changing input, it's as more changing output. And of course, we must have enough data. Enough data is the main thing we want for a neural network, in any case. So we need at least two sets of data, one for teaching the neural network, this is a training set, and one for validating during the teaching, during the training. Then if we want to compare different models, so compare the neural network with other models, then we need the third set, the test set. But let's see how the computational part of what we are discussing work. This is a neural network similar to the one we saw in a previous slide, and imagine you have 0.25 as an input value. What we do is just to compute the linear combination from these two nodes to the green one, and the linear combination is 0.449. You can see here the computation we do. Of course, this is 1 times 0.57. 1 is omitted here, obviously. So we pass this value to the activation function, and the output is 0.62. And now we know that this node has a 0.62 output, and then we can do the same with this node, and with the output node, and the overall result is 0.55. So our function turns input value 0.25 into output value 0.55. Computations are very simple, and you can write 10 or 12 lines of code to run your neural network once the weight of the network has been defined, of course. So this is very easy to run a train at the network. It's a little bit more complex, but not too much complex to define this weight. This part is only for normalizing data before passing the data to the neural network. So computationally it's very simple. Is the training algorithm we use really critical? We just talked about error-back propagation, but there are other algorithms that work as well, or in some cases, better than error propagation. But the truth is that with ecological applications, that are not real-time applications, the training algorithm is not critical. So if we stick with error-back propagation, we can get usually the best result we can hope to get from a neural network. There are other types of neural network, only the multiliner perceptible. No, there are many types. I want to mention very quickly the radial-basic function networks that use intermediate units that are not logistic in their activation function. They have some other types of bell-shaped functions. The difference is that the activation depends on the distance between each of these processing units and the input array of values. So it's something that recognizes a pattern that activates only a few of these units, depending on their distance from the input pattern. Then the second step is just like the multilayer perceptron. I just want to show you this slide. Imagine you want to find the way to separate two groups of objects, like this typical classification problem. A multilayer perceptron finds this kind of boundary, a radial-basic function network finds this kind of boundary, because it's based on a number of small radial responses. So you can combine radial responses in a very complex way, but basically you can do that. If you want to deal with the time series, if you want to get forecasts, then there are some recurrent architectures that feed some context neurons that are not input neurons, or something that works as a kind of memory of the previous states of the network. This can improve the ability to predict in a time series. This is the so-called ELMAL network, and this is called JORDAN network. The difference is that here the context neurons are fed by the intern neurons, and in that case they are fed from the output neurons, but the way they work is very, very similar. I want to show you just one example. My experience with neural network started in 1996 with this paper. It was just a comparison of a typical linear model for primary production in Chisabic and Delaware Bay and two neural networks. This is a model that combines the data from the two bays. This is the neural network that combines the data from the two bays. This is a combination model that distinguishes between the bays and this is the neural network that is able to distinguish between the bays. You see, there is an input node that has Bay as an input. It's Delaware and Chisabic. It's a kind of switch between two different ways of functioning, and of course there was a huge difference in accuracy. Then there is a story about this, but we don't have time, and I have to skip this one. I was, there's a way to skip smarter than skipping actually the slide, but let's talk for a minute about how we can open the black box models just by sensitivity analysis. There are several methods. I mentioned some of them. The easiest one is just to look at the values of the weights. Larger weights means probably more relevant variables. It's not very effective. Then you can also try to see how the neural network behaves if you take only one variable and make that variable vary from the minimum to the maximum, from zero to one with normalized data. I always use a different method, just perturbation of the input patterns, and there are other methods based on partial derivatives of the response of the neural network. It's something that probably is not optimized, not yet. What you can obtain is a ranking of the importance of the variables, and you can try to figure out their role, but you are not able to figure out how they interact. So second-quarter effects are out of your reach, and this is a serious limitation. Of course, you can also look for the amount of change in error that depends on the amount of perturbation you had. In some cases, you will discover that small perturbation does not affect the error. You can think, but probably the network didn't learn. No. This is a good proof that the network is able to generalize, because if it doesn't respond to changes that are not relevant, you are probably dealing with a good solution, more robust. The ecological problem is that there are some parts in the space of our data where perturbation doesn't make sense. If I do sensitivity analysis by perturbation, and I'm dealing with elevation and temperature in reverse, does it make sense to perturbate an input value assuming that it's a very high elevation, the temperature is very high? Because it is not possible. And it is not possible that the temperature is low if you are close to the mouth of the river. So from an ecology point of view, perturbation of data must be smarter than just adding or subtracting something. There is some work going on, and a PhD student of mine is working on these issues now, almost ready. Okay, a few minutes, ten minutes, to talk very briefly about another type of neural network, the self-organizing maps. They are using unsupervised learning in most cases. There are some types of self-organized maps that actually do supervise the training. And the SOM, as the acronym is, basically is a combination of units that have the same structure of the input data. That means that if you are dealing with a list of species, typical community data, then the structure of a unit in a self-organizing map is a list of species with abundances. And what you can have is something that works like a clustering algorithm if you use only a small number of units or something that resembles an ordination if you use a larger number of units. Okay, if you think about the color picker in any office software, this is what a self-organizing map does. So you try to put colors that are similar to each other close to each other. And this is what the self-organizing map does. Okay, how do they do that? Imagine you have your list of species in N, in this case in P samples, P observation, and N species. This is the map we want to train. We can use rectangular maps, hexagonal maps, smaller, larger clustering, larger ordination. A hexagonal has a better topology, but rectangular is good as well. Okay, let's imagine that we have this map and this square is an array of values, like this one. We initialize with random values, then we pick at random one of our samples and we look at the unit of the map that most closely resemble that sample. Of course, it will be different, but we can find the closest unit. Once we have defined the closest unit, we change the values of this unit that, again, are exactly a list of species in this case. We change those values in order to make that unit a little bit more similar to that sample. And we also change the units in a neighborhood, but we change the neighborhood less than the best matching unit. And we go on with this kind of training, on and on and on, as soon as we have a structure that doesn't change anymore. At that point, we put all the original observation, or our samples, we project these samples onto the network. Usually, this is done using Euclidean distances. Most of our application, all the application I know, use that distance. But it is possible to use any distance, if you want to. Break artist? Okay, break artist. In order to project the units, we only have to find the minimum distance. This is the structure of the SOM unit, and that is the structure of the sample we want to project. And we have just to find the best matching unit. This is a real application with a number of samples, and the structure of each unit is a list of species. In this case, each species has a probability of occurrence. And I want to show you this example, that is about butterflies of the small island around Sardinia. You know the biogeography, the island, the mainland, all the theory. That's the idea. So we want to understand how the species are distributed in this case. We can train the self-organizing map, project the samples from the different island onto the map. And this is what we obtain. In this unit, you see the real data, presence or absence, the values of the self-organizing map, continuous values or binarized values, and all of them are matching. So this is a very good representation of the tabular island butterflies. What we can do with this map, a number of things, for instance, we can explode the map, and we can pick each unit. This is just an example. And we can compute the distance between this unit and all the neighboring units. And we can use different gray shades to represent this distance. And the average distance is the shade of gray of this unit. Then we can decide whether we want to keep all the intermediate units or discard them. And we can obtain a representation like this, where lighter shade of gray means regions of the map where all the units are more similar to each other, and darker shade, kind of ridges that separate different areas of the map. Is this map related to the ordination technique we discussed in morning? Yes, of course. This is principal coordinate analysis based on Euclidean distances, and this is the self-organized map based on the same data, Euclidean distances. The circles around the labels show, say, MADDA and ASI, MADDALENA and ASINARA, samples that are in the same unit or here in the same group. Look at this group of observation over there on the upper right corner. And then these are in lower and so on. So you can see that the structure is obviously the same. So why should we use self-organizing map if we can obtain more or less the same results with a well-known and well-functioning tool? Because we can do something more with self-organized map. We can do more or less the same thing even with ordination techniques, but there are some advantages. You will see tomorrow when we practice. For instance, I can represent the density or the probability of presence of a species over the map. So Vanessa Atalanta is much abundant or frequent in this island, less abundant in those. But this is very easy. You can use some bubble cloth on the ordination is the same. But then you can also add some other variables on the map because you can interpolate external variables and add them on the map. And you can discover something about what makes the species behaving that way. This butterfly is typical of the higher part of the Mediterranean vegetation. So it's not to the sea level, only from 100 meters on. And this is the maximum elevation of the island, and that is the frequency of that butterfly. So there is a close relationship but we can do many other things. I guess we will see tomorrow something more. But I want to use this last minute just for some take-home messages. Multilayer perception and self-adverting map are very useful. They are not magic. You can tackle the same problem with other tools. But these tools allow some, let's say, some craftsmanship. You can change the way they work. You can adapt them to your problem. You can use them in very different ways. There is no one right way to use these tools. You have to do some experiments. You have to adapt them to your needs. There are some art packages for almost everything you can do with artificial neural network. But the problem is that when you have big data in the sense of large dataset then you will discover that especially with neural networks art can become a bit too slow. So if you want to do some real work with your neural vector you will end up writing, compiling your own code. And even if you want to implement some of the methods we just discussed here and there are many others. So art is a good environment for the main types, for standard runs, for experimenting, just to get started. For 99% of the people it's good enough. If you want to do some real work then you need something else.  Now you're a little bit more familiar and tomorrow I hope you will have the possibility to get started tomorrow or next month if you want. What you cannot learn quickly is to add some ecological thinking because you must always be first ecologist, then modeler or data scientist. If you ever worked with someone that was not an ecologist very good at dealing with numbers with algorithms but with no ecological knowledge then you are losing something. Sometimes it's necessary because you need technical skills. You have to ask someone for advice for instance. But ecological thinking is the basis for good results and for sound results especially. Remember that if you fall in love with a myth, with a theory, with an hypothesis and it's very easy then you're probably out of business because that is not the right way to do it but everyone fails, me for sure. There are no such things like too many data. It's always a good thing to have too many data. Too many variables depends on the methods but we can use that. When we have not enough data, not enough record then we are really in trouble. Do we have two more minutes for the last slide? I can jump because you see that small triangle there.  Thank you. I have one more slide but I want to show you something that is a good synthesis of what me or everyone who worked with this kind of problem will learn. And this is partly by Leo Breheimann partly by these two other authors. Rashomon. If you remember the movie that was based on four persons who were telling the same fact from their own point of view. One of them was not a person but someone who was dead and was talking through a medium. But basically there is no objective truth. So there is never the best, the most adequate method, algorithms. It depends on the way you define your problem. It depends on the constraint. A second viewpoint that is a consequence of the first is the no free lunch or no free meal, as you prefer, theorem. This was demonstrated. So if you take two optimization algorithms and you test them over a wide range of different methods and situations you will never find the best. So there will always be a setup where one of them will be better than the other. So no best method at all. The Ockham razor, you know that. But when we deal with machine learning the problem is simpler is better. No, because simpler can't adapt to complex problems, cannot represent complex behaviors. But complex is very difficult to train and complex can turn to learning by heart, learning to memory. And this is not what we want. So it's not always true that simpler is better. Ensembled method, those based on the, using a number of algorithms and then averaging, for instance, their results is a typical case. It's much more complex but it actually works better if properly trained. The last point is the so-called problem of the high dimensionality of our data. The curse of dimensionality is a problem related to the fact that if we have a neural network with, let's say, 100 weights we can't train that network unless we have thousands of records. We have to train a network so complex with a handful of records. But if we use proper approaches then we probably can take profit of the higher dimensionality of our data. Many variables, a lot of opportunity to use them in a different way to find one of the models that performs not the best but the best we can afford with our data and our knowledge. Tomorrow we will practice a few of the things we discussed today and I hope that seeing what happens will help you to understand how useful these methods can do. They can't substitute, they can't replace good statistics, good ecological thinking. There's something else. It's another tool in your toolbox. Thank you very much. If you plan to practice tomorrow at this address you can find scripts and data we will be using. These are the R package you have to download and install. These are some of the programs I'm using. There are no explanations, no manuals but I will talk 10 minutes tomorrow about them and in case you want to try something that is not only R, for instance for large dataset I would be happy to share them with you not only the programs but also to provide you the direction for using them effectively. So it's an alternate solution, not the best one. Thank you very much.


Hey guys, it's Nate, AKA the Foot Accountant. Welcome back to the channel and welcome to the new house. If you saw my Twitter video, I did move to a new house. We're in a different area. That's why everything behind me looks totally different. I'm in the process of moving in. So we're going on with that. You might see some more things changing in the future in the background, getting a new mic. Don't worry about that. It's just the way that it's kind of going right now. I'll try to stay consistent as long as I can with putting these videos up as long as my equipment is up and running and everything. And if it's not, I'll let you know on Twitter. Other than that, I have started live streaming again as well at this new place. I can do that. So check my Twitch link down in the description. I don't really have a schedule just because it's going to be pretty random when I go live. But again, that's going to be a thing you can follow me on Twitter and get notified when I do go live. But enough of that being said, it is Monday. Time for our market outlook video for this week. We need to take a look at the La Liga team of the season that is currently in packs. It's going to be going on this week. And excuse me, League One team of the season. I always say those two and get them mixed up. League One team of the season is going on right now. And it is Sunday night. And you know what that means? Sunday night is the time where a lot of these cards do get pretty cheap because people are selling off their clubs from the weekend league, especially this DeMaria card is very low. He hasn't been under 500K this entire weekend. He's about 470K right now. Some of these top cards have dropped a lot. But also some of the other special cards in the League One have dropped a lot as well. And I want to kind of talk about these cards going into the next week. Now, it's not going to be as easy as I think in weeks past because we have ultimate team of the season coming up this next week, which is going to be an interesting thing for the market. They're going to be releasing a lot of these cards in packs. And looking at this team right here, I'm assuming Mbappe, I'm assuming Neymar, are going to be re-released into ultimate team of the season and maybe even like a Pepe depending on if they go by ratings or ratings per position. You might see like a Pepe, maybe even a Lala or Furlan Mendi make it back into the ultimate Tots on the bench or something like that. So I'm interested to see what happens for ultimate team of the season. And we don't have to talk about that too much just yet. But I think that could affect some prices this week of these special cards. It could affect their rebound as people are really realizing, hey, into ultimate team of the season, we might have to sell some things because these cards are going to be back in packs, especially watch your Premier League Tots cards. I'm kind of going off in a tangent right now, but watch those Premier League Tots and watch those team of the season cards that are going to make it in like a Royce, like a Van Dyke probably as a center back and then maybe even somebody like Hazard as well. Watch those card prices. They should drop heading into the promo this coming Friday, but then they should continue to drop throughout the rest of this week, the next week as their impacts. But we need to get back focused on this week. Marquinhos, and I want to talk about these League 1 special cards. Yes, I do think they're going to rise, but you're going to have to be careful with which cards you choose. It's honestly going to be like a card by card basis this week. You're going to have to look at which cards are rare and which ones have huge price gaps. Marquinhos has gone up a little bit, 124 because his Tots card, which got a massive boost, is more than double the price. Very popular card, very easy to link players from this team this season, especially because you have a guy like Thiago Mendes who is a very good looking card and he's kind of a middle of the road type card that a lot of people are going to pack maybe when they're guaranteed or during upgrade packs this week. So I like this card to keep going up the rest this week. I would have liked to see go back down, but since he has that Tots card at 418K, I think he's going to continue to travel back upwards in price. Now, I want to talk about a big one. And I said this last week, Kenny Lala. He has not gone up in price at all this week and he's been very consistent. He's gone from his usual rise, I guess. He's gone up a little bit, but he's back down to 190. I think this is going to have the same effect as Cancelo's once-watched it last week. I think this card is going to absolutely fly throughout the rest of this week because if you're using League 1 players, there's a lot of French guys in there. You're using Lala right back. Like, if you're using a French right back, it is Kenny Lala.  But if you can see Lala around 190 or under again, I think that is a great shout. Like this card here, 196. There's any open bids that you can get on. That's an Xbox price, 196. Lower 200s for PS. But I think this card's going to keep going up throughout the rest of the week because it is the right back that you would use if you're going to build a team with these League 1 players. Now, I want to look at the Furland-Mendy situation as well. Okay, wow, he's up a lot as well. He has continued to go up in price. And that makes sense because his Tots cards 500K, this card's only 195. So he's going to continue to go up. That might be 220, 230K in the next couple of days just because he has boosted up that much and this card is very good. But other than that, the rest of these League 1 specials are going to kind of go on a card-by-card basis. You can obviously see the ones that are really desired like the Marquinhos and the Mendy are going up already. But obviously you saw the one with Lala who's kind of stayed the same. But that's just because I think a lot of people invested in that card. Maybe a bit of over-investing going on with that one. Thomas Monier, foot-birthday. This one interests me as well. He is PSG. He's got the Lynx. I could see this card being a nice riser heading into next week as we, you know, hit the Weekend League rewards for this League 1 team of the season. And the next thing that leads me into the upgrade packs scenario, I'm not sure what they're going to do with upgrade packs. Shortly after this video goes live, we're going to know what's going on. So far, this League 1 tots has been, I mean, we got the nice OR SBC today. This is a very nice card. Four star, four star, great stats all around. He's short, but I mean, he's got great stats. Even incredible center attacking midfielder or maybe a left center mid in a French team. But so far, this Remy SBC was pretty underwhelming. That's a very easy SBC to complete. This, the Latin America tots is cool. You know, it is what it is. The pie I think is a bit overpriced for the three star week foot. So there's not too much going on so far in this team of the season right now in terms of League 1. I mean, you have the OR SBC, which is cool, but we need the upgrade packs again to get started off for the rest of this week.  Even more than that, are you serious?  People are going crazy on these rares and I am, I'm not feeling it. I'm really not feeling it. Are they really up to 2K? Wow, these rares are almost, okay, it's like 1.81.9. That is crazy. The people are paying 1.6K for these rare cards and there's no SBC out yet. I think they might change the SBC up this week. I kind of hope that they don't, but I think it is a possibility that they could just because the lack of rare players in the League 1. So that's what I'm most interested to see this week is if they do change up that SBC. We're gonna find that out today, of course. But then for the rest of the week, market movements, I think there might be a little bit of panic selling throughout the week because of Ultimate Team this season. I know I mentioned that before. Let's take a look at some of these other team of the seasons and check in on them. Serie A, obviously, was last week. Ronaldo at 7-7-3. He has come down a lot in price. Oh my goodness. That is a major sell-off from this week and 7.7 million for that card. A lot of these cards are down, not going at 1.2, wow. So a lot of these cards are coming down in price. Let's look at Premier League as well. But it makes sense, you know, because these cards are coming down in price because they have other cards that are coming into the game that can kind of take the place of those and, you know, people might sell their Lacazette down at 1.22 to go try another French striker like the new Mbappe card or something like that. The Sun is still holding strong at 2.3 million. This card is crazy, crazy, crazy, man. Ridiculous that it stayed that expensive. But again, watch some of these cards, especially for Prem Tots. Next week, the focus is going to be, again, on those really top-tier cards. I'm interested to see what they do with upgrades next week as well, but maybe a little bit more sell-off for some of these Tots cards in the next week. Now, some of them that might be on the edge, like let's say Erickson is somebody who might get into Ultimate Tots, might not, just depends on where they go with things. He is higher rated, but he could see some panic sell on that card this week. If he doesn't get into Ultimate Tots, maybe a little bit of a rebound for the weekend. There's a lot of 96-rated cards. It just kind of depends on how they value the Ultimate Team this season. And I know I'm talking a lot about Ultimate Tots in the market, but League 1 Tots, I mean, I haven't been as active this weekend, but maybe you guys tell me, are you hyped right now for this Team this season? I'm almost just kind of thinking, I'm ready for the upgrade packs to see if I can get me an Mbappe or Neymar. I'm going to finish my weekend, League. We try to get three more wins here yet tonight to get that gold three rank. And then of course, upgrade packs. I already mentioned that, but there's not too much else to do. We'll get some more player SBCs this week. Other than that, I don't see anything out of the ordinary happening. Just a normal week on foot, the upgrade SBCs, some player SBCs. We have a Tots moments. We have a flashback and a Tots card. So I would expect probably one more player SBC. And then on Tuesday as well, we will get the League One Tots guaranteed. And I'm thinking they're probably going to keep that. Let's go back and look at the team and going to look at the values, but I'm pretty sure they're going to keep that SBC pretty much the same value as they have been for a lot of these others.  So I think you might see an 85 rated SBC requirement and a team of the season requirement again as well. That's kind of what they've been going with.  I think it was very busy. So hopefully they don't do that again, but for the League One, I'm thinking it's probably going to be somewhere around an 85 rated squad with a team of the season. That's what it's going to cost you to complete the League One Tots guaranteed SBC. But other than that, boys, it is League One Tots. I'm just kind of here. I'm just kind of here waiting for Ultimate Tots, waiting for the upgrades. Obviously, we'll be doing some packs later this week. We're going to be super pumped about that. And I do want to try out some of these cards now that I actually am going to be valuing the game and trying the game out a little bit more. I'm honestly not trading too much right now. I don't really care if I lose a few coins on a card. I have a Griezmann right now that I'm trying to sell on my transfer list. It's a fresh Tots Griezmann that I bought at 2.3 million coins and I'm trying to sell him like 100K over his price as a fresh card. I know I'm losing some coins on some of the stuff right now. I know I'm losing some coins on some of these ORs as well. I bought this at 360 and I think he's like 300K. Yeah, he's at 300K right now because of the SBC. And that's just a risk that I took and that's what happens with trading sometimes. You take some L's because of SBCs that come out that you can't really plan for. But again, that's the constant strategy and the constant, you know, what we say theory kind of reigns true, never panic sell because that OR probably could rebound back to 350K coins later this week after week and many rewards. Is an investment opportunity? Totally, for sure. It totally is an investment opportunity. But since that SBC is out, that really hurt his price. But again, I'm not really trading too much right now. I'm doing a few quick flips here and there and mostly just waiting for the upgrade packs to come out every week so we can smash those because that's what we traded for. That's what we grinded for this year is to get those upgrade packs and to get all those Team of Season cards from those packs. So I mean, enjoy the video, smash the thumbs up on it. Comment down below if you have any questions and subscribe to the channel if you're new. It's been Nate, Foot Accountant. Catch you guys later. Peace out.


Thank you very much for that very kind introduction and thanks all of you for coming and I should apologise in advance about my voice, sorry for my cold, I'll try and get through all of this. So I'm going to talk about data management in the Chinese Text Project which is a project which I've been running for about 12 years I think now since it's been online anyway. And this is basically a digital library of pre-modern Chinese textual material. So primarily transmitted texts from throughout Chinese history up until the early Republican period and it's an online project, it has a web address here ctext.org. So I'm going to start by introducing a bit about some of the most important types of data in the system and then I'm going to make some comments about preparation and curation of data. So where our actual data comes from and how it's maintained and this is going to primarily involve a quick discussion because we don't have a lot of time of optical character recognition for these types of materials and how we get better results with this and crowdsourcing because this is really very important to the way this database is maintained at the moment and this actually has a lot of consequences for how we run various aspects of the project and maintain the data. And lastly another important thing I want to cover is dissemination and sharing of the data particularly how we use an application programming interface to export this data in real time to allow for integration with other projects and to allow use of the data in text mining, research and teaching. So there's a lot of data in this project and in the system but the most fundamentally important types are images of historical editions of historical texts. So sequences of page images like this one which is a page image from a book in the Harvard Yenjing library. We have the whole of the Harvard Yenjing rare books collection is included in this project along with material contributed by other libraries. The second type of important fundamental kind of data that we have are transcriptions of this type of material. So in most cases like in this example these two representations are linked together within this system so that for example you can have full text search using the transcription or you can work with the transcription as your primary way of interacting with the text but you can also refer back to the authoritative scanned image data to confirm exactly how this looked in this particular edition. And within the ctext interface this looks something like this. You can interact with things in the full text view but you can also click a button and immediately view the same material in the side-by-side image and transcription view here with the search terms highlighted and so on. It's important to emphasize at the start that these two things are really just different visualizations of the same underlying data. So this image and transcription view which is very closely tied to the original page images is just one representation of the underlying data that's also used for the textual representation of the data. So these two things are linked internally using a XML representation which I'll come back to and give an example of a bit later on. But these are not two different copies of the text. These are the same copy of the text visualized in two different ways. We also, for materials which have been contributed by libraries, we try to preserve direct links back to the library catalog. So for example for the Harvard Genging materials it's possible to directly click on a link and to open the same catalog entry for the particular copy of this particular edition of this particular text which was scanned to produce the images that we're showing here. So this allows us to kind of to some extent offload a lot of metadata concerns which are much more naturally handled in the library to librarians who are specialists in this. So if people want to find the original metadata or the up-to-date metadata for one of these texts we basically point them to the library to show exactly where to find it. And the system has a lot of other functionality that's sort of secondary to this. Built on top of these representations we have other features to provide a reading environment particularly for the classical Chinese materials. So we have things like dictionary links. This is actually an interactive visualization if you view it on the site. You can move over any particular part of the Chinese text and it'll give you dictionary information. It's also aligned with an English translation. We have things like parallel passage information which is also layered on top of this and references to historical commentaries for this particular paragraph of text. So I'm not going to go into this in too much detail but we also have these kinds of functionality. So this is now a fairly large project. It's been online in something like its present form since 2005 although it's evolved significantly since then. We have around 25 to 30 thousand users every day so a lot of people make use of this system. And in total we have around five billion characters in 30,000 texts. 25 million pages of primary source historical scanned materials are in the system. And we have over 10,000 registered users who collectively contribute to the database in very concrete ways which I'm going to get to in a moment. We get something like 100, something on the order of 100 contributions every day to this project through crowdsourcing. And it's also important to have some idea of where our users come from. The vast majority as you might expect come from Greater China. So over 50% from China and over 80% from China, Taiwan and Hong Kong taken together. But we do also have significant numbers of users in the US and Europe. And the entire project has two, has several different interfaces for different languages. So basically all of our introductory and explanatory material and all of the user interfaces available in Chinese as well as English simplified as well as traditional characters. I'm not going to say too much about OCR because it takes quite a while to get into some of the details of this, which are quite complex. Basically the way that we get adequate OCR for these historical materials is by adapting to the specific domain, adapting to the types of images that we're expecting to deal with here. One of the first things that we do is training data assembly. So we have automated methods of extracting training data for Chinese, which consists of labeled character images for all of the characters that we want to recognize. This is particularly tricky for Chinese because there are so many characters and it's not practical to create this data manually as it would before many other languages. Character segmentation, there are various things that we can do to improve character segmentation accuracy on these particular types of texts. And language modeling, which is a fairly standard kind of technique in OCR to basically take advantage of some contextual information in the ways that human readers would naturally do subconsciously when they read these texts. But I'm happy to answer questions about these, but I'm not going to go into any detail of that. Other than to say, whenever I talk about OCR people always ask me about accuracy. And I don't want to just give a number because I don't think it's meaningful to just give a number without any sort of context and without any sort of comparison.  So here we have a page image from Google Books at the top and Google Books at the bottom. And I've highlighted and read all of the inaccuracies here. So on the top I've highlighted the things which have not been transcribed and on the bottom are things which have been mistranscribed. So the error rate in this transcription is the combination of all the red marks on these two pages. If you put this into other OCR systems, you will get a corresponding result. This is Abby, fine reader's result. This is test-reacted result. You can see both of them are clearly better than Google Books. And this is the C-text procedure result for the same page. So again, we don't get a perfect result, but we've significantly reduced the error rate. And on this particular example, which is fairly representative, the accuracy goes from something like 40% in Google Books to something like 70% off-the-shelf OCR and 94% for C-text. So that's a significant reduction if you look at this in terms of error rate because the error rate for Google Books here is 60% and the error rate for C-text is 6%. So that's a significant reduction in OCR errors. Of course, 94% is not 100%, so there are clearly errors in our OCR output. And this is where the crowdsourcing comes in in the C-text project. So we have this side-by-side view, which is how many scholars interact with our data because they want to refer directly to the primary source materials. The idea is that users, when they identify mistakes like this one highlighted in red here, can click a button and immediately a simple textual representation of the content on this particular page is shown to them. So it's worth mentioning that this is not the underlying representation of the data. This is a transformation of the underlying representation of the data that's easy for users to edit. So they can just directly modify this in their web browser. And when they submit it, this is immediately stored and committed to the database. It's also important to mention that we're very open about who contributors are. This is basically the Wikipedia model where anyone can create an account and anyone can modify our data. So of course we have other ideas that are borrowed from or modeled on Wikipedia like an edit log. All of this is, of course, versioned. Every editing operation that's made is recorded in the edit log and we have a link to a diff style visualization showing what was changed. In this example, a 1 was deleted and a 3 was inserted. And we can also link this directly to the side-by-side representation, which makes it very easy to determine, for anyone to determine whether the actions of another editor are actually genuinely helpful edits or whether this is a mistake that should be reverted. So this is quite easy to police because of this direct link back to the primary source data. And behind this, there is a serialization of the data of which our users are editing. It is also possible for users to edit this directly, but usually the easiest way is through our visual editing interface that I just showed you. But the representation itself is basically in terms of XML fragments which serialize chunks of text into a form that contains all of the data that we have about that particular unit of text, including, most importantly, in this context, the links to the specific locations on each of the scanned pages. We also use the same idea or the same approach of visual editing tools to allow contributors to contribute more complex types of data. And this is one way in which we deal with the problem of characters which don't exist in Unicode, which frequently occur in this type of corpus. So the way this is handled in a visual editing tool is by users literally drawing on the image data, the region corresponding to the character of which they have no way of inputting of which doesn't exist in Unicode. And this gives them a rare character or variant character input box which asks them to provide certain metadata about this particular character instance, specifically things like composition and radical stroke, number of strokes and so on. The system then uses their submission to do two things. The first of these is to look whether anyone else's input the same character in any other location. And they're then presented with a list of possible candidates. This actually also uses OCR to see whether the region they've selected actually corresponds to a character that we already have. And the idea is that then if it does, the user selects it and this allows us to link it automatically to the other instances of the same character. So this isn't simply saying we're going to use images instead of characters. This is saying we're using images but behind them a more complex representation which links the same images, i.e. images of the same abstract character together. And the result of this is then an XML representation which can be pasted directly into the editing window. So our users don't actually have to understand XML. They're not expected to understand XML, but what they're editing is fundamentally XML. So once this is submitted this basically creates a character and this can then be used to represent that character throughout the site. And this also makes it possible to have full text search including characters which can't be input in Unicode. It also makes it possible to aggregate data about rare and variant characters because we have the standard representation and the individual instances are linked. So this all happens transparently when users input characters using this method. And the same approach can be used for inputting illustrations which occur as a percentage very infrequently in our data, but because we have so much data significant numbers of them do occur overall. We use a similar interface to allow users to actually mark up regions of particular pages which correspond to illustrations and provide some very simple annotations, for example whether there is a caption for this particular image in this particular context. And again, what is the result of this is an XML representation of all of the information that the user submitted. And so this can then be used by the system to visualize and represent these illustrations in the textual view of the same text. So the image data of course is not necessary if you're dealing directly with the page images, but many C-text users prefer to deal with the textual representation of these texts once they've been transcribed and only refer to the images when they actually want to check or cite something. Once we have this data, of course there are other things we can do with it. We can implement image search based on the captions and we can also use this in the future to improve the accuracy of OCR and potentially to identify illustrations automatically within our data because we now have a significant amount of training data of specific examples on specific pages and specific locations. So I'm going to move on to another topic now which is replication and failover. So one of the issues we have here is that we have a very distributed user base. We have many users in East Asia, but also in the US and Europe. Many of the international links on the internet between these locations perform sub-optimally at various times of the day. There's significant latency just because of the distance, but at particular high peak traffic times the connectivity between these locations is not very good and this is a very bad thing for us because we're relying on our users to actually contribute information to participate, not just to be passive consumers of this content. So we want them to have as good a user experience as possible and one of the ways that we make this possible is by having the entire system replicated in two completely different locations at the moment, one in the US and one in East Asia and both of these have complete up-to-date copies of all of the information in the site. So it's possible if you connect from London, for example, you will normally be connected to the US data center and all of your edits will be committed there, whereas if you connected from China you would connect to a data center in Hong Kong. Of course this is where the crowdsourcing element is something which also has to be considered because our data changes continually. So we have instantaneous replication between these two sites. If you make an edit to the US data center this will be transmitted to and committed to the East Asian one and vice versa. So this is quite separate from the question of long-term backup, which is also something we do. We also have RAID volumes and multiple copies of all of our data offline, but we also have an instantaneous copy made online in a different location. And this contributes to the project or the website having a very relatively, I would say, very fast experience for our users, regardless of where they are connecting from. This also allows us to do something else which is very helpful, which is to automatically cope with any types of technical issues that cause problems at either of these data centers. If we have continuous monitoring of both of these sites in real time and if one of them, for example, the North American data center due to any kind of external factor could be power failure, network failure, hardware failure, software issue, stops responding in the correct way, we can automatically fail over to have all of our users connected to the Asia Pacific data center and vice versa. So this is very convenient when things go wrong because things, of course, do go wrong. This happens transparently and doesn't require any intervention on our part to happen. So the last of the things I'm going to introduce is how we actually make this data available to other people. And this is primarily done through an application programming interface designed for this project. The motivation behind this is partly that this is the largest database of this type of material for pre-modern Chinese, but also it's not a fixed target. It is literally changing every day, every hour of every day, edits are made and things change. And most people typically are interested in some subset of this data, which is relevant to them, but they always want to have access to the most accurate version of this data. And one particular use case of that is the case where somebody is transcribing a copy of a text because they actually want to have access to a high quality transcription of it. This site provides an interface through which they can do that. If we have an API which allows them to export the latest copy of the data, then they actually have a ready built workflow which they can use to transcribe a text and obtain the copy of it when they've completed. The other motivation behind the API is that there are different use cases and different requirements for dealing with this material. People may want to deal with the data in different types of structured forms and people may want to connect this system to other external systems in different ways. So the API, as it looks at the moment, consists of three major components. One of them is what we're calling CTPURN, so Universal Resource Names, which specifies some particular text or object within Ctext. So these are machine readable identifiers that refer to either one particular edition of a text or one particular chapter of one particular edition of a text. The other main components are JSON API which provides a mechanism for extracting machine readable data and metadata from Ctext. And slightly more unusually, a plugin system which is designed to allow our users to create specifications which Ctext can understand of how to connect Ctext to other external projects. And the idea here is that these are completely open and freely definable. Anyone can log into Ctext and create these. And if they create a plugin for their own project or for some existing project, they can share this with other users and there's a mechanism for them updating this in the future when the link structure of external sites changes. So what these look like in practice is something like this. This is a page from the Ctext dictionary system so the users looked up a particular Chinese character here and there's various information from Ctext. But the highlighted red section here corresponds to the plugins which this particular user has installed at this point in time. And each of these links to the corresponding page, the corresponding entry in a particular external dictionary. So there's a level of customization or personalization built into this in that users choose which plugins they want to use, they can create their own, but they can also choose to install ones which other users have created. And this helps to get around issues where some dictionaries, for example, may be subscription based, some institutions may have them, others may not. If you have access to this and it's important in the context of your research, you'll probably want the plugin, but the plugin doesn't apply to everyone because not everyone has access to this resource. The second main type of plugin at the moment are textual plugins. So these basically do the same kind of thing with textual material by sending a textual reference to an external resource with the expectation that the external resource will then use the JSON API to fetch textual data or metadata about that resource and do something with it. And of course what it does is specific to the external resource. The very simplest type of this is the plain text plugin for C-text which is really an external application which means that you can download it and modify it if you don't like the format that we export things in. This simply fetches the data and provides a download link or allows you to copy and paste the data for a textual object in C-text. But external resources can do much more complex things. And a really nice example of this is the Marcus project for marking up and identifying using semi-automatic methods, proper names, place names, references to time periods in historical Chinese texts. So there's a plug-in for Marcus and Marcus supports the C-text API. So it's possible to directly read any C-text textual object into the Marcus interface and to immediately start performing these operations there. Another example is the text tools plugin which performs very simple types of textual analysis on Chinese texts. For example regular expressions, search, aggregation. And the nice thing about this is that it can make use of the structure of these texts which is also exported through the API in a consistent way. It also provides things like automated identification of text reuse within arbitrarily selected texts from the system. As well as visualization of this data in this case as a network graph. So the very last thing I want to talk about is also related to the API and this is use of C-text data in digital humanities research and teaching. And the motivation here is that what this system provides via the API is a very simple and consistent method of importing data into an external tool or program. And the key thing here is that the data is always delivered in the consistent format specified by the API. And particularly for teaching use in addition to the API itself which is entirely specified through HTTP protocols, we also have a Python module which is how to interact with this API. And the goal of the Python module is to add an additional layer of abstraction which is particularly useful in the context of the teaching we're doing at Harvard which is digital humanities practical methods in Python for students with a background in Chinese studies. And the reason that this API is very useful for this is that it can greatly reduce the amount of time required for data wrangling in a teaching context and also avoid needing to work with pre-chosen example materials because any materials accessible through the API are available in the same consistent format. And also again in a teaching context although nice to have generally is that this tends to lead to simpler programs which have easier logic to follow. And a really simple example of that is this very, very simple program here which if you're familiar with Python should be fairly clear what's going on here. The first line just says we're going to use the C-text module. The second line fetches an entire textual object in a particular format. And then the remainder of the program performs a simple regular expression search against this text. So the key thing here is that the urn identifies a textual object. So it's pretty obvious to anyone who's understood what I've said so far and what urn's are in this context how you would perform exactly the same function on a different textual object. You simply replace the urn. Replace it with something else so you get the expected result. And the function here and this is really what the Python module contributes to the process specifies the type of structure. So in this case we're getting the textual object as a string but we didn't have to get it as a string. We could have got it as something more complex as you would be able to see in this program except that it's going to be far too small and it's far too complex a program to read through. But the things I want to highlight in this program aren't mainly in the first line which is we start out by specifying a list of in this case four textual objects again specified using urns and then later in the program the data and meter data for those texts are extracted using the urns and the API. And what this program actually does is to perform a principle component analysis visualization of certain features of this text used for authorship attribution or stylometry in this particular case using the data obtained from the API for these particular textual objects. And you can see in this visualization here the data has all come from the API, the meter data has also come from the API and the structural information about the text has also come from the API because each dot on this graph represents one chapter of one textual object. The colors represent the distinctions between the four textual objects. So the key thing here is that this relatively complex looking program is actually trivial to use and trivial to modify to perform exactly the same analysis on other materials because simply by changing the urns the rest of the logic in no way depends upon the specific content of these texts. So it's very easy and intuitive for even for novice users who've never seen a Python program before to see how you would change this, how you would experiment and how you would play around with this kind of technique. So the API makes quite sophisticated programs like this very easy to write in a way that's general and not specific to particular data or data set. So I'm going to stop there to allow time for questions. All of this is available and documented online and I should say for those of you who are not working in Chinese primarily we do have a dual English and Chinese interface and all of the explanations are available in both English and Chinese. So if you're interested please take a look. Thank you. Interesting how you got to this what's the history of this just in the video because it looks like there's a lot of work on in here and more specifically I was interested in your plugins and dictionaries how you are that looks like a lot of work in mapping what you're doing to each of those different dictionaries. How do you what's the process OK, thanks. Thanks very much for those questions. So OK, so the first question the history is basically this started as a very small project. This began started out really, really small as a system for navigating one very specific historical text that I was interested in and gradually grew from there. So the design was initially fairly general but conceived of as an entirely static database system for working with textual materials but textual materials which had particular type of format that made the map very closely to database structure. So the texting question was actually the most cannons if any of you are familiar with that. It's a text which has a really strange writing style. It's almost written like an encyclopedia with very short entries. So a map sort of naturally onto database structure and it's the kind of thing where you're likely to want to search for particular entries. It's also a text which has terrible textual issues and is very, very difficult to interpret. And these kind of things sort of inform the original design of C-Text back in 2005. So it's grown organically since then until about 2012. And throughout that period of time, it was basically essentially the same system gradually with additional functionality, additional content added to it but primarily static database. So the only sort of fundamental change in the design was really in 2012 where we moved to this wiki model where things are serialized in XML so that users can actually edit them directly. Prior to that, it was effectively using stand-off markup but in a custom designed format, not XML. So your question about the plugins? Actually, the plugins at the moment for dictionaries are much simpler than they might at first look. So they don't actually do anything particularly complex. All they do at the moment is to send the reference to the particular character or word that's been looked up to an external system. So in fact, each of those plugins consists of a very, very short XML file of maybe six or seven lines which basically specifies some trivial metadata about the external system, what it's called, how to refer to it. And the key thing it contains is a URL containing a component which can be replaced with the data that you want to send to the external site. So in the case of dictionaries, the dictionaries that we support are all dictionaries which support searching within that dictionary for a particular term. And effectively, all this mechanism does is provides a way of specifying a URL template which you can add certain things into in certain places to create a transformed URL to a specific location in the external dictionaries. So at the moment our integration with external dictionaries is fairly superficial. But in the future, we would like to be able to have a mechanism to actually include external dictionary data within the C-text interface as well. And that's something we're working on at the moment.