深度学习之NLP

知识点

"""
1) from gensim.model import Word2Vec  import jieba
2) opencc :将繁体字转换为简体字
        转换命令:opencc -i texts.txt -o test.txt -c t2s.json
3) 自然语言处理:
        1、拼写检查、关键字检索
        2、文本挖掘
        3、文本分类   (二分类)
        4、机器翻译
        5、客服系统
        6、复杂对话系统
4) p(S)=p(w1,w2,w3,w4,w5,…,wn) =p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)
        计算方式:p(wi|w1,w2,...,wi-1) = p(w1,w2,...,wi-1,wi) / p(w1,w2,...,wi-1)

5) 语言模型问题:(1)数据过于稀疏   (2)参数空间太大
    针对上述两个问题两种优化方法:
        1)假设下一个词的出现依赖它前面的一个词:
        p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)=p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)
        2)假设下一个词的出现依赖它前面的两个词:
        p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|wn-1,wn-2)

6) word2vec过程:
        1、数据获取
        2、分词
        3、gensim的word2vec建模
        4、model.similarity()进行预测
"""

1、wiki词库处理----繁体字转为简体字

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 修改后的代码如下:
import logging
import os.path
import sys
from gensim.corpora import WikiCorpus
if __name__ == ‘__main__‘:

    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)
    logging.basicConfig(format=‘%(asctime)s: %(levelname)s: %(message)s‘)
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ‘ ‘.join(sys.argv))
    # check and process input arguments
    if len(sys.argv) < 3:
        print (globals()[‘__doc__‘] % locals())
        sys.exit(1)
    inp, outp = sys.argv[1:3]
    space = b‘ ‘
    i = 0
    output = open(outp, ‘w‘,encoding=‘utf-8‘)
    wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
    for text in wiki.get_texts():
        s=space.join(text)
        s=s.decode(‘utf8‘) + "\n"
        output.write(s)
        i = i + 1
        if (i % 10000 == 0):
            logger.info("Saved " + str(i) + " articles")
    output.close()
    logger.info("Finished Saved " + str(i) + " articles")
#python process.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text

2、对简体语料库进行jieba分词

import jieba
import jieba.analyse
import jieba.posseg as pseg
import codecs,sys
def cut_words(sentence):
    #print sentence
    return " ".join(jieba.cut(sentence)).encode(‘utf-8‘)
f=codecs.open(‘wiki.zh.jian.text‘,‘r‘,encoding="utf8")
target = codecs.open("zh.jian.wiki.seg-1.3g.txt", ‘w‘,encoding="utf8")
print (‘open files‘)
line_num=1
line = f.readline()
while line:
    print(‘---- processing ‘, line_num, ‘ article----------------‘)
    line_seg = " ".join(jieba.cut(line))
    target.writelines(line_seg)
    line_num = line_num + 1
    line = f.readline()
f.close()
target.close()
exit()
while line:
    curr = []
    for oneline in line:
        #print(oneline)
        curr.append(oneline)
    after_cut = map(cut_words, curr)
    target.writelines(after_cut)
    print (‘saved‘,line_num,‘articles‘)
    exit()
    line = f.readline1()
f.close()
target.close()

# python Testjieba.py

3、word2vec建模

import logging
import os.path
import sys
import multiprocessing
from gensim.corpora import WikiCorpus
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__ == ‘__main__‘:

    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)
    logging.basicConfig(format=‘%(asctime)s: %(levelname)s: %(message)s‘)
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ‘ ‘.join(sys.argv))
    # check and process input arguments
    if len(sys.argv) < 4:
        print (globals()[‘__doc__‘] % locals())
        sys.exit(1)
    inp, outp1, outp2 = sys.argv[1:4]
    model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())
    model.save(outp1)
    model.model.wv.save_word2vec_format(outp2, binary=False)
#python word2vec_model.py zh.jian.wiki.seg.txt wiki.zh.text.model wiki.zh.text.vector
#opencc -i wiki_texts.txt -o test.txt -c t2s.json

4、加载模型,预测

from gensim.models import Word2Vec

en_wiki_word2vec_model = Word2Vec.load(‘wiki.zh.text.model‘)

testwords = [‘苹果‘,‘数学‘,‘学术‘,‘白痴‘,‘篮球‘]
for i in range(5):
    res = en_wiki_word2vec_model.most_similar(testwords[i])
    print (testwords[i])
    print (res)

原文地址:https://www.cnblogs.com/ywjfx/p/11002561.html

时间: 2024-10-30 04:48:43

深度学习之NLP的相关文章

回望2017,基于深度学习的NLP研究大盘点

