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 2 years ago.
Improve this question
I have a bot built in watson assistant with 150+ intents. Recently, clients complaint about performance of the bot, and dev team also found that intents conflicted with each other sometimes.
Then I searched for a solution online and read this article which is about workspace orchestration. And this sounds like a feasible solution.
So my question is, when should we consider using this approach? like the number of intents or the avg confidence score of intent classification?
Using an orchestration layer doesn't solve the fundemental problem. At the end of the day if you split the intents per two assistants they will still be conflicting... often it will make them even more conflicting as you effectively made one instance of Watson Assistant blind to the other one.
There are many ways to improve your assistant, some of them are built-in to the product and some might require more work.
Here is a list of resources to get you going:
There is in Watson Assistant a built-in feature to detect conflicting intents and help resolving them.
Here is one of many? blogs about it https://cobusgreyling.medium.com/how-to-resolve-intent-conflicts-with-ibm-watson-assistant-1ee5ee09587e
There is quite a few resources provided by Watson Assistant to help you increase the quality of your assistant, but the following blog guides through the most recommended approaches:
https://medium.com/ibm-watson/the-quickest-way-to-improve-intents-in-a-chatbot-44bad1f3a5fc
Finally you should get acquainted with these python notebooks which help with analyzing and improving your assistant
https://github.com/watson-developer-cloud/assistant-improve-recommendations-notebook
For solutions which may involve multiple subjects/topics, I mainly used and saw in use the router approach described in your link. For example, if your Chatbot can handle multiple subjects related to banking(Credit Cards, insurance, etc) each of those subjects can have a dedicated Watson Assistant skill. In front of those skills you should have the router one mentioned in your link which will be mainly used for identifying the user intent related to one of your subject's skills. In this skill you can publish as intents, all the example questions for that particular subject. In this way you can ensure that the subject recognition is always handled in this router skill. Also, in this skill you should consider maybe recognizing only intents which are hit with a high confidence(>0.8 for example). This will help you better recognize a subject, but you will need to ensure a proper training. The same intent confidence threshold mechanism can be applied for the intents which you need to recognize inside your subject skill.
This approach can help you better organize your skills and intents but it may become overwhelming in the case you only address one subject in your chatbot or if you have multiple subjects but with small number of intents.
Related
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 8 years ago.
Improve this question
I am a college student keen to improve my Programming skills. I have two pathways to follow:
Contributing to OpenSource Projects
Solving puzzles at codechef.com
Which one should I follow?
A good programmer is one who cares about his or her ACE - Accuracy, Clarity, Effectiveness.
A good programmer cares about the Accuracy of code. The easy part is coding the "happy path" because this is always in the forefront of our minds when we design and write the code. But what about potential the exception paths that exist when presented with unexpected input and edge case behaviours of the chosen implementation provided? Care is shown by taking the time to think through all the code paths, investing time in testing, submitting the code for peer review, and having the willingness to accept other's suggestions and make changes when appropriate.
A good programmer cares about the Clarity of code. Whether the code is well structured, expressive, adheres to the Open-Closed Principle, the Single Responsibility Principle, the executing machine doesn't care one bit. But, these are all very important to the next programmer, or yourself, who has to read and understand your code at a later date in order to fix bugs, modify behaviours, or add features.
A good programmer cares about the Effectiveness of code. Does it satisfy all the constraints imposed on it? Not only performance and space constraints, but also aspects that make it acceptable to the end user, the demands on the development and testing timelines by your clients, boss, family. Professional software development is not a precise circumscribed task, like "calculate the determinant of an NxN matrix". It has many constraints and demands, and good programmers are mindful of all of these, and will do their best to manage the them, especially when there is not enough time to satisfy all constraints completely.
So! To answer your immediate question, Open Source or codechef, I'd say that being involved in an Open Source project provides much greater opportunities to practice being a good software developer. So go choose an Open Source project that you care about, and ACE it!
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 9 years ago.
Improve this question
I have been task with the mission of creating a phone solution where clients call a number and using the phone keypad they enter a product ID and base on that ID they should hear the product description that is stored as text in MySQL (text to voice). If they are happy with the product or products they will get an email with all the list of product and their details.
Can anyone point me into the right direction on what to use for this phone server?
Note: maybe I just don't know what to call each service, but that is what needs to be accomplish. I am going crazy reading about trunks, pbx and Asterix
What you are looking for is an Interactive Voice Response system (IVR). There are existing systems that can be programmed for individual applications.
The W3C even has a standard called VoiceXML, which is a standard for interaction between voice systems and computers.
Unfortionately, that is the extent of my knowledge on the topic.
Honestly, Asterisk is not very difficult to set up and get running for something like this. Get an inexpensive and unlimited inbound SIP channel from Callcentric or another trunk provider, and write your IVR as the default extension in the dialplan.
Don't let yourself get overwhelmed. You only need to define your trunk as a SIP peer in sip.conf to get the box talking to your provider, and the dialplan syntax is very, very simple. You don't really need any other configuration for Asterisk itself, unless you have to use a land line, which would require a digium or sangoma board with fxo ports on it, and configuration of the zaptel drivers within asterisk.
Text to speech isn't likely to be as great as you'd like, but it may not be feasible to record all of the audio files that you'd need. The problem is that cloud IVR providers may not be cost effective for your application.
Any other questions, please don't hesitate to ask.
If you don't want to deal with Asterisk, there are other web-based options as well. The one I know the best (because I work there) is Twilio which lets you build phone applications the same way you build web applications. It's much simpler than setting up and hosting your own Asterisk instance and dealing with carrier connections. There are other similar services out there as well.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
In my 4 years of experience,I have developed a lot of web applications. Now, the concept of programmable web getting more and more popular, new APIs are being released almost everyday. I would like to develop a java API/library for a few of these endpoints.Ex stackapps,reddit,digg etc... What I would like to know from you people is ,
How is the API of the regular web
apps differ from the API of these
libraries. Or what is the difference
between these two from design
perspective
What are the best API development
practices.
What are all the factors that I need to consider before designing the API
.
Please comment, if the details are not sufficient.
Stability
If you offer an API to your web app, it is probably because you want other people to build applications using it. If it is not stable they will hate you for forcing them to follow through your frequent changes. If this takes too long, their site might remain non-functional for a long time while they are figuring out the new way of doing things in your API.
Compactness
You want the API to be complete but compact, as in not too much to remember.
Orthogonality
Design it so there is one and only one way to change each property or trigger an action. Actions in an orthogonal API should have minimal (if ever) side effects.
Also, it's not a good practice to remove a feature from a public API once released.
Security and Authentication
Since the API is web-exposed, you will have to authenticate each request and grant appropriate access. Security common sense applies here.
Fast Responses or Break into pieces
I believe in a web environment we should have fast responses and avoid requests that will take too long to complete. If it's unavoidable then it is better to send an ACK and break the task into several pieces and subsequent calls.
From my experience, all good API were not made to solve a generic problem, but to solve a problem for some that requires a certain abstraction. This abstraction is then evolving as the requirement and/or the underlying layer change.
So instead of finding the API that will do it all, I'd start by finding one or two good case problem were your API could help.
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 4 years ago.
Improve this question
I'm trying to establish myself as an iPhone freelancer, and are currently negotiating with a startup about a bigger project. They have expressed that they want me to sign a non-competition agreement, so that I wouldn't be allowed to develop a similar product for companies in competition on the same geographical market. Needless to say, I don't really like this.
Is this a common practice? If so, how common? Would you sign it?
They're common. If you can get them to remove it, do so. It's never in your interest to have one. That said, they aren't terrible if they are narrowly scoped and of a reasonable time limit. You don't want one saying you cannot write any other iPhone apps. One saying you can't write the same sort of app is probably acceptable. Read the language and determine how broadly it can be viewed.
Whether you end up having to sign one or not depends largely on the power in the relationship. If you really need the work or if your skills can't command a lot of respect, you'll have to sign. If, on the other hand, you bring unique skills and the company really wants you, you have leverage and can likely get it removed.
I have signed a few of those. As others have said, I make sure that they are very narrow in scope .. i.e. I can not develop a 'clone' of the application for another company .. short of that, I don't sign them.
The other thing to consider is that a non compete is essentially a value-add on your part. You give them more value for their money by signing one. So, they should be compensating you a bit for whatever projects you CAN NOT do in the next 3 years due to signing the agreement in addition to the actual project cost.
Usually, when I remind a company of this, they forget about the non compete and are content with trusting my ethics + an NDA.
It's not uncommon, but make sure it has some sort of expiration specified. Once you get established in a particular field or market, it's quite likely you'll want to continue in that market.
It's very common especially if product that you going to develop will be innovative.
You have to decide to sign or not. I signed such a contract few times already.
NDA(non disclosure agreement). popular agreement that I have signed many times. Client has just one reason behind forcing developer to sign agreement is not to develop replica or sale same software to other client.
That's the truth and hence most client expect you to sign an agreement with few lines of terms with or without expiration date
Its common thing so you can sign it and start working on but make sure you read all terms thoroughly to skip counterfeit client
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
Example: 2 of our top 3 users are working in almost equivalent projects (I don't know them in depth, maybe I'm wrong):
Marc Gravell's Protobuf-Net
Jon Skeet's DotNet-Protobuf
Jokes about Jon Skeet apart, and dreaming with an prideless ideal world (sorry guys, I am not accusing you of being arrogant, is a fact that every programmer must defend his own code), wouldn't it be a great opportunity to join efforts?
I am not saying that the community should decide what an individual must do, I just want you to raise pro and cons of merging projects, and what projects must have to be subject of such analysis.
Starting a new project without a thorough research of the available solutions and without taking into serious consideration the possibility to join an existing project, is something that the community should frown upon more emphatically. Maybe a programmer's education should include some discussion on the cost of effort duplication.
Having said that, experimenting with different approaches to solve the same problem is healthy, and once a programmer has some toy code, we should thank him for making it available to the public regardless of the existence of similar projects.
I think that the authors should seriously consider a merge if:
one design has proven clearly superior to the other
one community is being more active than the other
both projects share the same ideas on future directions
the work required to merge the two codebases is feasible
Merging should happen when it is overall beneficial. For example, if either or both of the projects:
Are too weak to survive on their own (not enough active development to keep up with technology changes); or...
Could provide good synergy through overlapping (i.e. not fully identical) functionalities.
However, there isn't anything wrong with having two strong projects that both do the same thing - it can help to encourage innovation as they try to be better than each other.