我计划构建一个AI系统,该系统从语料库(文本文件)中学习,并需要像聊天机器人一样回答用户的问题,简而言之就是一个没有预定义数据的聊天机器人。
到目前为止,我已经通过网络爬虫获取了一些数据并存储为文本文件,并且我使用了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方法
还有其他方法可以构建一个系统来完成这项工作,并且有一定的准确性吗?
回答:
请参考以下链接,了解你想要做的事情。
https://demo.allennlp.org/reading-comprehensionhttps://towardsdatascience.com/elmo-contextual-language-embedding-335de2268604
这些是已经构建好的系统,可以让你实现这个目标。
如果你想从头开始构建类似的东西,需要对处理后的文本进行很多步骤。
Tfidf是一种词袋(BoW)算法,可以帮助你识别意图,但不能识别这些意图之间的关系。通过向量化的tfidf获得的矩阵连同标签只会告诉机器,如果对于某些文本,获得了相似的矩阵,这就是标签。这在分类中很有用,但在聊天机器人响应中却不是这样。
要从聊天机器人中获得响应:-将文本分割成句子。-使用各种技术来获取文本的上下文,目前XLNet提供了最佳结果( https://medium.com/dair-ai/xlnet-outperforms-bert-on-several-nlp-tasks-9ec867bb563b )。这将帮助你针对通过聊天机器人提出的查询制定响应。以上是一些初步步骤,实际的AI系统将涉及更多内容。