句子的检错/纠错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccbrid/article/details/84256536

一、句子的检错纠错,如下四种方法:

1、检错部分:

1.1. 序列标注:

本来的序列标注是进行命名实体识别的任务,在检错任务中将其改成01标注,使用O标注正确的词,使用S-1标注错误的词。

数据处理:

保证了错误的句子占全部句子的25%; sent: right_sent:342803; wrong_sent:101565;(3:1)

vocab_num:102674;word: right_word 4816307; wrong_word:125748(40:1)

效果:40轮 f=0.6

2、纠错部分:

3、使用seq2seq:

3.1. 流畅度提升推断机制:

https://www.jiqizhixin.com/articles/2018-07-05-12 微软亚研院 未开源

3.2. 有偏解码:

https://cloud.tencent.com/developer/article/1109177 腾讯 开源tensorflow

https://github.com/atpaino/deep-text-corrector 

This project reuses and slightly extends TensorFlow's Seq2SeqModel, which itself implements a sequence-to-sequence model with an attention mechanism as described in https://arxiv.org/pdf/1412.7449v3.pdf

4、纠错+检错:

4.1. 基于n-gram语言模型和困惑集:

https://cloud.tencent.com/developer/article/1156792 腾讯云社区 未开源

二、在目前项目已完成检错部分的前提下,继续进行该项目有以下三种方式:

1)丢弃已完成的检错,使用3.2 (tensorflow开源)

2)使用4.1的方法 补全2(pytorch)

困惑集替换 -〉生成候选句 -〉候选句打分 -〉分数不高于原句则认为没错

3)自行 使用上下文➕错误词信息➕attention的方式 补全2(pytorch)

用lstm/cnn分别 表示 错误词前的context 和 后面的context 然后拼上错误词的embedding:

[ softmax( cat( lstm(W(n-1)) , emb(Wn) , lstm(W(n+1)) ) ) ]

或者 用错误词对上下文进行attention后得到的 context vector:

[ softmax( bmm( context , softmax( linear( linear(context)+linear(Wn) ) ) )  ) ]

其他:

常见30种NLP任务的练手项目:https://mp.weixin.qq.com/s/456iQhnNgPeqNYJxDss-DA

------------------------------------------------------------分割线------------------------------------------------------------

三、自己的具体实现步骤 // 实现3.2

1)seq2seq任务 首先把数据处理成input/output并train/val/test六个文件,每个文件的存放都是一行一个sent,word之间空格隔开。

已处理好,处理文件在/users4/zsun/pytorch/seq2seq/text-corrector/preprocess.py,

处理好的文件在/users4/zsun/pytorch/seq2seq/text-corrector/data/

2)下载源代码,存放在/users4/zsun/tensorflow/text-corrector/deep-text-corrector

3)代码要求TensorFlow version >= 0.11.

4)源代码使用的数据集是电影对话数据集Movie-Dialogs Corpus,30万样本数据,处理成小写。

python preprocessors/preprocess_movie_dialogs.py --raw_data movie_lines.txt \
                                                 --out_file preprocessed_movie_lines.txt 

然后编写代码分为train/val/test

5)

1.对数据集的噪声/改错在train时每取一条原始数据更改为带有语法错误的句子;

操作有随机删去{"a", "an", "the", "'ll", "'s", "'m", "'ve", "to"}

和随机更改{"there": "their", "their": "there", "then": "than", "than": "then", "be":"to" }

2.在训练时学习正确的tokens:

代码在text_corrector_model.py的model.step()中

Training:

python correct_text.py --train_path /movie_dialog_train.txt --val_path /movie_dialog_val.txt \
                                        --config DefaultMovieDialogConfig --data_reader_type MovieDialogReader \
                                        --model_path /movie_dialog_model

6)
Testing:

python correct_text.py --test_path /movie_dialog_test.txt \
                                        --config DefaultMovieDialogConfig  --data_reader_type MovieDialogReader \
                                        --model_path /movie_dialog_model \
                                        --decode


 

猜你喜欢

转载自blog.csdn.net/ccbrid/article/details/84256536
今日推荐