标签(空格分隔): NLP Demo项目
搭建一个基于检索式的简易的问答系统,其中每一个样本数据是(问题,答案)
对。系统的核心是当用户输入一个问题的时候,首先要找到跟这个问题最相近的已经存储在库里的问题,然后直接返回相应的答案即可。
- 文本的读取: 需要从相应的文件里读取
(问题,答案)
- 文本预处理: 清洗文本很重要,需要涉及到
停用词过滤
等工作 - 文本的表示: 如果表示一个句子是非常核心的问题,这里会涉及到
tf-idf
,Glove
以及BERT Embedding
- 文本相似度匹配: 在基于检索式系统中一个核心的部分是计算文本之间的
相似度
,从而选择相似度最高的问题然后返回这些问题的答案 - 倒排表: 为了加速搜索速度,我们需要设计
倒排表
来存储每一个词与出现的文本 - 词义匹配:直接使用倒排表会忽略到一些意思上相近但不完全一样的单词,我们需要做这部分的处理。我们需要提前构建好
相似的单词
然后搜索阶段使用 - 拼写纠错:我们不能保证用户输入的准确,所以第一步需要做用户输入检查,如果发现用户拼错了,我们需要及时在后台改正,然后按照修改后的在库里面搜索
- 文档的排序: 最后返回结果的排序根据文档之间
余弦相似度
有关,同时也跟倒排表中匹配的单词有关
dev-v2.0.json
: 这个数据包含了问题和答案的pair, 但是以JSON格式存在,需要编写parser来提取出里面的问题和答案。glove.6B
: 这个文件需要从网上下载,下载地址为:https://nlp.stanford.edu/projects/glove/, 请使用d=200的词向量spell-errors.txt
这个文件主要用来编写拼写纠错模块。 文件中第一列为正确的单词,之后列出来的单词都是常见的错误写法。 但这里需要注意的一点是我们没有给出他们之间的概率,也就是p(错误|正确),所以我们可以认为每一种类型的错误都是同等概率
vocab.txt
这里列了几万个英文常见的单词,可以用这个词库来验证是否有些单词被拼错testdata.txt
这里搜集了一些测试数据,可以用来测试自己的spell corrector。这个文件只是用来测试自己的程序。
sklearn
。具体安装请见:http://scikit-learn.org/stable/install.html sklearn包含了各类机器学习算法和数据处理工具,包括本项目需要使用的词袋模型,均可以在sklearn工具包中找得到。jieba
,用来做分词。具体使用方法请见 https://github.com/fxsjy/jiebabert embedding
: https://github.com/imgarylai/bert-embeddingnltk
:https://www.nltk.org/index.html