机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法


文章目录

  • 前言
  • multilingual fairseq-preprocess1
    • 方法简介
    • cli_main
    • main
    • _make_all
  • multilingual fairseq-preprocess2
    • 方法简介
    • generate_split-iwslt14.sh
    • learn_and_encode_spm-iwslt14.sh
    • binarize.sh
  • 参考

前言 fairseq给出的preprocess代码只支持一个语言对的binarize,而笔者在[机器翻译] 记一次多语言机器翻译模型的训练想要对多个语言对同时进行binarize,过程中能够创建一个共享的词典。
和师兄交流之后,实现这一结果有两种方式:1. 在学习bpe之后,就会得到一个共享词表,需要对这个词表进行一些修改,然后作为binarize的参数;2. 不使用bpe得到的词表,而是做两次binarize,第一次是为每一个语言对进行一次binarize,然后得到不同的词表。接着将这些词表进行合并,作为第二次binarize的参数。
本文记录笔者通过对fairseq-preprocess流程的理解,参考https://github.com/RayeRen/multilingual-kd-pytorch/blob/master/preprocess_universal.py,实现更加简便的、一步到位的多个语言对binarize流程。
在这之后,本文也给出了上面所说的第一种的预处理方式。(关于第二种,随缘补充)
multilingual fairseq-preprocess1 方法简介 该方法通过对fairseq.fairseq_cli.preprocess.py的理解,修改得到一个用于multilingual fairseq-preprocess的代码。
从fairseq.fairseq_cli.preprocess.py中可以看到:
如果提供srcdict或者tgtdict,则会通过task.load_dictionary(args.srcdict)来读取词典。task.load_dictionary的执行流程为:[fairseq.tasks.translation.TranslationTask]->[fairseq.tasks.fairseq_task.FairseqTask.load_dictionary]->[fairseq.data.dictionary.Dictionary.load]->[fairseq.data.dictionary.Dictionary.add_from_file]。
如果不提供dict,则会通过task.build_dictionary来创建词典,[fairseq.tasks.fairseq_task.FairseqTask.build_dictionary代码如下:
d = Dictionary() for filename in filenames: Dictionary.add_file_to_dictionary( filename, d, tokenizer.tokenize_line, workers ) d.finalize(threshold=threshold, nwords=nwords, padding_factor=padding_factor) return d

只要把所有语言对的train data都加入到filenames中,就可以直接创建一个共享的词表,接下来只要用这个词表对所有语言对进行binarize就可以了。因此,修改过程如下:
笔者首先将fairseq.fairseq_cli.preprocess.py复制到当前目录一份,然后修改以下3个函数:
cli_main
def cli_main(): parser = options.get_preprocessing_parser() parser.add_argument('--pref', metavar='FP', default=None, help='data prefix') args = parser.parse_args() main(args)

main
def main(args): # setup some basic things utils.import_user_module(args)os.makedirs(args.destdir, exist_ok=True)logger.addHandler( logging.FileHandler( filename=os.path.join(args.destdir, "preprocess.log"), ) ) logger.info(args)assert ( args.dataset_impl != "huffman" ), "preprocessing.py doesn't support Huffman yet, use HuffmanCodeBuilder directly."# build shared dictionaries# target = not args.only_sourcetrain_files = glob.glob('{}/train.*-*.*'.format(args.pref)) train_files = [f for f in train_files if len(f.split('.')) in [3, 4, 5]] test_files = glob.glob('{}/test.*-*.*'.format(args.pref)) test_files = [f for f in test_files if len(f.split('.')) in [3, 4, 5]] valid_files = glob.glob('{}/valid.*-*.*'.format(args.pref)) valid_files = [f for f in valid_files if len(f.split('.')) in [3, 4, 5]] lng_pairs = set([f.split('/')[-1].split(".")[1] for f in (train_files + test_files + valid_files)]) task = tasks.get_task(args.task) shared_dictionary = _build_dictionary( train_files, task=task, args=args, src=https://www.it610.com/article/True, ) # save dictionaries if args.joined_dictionary: shared_dictionary.save(os.path.join(args.destdir,"dict.txt")) else: for lng_pair in lng_pairs: src, tgt = lng_pair.split('-') tmp_src_dict_path = os.path.join(args.destdir, f'dict.{src}.txt') tmp_tgt_dict_path = os.path.join(args.destdir, f'dict.{tgt}.txt') if not os.path.exists(tmp_src_dict_path): shared_dictionary.save(tmp_src_dict_path) if not os.path.exists(tmp_tgt_dict_path): shared_dictionary.save(tmp_tgt_dict_path)if args.dict_only: returnfor lng_pair in lng_pairs: src_and_tgt = lng_pair.split('-') if len(src_and_tgt) != 2: continue src, tgt = src_and_tgt print("| building: ", src, tgt) args.source_lang = src args.target_lang = tgt _make_all(src, shared_dictionary, args) _make_all(tgt, shared_dictionary, args)logger.info("Wrote preprocessed data to {}".format(args.destdir))

_make_all
def _make_all(lang, vocab, args): lng_pair = f"{args.source_lang}-{args.target_lang}" _make_dataset( ## iwslt14.tokenized/train.en-ar vocab, os.path.join(args.pref, f"train.{lng_pair}"), "train", lang, args=args, num_workers=args.workers ) _make_dataset( vocab, os.path.join(args.pref, f"valid.{lng_pair}"), "valid", lang, args=args, num_workers=args.workers ) _make_dataset( vocab, os.path.join(args.pref, f"test.{lng_pair}"), "test", lang, args=args, num_workers=args.workers )

multilingual fairseq-preprocess2 方法简介 该方法在学习bpe之后,就会得到一个共享词表,需要对这个词表进行一些修改,然后作为binarize的参数。
generate_split-iwslt14.sh 【机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法】当前目录有以下文件:
机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法
文章图片

执行下面脚本,完成数据的划分后,得到下面的文件,其中的train.all用于学习sentencepiece:
机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法
文章图片

#!/usr/bin/env bash # Adapted from https://github.com/facebookresearch/MIXER/blob/master/prepareData.shecho 'Cloning Moses github repository (for tokenization scripts)...' git clone git://github.com/moses-smt/mosesdecoder.git### # just generate train\test\valid data for iwslt14 # with same simple preprocess steps and without tokenization, because the next step is learn spm ### SCRIPTS=mosesdecoder/scripts LC=$SCRIPTS/tokenizer/lowercase.perl CLEAN=$SCRIPTS/training/clean-corpus-n.perl tmp=tmp orig=orig tgt=en rm -r $orig rm -r $tmp mkdir -p $orig $tmpfor src in ar de es fa he it nl pl; do lang=$src-en echo "pre-processing train data..." for l in $src $tgt; do if [[ ! -f $src-en.tgz ]]; then wget https://wit3.fbk.eu/archive/2014-01//texts/$src/en/$src-en.tgz fi cd $orig tar zxvf ../$src-en.tgz cd ..f=train.tags.$lang.$lcat $orig/$lang/$f | \ grep -v '' | \ grep -v '' | \ grep -v '' | \ grep -v '' | \ sed -e 's///g' | \ sed -e 's/<\/title>//g' | \ sed -e 's/<description>//g' | \ sed -e 's/<\/description>//g' > $tmp/$f echo "" done for l in $src $tgt; do perl $LC < $tmp/train.tags.$lang.$l > $tmp/train.$lang.$l rm $tmp/train.tags.$lang.$l done echo "pre-processing valid/test data..." for l in $src $tgt; do for o in `ls $orig/$lang/IWSLT14.TED*.$l.xml`; do fname=${o##*/} f=$tmp/${fname%.*} echo $o $f grep '$o | \ sed -e 's/\s*//g' | \ sed -e 's/\s*<\/seg>\s*//g' | \ sed -e "s/\’/\'/g" | \ perl $LC > $f echo "" done doneecho "creating train, valid, test..." for l in $src $tgt; do mv $tmp/train.$src-$tgt.$l $tmp/train-valid.$src-$tgt.$l awk '{if (NR%23 == 0)print $0; }' $tmp/train-valid.$src-$tgt.$l > $tmp/valid.en-$src.$l awk '{if (NR%23 != 0)print $0; }' $tmp/train-valid.$src-$tgt.$l > $tmp/train.en-$src.$l rm $tmp/train-valid.$src-$tgt.$l cat $tmp/IWSLT14.TED.dev2010.$src-$tgt.$l \ $tmp/IWSLT14.TEDX.dev2012.$src-$tgt.$l \ $tmp/IWSLT14.TED.tst2010.$src-$tgt.$l \ $tmp/IWSLT14.TED.tst2011.$src-$tgt.$l \ $tmp/IWSLT14.TED.tst2012.$src-$tgt.$l \ > $tmp/test.en-$src.$l rm $tmp/IWSLT14.TED*.$src-$tgt.$l doneTRAIN=$tmp/train.all for l in $src $tgt; do cat $tmp/train.en-$src.$l >> $TRAIN done doneecho "counting..." for src in ar de es fa he it nl pl; do for split in train valid test; do for l in $src $tgt; do wc -l $tmp/$split.en-$src.$l done done doneecho "done" </code></blockquote><br /> learn_and_encode_spm-iwslt14.sh 学习spm,并apply,得到下面文件,用于binarize。<br /> <img alt="机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法" onload="javascript:ImgReSize(this)" src="http://img.readke.com/220619/141122M13-2.jpg"/> <br /> 文章图片 <br /> <br /> <blockquote><code>#!/usr/bin/env bash echo 'Cloning fairseq repository...' git clone git@github.com:facebookresearch/fairseq.git # learn bpe bpe=bpe tmp=tmp tgt=en SCRIPTS=mosesdecoder/scripts CLEAN=$SCRIPTS/training/clean-corpus-n.perl rm -r $bpe mkdir -p $bpepython -u fairseq/scripts/spm_train.py \ --input=$tmp/train.all \ --model_prefix=spm.bpe \ --vocab_size=30000 \ --character_coverage=1.0 \ --model_type=bpe \ --num_threads=45 \ --shuffle_input_sentence# apply bpe for split in train valid test; do for src in ar de es fa he it nl pl; do echo ${split} en-${src} python fairseq/scripts/spm_encode.py \ --model spm.bpe.model \ --output_format=piece \ --inputs ${tmp}/${split}.en-${src}.${src} ${tmp}/${split}.en-${src}.en \ --outputs ${bpe}/${split}.en-${src}.bpe.unclean.${src} ${bpe}/${split}.en-${src}.bpe.unclean.en restrict length ratio perl $CLEAN -ratio 1.5 ${bpe}/${split}.en-${src}.bpe.unclean ${src} en ${bpe}/${split}.en-${src}.bpe 1 256 rm ${bpe}/${split}.en-${src}.bpe.unclean.* done done </code></blockquote><br /> binarize.sh <blockquote><code>#!/usr/bin/env bash # create share dict path=data-bin rm -r $path mkdir -p $pathcut -f1 spm.bpe.vocab | tail -n +4 | sed "s/$/ 100/g" > $path/dict.txt #for lang in ar de es fa he it nl pl en; do #cp $path/dict.txt $path/dict.${lang}.txt #donefor split in train valid test; do for src in ar de es fa he it nl pl; do echo ${split} en-${src} fairseq-preprocess \ --source-lang $src --target-lang en \ --trainpref bpe/train.en-${src}.bpe \ --validpref bpe/valid.en-${src}.bpe \ --testpref bpe/test.en-${src}.bpe \ --destdir $path \ --srcdict $path/dict.txt \ --tgtdict $path/dict.txt done done </code></blockquote><br /> 参考 https://github.com/RayeRen/multilingual-kd-pytorch/blob/master/data/iwslt/raw/prepare-iwslt14.sh<br> https://github.com/facebookresearch/fairseq/issues/2110#issue-614837309<br> https://github.com/facebookresearch/fairseq/tree/main/examples/m2m_100<br /></p> <div class="dede_pages"><ul></ul></div> <div class="pcd_ad"> <center><div class="_ahwullr0ac"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u6834461", container: "_ahwullr0ac", async: true }); </script> <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" > </script></center> </div> <div class="mbd_ad"> <div style=margin-top:10px;margin-bottom:10px;> <div class="_i7aftr79jl"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u5950612", container: "_i7aftr79jl", async: true }); </script> <!-- ½űֻһ --> <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" > </script> </div> <div style=margin-top:10px;margin-bottom:10px;> <script src='http://mb.readke.com/photos.php?id=39551'></script> </div> </div> <h3>推荐阅读</h3> <ul class="post-loop post-loop-default cols-0"> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/09142104402021.html" title="最后一根稻草"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="最后一根稻草" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/09142104402021.html"> <b>最后一根稻草 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2252119.html" title="2023春节汕头画展汇总 2023春节汕头画展汇总图片"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="2023春节汕头画展汇总 2023春节汕头画展汇总图片" src="http://img.readke.com/230526/0915156452-0-lp.jpg"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2252119.html"> <b>2023春节汕头画展汇总 2023春节汕头画展汇总图片 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2912044.html" title="夜晚钓鱼不咬怎么办"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="夜晚钓鱼不咬怎么办" src="http://img.readke.com/230802/15353B194-0-lp.jpg"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2912044.html"> <b>夜晚钓鱼不咬怎么办 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2289693.html" title="结构工程与土木工程的区别"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="结构工程与土木工程的区别" src="http://img.readke.com/230528/0423502143-0-lp.jpg"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2289693.html"> <b>结构工程与土木工程的区别 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/4063119.html" title="江阴养老金每月几号发放"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="江阴养老金每月几号发放" src="http://img.readke.com/240201/05391I255-0-lp.png"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/4063119.html"> <b>江阴养老金每月几号发放 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/3300132.html" title="贝多芬的生平简介及代表作品 贝多芬的介绍"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="贝多芬的生平简介及代表作品 贝多芬的介绍" src="http://img.readke.com/231029/021T34F6-0-lp.jpg"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/3300132.html"> <b>贝多芬的生平简介及代表作品 贝多芬的介绍 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2556895.html" title="山鸡饲料配方 山鸡饲料中添加中草药的好处"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="山鸡饲料配方 山鸡饲料中添加中草药的好处" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2556895.html"> <b>山鸡饲料配方 山鸡饲料中添加中草药的好处 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/4039283.html" title="redis用在什么场景 redis什么场合使用"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="redis用在什么场景 redis什么场合使用" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/4039283.html"> <b>redis用在什么场景 redis什么场合使用 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/1803187.html" title="桔梗的作用和用量"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="桔梗的作用和用量" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/1803187.html"> <b>桔梗的作用和用量 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2002068.html" title="吃凉薯了会胃不舒服吗"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="吃凉薯了会胃不舒服吗" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2002068.html"> <b>吃凉薯了会胃不舒服吗 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/2583231.html" title="微信防止转错钱 微信转账延迟功能设置教程"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="微信防止转错钱 微信转账延迟功能设置教程" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/2583231.html"> <b>微信防止转错钱 微信转账延迟功能设置教程 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/3267835.html" title="今年信用卡逾期怎么办啊 今年信用卡逾期怎么办?"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="今年信用卡逾期怎么办啊 今年信用卡逾期怎么办?" src="http://img.readke.com/231025/050G360K-0-lp.jpg"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/3267835.html"> <b>今年信用卡逾期怎么办啊 今年信用卡逾期怎么办? </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/0PJ35522021.html" title="抗氧化|想延缓衰老,靠葡萄籽可不行!可以这样做~"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="抗氧化|想延缓衰老,靠葡萄籽可不行!可以这样做~" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/0PJ35522021.html"> <b>抗氧化|想延缓衰老,靠葡萄籽可不行!可以这样做~ </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/1470068.html" title="回来我的爱mv动画版 我的全部"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="回来我的爱mv动画版 我的全部" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/1470068.html"> <b>回来我的爱mv动画版 我的全部 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/0Qb14912021.html" title="蜂蜜|市面上的蜂蜜多为“水蜜”,其营养比成熟蜜差多少?养蜂人给你算"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="蜂蜜|市面上的蜂蜜多为“水蜜”,其营养比成熟蜜差多少?养蜂人给你算" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/0Qb14912021.html"> <b>蜂蜜|市面上的蜂蜜多为“水蜜”,其营养比成熟蜜差多少?养蜂人给你算 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/3647833.html" title="如何对接外贸电商,如何对接电商平台"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="如何对接外贸电商,如何对接电商平台" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/3647833.html"> <b>如何对接外贸电商,如何对接电商平台 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/0P9510352021.html" title="美国|医院管理层应该怎么关心护士?美国专家提出这三点"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="美国|医院管理层应该怎么关心护士?美国专家提出这三点" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/0P9510352021.html"> <b>美国|医院管理层应该怎么关心护士?美国专家提出这三点 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/0H6126112021.html" title="肠道|排便时总排不干净?生活中注意这2个重点,或能有效改善"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="肠道|排便时总排不干净?生活中注意这2个重点,或能有效改善" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/0H6126112021.html"> <b>肠道|排便时总排不干净?生活中注意这2个重点,或能有效改善 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/0QWFJ2021.html" title="医生|“医生快帮我看看要不要紧!”四旬男子被手套里的这个“咬了”,差点要了命"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="医生|“医生快帮我看看要不要紧!”四旬男子被手套里的这个“咬了”,差点要了命" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/0QWFJ2021.html"> <b>医生|“医生快帮我看看要不要紧!”四旬男子被手套里的这个“咬了”,差点要了命 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/3906294.html" title="加盟打印机显示5b00"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="加盟打印机显示5b00" src="/images/defaultpic.gif"> </a> </div> <div class="item-content"> <h4 class="item-title"> <a href="/c/3906294.html"> <b>加盟打印机显示5b00 </b></a></h4> <div class="item-meta"> <div class="item-meta-right"> </div> </div> </div> </li> </ul> <p><br /><ul class="post-loop post-loop-list cols-4"><li><a href="/c/792805.html" title="个人随笔|关于BLEU值计算的学习笔记" target="_blank">个人随笔|关于BLEU值计算的学习笔记 </a></li> <li><a href="/c/792444.html" title="安装|深度学习环境配置Win10+CUDA+cuDNN+Tensorflow2.0+PyTorch1.2+Python3.7.6" target="_blank">安装|深度学习环境配置Win10+CUDA+cuDNN+Tensorflow2.0+PyTorch1.2+Python3.7.6 </a></li> <li><a href="/c/791999.html" title="matlab|图像处理压缩Huffman编码方法实现" target="_blank">matlab|图像处理压缩Huffman编码方法实现 </a></li> <li><a href="/c/791782.html" title="pytorch|pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet)" target="_blank">pytorch|pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet) </a></li> <li><a href="/c/791779.html" title="卷积神经网络概念及使用 PyTorch 简单实现" target="_blank">卷积神经网络概念及使用 PyTorch 简单实现 </a></li> <li><a href="/c/791367.html" title="★MATLAB算法仿真经验|【眼底检测】视网膜动静脉血管检测和特征计算matlab仿真" target="_blank">★MATLAB算法仿真经验|【眼底检测】视网膜动静脉血管检测和特征计算matlab仿真 </a></li> <li><a href="/c/791166.html" title="深度学习|李宏毅深度学习笔记 ---- 简介" target="_blank">深度学习|李宏毅深度学习笔记 ---- 简介 </a></li> <li><a href="/c/791163.html" title="机器学习|李宏毅机器学习GAN的笔记" target="_blank">机器学习|李宏毅机器学习GAN的笔记 </a></li> <li><a href="/c/791162.html" title="论文解读|Free-Form Image Inpainting with Gated Convolution" target="_blank">论文解读|Free-Form Image Inpainting with Gated Convolution </a></li> </ul></p> <div class=entry-copyright> <p></p> </div> </div> <div class="entry-footer"> <div class="prev-next sb br mb clearfix"> <p class="post-prev fl ellipsis">上一篇:<a href='/c/792760.html'>企业微信扫码登录网页功能实现代码</a> </p> <p class="post-next fr ellipsis">下一篇:<a href='/c/792805.html'>个人随笔|关于BLEU值计算的学习笔记</a> </p> </div> </div> </div> </article> </main> <aside class="sidebar"> <div class="widget widget_post_thumb"> <h3 class="widget-title"><span>更多...</span></h3> <ul> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792805.html" title="个人随笔|关于BLEU值计算的学习笔记"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="个人随笔|关于BLEU值计算的学习笔记" src="http://img.readke.com/220619/14113UO4-0-lp.png"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792805.html" title="个人随笔|关于BLEU值计算的学习笔记">个人随笔|关于BLEU值计算的学习笔记</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792804.html" title="机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法" src="http://img.readke.com/220619/141122OW-0-lp.jpg"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792804.html" title="机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法">机器翻译|[机器翻译] multilingual fairseq-preprocess的两种做法</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792760.html" title="企业微信扫码登录网页功能实现代码"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="企业微信扫码登录网页功能实现代码" src="/images/defaultpic.gif"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792760.html" title="企业微信扫码登录网页功能实现代码">企业微信扫码登录网页功能实现代码</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792759.html" title="教你用typescript类型来推算斐波那契"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="教你用typescript类型来推算斐波那契" src="/images/defaultpic.gif"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792759.html" title="教你用typescript类型来推算斐波那契">教你用typescript类型来推算斐波那契</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792758.html" title="JavaScript几种弹窗事件的使用"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="JavaScript几种弹窗事件的使用" src="http://img.readke.com/220619/13213115M-0-lp.jpg"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792758.html" title="JavaScript几种弹窗事件的使用">JavaScript几种弹窗事件的使用</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792757.html" title="js实现电子时钟功能"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="js实现电子时钟功能" src="http://img.readke.com/220619/132115G18-0-lp.jpg"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792757.html" title="js实现电子时钟功能">js实现电子时钟功能</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792756.html" title="js实现电子时钟效果"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="js实现电子时钟效果" src="http://img.readke.com/220619/1320592310-0-lp.jpg"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792756.html" title="js实现电子时钟效果">js实现电子时钟效果</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792755.html" title="js实现文字滚动的效果"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="js实现文字滚动的效果" src="/images/defaultpic.gif"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792755.html" title="js实现文字滚动的效果">js实现文字滚动的效果</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792754.html" title="JavaScript|JavaScript canvas实现字符雨效果"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="JavaScript|JavaScript canvas实现字符雨效果" src="/images/defaultpic.gif"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792754.html" title="JavaScript|JavaScript canvas实现字符雨效果">JavaScript|JavaScript canvas实现字符雨效果</a></p> </div> </li> <li class="item"> <div class="item-img"> <a class="item-img-inner" href="/c/792753.html" title="JavaScript实现简单的倒计时效果"> <img width="480" height="300" class="attachment-default size-default wp-post-image j-lazy" alt="JavaScript实现简单的倒计时效果" src="http://img.readke.com/220619/132030J51-0-lp.gif"> </a></div> <div class="item-content"> <p class="item-title"><a href="/c/792753.html" title="JavaScript实现简单的倒计时效果">JavaScript实现简单的倒计时效果</a></p> </div> </li> </ul> </div> </aside> </div> </div> <footer class="footer"> <div class="container"> <div class="clearfix"> <div class="footer-col footer-col-logo"> <!--<img src="/skin/images/logo-footer.png">--></div> <div class="footer-col footer-col-copy"> <ul class="footer-nav hidden-xs"> <li class="menu-item menu-item-706"><a href="/baike/">生活百科</a></li> <li class="menu-item menu-item-706"><a href="/it/">it技术</a></li> </ul> <div class="copyright"> <p>Copyright © 2017-2022 锐客网 <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow">京ICP备11041112号-41</a> </p> </div> </div> <div class="footer-col footer-col-sns"> <div class="footer-sns"> </div> </div> </div> </div> </footer> <div class="action action-style-0 action-color-0 action-pos-1" style="bottom:15%;"> <div class="action-item gotop j-top"> <i class="web-icon wi action-item-icon"><svg aria-hidden="true"> <use xlink:href="#wi-arrow-up-2"></use> </svg></i></div> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?79e4e485d34c6fc717489eaa10b314e3"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </div> <script>var _web_js={};</script> <script src="/skin/js/index.js"></script> </body> </html>