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

相关推荐
阿坡RPA3 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户27784491049933 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心4 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI6 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
JavaEdge在掘金6 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程5556 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄6 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
凯子坚持 c6 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
老歌老听老掉牙7 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀10157 小时前
Python入门(7):模块
python