zengbin93 / blog

17 stars 10 forks source link

笔记 - 自然语言处理相关博客摘记 #29

Open zengbin93 opened 6 years ago

zengbin93 commented 6 years ago

最新人机对话系统简略综述 - 2018-03-11

苹果公司的Siri、 微软的Cortana、 谷歌的Allo、 百度的度秘、 亚马逊的Echo、 阿里巴巴的小蜜

20世纪60年代麻省理工学院的人工智能实验室利用大量的规则建立了第一个名为ELIZA的聊天机器人。

Task-Complete对话系统 人工规则(DELPHI系统)-> 基于马尔科夫决策过程(Markov Decision Process, MDP)[的序贯决策问题 -> 管道方法、端到端方法

经典管道方法包括语言理解、对话管理、语言生成三个基本的模块

image

基于规则的系统容易出现频繁的错误,扩展性能差。

最近深度学习采用的方法是使用一个滑动窗口输出任意数量的可能值的概率分布序列。虽然它在一个领域受过训练,但它可以很容易地转移到新的领域。此处运用较多的模型是,multi-domain RNN[32]和Neural Belief Tracker(NBT)[33]。

问答系统简略可以划分基于知识库符号式、检索式以及生成式的方法。 基于知识库问答是一个语义匹配的过程[40],通过表示学习知识库以及用户问题的语义表示,将知识库中的实体、关系以及问句文本转换为一个低维语义空间中的数值向量,在此基础上,利用数值计算, 直接匹配与用户问句语义最相似的答案。检索式问答[44]是将自然语言的提问简化为机器可以识别的方式,包括关键词提取、提问分类与扩展、语义分析等。检索模块是用某种检索算法找到相关的句子、段落或者文章。答案提取模块是从检索结果中找到与提问答案一致的实体,通过某种方法对答案进行序,挑选概率最大的候选答案作为最终答案。生成式的方法[45]基于序列到序列学习模型的编码-解码框架(encoder-decoder 框架),类似于机器翻译的方式,给出答案。

无目标导向的对话系统可以追溯到上世纪60年代中期,麻省理工学院(MIT)的科学家Joseph Weizenbaum研发出第一个聊天机器人Eliza[2]。该系统基于简单的自然语言解析规则模仿罗杰斯学派心理治疗者的治疗过程。Colby于70年代设计了另外一个聊天机器人Parry[19],模拟妄想型精神分类症患者。与Eliza类似,Parry同样是基于简单的自然语言解析规则进行聊天对话。

Anton Leuski等人开发的NPCEditor系统通过训练一个文本分类统计模型将用户的输入文本映射到数据库存储的对话历史作为输出完成对话响应 [46] Leuski A, Traum D. NPCEditor: A Tool for BuildingQuestion-Answering Characters[J]. Lrec 2010 - Seventh International Conferenceon Language Resources and Evaluation, 2010: 2463–2470.

单轮检索聊天机器人在反应选择单轮的谈话,只有消息用于选择一个合适的回复。目前比较新的方法,利用深度卷积神经网络体系结构改进模型,学习消息和响应的表示,或直接学习两个句子的相互作用表示,然后用多层感知器来计算匹配的分数[17,18]。多轮检索回复会话越来越受到人们的关注,在多轮回答选择中,将当前的消息和先前的话语作为输入。模型选择一个自然的、与整个上下文相关的响应。

如Alan Ritter等人采用基于短语的统计机器翻译模型生成对话响应,并对比了检索式对话系统性能,由人工进行评估打分,结果表明基于机器翻译生成式模型的对话响应明显优于检索式对话系统[50]。 [50] Ritter A, Cherry C, Dolan W B. Data-driven responsegeneration in social media[J]. Proceedings of the Conference on EmpiricalMethods in Natural Language Processing (EMNLP’11), 2011: 583–593.

zengbin93 commented 6 years ago

Deep Learning for Chatbots, Part 2 – Implementing a Retrieval-Based Model in Tensorflow - 20160704

zengbin93 commented 6 years ago

计算两个句子之间的相似度

参考资料

基于word2vec改造的BOW方法

step 1. 在chat.txt上构建词库,假定词库大小为N step 2. Word2vec跑出所有词的向量 step 3. 对每一个句子输入,构造一个N维的向量 构造过程如下: a、对于句子中的每一个词,计算其与词表中的每一维的相似度,保留相似度最大的十个维度;这样的话,部分维度就会出现多个词的相似度; b、向量的每一维是该维对应的词与该句子中每一个词的相似度的最大值。

如何用 word2vec 计算两个句子之间的相似度? - 鲁灵犀的回答 - 知乎 https://www.zhihu.com/question/29978268/answer/55338644

zengbin93 commented 6 years ago

Multi-Class Text Classification with Scikit-Learn - 中文

不平衡样本需要特殊的处理。传统的算法通常没有考虑数据分布,甚至会直接忽略少数样本的类别,把它们作为异常值处理。

文本表达 from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer

朴素贝叶斯分类器 - (Multinomial) Naive Bayes from sklearn.naive_bayes import MultinomialNB

模型选择

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score
models = [
    RandomForestClassifier(n_estimators=200, max_depth=3, random_state=0),
    LinearSVC(),
    MultinomialNB(),
    LogisticRegression(random_state=0),
]
CV = 5
cv_df = pd.DataFrame(index=range(CV * len(models)))
entries = []
for model in models:
  model_name = model.__class__.__name__
  accuracies = cross_val_score(model, features, labels, scoring='accuracy', cv=CV)
  for fold_idx, accuracy in enumerate(accuracies):
    entries.append((model_name, fold_idx, accuracy))
cv_df = pd.DataFrame(entries, columns=['model_name', 'fold_idx', 'accuracy'])
zengbin93 commented 6 years ago

笔记 - 腾讯知文团队负责人钟黎:从 0 到1 打造下一代智能对话引擎 | CCF-GAIR 2018

对话系统的三种类型:1)Task Oriented Dialogue;2)Information & Answers;3)General Conversatioin

搜索与问答的区别:搜索会得到搜索结果列表,然后再用一些指标来评价搜索结果的好坏,排序。问答的要求更高,大部分时候是没有不能用列表显示,只有一句话或者只有一个答案,我们要追求 top1 的准确率,对匹配的要求会更高一些。

image

image

WMD 现在有很多深度匹配的方式,最多的是监督匹配,在这当中有两类比较常用的方法,一类是 Siamese 网络,一类是基于交互矩阵的网络(Interaction-)。

业界经验谈:

首先,要重视 Baseline,这一点非常重要。不要把 Baseline 搞得太复杂,因为要通过 Baseline 理解数据和问题。

第二,尽快地构建 pipeline。我们的 pipeline 是一整套系统,包括数据处理、模型训练、模型加载、模型预测、模型评价,特别要注意评价指标和整个流程的打通,只有建立 pipeline 才有迭代的基础,如果没有 pipeline,就没办法迭代,没办法评价模型,也没办法更新框架。

第三,不存在一种可以解决所有问题的算法,算法一定有其适用的数据和场景。有了基准和评价标准,我们才可以尝试更多模型,才能知道模型在哪种条件下更加合适,做到扬长避短。

最后,要有领域相关的数据。领域相关的数据不只是指训练数据,也包括该领域的专家经验和知识,与该领域相关的框架和模型。就我们的经验来讲,领域数据的优化,比如清洗领域数据,或者构建领域词典、词表,这些方法带来的提升比较显著,甚至比模型带来的提升更加显著,所以要重视领域数据的工作。