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

相关推荐
Easy_API5 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
代码山河5 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
紧跟先前的步伐6 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
在世修行6 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
C^h6 小时前
c++ string
开发语言·c++
释厄6236 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
raindayinrain6 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
梯度下降者6 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
学逆向的6 小时前
C++ 合并命名空间
开发语言·c++·网络安全