Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Answers Updating #1553

Open
Aljumaili85 opened this issue Jan 8, 2019 · 6 comments
Open

Answers Updating #1553

Aljumaili85 opened this issue Jan 8, 2019 · 6 comments

Comments

@Aljumaili85
Copy link

Aljumaili85 commented Jan 8, 2019

Hi there,
previously I faced a problem of updating the ChatterBot answers when its could not find the right one for a given question, my chatterbot was trained using data from the ChatterBot dialog corpus .

Then I decide to create a chatterbot database from scratch by creating empty database and inserting the question and the the answer one by one using the example "learning_new_response.py".

the application works like this:
type something to begin ...
me: hi
chatterbot: Is "hi" a coherent response to "hi"?
me: no
chatterbot: please input the correct one
me: Hello Dear!
chatterbot: Responses added to bot!
.............................. and so on until I enter, let say 5 questions and answers. Then if I choose a pre-definde question it will choose a wrong answer.
for example if I write "hi" the chatterbot will respond : Is "I am good thank you." a coherent response to "hi"?
I wondering what is going wrong here! ?

by the way, if I open the created database I can find all the questions with the right answers but I don't know why it chooses a different answer even when I use the BestMatch as logic adapter.

bellow is my code that has been used:

from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
bot = ChatBot(
    "Terminal",
    storage_adapter="chatterbot.storage.SQLStorageAdapter",
    trainer = "chatterbot.trainers.ChatterBotCorpusTrainer",
        logic_adapters=[
        {
            "import_path": "chatterbot.logic.BestMatch",
            "statement_comparison_function": "chatterbot.comparisons.levenshtein_distance",
            "response_selection_method": "chatterbot.response_selection.get_most_frequent_response"
        }
    ]
)

def get_feedback():
    text = input()
    if 'yes' in text.lower():
        return False
    elif 'no' in text.lower():
        return True
    else:
        print('Please type either "Yes" or "No"')
        return get_feedback()
print("Type something to begin...")

while True:
    try:
        request=input()
        input_statement = bot.input.process_input(request)
        temp1,response = bot.generate_response(
            input_statement,1
        )
        bot.output.process_response(response)
        print('\n Is "{}" a coherent response to "{}"? \n'.format(response, input_statement))
        if get_feedback():
            print("please input the correct one")
            request1=input()
            response1 = bot.input.process_input(request1)
            bot.learn_response(response1, input_statement)
            print("Responses added to bot!")
    except (KeyboardInterrupt, EOFError, SystemExit):
        break
@gunthercox
Copy link
Owner

Hi @Aljumaili85, you mentioned that all of the correct answers exist in the database when you view it. Are there incorrect answers in the database as well? It is possible that your chat bot is selecting a close match that has the incorrect response associated with it still.

This may be an improvement that could be made to ChatterBot. May I ask, in cases like this how would you like the chat bot to select the correct response?

@Aljumaili85
Copy link
Author

No, actually I have one and only one answer for each question, but it seems that the BestMatch is not selecting the right matched question , but at the same time BestMatch works good with the database of dialog corpus

@gunthercox
Copy link
Owner

Interesting, I'll mark this as a possible bug then. I'm not aware of any issues currently effecting how the BestMatch adapter selects responses, but I'd happy to work on a solution if the problem can be identified.

@Dulce06
Copy link

Dulce06 commented Feb 12, 2019

Hi @gunthercox @Aljumaili85

I have tried this code but got an error

**

input_statement = bot.input.process_input(request)
AttributeError: 'ChatBot' object has no attribute 'input'.

**

Can you please help me how to get rid of it.
Many thanks

@Aljumaili85
Copy link
Author

It a problem of incompatibility of the given code and the installed ChatterBot version. try to install the latest ChatterBot and try again. meanwhile i will try to see whats wrong

@Dulce06
Copy link

Dulce06 commented Feb 12, 2019

Hi @Aljumaili85

Thanks for the prompt response.

Upgraded the chatterbot version.
I have the following errors now:

DEFAULT_SESSION_ID = bot.default_session.id
AttributeError: 'ChatBot' object has no attribute 'default_session'

Cannot find reference 'input_function' in 'utils.py' less... (Ctrl F1)
Inspection info: This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants