nlp项目实践古诗创作tensorflow ---(1)数据集准备

之前一直在看前几天找到的seq2seq写对联的源码,发现它的源码好多都不是那么普遍通用的,学习他的或许不如自己写一个,所以模仿他的思路,我打算用古诗词的数据集,做一个可以自己创作古诗的模型。

数据搜集

使用了这个数据集。

预处理

由于在之前的论文中提到将长度大致一致的放在一起训练可以提高训练的效率,因此希望通过预处理将这些诗词按字数排序,每一行分为上下句。为了完成这个,结合之前一直在看mapreduce,索性就用mapreduce完成这个任务。

代码

mapper使用诗的长度作为key,两句诗连接作为value

    package gushi;
    
    import java.io.IOException;
    
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    public class gushimapper extends Mapper<LongWritable, Text, LongWritable, Text>{
    	Text val = new Text();
    	LongWritable k = new LongWritable();
    	@Override
    	protected void map(LongWritable key, Text value,Context context)
    			throws IOException, InterruptedException {
    		// TODO Auto-generated method stub
    		//获取一行
    				String line = value.toString();
    				//切割
    				String[] fields = line.split(",");
    				if (fields.length>3) {
    					fields[3] = fields[3].replace("\"", "");
    					String[] gushi = fields[3].split("。|,|?");
    					if (gushi.length>2) {
    						
    						for (int i = 0; i < gushi.length-1; i+=2) {
    							val.set(gushi[i]+","+gushi[i+1]);
    							k.set(gushi[i+1].length());
    							context.write(k,val);
    						}
    					}					
    				}		
    	}    
    }
    package gushi;
    import java.io.IOException;
    
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
    
    public class gushireducer extends Reducer<LongWritable, Text, Text, Text>{
    	Text fp = new Text();
    	Text lp = new Text();
    	@Override
    	protected void reduce(LongWritable key, Iterable<Text> values, Context context)
    			throws IOException, InterruptedException {
    		// TODO Auto-generated method stub
    		for (Text value : values) {
    			String line = value.toString();
    			//切割
    			String[] fields = line.split(",");
    			if (fields.length>1) {
    				fp.set(fields[0]);
    				lp.set(fields[1]);
    				context.write(fp,lp );
    				
    			}		
    		}
    
    	}
    }

reducer解析出上下句存入输出文档中。

结果

nlp项目实践古诗创作tensorflow ---(1)数据集准备_第1张图片

embedding

由于自己训练embedding可能效果并不好,所以选择使用训练好的embedding,所以打算使用这个地方的用四库全书训练的基于字的embedding。

你可能感兴趣的:(零基础学nlp)