
自然语言处理
花咪
实干,解决一切困难。
展开
-
多标签分类的一次实践
多标签分类是NLP领域的常见任务, 最常用的是sigmoid + BCE , 根据标签数量和特点不同,可能有不同的变形和优化。本文实践的是一个25w标签词的标签体系。由于标签数量巨大,将标签进行全量表示将难以训练。基于该任务的若干思考:(1)使用负采样的方式减少结果向量的表示(2)标签具有相关性,负采样的量不是越大越好(3)在loss上,采用margin loss 优化正负样本的间隔# coding=utf-8"""负彩阳版本 - 加快迭代训练效率"""impor.原创 2021-01-25 17:49:30 · 361 阅读 · 0 评论 -
记录协同过滤相关的系列实验(2)
(一)基于物品端的协同过滤2019-Large-scale Collaborative Filtering with Product Embeddings(二)数据构建训练集构建上, 样本是用户历史的交互数据(正向交互)+ 当前交互数据 + 当前交互数据类型(正向/负向)目的就是找出用户喜欢了什么, 来预测其将喜欢什么。(三)算法实现 def build_model(self): """""" input_seq = layer..原创 2021-01-25 18:21:51 · 238 阅读 · 0 评论 -
记录协同过滤相关的系列实验
推荐的本质:推荐的最终目的就是找到相似的人、相似的物品。进而再进行基于user、item的推荐。未达到这个目的,可以对用户的行为分析(相似行为的人当作相似的人)、基于内容的分析(如用户的各种标签,根据标签匹配度查看相似的人)。但一个推荐系统可能是一个多策略、多场景方法结合体。协同过滤:主要是基于用户和物品的交互行为,进行分析。 传统的协同过滤是基于矩阵分解的。当用户和物品的数据级大了以后,这个方法相当耗时。所以采用了deep的方法。(1)直接dot, 对交互矩阵进行拟合..原创 2021-01-25 18:19:05 · 213 阅读 · 0 评论 -
基于划分的新词发现
该新词发现是在query中的新词。主要的技术点:(1)左右熵、凝固度(2)直接基于划分部分效果(对query的直接划分):目前问题: 对英文不好 , 对低频词不好。processing line : 办公室主任[1, 4, 6]办公室主任processing line : 私家车司机[1, 4, 6]私家车司机processing line : 土建预算员[1, 3, 6]土建预算员processing line : 医院挂号员[1, 3, 6]医院.原创 2021-01-25 17:58:11 · 176 阅读 · 0 评论 -
命名实体识别实践(魔改)
该方案依然是对query的命名实体识别任务,针对该任务设计的实验方案。针对该任务的一些思考:(1)训练时,将字随机unk, 增加泛化性。(2)字向量、句向量相结合,学习联合分布。(3)深度堆叠,使特征更加丰富。# coding: utf-8from keras import layersfrom keras.models import Model, save_model, load_model, model_from_jsonfrom keras_contrib.l..原创 2021-01-25 18:05:14 · 235 阅读 · 0 评论 -
命名实体识别实践(albert + crf)
该项目是识别query中实体的项目, 由于业务特点,query中实体较密集且连续。该项目是Albert在该项目的一个测试方案, 效果上还可以。但应该注意的有:(1)albert的中文向量版本要看仔细, 要和代码需要的版本相匹配。(2)在使用的时候,注意编码时添加的前缀后缀。代码完整版:#! -*- coding:utf-8 -*-# 情感分析例子,加载albert_zh权重(https://github.com/brightmart/albert_zh)im...原创 2021-01-25 18:16:37 · 1004 阅读 · 1 评论 -
文档标签化的几种方案
前言:文档标签化, 就是从文档中抽取若干标签,来定义和表示文本,使文档更容易的进行计算、索引、表示。当然前提是已经有了一个标签词库。量少的话可以人工进行编写业务相关词典、量大的话可以用机器生成然后进行人工审核。方案一:直接词典匹配这里主要借助于像字典数、多摸匹配等方案,对文档中的标签进行识别。优点是速度快, 缺点是容易对一些超短的tag进行误识别(语境中可能不是一个tag);不能识别意思相近的tag。方案二:使用NER进行识别NER的模型较多,这里就不再赘述,在数据构造...原创 2021-01-25 17:34:55 · 1381 阅读 · 0 评论 -
意图分析及斯坦福NLP服务搭建
标题应用范围和场景在自然语言处理的应用中,经常会用到分词,词性分析、句法分析、英体识别等应用,斯坦福NLP在中文支持方面还算不错,方便我们更快的支持和验证应用的可行性。环境配值和搭建过程下载 stanford-corenlp-full-2017-06-09.zip ,然后在系统中解压,下载该包支持的中文模型 stanford-chinese-corenlp-2017-06-09...原创 2019-06-02 21:17:10 · 629 阅读 · 0 评论 -
再谈语言模型
标题:语言模型再自然语言处理任务中有极其重要的作用,大家较为熟悉的是n-gram类型的语言模型,无论是传统的方法还是基于NN的方法,都是根据前N个词 预测当前词,或者求当前词的概率。需要求整个序列的概率时需要对序列进行遍历然后进行累乘操作。其实自然语言的语言模型可以不这样玩,哈哈。下面对一些新型的语言模型加以介绍,并探讨一下其应用。(稍后讲解求编码、求损失等操作)新型语言模型:bert预训练...原创 2019-07-20 18:23:32 · 369 阅读 · 0 评论 -
seq2seq 实现数字加法
标题这是用简单的seq2seq实现的数字加法,原理就是想用一个循环网络编码Query,然后将其复制到Answer的的长度。后接多层循环神经网络。最后softmax加交叉熵损失。model = Sequential()# "Encode" the input sequence using an RNN, producing an output of HIDDEN_SIZE.# Note: I...原创 2019-06-20 22:28:14 · 411 阅读 · 0 评论 -
再谈语言模型之应用
语言模型的形式上文介绍的语言模型在效果上得到了非常好的效果,但是在生产环境速度偏慢,因此本文的目的有两个,意识较轻量级的语言模型的实验, 二是语言模型在下游任务中应用,语言模型本质上还是去发现语言文法中的潜在的关联关系,应用该方法理论上在文本的语义方面判断的任务会有很大帮助。模型的应用 VAE这里展示的是VAE在文本生成过程中加入了,lm_loss用来辅助文本生成,关于VAE的一些东西就不在...原创 2019-07-20 22:14:11 · 1220 阅读 · 0 评论 -
神经网络实验心得(持续更新)
(1)当预测类别比较多时,各层测参数应该数量相当,否则会出现一个特征会影响多个类别的情况,出现一对多,模型不好训练。(2)其实神经网络的本质还是特征提取和空间映射,观察数据的特征和分布是非常有必要的。(3)attention 在词特征影响比较大的任务中真的有效,如一些翻译或者分类任务。(4)relu激活适合用在特征维度逐渐减少的层中,并且能增加模型的鲁棒性。(5)...原创 2019-07-20 22:15:02 · 4655 阅读 · 1 评论 -
大量字符串快速匹配-字典树匹配
说明:在本人的工作中遇到了这样的一个问题。需要用到字符串匹配的功能。一边是300字左右的句子,另一边是几个到几十个词的短语,然后过滤出包含短语的句子。数量都在千万级别,最直接的想法肯定是两层for循环两两匹配,但是有点low。在这实现了基于多叉树的树形匹配方式。(如果有问题,欢迎指正)class Trie(): def __init__(self): self...原创 2019-10-04 16:34:57 · 1428 阅读 · 0 评论 -
Keras 实现对bert编码的封装实现
bert编码突袭了NLP各大榜单,为了让大家更方便的在自己的数据集合上测试bert的威力,在此分享一下,keras版本的nert编码层。直接上代码了。class b_embeding_layer_b(keras.layers.Layer): """自定义层""" def __init__(self, max_seq_len=50,model_dir = r"F:\glove.6...原创 2019-05-19 23:39:29 · 1934 阅读 · 0 评论 -
Bert编码训练NER实体偏移的问题
在这里记录一下踩过的坑在训练样本中几乎没有前面一大串英文或者数字,然后后面跟实体的情况,所以训练起来还挺平稳的。但是在预测的时候遇到了这种情况,造成实体可以识别出来,但是实体的预测结果下标错了(表现为下标提前了)造成这一问题的原因是在给bert传文本得到文本特征的时候,可以穿字符串的文本,也可以自己token完成后传一个token后的list。如果传递的是字符串,默认系统的token,对于...原创 2019-05-19 23:30:32 · 1463 阅读 · 5 评论 -
语言模型知识梳理
最近在做文本生成方面的工作,看了大量的语言模型相关的资料,在这里记录下来,以做参考。(1)语言模型是什么?语言模型是衡量一系列的字串是自然语言的概率,但是他不考虑语法层面的东西。(2)语言模型的用处?如:音字转换、拼写纠错、机器翻译等。(3)语言模型现状根据概率,我们有p(L) = p(w1|s)*p(w2|s,w1)*p(w3|s,w1,w2)*....P(e|s,w1,w2,...wn)然而,...原创 2018-04-17 18:23:32 · 451 阅读 · 0 评论 -
基于关键词的文本生成----思路和思考
文本生成是最近研究的热点,他的生成源有很多,如:图片、文本、视频等。本文想针对一些特殊场合的需要关键词的文本生成工作,在这里把思路记录一下。这里使用的是传统方式,有机会会尝试深度学的方式。(1)依赖的语法选择如果想让句子读起来通顺,就需要一定的语法框架,但是常规的语法会有较多的问题,如主语,能够做主语的成分很多,如代词、名词甚至短语,所以生成起来不好控制,建议使用词性序列作为语法序列。(2)关键词...原创 2018-04-17 18:59:27 · 8163 阅读 · 6 评论 -
基于词典的情感分析
情感分析的几个等级:(1)舆情分析 (2)篇章分析 (3)句子(4)item如:“这部手机外观挺好看,但是电池不够用。”分别评价了两个item,但是是一个句子。本文的立足点是以句子为单位进行情感分析的,分析时进行了语法分析,用来分析情感词的否定信息和情感副词,在这里定的否定的权重是-1否定副词的权重为1.5。可以参照一下效果:我开心 {'快乐': 5.0}我不开心 {'快乐': -5} ...原创 2018-04-19 15:21:09 · 3216 阅读 · 0 评论 -
CRF++ 训练问题(windows)
问题如图:迭代了一轮就停止了解决方式:> crf_learn -a MIRA .\template .\test_data model -t估计是winsows中对它的多线程不兼容(我的不是本地编译的)。原创 2018-06-02 16:03:02 · 2095 阅读 · 8 评论 -
文本表示概览
文本表示文本表示在最近的研究领域非常火热,因为自己在做文本分类的一些工作(这一部分计划在另一篇博文中进行阐述),所以对文本表示的一些方式进行了一些调研,对于问题了解的同时也产生了一些疑问概论 如何描述一个句子...原创 2019-02-17 18:26:54 · 336 阅读 · 0 评论 -
命名实体识别实践(词典匹配)
使用词典原创 2019-03-09 21:24:09 · 5912 阅读 · 1 评论 -
命名实体识别实践(LSTM+CRF)
LSTM原创 2019-03-09 21:38:51 · 2804 阅读 · 2 评论 -
命名实体识别实践(bert+微调)
bert原创 2019-03-09 21:51:22 · 6130 阅读 · 7 评论 -
序列相似性比对(1)
序列的相似索引和相似度计算直接代码: def seq_match_pattern_2(self, list_char, list_char_other): """基于字符序列的比对 @:param list_char 对比序列1 @:param list_char_other 对比序列2 """ d = diffl...原创 2019-02-28 23:24:45 · 2717 阅读 · 0 评论 -
文本相似度计算与检索
前言:文本的检索和相似度计算在nlp的应用中有很重要的作用,本文介绍了一种简单方法对问答匹配进行一种实现,即在所有的query中找到和用户输入query罪匹配的一项。本方法比较适合细粒度的匹配。主要技术:(1)关键词分析:提取出Query中主要的关键词,作为检索源。(2)全文检索:如mysql、ELsearch等均可。 作为召回。(3)在召回数据中进行相似度计算找到最高匹配项。完成匹配。...原创 2019-03-01 23:05:31 · 2158 阅读 · 0 评论 -
seq2seq的实现方式(1)
应用场景seq2seq是自然语言处理应用中的常用模型,一般的机器翻译,文本摘要,对话生成(虽然之前实现过基于语言模型+关键词的生成方式,但这才是正道),文本摘要等任务。更高级的模型也是从基础的模型进行迭代的模型架构相对统一。其具体的模型原理就不讲了,有很多博客已经有很好的说明,在这里只是趁着周末更新一下seq2seq在机器翻译方面的实验,更新上来供同行们参考。嗯,seq2seq有几种模式:...原创 2019-03-10 10:39:39 · 503 阅读 · 0 评论 -
seq2seq的实现方式(2)
书接上文:本篇实现的是(3)的方式,Encoder的隐层和Embeding的集合方式是sum,当然也可以改成其他的方式。下面就直接上代码了: def build_model(self): encoder_input = layers.Input(shape=(self.input_seq_len,)) encoder_embeding = layer...原创 2019-03-10 10:44:25 · 394 阅读 · 0 评论 -
seq2seq的实现方式(3)
书接上文这里实现的是方式(4),采用attention的方式。 def build_model(self): """""" encoder_input = layers.Input(shape=(self.input_seq_len,)) encoder_embeding = layers.Embedding(input_dim=len(...原创 2019-03-10 10:53:24 · 353 阅读 · 0 评论 -
srilm 自用记录
(1)下载与安装下载网址:https://download.youkuaiyun.com/download/cyinfi/10299520解压: tar -zxvf irstlm-5.80.08.tgz 进入目录: srilm-1.7.2 编译: make World (注意更改编译目录:修改makefile文件,添加 SRILM = $(PWD)) 测试: make test 结果如下...原创 2018-03-21 13:57:42 · 1499 阅读 · 0 评论