查看原文
其他

Python | 词移距离(Word Mover's Distance)

大邓 大邓和他的Python
2024-09-09

词嵌入方法(word2vec、glove等)可以将每个词的语义映射到n维空间,在n维空间中,词语间距离远近可以表征语义的远近。Kusner等人(2015)提出词移距离(word mover's distance, 后文用WMD缩写代替)借助词语向量语义距离,实现两文档间的相似度计算,距离越小,相似度越高。在会计领域中的应用可以用来度量问答场景的答非所问的程度。


WMD基础

有两个文档

doc1 = "Obama speaks to the media in Illinois"
doc2 = "The President greets the press in Chicago."

词向量一般是高(n)维空间,这里把n压缩到2维空间,使用matplotlib绘图。两个文档中重要的词语彼此之间存在语义相似度,

# Image from https://vene.ro/images/wmd-obama.png
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('img/wmd-obama.png')
imgplot = plt.imshow(img)
plt.axis('off')
plt.show()


计算WMD步骤

  1. 剔除文档中停止词,如the、a等无信息量词
  2. 导入预训练好的词嵌入(word2vec)模型(网上资源比较多,如果数据量很大,也可以自己使用gensim训练自己的词向量)
  3. 计算WMD
from nltk.corpus import stopwords
from nltk import download
download('stopwords')  # Download stopwords list.
stop_words = stopwords.words('english')

def preprocess(sentence):
    return [w for w in sentence.lower().split() if w not in stop_words]


doc1 = "Obama speaks to the media in Illinois"
doc2 = "The President greets the press in Chicago."

doc1 = preprocess(doc1)
doc2 = preprocess(doc2)

print(doc1)
print(doc2)

Run

['obama''speaks''media''illinois']
['president''greets''press''chicago.']

如果运行代码出现nltk问题,可以观看视频 https://www.bilibili.com/video/BV14A411i7DB

下载谷歌新闻预训练模型(word2vec-google-news-300) ,这里可以使用我提供的百度网盘

链接:https://pan.baidu.com/s/1yzGLcMsZl3u1zigTHLdc2Q 提取码:l63f

这里需要

from gensim.models import KeyedVectors

w2v_model = KeyedVectors.load('GoogleNews-vectors-negative300.bin.gz')
wmd = w2v_model.wmdistance(doc1, doc2)
print('distance :{wmd}'.format(wmd=wmd))

Run

distance :0.8867237050133944

参考文献

Kusner, Matt J., Yu Sun, Nicholas I. Kolkin and Kilian Q. Weinberger. “From Word Embeddings To Document Distances.” ICML (2015).

精选文章

从符号到嵌入:计算社会科学的两种文本表示

资料 | 量化历史学与经济学研究

长期征稿 | 欢迎各位前来投稿

17G数据集 | 深交所企业社会责任报告

百度指数 | 使用qdata采集百度指数

推荐 | 社科(经管)文本分析快速指南

视频分享 | 文本分析在经管研究中的应用

Maigret库 | 查询某用户名在各平台网站的使用情况

MS | 使用网络算法识别创新的颠覆性与否

使用cntext训练Glove词嵌入模型

认知的测量 | 向量距离vs语义投影

Wordify | 发现和区分消费者词汇的工具

在jupyter中显示pdf内容

EmoBank | 中文维度情感词典

Asent库 | 英文文本数据情感分析

视频专栏课 | Python网络爬虫与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

BERTopic库 | 使用预训练模型做话题建模

tomotopy | 速度最快的LDA主题模型

管理世界 | 使用文本分析词构建并测量短视主义

Wow~70G上市公司定期报告数据集

100min视频 | Python文本分析与会计

在jupyter内运行R代码

安装python包出现报错:Microsoft Visual 14.0 or greater is required. 怎么办?

blogdown包 | 使用R语言维护Hugo静态网站
R语言 | 使用posterdown包制作学术会议海报
R语言 | 使用officedown包在Rmarkdown中制作PPT
R语言 | 使用ggsci包绘制sci风格图表
R语言 | 使用word2vec词向量模型

R语言 | 将多个txt汇总到一个csv文件中


继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存