回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 年基于深度学习的自然语言处理研究进行了大盘点.雷锋网 AI 科技评论根据原文进行了编译. 在过去的几年里,深度学习(DL)架构和算法在诸如图像识别和语音处理等领域取得了世人瞩目的进步.然而在最开始的时候,深度学习在自然语言处理(Natural Language Processing, NLP)领域的

深度学习、机器学习与NLP的前世今生

随着深度学习的发展,自然语言处理领域的难题也得到了不断突破,AlphaGo项目的主要负责人David Silver曾说"深度学习 (DL)+ 强化学习 (RL) = 人工智能 (AI)".目前深度学习在自然语言处理上主要有哪些应用?在工程实践中是否会有哪些瓶颈?以下内容是根据达观数据联合创始人高翔在<深度学习与文本智能处理>直播的总结. 一.为什么做文本挖掘 什么是NLP?简单来说:NLP的目的是让机器能够理解人类的语言,是人和机器进行交流的技术.它应用在我们生活中,像:智

&lt; 转&gt;百度与深度学习

作者 余凯,百度技术副总监,千人计划国家特聘专家. 贾磊,百度主任架构师,语音技术负责人. 陈雨强,百度商务搜索部资深研发工程师,负责搜索广告 CTR 预估 摘要:深度学习带来了机器学习的新浪潮,推动"大数据+深度模型"时代的来临,以及人工智能和人机交互大踏步前进.如果我们能在理论.建模和工程方面突破深度学习面临的一系列难题,人工智能的梦想不再遥远. 2012 年 6 月,<纽约时报>披露了 Google Brain 项目,吸引了公众的广泛关注.这个项目是由著名的斯坦福大学

斯坦福大学深度学习与自然语言处理第一讲:引言

斯坦福大学在三月份开设了一门"深度学习与自然语言处理"的课程:CS224d: Deep Learning for Natural Language Processing ,授课老师是青年才俊Richard Socher,他本人是德国人,大学期间涉足自然语言处理,在德国读研时又专攻计算机视觉,之后在斯坦福大学攻读博士学位,拜师NLP领域的巨牛 Chris Manning和Deep Learning 领域的巨牛 Andrew Ng ,其博士论文是< Recursive Deep Le

【转帖】深度学习:推进人工智能的梦想

深度学习:推进人工智能的梦想 发布日期:2014.07.14  浏览次数:58次 深度学习:采用无监督学习,获得更有用的特征(不需要人工抽取特征),以实现各种分类和预测目标,结合高性能计算,提高效率. 通篇文字给人传递的信息就是,百度比Google牛,事实真的如此吗?各位有什么看法? 2012年6月,<纽约时报>披露了Google Brain项目,吸引了公众的广泛关注.这个项目是由著名的斯坦福大学机器学习教授Andrew Ng和在大规模计算机系统方面的世界顶尖专家Jeff Dean共同主导,用

深度学习入门和学习书籍

深度学习书籍推荐: 深度学习(Deep Learning) by Ian Goodfellow and Yoshua Bengio and Aaron Courville 中文版下载地址:https://github.com/exacity/deeplearningbook-chinese R语言深度学习实践指南(Deep Learning Made Easy with R) by Dr. N.D. Lewis 下载地址:http://download.csdn.net/detail/oscer

&lt;深度学习优化策略-3&gt; 深度学习网络加速器Weight Normalization_WN

前面我们学习过深度学习中用于加速网络训练.提升网络泛化能力的两种策略:Batch Normalization(Batch Normalization)和Layer Normalization(LN).今天讨论另一种与它们类似的策略:Weight Normalization(Weight Normalization).Weight Normalization是Batch Normalization的一种变体,与Batch Normalization最大不同点:对神经网络的权值向量W进行参数重写Re

在NLP中深度学习模型何时需要树形结构?

前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for Deep Learning of Representations?>,该文主要对比了基于树形结构的递归神经网络(Recursive neural network)和基于序列结构的循环神经网络(Recurrent neural network),在4类NLP任务上进行实验,来讨论深度学习模型何时需要树形结构.下面我将通过分享这篇论文以及查看的一些

机器学习--如何将NLP应用到深度学习(3)

数据收集以后,我们下面接着要干的事情是如何将文本转换为神经网络能够识别的东西. 词向量 作为自然语言,只有被数学化才能够被计算机认识和计算.数学化的方法有很多,最简单的方法是为每个词分配一个编号,这种方法已经有多种应用,但是依然存在一个缺点:不能表示词与词的关系. 词向量是这样的一种向量[2.1, -3.31, 83.37, 93.0, -18.2, --],每一个词对应一个向量,词义相近的词,他们的词向量距离也会越近(欧氏距离.夹角余弦) 词向量有一个优点,就是维度一般较低,一般是50维或10