conceptnet-numberbatch: 结合常识知识的词向量 - 概述及使用

2020-12-01 10:57:25 浏览数 (2)

在NLP领域,常识知识的使用越发成为热点,因为其有希望帮助克服现有模型的局限:它们仅从训练数据中学到的有偏的、浅薄的知识,而并不擅长像人一样进行真正的推理。

常识知识的表示形式有很多:有的是以的形式,如ConceptNet;有的是以模型的形式,如COMET;而本文要介绍的应该是其中比较易于使用的一种,词向量形式。其代表是conceptnet-numberbatch。

简介

ConceptNet Numberbatch 是一组词向量,可以直接以向量形式表达词的语义。

它是ConceptNet开源项目的一部分,ConceptNet是最常用的常识知识图谱之一。

相比于其他词向量(word2vec, glove) ConceptNet Numberbatch的优势是它同时利用了文本和ConceptNet中的半结构化信息进行学习,因此它能够学习到一些从一般语料中可能无法直接学习到的一些语义。

另外,它支持词组;支持多种语言(包括中文);针对性别偏见等现象做了一定的优化。

因此,它号称为“你能找到的最好的词向量”,不过这点至少在它创立之时而言或许确实不假。

使用

首先从其官网下载, 这里我选择最新最全的版本:

其第一行是其中词语的数量和每个词向量的维度

代码语言:javascript复制
9161912 300

其后每行的格式是词语标识 向量

代码语言:javascript复制
/c/en/absolute_value -0.0847 -0.1316 -0.0800 -0.0708 -0.2514 -0.1687 -...
/c/en/absolute_zero 0.0056 -0.0051 0.0332 -0.1525 -0.0955 -0.0902 0.07...
/c/en/absoluteless 0.2740 0.0718 0.1548 0.1118 -0.1669 -0.0216 -0.0508...
/c/en/absolutely 0.0065 -0.1813 0.0335 0.0991 -0.1123 0.0060 -0.0009 0...
/c/en/absolutely_convergent 0.3752 0.1087 -0.1299 -0.0796 -0.2753 -0.1...

词向量的加载方式与word2vec等类似,不再赘述。

但有一点值得注意,前面的词语标识并不是简单的单词,事实上,它的格式是/c/语言代号/词语,其中,常用的语言代号为en(英语),zh(中文),其他可详见其介绍。

而词语有专门的变换规则,为了查到相关的词向量,我们不能直接用词语查找,而是必须要使用原库提供的text_to_uri.py进行转换

下载该文件或下载该库,在其同一路径下,可以这样调用它

代码语言:javascript复制
from text_to_uri import standardized_uri
standardized_uri('en', 'a test phrase')
代码语言:javascript复制
'/c/en/test_phrase'
代码语言:javascript复制
standardized_uri('en', '100 yuan')
代码语言:javascript复制
'/c/en/###_yuan'
代码语言:javascript复制
standardized_uri('zh', '你好')
代码语言:javascript复制
'/c/zh/你好'

如果我们有一段话,需要获得每个词的向量又要如何操作呢?

ConceptNet Numberbatch同时支持单个词语和一些词组,不过为了操作的方便,一般不使用词组,而都是直接使用单个词语的向量。这样,我们可以用现有的工具先进行分词,再进行变换,就可以找到对应向量了。

代码语言:javascript复制
import numpy as np
from text_to_uri import standardized_uri
from nltk import word_tokenize
sentence = "hello world"
words = word_tokenizer(sentence)
for wd in words:
	concept = standardized_uri("en", wd)
	# 假设词向量存在一个叫word2vec的字典中,获得其向量emb(如果找不到,就使用0向量)
	emb = word2vec.get(concept, np.zeros(300))

本文内容就到此为止了。对于常识知识研究领域有更多兴趣的读者,还可以在这里找到我们整理的一份常识知识必读论文列表,希望能提供一些帮助。

0 人点赞