How does Wolfram Alpha work? - artificial-intelligence

Behind the tables and tables of raw data, how does Wolfram Alpha work?
I imagine there are various artificial intelligence mechanisms driving the site but I can't fathom how anyone would put something like this together. Are there any explanations that would help a programmer understand how something like this is created? Does the knowledge base learn on its own or is it taught very specific details in a very organized manner? What kind of structure and language is used to store this type of data?
Obviously this is a huge question and can't fully be answered here but some of the general concepts would be nice to know so I can build off of them and do my own research.

Does the knowledge base learn on its
own or is it taught very specific
details in a very organized manner?
AI systems are usually something distinctly in between. The system will usually learn in a directed way, where the developers can apply a metric that measures the quality of the learning, and the system learns by attempting to maximise that metric. Where the expertise comes in is in developing efficient and effective representations of the data, so that it lends itself to this learning process and to the measurement of how well the learning is going.

Take a look at the API

This official blog post has some portion of the explanation: the language Mathematica.

Looks like a large number of algorithms from which some that might be relevant are selected by pattern matching.

Related

chatbot with artificial intelligence

I am new to programming and would like to create a chatbot(I know a little about arithmetic, statistic, linear algebra but no knowledge yet in ML/DL/AI theory. And as I'm starting, I haven't done any projects yet. But the final goal I set myself is to be able to create a chatbot with artificial intelligence. But after some research, I saw that it will take me quite a long time.
So I set myself an intermediate level. One just to create a chatbot that can send and reply to messages automatically. To this end, the programming languages ​​that have been recommended to me are: Python, Ruby, PhP, Java... but (in view of my final objective : creating a chatbot with AI) I would like to know which programming language will be more useful and more appropriate for me?
[RE]: Given my situation, I haven't started a project yet (I'm looking for the right language to be able to get started). Yes, I know I'm repeating myself but that's why I can't present a community-specific problem. Besides since I just learned that my question is a matter of opinion and that it does not respect the rules of the platform, I humbly ask the moderators to remove it.
Thanks !
Hey that’s an interesting project to do.
As you are more focused on the artificial intelligence I would stick with the biggest and most common ML language:
Python - this is currently the biggest Machine Learning language and allows you to use open source tensorflow for your ML models.
I think what you will find interesting and challenging, once you go into more complex sentences is dealing with natural language processing, Python has the nltk (Natural Language Toolkit) that’s a good place to start and learn from.
Once you have gotten a possible basic python console chat system working you might want to show it off in a nicer presented way so more so you could wrap it in a simple python api and call upon it using a small JavaScript web browser chat application. Although your more interested in the first part so I’d suggest go with python.
I’d start off by trying to make the ai respond to predefined strings and then go from there. It’s worth nothing there is a number of open-source GitHub projects that have ML and Natural Language Processing bots so have a little look around for inspiration. https://github.com/topics/chatbot
Also fyi if your writing a report on this doing detailed investigative work in what tooling and language to use is an important part of your report and you should gather information and sources about usage etc and then reason as to why.
Hope this points you in the correct direction and good luck 👍

Graph Databases' Implementation

I am having trouble visualizing a Graph Database.
Visualizing an RDBMS is really very simple and I was able to understand from the first tutorial itself when I started learning it some 4-5 years ago.
But I am not able to understand Graph Databases.
I am also unable to get any good links on this topic, hence posting this question here.
Specifically, I am looking for the following:
Some really simple book/link on Graph Dbs
Atleast some knowledge on the implementation details of a Graph DB (I hope all Graph DBs would be having atleast a few basic things in common).
Thanks a lot in advance guys,
Protoge is your best bet to get started understanding ontologies.
IsaVis is a pretty common tool for visualizing you db.
Jena and Sesame are you best bets for implementations (both in java) but for prototyping python rocks and rdflib is the must use tool there.
There are plenty of others out there but those are my suggested entry vehicles. YMMV
Neo4j did a quite good job for me explaining the concept. Also starting with it to test is quite easy to do. You could start here:
http://neo4j.org/learn/

