奋战聊天机器人(二)语料和词汇资源

当代自然语言处理都是基于统计的,统计自然需要很多样本,因此语料和词汇资源是必不可少的

1. NLTK语料库

NLTK包含多种语料库,比如:Gutenberg语料库

nltk.corpus.gutenberg.fileids()
  • nltk.corpus.gutenberg:语料库的阅读器
  • nltk.corpus.gutenberg.raw(‘chesterton-brown.txt’):输出chesterton-brown.txt文章的原始内容
  • nltk.corpus.gutenberg.words(‘chesterton-brown.txt’):输出chesterton-brown.txt文章的单词列表
  • nltk.corpus.gutenberg.sents(‘chesterton-brown.txt’):输出chesterton-brown.txt文章的句子列表
类似的语料库还有:
  • from nltk.corpus import webtext:网络文本语料库,网络和聊天文本
  • from nltk.corpus import brown:布朗语料库,按照文本分类好的500个不同来源的文
  • from nltk.corpus import reuters:路透社语料库,1万多个新闻文档
  • from nltk.corpus import inaugural:就职演说语料库,55个总统的演说

1.1 语料库的一般结构

语料库的几种组织结构:
- 散养式(孤立的多篇文章)
- 分类式(按照类别组织、相互之间没有交集)
- 交叉式(一篇文章可能属于多个类)
- 渐变式(语法随时间发生变化)

1.2 语料库的通用接口

  • fileids():返回语料库中的文件
  • categories():返回语料库中的分类
  • raw():返回语料库的原始内容
  • words():返回语料库中的词汇
  • sents():返回语料库句子
  • abspath():指定文件在磁盘上的位置
  • open():打开语料库的文件流

1.3 加载自己的语料库

收集自己的语料库(文本文件)到某路径下(比如/tmp),然后执行:

from nltk.corpus import PlaintextCorpusReader
corpus_root = '/tmp'
wordlists = PlaintextCorpusReader(corpus_root, '.*')
wordlists.fileids()

就可以列出自己语料库的各个文件了,也可以使用如wordlists.sents(‘a.txt’)和wordlists.words(‘a.txt’)等方法来获取句子和词信息

1.4 条件频率分布

自然语言的条件频率分布就是指定条件下某个事件的频率分布

比如要输出在布朗语料库中每个类别条件下每个词的频率

# encoding:utf-8

import nltk
from nltk.corpus import brown

# 链表推导式,genre是brown语料库里的所有类别列表,word是这个类别中的词汇列表
# (genre, word)就是类别加词汇对
genre_word = [(genre, word)
              for genre in brown.categories()
              for word in brown.words(categories=genre)]

# 创建条件频率分布
cfd = nltk.ConditionalFreqDist(genre_word)
# 指定条件和样本作图
cfd.plot(conditions=['news', 'adventure'], samples=[u'stock', u'sunbonnet'])
# 自定条件和样本作表格
cfd.tabulate(conditions=['news', 'adventure'], samples=[u'stock', u'sunbonnet'])

我们还可以利用条件频率分布,按照最大条件概率生成双连词,最终生成一个随机文本

这可以直接使用bigrams()函数,它的功能是生成词对链表。

# encoding:utf-8

import nltk


# 循环10次,从cddist中取当前单词最大概率的连词,并打印出来
def generate_model(cfdist, word, num=10):
    for i in range(num):
        print(word)
        word = cfdist[word].max()

# 加载语料库
text = nltk.corpus.genesis.words('english-kjv.txt')
# 生成双连词
bigrams = nltk.bigrams(text)
# 生成条件频率分布
cfd = nltk.ConditionalFreqDist(bigrams)

# 以 the 开头,生成随机串
generate_model(cfd, 'the')

其他词典资源

有一些仅是词或短语以及一些相关信息的集合,叫做词典资源。

  • 词汇列表语料库:nltk.corpus.words.words(),所有英文单词,这个可以用来识别语法错误
  • 停用词语料库:nltk.corpus.stopwords.words,用来识别那些最频繁出现的没有意义的词
  • 发音词典:nltk.corpus.cmudict.dict(),用来输出每个英文单词的发音
  • 比较词表:nltk.corpus.swadesh,多种语言核心200多个词的对照,可以作为语言翻译的基础
  • 同义词集:WordNet,面向语义的英语词典,由同义词集组成,并组织成一个网络

参考资料来源:http://www.shareditor.com/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 说明 该库是对目前市面上已有的开源中文聊天语料的搜集和系统化整理工作 该库搜集了包含 - chatterbot - 豆瓣多轮 - PTT八卦语料 - 青云语料 - 电视剧对白语料 - 贴吧论坛回帖语料 - 微博语料 - 小黄鸡语料 共8个公开闲聊常用语料和短信,白鹭时代问答等语料。 并对8个常见语料的数据进行了统一化规整和处理,达到直接可以粗略使用的目的。 **使用该项目,即可对所有的聊天语料进行一次性的处理和统一下载,不需要到处自己去搜集下载和分别处理各种不同的格式。* # 环境 python3 # 处理过程 将各个来源的语料按照其原格式进行提取,提取后进行繁体字转换,然后统一变成一轮一轮的对话。 # 使用方法 将解压后的raw_chat_corpus文件夹放到当前目录下 目录结构为 ``` raw_chat_corpus -- language -- process_pipelines -- raw_chat_corpus ---- chatterbot-1k ---- douban-multiturn-100w ---- .... -- main.py -- ... ``` 执行命令即可 ```bash python main.py ``` 或者 ```bash python3 main.py ``` # 生成结果 每个来源的语料分别生成一个独立的*.tsv文件,都放在新生成的clean_chat_corpus文件夹下。 生成结果格式为 tsv格式,每行是一个样本,先是query,再是answer ``` query \t answer ``` # 结果的使用 这个就根据每个人不同的情况自主使用即可 个人对于聊天机器人方向实践也不是很多,以下一篇之前写的知乎专栏供参考 **《从产品完整性的角度浅谈chatbot》** 文章粗略讲解了如下一些方面,介绍了聊天机器人在实际产品化过程中可能遇到的问题和解决办法。 1. chatbot自身人格的设置 1. 产品上线需要考虑的敏感词处理 1. 文本检索模型的使用 1. 文本生成模型的使用 1. 回答打分机制 1. 万能回答的使用策略 1. 多媒体消息的处理 1. 产品模型部署的问题 # 版权说明 本项目为非商业项目,为纯搜集和汇总资料,如有侵权,请在issue下留言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值