# 中文文本相似度--句向量
## 整体实验设计
### 一、文本相似度的三种常用方法
       本文主要利用余弦相似度衡量句子之间的相似度,因此如何生成优质的句向量至关重要。
| 相似度 | 具体做法 |
| :----------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| Jaccard 系数 | 分词<br>未分词 |
| 编辑距离 | 最小操作次数 |
| 余弦相似度 | Word2vec+ 词 + 加权平均<br>Word2vec+ 字 + 加权平均<br>Word2vec+ 词 +Qucik-thoughts<br>Word2vec+ 字 +Quick-thoughts<br>字 + 融合 Transformer 的 Quick-thoughts<br>词 + 融合 Transformer 的 Quick-thoughts |
### 二、实验步骤
#### 第一步:数据标注
1. 计划标注:
* 人工标注验证集(大约 4000 条数据,需要 20 天左右,10 月 25 日之前完成。)
* 思路:133 个类别,每个类别标注 30 条数据。
* 方法:利用关键词筛选出每个类别对应的数据。
2. 实际标注:
* 实际只标注了 2000 条数据
* 1500 条有对应的类别,500 条没有作为反例,共涉及 80 个类别。
#### 第二步:训练词向量
* 方法:Word2vec
* 具体做法:
1. 下载最新的中文维基百科数据集(1.5g)
2. 进行一系列预处理操作:
* [wikiextractor](https://github.com/attardi/wikiextractor) 解压,提取压缩包文本信息 wiki_00
* 繁转简:opencc-> wiki.zh.txt
* 分句 + 数据清洗(只保留数字、英文和汉字):fen_ju.py-> new_sentence.txt
* 是否分词: jieba
* 是否去停词:停词表
* 统计句子长度、词频、字频,生成字典
3. 分词后训练 word2vec 模型,生成 2 种词向量。
* 分词 + 去停词 +300 维
* 未分词 + 去停词 +300 维
#### 第三步:无监督学习的句向量生成算法
1. 在文本相似度任务中比较各种句向量生成算法的效果
1. 加权平均算法
2. Quick-Thoughts 算法
3. 将 Transformer 融入 Quick-Thought 算法中,观察其效果
4. 比较分词与未分词的差别
2. 具体做法
* 实际数据共有 1982 条进行预测,预定义语句 5166 条,因为部分数据预处理后为空
* 本文修改了 f1 的计算方式---因为数据中存在没有对应的预定义操作的句子
* 对于深度学习模型,本文的实验环境有限,只选择了 80 万条训练样本
1. 方法一:基于词向量的简单平均算法. 共耗时 1771.08s.
| 阈值 | P | R | F1 |
| :--: | :----: | :----: | :----: |
| 0.5 | 0.6846 | 0.7070 | 0.6956 |
| 0.6 | 0.6868 | 0.7070 | 0.6968 |
| 0.7 | 0.6931 | 0.7070 | 0.7000 |
| 0.8 | 0.8070 | 0.7050 | 0.7526 |
| 0.9 | 0.9525 | 0.6167 | 0.7487 |
2. 方法二:基于字向量的简单平均算法,共耗时 1762.93s.
| 阈值 | P | R | F1 |
| :--: | :----: | :----: | :----: |
| 0.5 | 0.6970 | 0.7492 | 0.7221 |
| 0.6 | 0.6996 | 0.7492 | 0.7235 |
| 0.7 | 0.7703 | 0.7492 | 0.7596 |
| 0.8 | 0.8749 | 0.7391 | 0.8013 |
| 0.9 | 0.9607 | 0.5719 | 0.7170 |
3. 方法三:基于词向量的加权平均算法. 共耗时 1834.97s.
| 阈值 | P | R | F1 |
| :--: | :------: | :------: | :------: |
| 0.5 | 0.687219 | 0.715719 | 0.701180 |
| 0.6 | 0.687219 | 0.715719 | 0.701180 |
| 0.7 | 0.701180 | 0.715719 | 0.708375 |
| 0.8 | 0.838095 | 0.706355 | 0.766606 |
| 0.9 | 0.923699 | 0.534448 | 0.677119 |
4. 方法四:基于字向量的加权平均算法. 共耗时 1787.23s.
| 阈值 | P | R | F1 |
| :--: | :------: | :------: | :------: |
| 0.5 | 0.692551 | 0.733779 | 0.712569 |
| 0.6 | 0.692988 | 0.733779 | 0.712801 |
| 0.7 | 0.754301 | 0.733110 | 0.743555 |
| 0.8 | 0.879508 | 0.717726 | 0.790424 |
| 0.9 | 0.949233 | 0.537793 | 0.686593 |
5. 方法五:基于字向量和词向量的加权平均算法. 共耗时 1762.93s.
<br>生成的句向量是 600 维
| 阈值 | P | R | F1 |
| :--: | :------: | :------: | :------: |
| 0.5 | 0.697328 | 0.750502 | 0.722938 |
| 0.6 | 0.698195 | 0.750502 | 0.723404 |
| 0.7 | 0.763624 | 0.749833 | 0.756666 |
| 0.8 | 0.890433 | 0.728428 | 0.801325 |
| 0.9 | 0.950423 | 0.525753 | 0.677003 |
6. 方法六:基于词向量的 Quick_Thoughts 算法
1. 生成训练样本 Tfrecords 文件---preprocess_dataset.py
2. 训练模型---train.py
| 需要调节的参数 | 解释说明 | 示例 |
| :----------------: | :---------------------: | :----------------------------------------: |
| word2vec_path | word2vec 文件的目录 | ../data/sent_word_n/ |
| output_dir | 生成句向量的目录 | ../output/sent_char_n/ |
| input_file_pattern | tfrecord 文件的命名格式 | ../output/sent_word_n/train-?????-of-00010 |
| train_dir | 模型文件的保存位置 | ..model/train/sent_char_n |
3. 预测:生成句向量---predict.py
4. 训练结果
* 生成句向量消耗的时间:14.37s(小爱数据,1982 条),24.17s(预定义数据集,5166 条)
* 整个预测过程共消耗 21950.48s
| 阈值 | P | R | F1 值 |
| :--: | :------: | :------: | :------: |
| 0.5 | 0.655587 | 0.620067 | 0.637332 |
| 0.6 | 0.655587 | 0.620067 | 0.637332 |
| 0.7 | 0.655587 | 0.620067 | 0.637332 |
| 0.8 | 0.661670 | 0.620067 | 0.640193 |
| 0.9 | 0.717054 | 0.618729 | 0.664273 |
| 0.94 | 0.847909 | 0.596656 | 0.700432 |
7. 方法七:基于字向量的 Quick-Thoughts 算法
* 训练结果:
* 生成句向量消耗的时间:
13.72s(小爱数据,1982 条),23.98s(预定义数据集,5166 条)
* 共消耗 21926.511472 s
| 阈值 | P | R | F1 值 |
| :--: | :------: | :------: | :------: |
| 0.5 | 0.673374 | 0.671572 | 0.672472 |
| 0.6 | 0.673374 | 0.671572 | 0.672472 |
| 0.7 | 0.673826 | 0.671572 | 0.672697 |
| 0.8 | 0.679756 | 0.671572 | 0.675639 |
| 0.9 | 0.839361 | 0.667559 | 0.743666 |
| 0.92 | 0.900742 | 0.649498 | 0.754761 |
8. 方法八:融合 Transformer 的 Quick-Thoughts 算法(分词, 2700 维)
1. Transform 的编码器得到的是一个[seq_length, dim]的向量,
因此探索 Transformer 编码器生成句向量的处理方式,然后与 Quick-Thoughts 融合
* 生成句向量消耗的时间:26.67s(小爱数据,1982 条),40.14s(预定义数据集,5166 条)
* 模型参数设置(调整后得到的最优参数):
| 参数 | 取值 |
| :----------: | :---: |
| num_head | 2 |
| learing_rate | 0.001 |
| dim | 2700 |
| dropout_rate | 0.3
没有合适的资源?快使用搜索试试~ 我知道了~
基于Python完成中文句向量探索性研究.zip
共36个文件
py:27个
pyc:4个
json:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 5 浏览量
2023-08-26
09:21:32
上传
评论
收藏 93KB ZIP 举报
温馨提示
计划标注: 人工标注验证集(大约 4000 条数据,需要 20 天左右,10 月 25 日之前完成。) 思路:133 个类别,每个类别标注 30 条数据。 方法:利用关键词筛选出每个类别对应的数据。 实际标注: 实际只标注了 2000 条数据 1500 条有对应的类别,500 条没有作为反例,共涉及 80 个类别。 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/132507796
资源推荐
资源详情
资源评论
收起资源包目录
基于Python完成中文句向量探索性研究.zip (36个子文件)
基于Python完成中文句向量探索性研究
sentenceembedding_python
word_embedding.py 7KB
transformer
predict.py 7KB
model.py 21KB
grid.py 846B
train.py 5KB
paramers.json 948B
jaccard.py 2KB
LICENSE 1KB
test_model.py 2KB
word_frequency.py 1KB
Quick_thoughts
pre_wiki.py 3KB
char_train.json 328B
configuration.py 2KB
predict.py 2KB
input_ops.py 4KB
s2v_model.py 18KB
read_event.py 2KB
train.py 6KB
__pycache__
predict.cpython-36.pyc 1KB
encoder_manager.py 4KB
word_train.json 333B
s2v_encoder.py 12KB
preprocess_dataset.py 15KB
final_predict.py 12KB
process
pi_pei.py 3KB
real_data.py 3KB
fen_ju.py 8KB
__pycache__
get_predata.cpython-36.pyc 3KB
get_predata.py 7KB
get_vocab.py 7KB
run_time.py 323B
WR
wr.py 5KB
wr_pre.py 5KB
__pycache__
wr_pre.cpython-36.pyc 4KB
wr.cpython-36.pyc 4KB
README.md 29KB
共 36 条
- 1
资源评论
shejizuopin
- 粉丝: 1w+
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功