自然语言处理

分词切词工具

  1. 最常用的开源切词工具是moses
    切词前的文本如下:
    And we knew it was volcanic back in the ’60 s ,’7 0s.
    切词后的文本如下,注意单引号和数字、逗号和句号之前都增加了空格:
    And we knew it was volcanic back in the ’ 60 5 ,’ 7 0s .
    对于中文文本而言,为了方便起见,本书的例子中直接以字为单位进行切割。
    切词前的文本如下:
    六七十年代时才找们只知道这是一座火山。
    切词后的文本如下。每个字和符号之间都增加了空格
    六 七 十 年 代 时 我 们 只 知 道 这 是 一 座 火 山 。
  2. 基于java的分词工具–Hanlp分词
    自然语言处理 中文分词 词性标注 命名实体识别 依存句法分析 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁
    分词效果:
    不好_a ,_w 直接_a 把_p 墨盒_n 堵死_v
    每个词用空格分隔,_a等表示词性,_w表示标点符号
    项目地址
    https://github.com/hankcs/HanLP
  3. pkuseg中文分词
    pkuseg 是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。它简单易用,支持多领域分词,在不同领域的数据上都大幅提高了分词的准确率。
    项目地址:https://github.com/lancopku/PKUSeg-python
  4. THULAC中文分词
    python版项目地址:https://github.com/thunlp/THULAC-Python
    java版项目地址:https://github.com/thunlp/THULAC-Java
    C++版项目地址:https://github.com/thunlp/THULAC
  5. “结巴”中文分词
    python版项目地址:https://github.com/fxsjy/jieba
    java版项目地址:https://github.com/huaban/jieba-analysis

中文分词训练数据集

MSRA:新闻语料库。
CTB8:新闻文本及网络文本的混合型语料库。
WEIBO:微博网络文本语料库。
PKU:北大PKU语料库。

语言模型的评价方法

  • .语言模型的任务是预测每个句子在语言中出现的概率;

  • MLE: Maximum Likelihood Estimation 最大似然估计

  • perplexity 复杂度:在一个测试集上得到的perplexity越低,说明建模的效果越好。

  • average branching factor 平均分支系数:模型预测下一个词时的平均可选择数量

  • log perplexity可以视为 Cross Entropy
    TensorFlow提供了以下两个计算交叉熵的函数:
    tf.nn.softmax_cross_entropy_with_logits
    tf.nn.sparse_softmax_cross_entropy_with_logits
    两个函数的不同支持是tf.nn.softmax_cross_entropy_with_logits函数需要将预测目标以概率分布的形式给出。
    由于tf.nn.softmax_cross_entropy_with_logits 允许提供一个概率分布,因此在使用时有更大的自由度。举个例子, 一种叫label smoothing 的技巧是将正确数据的概率设为一个比1. 0略小的值,将错误数据的概率设为比0.0 略大的值,这样可以避免模型与数据过拟合,在某些时候可以提高训练效果。

神经语言模型

在神经语言模型中保留13 个单词的上文信息大致可以取得与保存所有上文信息相同的效果。

PTB数据集的预处理

  • PTB(Penn Treebank Dataset)文本数据集是目前语言模型学习中使用最为广泛的数据集。
    来源于 Tomas Mikolov 网站上的 PTB 数据集http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
    使用常用的开源切词工具moses切词。

PTB数据的batching方法

  • padding : 将同一batch内的句子长度补齐
  • 将长序列切割为固定长度的子序列
  • 将整个文档切分中若干连续段落,再让batch中的每一个位置负责其中一段

基于循环神经网络的神经语言模型

  • 词向量 embedding
  • 降低输入的纬度
  • 增加语义信息
  • tf.nn.embedding_lookup
  • Softmax
  • logits
  • 调用softmax方法将logits转化为加和为1的概率
  • 共享向量层和softMax层参数大幅减少参数数量,还能提高最终模型效果

神经网络翻译

机器翻译背景与Seq2Seq模型介绍

  • Encoder和Decoder
    自然语言处理_第1张图片

机器翻译文本数据的预处理

  • 数据集WMT:Workshop on statistical Machine Translation
  • 使用开源切词工具moses切词
  • tf.data.Dataset.padded_batch:填词工具
  • tf.nn.dynamic_rnn
  • 为了不影响填充训练
    循环神经网络在读取填充时,应当跳过这一位置的计算
    在设计损失函数时需要特别将填充位置的损失权重设置为0,这样在填充位置产生的预测不会影响梯度的运算。

注意力机制

  • Attention :允许解码器随时查阅输入句子中的部分单词和片段,因此不再需要在中间变量中存储所有信息。
    自然语言处理_第2张图片

自然语言处理_第3张图片

  • tf.contrib.seq2seq.AttentionWrapper:将解码器的循环神经网络层和注意力结合。

参考:《TensorFlow实战Google深度学习框架2.0》第9章
相关链接:
[1] 基于gensim的Doc2Vec简析 http://blog.csdn.net/lenbow/article/details/52120230

你可能感兴趣的:(深度学习)