spacy词向量

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,但是结果不会很好,单个token不会有任何指定的向量。所以为了使用真正的词向量,你需要下载一个更大的模型:

python -m spacy download en_core_web_lg

内置单词向量的模型使它们成为可用的标记。Token.vector, Doc.vector, Span.vector。文本向量将默认为它们的token向量的平均值。您还可以检查一个token是否有分配的向量,并得到L2规范,它可以用来使向量标准化。

nlp = spacy.load(‘en_core_web_lg‘)
tokens = nlp(u‘dog cat banana sasquatch‘)

for token in tokens:
    print(token.text, token.has_vector, token.vector_norm, token.is_oov)

“dog”、“cat”和“banana”在英语中都很常见,所以它们是模型词汇的一部分,并且带有一个向量。另一方面,“sasquatch”这个词不太常见,也不太常见——所以它的向量表示包含了300个0的维度,这意味着它实际上是不存在的。如果您的应用程序需要包含更多向量的大型词汇表,那么您应该考虑使用一个较大的模型或装入一个完整的向量包,例如,en_vectors_web_lg,其中包含超过100万个唯一的向量。

基于上下文的相似度

除了spaCy内置的单词向量,还有一些根据上下文词汇训练的一些向量,解析、标记和NER模型也依赖于这种上下文中的单词含义的向量表示。当处理管道被应用时,spaCy将文档的内部含义表示为浮点数组,也称为张量。这使得spaCy可以根据周围的单词对单词的意思做出合理的猜测。即使spaCy以前没有见过这个单词,它也会有所了解。因为spaCy使用一个4层的卷积网络,所以张量对一个单词的任意一边的四个单词都很敏感。
例如,这里有三个句子,在不同的语境中包含了“labrador”的单词。

doc1 = nlp(u"The labrador barked.")
doc2 = nlp(u"The labrador swam.")
doc3 = nlp(u"the labrador people live in canada.")
#这边需要注意的是,导入模型不能是md,lg模型,这两个模型计算出来的三个结果是一样

for doc in [doc1, doc2, doc3]:
    labrador = doc[1]
    dog = nlp(u"dog")
    print(labrador.similarity(dog))

尽管模型从来没有见过“labrador”这个词,但它可以很准确地预测它在不同情况下与“dog”的相似性。

整个文档也一样。 在这里,相似性的差异较小,因为所有单词及其顺序都被考虑在内。 但是,特定于上下文的相似性通常仍然非常准确地反映出来。

doc1 = nlp(u"Paris is the largest city in France.")
doc2 = nlp(u"Vilnius is the capital of Lithuania.")
doc3 = nlp(u"An emu is a large bird.")

for doc in [doc1, doc2, doc3]:
    for other_doc in [doc1, doc2, doc3]:
        print(doc.similarity(other_doc))

即使关于巴黎和维尔纽斯的句子由不同的词汇和实体组成,它们都描述了相同的概念,并被认为比关于ems的句子更相似。 在这种情况下,即使拼写错误的“维尔纽斯”版本仍然会产生非常相似的结果。

由相同单词组成的句子可能会被认为是非常相似的,但永远不会完全相同。

docs = [nlp(u"dog bites man"), nlp(u"man bites dog"),
        nlp(u"man dog bites"), nlp(u"dog man bites")]

for doc in docs:
    for other_doc in docs:
        print(doc.similarity(other_doc))

有趣的是,“人咬狗”和“狗咬人”被认为比“人咬狗”和“狗咬人”更相似。这可能是一个巧合——或者是“人”被解释为两个句子的主语的结果。

链接:https://www.jianshu.com/p/c10c597a528f

原文地址:https://www.cnblogs.com/pythonclass/p/11320230.html

时间: 2024-08-27 18:42:51

spacy词向量的相关文章

Windows下使用Word2vec继续词向量训练

word2vec是Google在2013年提出的一款开源工具,其是一个Deep Learning(深度学习)模型(实际上该模型层次较浅,严格上还不能算是深层模型,如果word2vec上层再套一层与具体应用相关的输出层,如Softmax,便更像是一个深层模型),它将词表征成实数值向量,采用CBOW(Continuous Bag-Of-Words Model,连续词袋模型)和Skip-Gram(Continuous Skip-GramModel)两种模型.具体原理,网上有很多. 本文是在window

