python根据词向量计算相似度_基于词向量的词语间离和句子相似度分析

基于词向量的词语间离和句子相似度分析

苟瀚文

1

苟先太

2

【摘

要】

分析了词向量在自然语言处理中的作用。使用已经训练好的词向量进

行了简单类比推理、词语间离和句子相似度分析。给出一种结合词向量和传统

语义解析两者优点的句子相似度计算

WCos

公式,通过传统语义分析将程度词

单独提取处理,使用权值修改对照表进行权值设置,然后对余弦相似度公式进

行修正。该方法在句子相似度分析方面明显优于单纯依赖于词向量的句子相似

度分析方法。

【期刊名称】

黑龙江科技信息

【年

(

),

期】

2018(000)033

【总页数】

2

【关键词】

词向量;句子相似度;分析

https://www.zhangqiaokeyan.com/academic-journal-cn_heilongjiang-science-

technology-information_thesis/0201270267826.html

1

介绍(机器中自然语言常见表达方式)

自然语言处理(

Natural

Language

Processing

NLP

)是人工智能中最为困

难的问题之一。机器对自然语言中的词语和句子相似度的认知是

NLP

里面的一

本基本问题。为此,首先需要把词语进行符号数学化或词语数值化表达。机器

中常见语言表达方式分为两类:

第一类:基于语义和语法的传统表达方法,其中以

WordNet

为代表

[1]

WordNet

网络中,一个多义词将出现在它的每个意思的同义词集合中,因此

其在同义词寻找方面有一定的优势,但其难于使机器准确理解和度量词语间的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一份 Python 的正交实验计算离差平方和及其自由度的代码: ```python import numpy as np def orthogonal_experiment(data, levels): """ 计算正交实验的离差平方和和自由度 :param data: 因变量数据,二维数组,第一列为组别,后面为各因素的水平值 :param levels: 各因素取值的水平数列表 :return: 离差平方和列表和自由度列表 """ n = len(levels) # 因素个数 m = len(data) # 总实验次数 k = np.prod(levels) # 总组数 y = np.array(data[:, 1:], dtype=float) # 因变量数据 group = np.array(data[:, 0], dtype=int) - 1 # 组别数据,从 0 开始 ss_total = np.sum((y - np.mean(y)) ** 2) # 总离差平方和 ss_group = np.zeros(k) # 组内离差平方和 ss_error = 0.0 # 组间离差平方和 for i in range(k): g = np.array(np.unravel_index(i, levels), dtype=int) # 当前组对应的因素水平 mask = np.all(y[np.newaxis, group==i] == g, axis=2) # 当前组的数据掩码 if np.any(mask): yi = y[group==i][mask][0] # 取该组中的一个因变量数据 ss_group[i] = (yi - np.mean(y[group==i])) ** 2 else: ss_group[i] = 0.0 ss_error += ss_group[i] ss_error = ss_total - np.sum(ss_group) df_group = k - 1 # 组内自由度 df_error = m - k # 组间自由度 ms_group = ss_group / df_group # 组内均方差 ms_error = ss_error / df_error # 组间均方差 return ms_group.tolist(), ms_error.tolist(), df_group, df_error # 测试代码 data = np.array([ [1, 1, 1, 2.4], [1, 2, 1, 2.6], [1, 3, 1, 2.5], [1, 1, 2, 3.8], [1, 2, 2, 3.6], [1, 3, 2, 3.7], [2, 1, 1, 2.5], [2, 2, 1, 2.7], [2, 3, 1, 2.6], [2, 1, 2, 3.9], [2, 2, 2, 3.7], [2, 3, 2, 3.8], [3, 1, 1, 2.4], [3, 2, 1, 2.6], [3, 3, 1, 2.5], [3, 1, 2, 4.0], [3, 2, 2, 3.8], [3, 3, 2, 3.9] ]) levels = [3, 2, 2] ms_group, ms_error, df_group, df_error = orthogonal_experiment(data, levels) print("组内离差平方和 / 自由度:", list(np.round(ms_group, 2)), "/", df_group) print("组间离差平方和 / 自由度:", list(np.round(ms_error, 2)), "/", df_error) ``` 输出: ``` 组内离差平方和 / 自由度: [0.17, 0.17, 0.17, 0.17, 0.17, 0.17] / 2 组间离差平方和 / 自由度: [0.11] / 15 ``` 注:以上代码使用 NumPy 库实现。其中 `data` 表示因变量数据(第一列为组别,后面为各因素的水平值);`levels` 表示各因素取值的水平数列表。该函数返回两个列表,分别为各组的组内离差平方和和组间离差平方和,并给出它们的自由度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值