词向量

著名的「词类比」现象可能只是一场高端作弊

岁酱吖の 提交于 2019-11-27 20:48:25
「词类比」可谓是自然语言处理领域最为人津津乐道的经典案例之一。然而,进来一系列针对词类比现象的理论依据的讨论似乎要将这一明星案例拉下神坛。然而,无论结果如何,这一场围绕爆炸新闻和真理的大讨论都大大吸引了人们对于自然语言处理领域的关注,激发了大家的研究热情! 自然语言处理(NLP)是现代机器学习工具的重要应用领域之一。它涉及到使用数字化的工具来分析、解释、甚至生成人类(自然的)语言。 目前,NLP 领域最著名的算法莫过于「Word2Vec」,几乎所有该领域的从业者都知道它(甚至许多对机器学习感兴趣,但不研究 NLP 的人也知道它)。WordVec 有几种不同的实现方式,非常易于使用。在许多机器学习/人工智能或 NLP 入门课程中,往往会将其作为一个教学示例。 人们喜欢它的一个主要原因是:它似乎非常直观。通常,Word2Vec 的名气是由一些吸引眼球的、直观构建的例子得来的,这些例子常常被用来展示 Word2Vec 的能力。下面,我们简要介绍一下 Word2Vec 的工作原理: Word2Vec 会查看大量的文本,然后统计哪些词会经常与其它单词一同出现。基于这种词共现统计,Word2Vec 会为每个单词生成抽象表征,也就是所谓的词嵌入。词嵌入是一些低维向量(可以想象成一个包含 200 或 300 个数字的列表)。有了这些词向量,你就可以用单词做一些「神奇」的数学运算了!当我们拥有「国王

spacy词向量

青春壹個敷衍的年華 提交于 2019-11-26 12:30:01
spaCy能够比较两个对象,并预测它们的相似程度。 预测相似性对于构建推荐系统或标记重复项很有用。 例如,您可以建议与当前正在查看的用户内容相似的用户内容,或者将支持凭单标记为与现有内容非常相似的副本。 每个Doc、Span和Token都有一个.similarity()方法,它允许您将其与另一个对象进行比较,并确定相似度。当然,相似性总是主观的——“狗”和“猫”是否相似取决于你如何看待它。spaCy的相似模型通常假定一个相当通用的相似性定义。 tokens = nlp(u'dog cat banana') for token1 in tokens: for token2 in tokens: print(token1.similarity(token2)) 在这种情况下,模型的预测是很准确的。狗和猫非常相似,而香蕉却不是很相似。相同的标记显然是100%相似的(并不总是精确的1.0,因为向量数学和浮点数的不精确)。 相似性是通过比较词向量或“词嵌入”来确定的,即一个词的多维意思表示。单词向量可以通过像word2vec这样的算法生成,通常是这样的: important note 为了使比较算法简洁和快速,spaCy的小模型(所有以sm结尾的包)都不使用单词向量,而且这些sm包只包含上下文相关的向量。这意味着您仍然可以使用similarity()方法来比较文档、span和token

BERT-Pytorch demo初探

蹲街弑〆低调 提交于 2019-11-26 04:30:55
https://zhuanlan.zhihu.com/p/50773178 概述 本文基于 pytorch-pretrained-BERT(huggingface)版本的复现,探究如下几个问题: pytorch-pretrained-BERT的基本框架和使用 如何利用BERT将句子转为词向量 如何使用BERT训练模型(针对SQuAD数据集的问答模型,篇幅问题,可能下篇再写) 因为已经有很多文章对BERT的结构和效果做了详尽的介绍,所以对于模型的效果和结构就不在这里赘述了。 基本框架和使用 环境 首先,利用pip安装包: 1 pip install pytorch-pretrained-bert 这种安装方法可能会导致一个编码问题,具体细节可以参考 这里 。作者已经把这个错误改了过来,但是没有发布新的版本(当前版本为0.1.2),因此需要我们先从github上下载源码,然后安装: 1 pip install [--editable] . 结构 Google提供了6种预训练的模型,具体细节如下: bert-base-uncased : 12-layer, 768-hidden, 12-heads, 110M parameters bert-large-uncased : 24-layer, 1024-hidden, 16-heads, 340M parameters bert-base

简单的中文分词和词向量化

霸气de小男生 提交于 2019-11-26 03:36:06
**在做分词前需要做的准备: ** (1):已经预处理过的需要分词的语料(需要分词的语料要符合结巴分词的要求,每句一行,并且以句号做结尾) (2):需要一份相关方面的词典用于更加专业化的分词,单纯的使用结巴分词不能很好的分出你需要的词,会影响到你以后词向量化阶段。 (3):需要一份停用词表,因为结巴分词不能很好的把一些没有实际意义的词去掉,这样此会影响到后面词向量化阶段。停用词表的作用就是去掉一些没有意义的词语,单字,或者特殊符号。主要你需要去掉的东西,你把它写在停用词表中就可以。停用词表可以在网上下载,停用词表一般分为很多种,有专门的中文停用词表。在做分词的时候看需要下载,一般下载一个比较全的停用词表就行(停用词表一般包括特殊符号和中文一些无意义词)。 此处需要注意,在保存停用词表的时候注意保存为编码格式utf-8的格式储存为txt格式. 开始分词: 代码如下 import codecs import jieba infile = 'date_open_yuliao.txt' ##你需要分词的语料的文件名 outfile = 'data_open_yuliaochuli2.txt' ##分词完成后保存的文件名 jieba . load_userdict ( "data_open_dict.txt" ) ##用结巴加载你准备好的专用分词的词典 descsFile = codecs