word2vec词向量训练及中文文本相似度计算

本文是讲述如何使用word2vec的基础教程,文章比较基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python下载地址:http://radimrehurek.com/gensim/models/word2vec.html 1.简单介绍 参考:<Word2vec的核心架构及其应用 · 熊富林,邓怡豪,唐晓晟 · 北邮2015年> <Word2vec的工作原理及应用探究 · 周练 · 西安电子科技大学

词向量(WordVector)

Reference:http://licstar.net/archives/328 (比较综合的词向量研究现状分析) 起源:One-hot Representation.PCA 序:为什么NLP在模式识别里面比较难? Licstar的文章开头这么提到:语言(词.句子.篇章等)属于人类认知过程中产生的高层认知抽象实体,而语音和图像属于较为底层的原始输入信号. 语音.图像数据表达不需要特殊的编码,而且有天生的顺序性和关联性,近似的数字会被认为是近似特征.然而语言就麻烦了. 比如通俗的One-hot

词向量( Distributed Representation)工作原理是什么

原文:http://www.zhihu.com/question/21714667 4 个回答 83赞同反对,不会显示你的姓名 皮果提 刘鑫.莫教授要养猫.Starling Niohuru 等人赞同 要将自然语言交给机器学习中的算法来处理,通常需要首先将语言数学化,词向量就是用来将语言中的词进行数学化的一种方式. 一种最简单的词向量方式是 one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应

【paddle学习】词向量

本章我们介绍词的向量表征,也称为word embedding.词向量是自然语言处理中常见的一个操作,是搜索引擎.广告系统.推荐系统等互联网服务背后常见的基础技术. 在这些互联网服务里,我们经常要比较两个词或者两段文本之间的相关性.为了做这样的比较,我们往往先要把词表示成计算机适合处理的方式.最自然的方式恐怕莫过于向量空间模型(vector space model). 在这种方式里,每个词被表示成一个实数向量(one-hot vector),其长度为字典大小,每个维度对应一个字典里的每个词,除了这

重磅︱R+NLP:text2vec包简介(GloVe词向量、LDA主题模型、各类距离计算等)

词向量的表示主流的有两种方式,一种当然是耳熟能详的google的word2vec,还有一类就是GloVe.那么前面一类有三个开源的包,后面这一类我倒是看到得不多,恰好是在我关注了许久的一个包里面有,它就是text2vec啦.该包提供了一个强大API接口,能够很好地处理文本信息. 本包是由C++写的,流处理器可以让内存得到更好的利用,一些地方是用RcppParallel包进行并行化加乘,同时兼容各个系统的服务器.如果没有并行的地方,大家也可以自己用foreach包来自己加速. ----------

95、自然语言处理svd词向量

import numpy as np import matplotlib.pyplot as plt la = np.linalg words = ["I","like","enjoy","deep","learning","NLP","flying","."] X = np.array([[0,2,1,0,0,0,0,0], [2,0,0,1,0

theano学习指南--词向量的循环神经网络(翻译)

欢迎fork我的github:https://github.com/zhaoyu611/DeepLearningTutorialForChinese 最近在学习Git,所以正好趁这个机会,把学习到的知识实践一下~ 看完DeepLearning的原理,有了大体的了解,但是对于theano的代码,还是自己撸一遍印象更深 所以照着deeplearning.net上的代码,重新写了一遍,注释部分是原文翻译和自己的理解. 感兴趣的小伙伴可以一起完成这个工作哦~ 有问题欢迎联系我 Email: [email

词向量-LRWE模型

上一节,我们介绍利用文本和知识库融合训练词向量的方法,如何更好的融合这些结构化知识呢?使得训练得到的词向量更具有泛化能力,能有效识别同义词反义词,又能学习到上下文信息还有不同级别的语义信息. 基于上述目标,我们尝试基于CBOW模型,将知识库中抽取的知识融合共同训练,提出LRWE模型.模型的结构图如下: 下面详细介绍该模型的思想和求解方法. 1. LWE模型     在Word2vec的CBOW模型中,通过上下文的词预测目标词,目标是让目标词在其给定上下文出现的概率最大,所以词向量训练的结果是与其