Modelling C Programs

I have done some research on this question and most answers are a few years old or suggest just using text.
I need to model some C code I have developed for an embedded system. It is not massively complex but there are a great number of functions and UML does not appear to cover it as this is working on the pretense that the language to be modeled is object orientated.
Whilst I have read that it isn't far fetched to modify this and still use it to try and model C I wondered what thoughts people had on this or if anyone had any suggestions for how I could professionally document or model my code?
You should take a look at the Gtk documentation and the GTK-Doc tool:
http://www.gtk.org/documentation.html
It is a big API and it is pure C.

Would a novice learning C and Scheme simultaneously be considered bad practice? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this question
I've been on and off with the C language for the past year(?) until two months prior to present day when I decided to take my learning a bit more seriously. In some areas of the language I feel comfortable, but I know that by anyone's terms I'm still considered an amateur and have much, much more to learn.
Recently, I've heard nothing but good things about how helpful taking an approach in different paradigms is to gain perspective, so I figured maybe trying to learn another language would be nothing but beneficial to the areas I'm weak in with the C language and possibly programming concepts in general.
SICP is considered one of the most influential books every programmer should read according to stackoverflow and plenty of amazon review comments, so naturally I chose it - just recently purchased the hardback. I'm excited to learn in hopes of coming out with some much needed experience, but my only concern is whether it would be a problem for someone at an early stage as I am to attempt learning two languages with different paradigms at once. I'm hoping learning Scheme and the concepts from this book will help me to think differently and more abstractly with C rather than confusing me.
Any insight would be great - whether it be to continue with these two languages, perhaps choose another language to aid my C or drop the second language for now. I just need insight from a seasoned person on the matter.
Learning both will give you a good appreciation for the strengths and weaknesses of both langauges, as well as two very different problem solving approaches.
Have fun!
I think you'll be okay. It's similar to learning maths and chemistry at the same time, and most people manage just fine. (Except for people who don't understand maths and chemistry, and enroll into liberal arts ;) )
If you are new to programming, I would urge you to start with HTDP. Yes, it is scheme based, and focuses on recursion, but its goal is to give you a framework for approaching problems that is generally applicable. It may seem boring at first, telling you stuff you think you already know, but don't skim. The disciplined approach they take to approaching problems translates easily away from scheme and recursion, and is a useful tool in general.
There is no reason not to learn both languages at the same time. They are sufficiently different that you are unlikely to get confused. If you have time to learn only one, C is probably more generally useful, but they are both (by modern standards) very simple languages, so learning both should not be a problem.
Most academic environments (university, specifically) expect you to handle multiple new languages at the same time. (And there's hardly an earlier stage than "still in school.") Each subject is going to have its own preferred language in terms of features that benefit that subject, and each teacher is going to have their own preferred language and, well, they're the teacher so you just have to deal with it :)
As long as you can keep them separate, it's not really the language itself that's the important part. Focus instead on what that language does and what you can do with it.
Back at my school, it was easy to tell the freshmen from the seniors. The formers would talk about what languages they know, the latter would talk about what designs and abstract concepts they've used.
Remember, the language is just a tool. Development should be more language-agnostic, focusing more on the job at hand and just using the right tool for that job.
I disagree with some of the other answers. This is not like studying two different subjects simultaneously: you generate the same output (a useful computer program) in C or in Scheme, but you go about it in very different ways. Universities may have students taking classes using different languages at the same time, but those curricula are, in theory, curated by a thoughtful department that is trying to avoid confusing students.
While it is certainly possible to study both C and Scheme at the same time, they may turn out to not be complementary for you. I would recommend proceeding as you wish, but as soon as you hit a rough patch you may want to consider focusing on one at a time. Following HtDP is a great idea if you are new to programming. If you are comfortable programming in general and want to learn C -- a good goal to have! -- then you can focus on how you write programs in C. The key is that you first want to learn how to write programs, then you can focus on learning specific languages.
learning a programming language is no different than learning any other language. If you can handle learning spanish and french at the same time, you can handle C and Scheme.
Another reason to be familiar with both C and Scheme is the Foreign Function Interfaces (FFI) provided by almost all Scheme implementations. You can quickly prototype a product in Scheme (or some other Lisp) and then you may find that you need to optimize some portion of the code for speed. You can re-write that part in C and invoke your fast C function from Scheme using FFI. Or you may need to interface some library (GUI, database etc) with Scheme. Your C expertise coupled with the FFI will help you here.
Learning C has made me a better Scheme programmer and vice versa. After spending years with Scheme and Common Lisp, I've spent a year programming almost exclusively in C. When I go back to Scheme, it is much easier to express myself because I know the kinds of things the machine is good at; C has helped me develop a good sense for algorithms. Knowing Scheme before going into C allowed me to develop certain nonstandard idioms while learning the standard ones. I think that since the two are completely different ways of doing things, and they both have their advantages, they are the two best languages to master.

Artificial Intelligence Project - What language should I go for? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
I am a computer science student and I am going to work on an artificial intelligence project which will compose a musical tune according to the genre and mood inputs. Are the algorithms to be used for this project likely to be very resource-consuming? Would it make any difference (in terms of speed) if I choose to go with Java rather than C++? (Note : I know only these two languages and I am more comfortable with Java than C++.)
NB : Sorry for my poor English. If someone can, please clean up this post wherever necessary. Thanks.
Go with Java since you are more comfortable with it. That will allow you to concentrate on solving the problem, not the programming. Maybe C++ would end with a faster program, maybe not, but getting there will be slower and you don't categorically state that the program must be blazingly fast.
The resource consumption is way more influenced by the algorithmic approach than the language chosen. If you are comfortable with Java, program your application in that language - even though a C++ implementation might be 10% faster.
That being said, you might be interested with Artificial Intelligence API's for Java.
In my mind, the language mostly associated with AI is Lisp.
See the answers to Why is Lisp used for AI? - top voted mentions this was the case in the 60s and 70s, but these days dynamic languages are used (ruby, python and such).
It looks to me like you're at the proof-of-concept stage of your project. I'd use whatever language your most comfortable with. Well written Java code will run a lot faster then poorly written C.
I would use Common Lisp for a project like this. If you don't know Lisp, I would learn it for this type of project. It would be a great learning experience and since you are a CS student, it will only help you. Lisp is a language that can be a real eye opener.
I did a similar AI project a couple of years ago. I don't know what solution you will be implementing, but AI programs can generally be both resource consuming and may take a long time to run, but on the other hand, you'll need a language you're familiar with to get it done in time.
Therefore, my advice is that if you feel you know C++ (or C), go with one of them. If you don't know them, then consider carefully the time you will need to invest in learning a new language before choosing.
If you're starting from scratch, use whatever you know best. If you want to use established libraries to speed up development, you might want to investigate that first - but Java is certain to have some.
In your shoes, I'd pick Java for sure.
I'd go with Clojure for the following reasons:
It's a Lisp, and Lisps are great languages for AI development (partly historical, but also for some real concrete reasons - see this thread and this thread)
Clojure runs on the JVM and has great Java interop, so you can exploit all the great Java AI libraries (e.g. Weka) plus you already have some experience of the Java environment
JVMs have excellent optimizing JIT compilers nowadays, for all practical purposes you will get performance as fast as C/C++ for this kind of application.
My advice is design everything you need first, every ADT, every algorithm class, hierarchy, everything. This kind of project/programming could be really hard to design in C/C++ family of languages, maybe you could choose other language with less string typed philosophy. So i encourage you with using a language designed for this kind of problem, better suited to your application, functional paradigm ex: LISP, logical paradigm ex: PROLOG or something like that.
My 3rd year dissertation project was an implementation of heuristics for cellular network radio frequency allocation. I chose Java over C++ because it allowed me to visualize the results much easier than if I'd used C++. I don't believe the performance would have been significantly different in C++ - the complexity factor of your algos is going to be the biggest factor probably.

Resources