计划构建一个从语料库(文本文件)中学习并需要回答问题的AI系统,以便像chatbot这样的用户成为简短的chatbot,而没有任何预定义的数据。
直到现在,我只是将一些数据打包并存储为文本文件,并使用TF-IDF(余弦相似度)方法使系统回答问题,但准确度仅为中等
def response(user_response):
robo_response=''
sent_tokens.append(user_response)
TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english')
tfidf = TfidfVec.fit_transform(sent_tokens)
vals = cosine_similarity(tfidf[-1], tfidf)
idx=vals.argsort()[0][-2]
flat = vals.flatten()
flat.sort()
req_tfidf = flat[-2]
if(req_tfidf==0):
robo_response=robo_response+"cant understand"
return robo_response
else:
robo_response = robo_response+sent_tokens[idx]
return robo_response
我使用的TD-IDF方法
还有没有其他方法可以构建一个可以准确完成工作的系统?
答案 0 :(得分:1)
PFA链接您想要做的事情。
https://demo.allennlp.org/reading-comprehension https://towardsdatascience.com/elmo-contextual-language-embedding-335de2268604
它们已经是内置的系统,可以让您做到这一点。
如果您想从头开始构建类似的东西,则在处理后的文本上需要遵循很多过程。
Tfidf是BoW(单词袋)算法,可以帮助您识别意图,但不能识别这些意图之间的关系。从矢量化的tfidf连同标签一起获得的矩阵只会告诉机器,如果对于某些文本,获得相似的矩阵,则为标签。在分类中比较方便,但对于聊天机器人的响应却不方便。
要获得聊天机器人的响应,请执行以下操作: -段文本成句子。 -使用各种技术获取文本的上下文,当前XLNet提供了最佳结果(https://medium.com/dair-ai/xlnet-outperforms-bert-on-several-nlp-tasks-9ec867bb563b)。这将帮助您制定对可以通过chatbot提出的查询的响应。 以上是一些基本步骤,实际的AI系统将涉及更多步骤。