【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都有硬连线内存寻址指令,这些指令可以有效地哈希、索引和搜索大量这样的二值向量。虽然这些指令是为另一个目的(索引内存位置以从内存中检索数据)而构建的,但是它们在搜索和检索文本的二值向量运算中同样有效。

相关推荐
2501_933670794 分钟前
医药市场分析岗位适合应用统计学学生吗,需要考什么证
人工智能
Escalating_xu5 分钟前
【Python】使用库:标准库、第三方库、pip、项目实战与程序打包
java·python·pip
水獭比特7 分钟前
Agent 工具审批不止一个按钮:用 v0.22.1 复盘入口、恢复和副作用
人工智能·python
网络毒刘8 分钟前
Token 用量观测实战:从会话结构拆前缀/工具/生成,建立个人降本仪表盘
人工智能·性能优化·token·cursor
库拉镜像AI牛牛9 分钟前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
IamZJT_9 分钟前
Agent 系统工程 09|Agent 的可靠性怎么测?成功率、恢复能力与成本
人工智能
AI你一生一世14 分钟前
当AI在数学中“失准”:一场关于形式化、直觉与工程取舍的深度复盘
人工智能·大语言模型·数学推理·ai对齐·形式化验证·推理模型·语义漂移
盟接之桥17 分钟前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
llqbzllll18 分钟前
Agent Skills 为什么不能只是“长提示词”:SKILL.md、按需加载和权限边界
人工智能
苦瓜打怪兽25 分钟前
leetcode 热题100(11. 盛最多水的容器)
python·算法·leetcode