【Python机器学习】NLP分词——利用分词器构建词汇表(三)——度量词袋之间的重合度

如果能够度量两个向量词袋之间的重合度,就可以很好地估计他们所用词的相似程度,而这也是它们语义上重合度的一个很好的估计。因此,下面用点积来估计一些新句子和原始的Jefferson句子之间的词袋向量重合度:

python 复制代码
import pandas as pd

sentence="""
Thomas Jefferson Began buliding Monticelli as the age of 26.\n
"""
sentence=sentence+"""Construction was done mostly by local masons and carpenters.\n"""
sentence=sentence+"""He moved into the South Pavilion in 1770.\n"""
sentence=sentence+"""Turning Monticello into a neoclassical masterpiece was Thomas Jefferson's obsession."""
corpus={}
#一般来说,只需要使用.splitlines()即可,但是这里显式地在每个行尾增加了 \n  字符,因此这里要显式地对此字符串进行分割
for i,sent in enumerate(sentence.split('\n')):
    corpus['sent{}'.format(i)]=dict((tok,1) for tok in sent.split())
df=pd.DataFrame.from_records(corpus).fillna(0).astype(int).T

df=df.T
print(df.sent0.dot(df.sent1))
print(df.sent0.dot(df.sent2))
print(df.sent0.dot(df.sent3))

运行结果表明,没有词同时出现在sent0和其他句子中。

词之间的重合度可以作为句子相似度的一种度量方法。

下面是一种找出sent0和sent3之间共享词(如果有)的方法:

python 复制代码
print([(k,v) for (k,v) in (df.sent0 & df.sent3).items() if v])

这是自然语言文档(句子)的第一个向量空间模型VSM)。对于词袋向量,不仅可以使用点积,也可以定义其他的向量运算,如向量加、减、OR与AND等,甚至还可以采用类似欧几里得距离或者向量夹角这样的运算。将文档表示成二值向量具有巨大的作用、所有现代CPI都有硬连线内存寻址指令,这些指令可以有效地哈希、索引和搜索大量这样的二值向量。虽然这些指令是为另一个目的(索引内存位置以从内存中检索数据)而构建的,但是它们在搜索和检索文本的二值向量运算中同样有效。

相关推荐
永霖光电_UVLED6 小时前
NUBURU启动Q1阶段,实现40套高功率蓝光激光系统的量产
大数据·人工智能
RFG20126 小时前
20、详解Dubbo框架:消费方如何动态获取服务提供方地址?【微服务架构入门】
java·人工智能·后端·微服务·云原生·架构·dubbo
光泽雨6 小时前
C# 中 Assembly 类详解
开发语言·c#
少控科技6 小时前
C#基础训练营 - 02 - 运算器
开发语言·c#
紫微AI6 小时前
适用于代理Agents的语言
人工智能·agents·新语言
CCPC不拿奖不改名6 小时前
虚拟机基础:在VMware WorkStation上安装Linux为容器化部署打基础
linux·运维·服务器·人工智能·milvus·知识库搭建·容器化部署
这是个栗子7 小时前
AI辅助编程工具(六) - CodeGeeX
人工智能·ai·codegeex
vortesnail7 小时前
超详细的云服务部署 OpenClaw 并接入飞书全流程,别再趟坑了
人工智能·程序员·openai
紫微AI7 小时前
Anthropic Claude Code 工程博客精读:构建可靠长时运行AI代理的有效框架实践
人工智能
瞎某某Blinder7 小时前
DFT学习记录[4] 电子和空穴的有效质量计算全流程
python·学习