主要生成相似句 再用神经网络判定句子的通顺性
直接上代码
两部分工作:
第一部分基于统计生成相似语料:
借助网上的python的github上的synonyms(自行百度):https://github.com/huyingxi/Synonyms 这里要说一下 分词不要用 垃圾 的jieba 可以考虑hanlp 或者其他的 ;
效果如下:
例如 ”查看公司财务“
生成的句子:
查看公司的财务
查看公司的财政
查看公司的财务状况
查看公司的公司财务
查看公司的税务
查看公司的负债
查看公司的财务管理
查看公司的帐目
查看公司的人力资源
查看公司的人事管理
查看该公司的财务
查看该公司的财政
查看该公司的财务状况
查看该公司的公司财务
查看该公司的税务
查看该公司的负债
查看该公司的财务管理
查看该公司的帐目
查看该公司的人力资源
查看该公司的人事管理
查看的公司的财务
查看的公司的财政
查看的公司的财务状况
自己思路: 中文语料库进行分词,然后进行获取同义词替换,这里可以考虑n-gram n=1,2,3 做
Bi-Gram: P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
Tri-Gram: P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn|wn-1,wn-2)
里面的概率用统计词频来处理求解 具体求解可以参考:https://blog.csdn.net/weixin_37767223/article/details/83187802
最后根据概率大小判定句子是不是通顺, 这个 我这里就没做 感兴趣的可以做一下 比较简单
第二部分神经网络模型判定句子通顺性:
例如:我的顺心很不工作 分数: 11.457166507915696
我的工作很不顺心 分数: 37.69209207976687
后面优化如下:
由于数据量大(500w)后面做一些改进
1. softmax 进行优化 主要把softmax 改写成 hierarchical softmax
2.主要把句子通顺性的对比进行阈值的确定
网络模型代码:
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str, default='data/',
help=&